Skip to content
This repository has been archived by the owner on Aug 13, 2021. It is now read-only.
/ Balance-Car Public archive

This is a balancing car project with Arduino UNO R3 board

Notifications You must be signed in to change notification settings

JadenNeal/Balance-Car

Repository files navigation

基于Arduino UNO R3开发板的平衡车设计

材料

  • Arduino UNO R3
  • Mpu6050陀螺仪
  • HC-06蓝牙模块
  • 晶门SSD 1306 0.96英寸OLED显示模块
  • HC-SR04 超声波测距模块
  • 红外对管模块
  • WS2812全彩LED模块
  • TB6612电机驱动模块
  • 杜邦线若干(双公头,双母头,公母头)
  • 电机两个(含霍尔测速编码器)

整车连线

  1. 超声波
    • GND -- GND
    • Echo -- A3
    • Trig -- A2
    • VCC -- 5V
  2. 蓝牙(HC-06)
    • RX -- 1(板子的发射端)
    • TX -- 0(板子的接收端)
    • GND -- GND
    • VCC -- VCC
  3. 显示屏(SSD 1306)
    • VCC -- 5V
    • GND -- GND
    • SCL -- SCL
    • SDA -- SDA
  4. 电机驱动(TB6612)
    • PWMA -- 10
    • AIN2 -- 13
    • AIN1 -- 12
    • STBY -- 11
    • BIN1 -- 7
    • BIN2 -- 6
    • PWMB -- 9
    • GND -- GND
    • VM -- 12V
    • VCC -- 5V
    • GND -- GND
    • AO1 -- AO1
    • AO2 -- AO2
    • BO2 -- BO2
    • BO1 -- BO1
    • GND -- GND
  5. 陀螺仪(MPU6050)
    • VCC -- 5V
    • GND -- GND
    • SCL -- A5
    • SDA -- A4
    • INT -- 2
    • 最好在VCC和GND之间加个0.1uf的旁路电容
  6. 电机A
    • AO2
    • 5V
    • 3
    • 8
    • GND(并联0.1uf的旁路电容)
    • AO1(正极)
  7. 电机B
    • BO1(正极)
    • GND(并联0.1uf的旁路电容)
    • 4
    • 5
    • 5V
    • BO2
  8. 全彩LED
    • IN -- A1
    • VCC -- 5V
    • GND -- GND
  9. 红外对管
    • OUT -- A0
    • GND -- GND
    • VCC -- VCC
3维布局

3维布局草图

模块测试

单模块测试程序

注意:单模块测试时,接线按照原理图

多模块联调测试程序

注意:接线同上

最终实现程序

注意:接线按照“整车连线”写的接线

模块认知

测试笔记记录在这里

UNO开发板

参见这里

Mpu6050模块

陀螺仪。

知乎上的关于MPU6050的讲解。

野火上关于MPU6050的讲解。

英文版手册下载地址

HC-06

蓝牙。
HC-06是目前用的较多的蓝牙模块,HC-06只能作为从机工作,因此对于被控制的小车来说非常适合使用。

这里有非常清晰的接线图,其实不需要上位机测试,但更改名称或PIN需要用上位机进入AT进行更改。下载一个串口通信助手,打开后连接蓝牙(默认名称为HC-06),成功后即可发送数据,进行通信。

SSD 1306

OLED显示模块。

显示小车信息。

红外对管模块

用来辅助测距。

HC-SR04

超声波。

测距功能实现的主要模块。

WS2812

全彩LED。

显示小车状态。

问题汇总

在制作的过程中,遇到的问题有很多,包括硬件软件的问题,这里只列出几个比较典型的问题。

  1. Q:明明板子单独测模块的时候没问题,但是后来小车调试的时候有时上传程序出错,两次上传隔的时间太短的话就更容易出现这种情况,为什么呢?
    A:这是由于在用USB上传程序时,开发板的VCC接到了其他模块的缘故。如果不拔下来,多次往复就有很大概率导致板子烧毁。因此,在上传程序的时候,一定要把板子的VCC断开,这样就不会有问题了。
    如果给空板子烧程序都失败,那很有可能是板子坏了

  2. Q:上传程序后,小车有反应,但是总有延迟。在转动小车的时候,轮胎总要过一段时间才会作出反应,这是为什么呢? A程序的问题。检查代码中是否有遗留下来的delay(),是否有Serial.println()Serial.print()等需要串口才工作的函数。把这些全部注释掉,再查看效果。

  3. Q:loop()是空的,按理说不会有函数运行,但是给小车上传程序后,小车还是能够对陀螺仪的变化作出反应,为什么呢?
    A:对于本次程序来说,这是因为中断或者串口存在的原因。
    来看arduino的程序结构:

    #include <arduino.h> 
    
    int main(){ 
        init(); // 初始化库 
        initVariant(); // 初始化变量
    
        setup(); // 初始化 
        for(;;){ 
            loop(); // 主循环 
            if SerialEvent() 
                serialEvent(); // 串口函数 
        } 
    } 

    最后的死循环中,除了loop,还有一个串口事件判断函数——有事件则去执行,没有就只执行loop。而loop中虽然没有语句,但setup()中还有中断的功能

    MsTimer2::set(5, control);  //使用Timer2设置5ms定时中断,控制control函数
    MsTimer2::start();          //使用中断使能

    开启了中断使能后,程序就会每隔中断的时间去执行一次中断指向的函数。因此loop中没有语句也是可以的。

  4. 关于速度环调试的问题整理,参见调试笔记04

  5. 关于转向环调试的问题整理,参见调试笔记04

About

This is a balancing car project with Arduino UNO R3 board

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages