该智能小车有两种控制方式,wifi控制和蓝牙控制。每种控制方式支持三种工作模式:手动模式、避障模式和循迹模式,三种模式间可以自由切换。三种模式下分别对应不同的功能。
手动模式下有小车制动功能和获取小车运动方向功能,制动功能顾名思义即手动控制小车前进、后退、左转、右转及停止;获取小车运动方向功能获取小车实时的运动状态,如前进、后退、左右转、停止等。
避障模式下小车根据传感器采集的数据进行计算分析选择最优路径,无需人为控制小车运动方向。避障模式下有超声波测距功能、红外避障功能、报警功能。小车在运动过程中如果红外避障传感器检测到前方有障碍物,小车停止运动并报警;或者超声波测距模块检测到的距离低于程序中设定的距离阈值,小车停止运动并报警,然后选择最优路径,当然距离阈值能通过APP端动态修改,同时,手机APP端能实时获取小车的运动状态和距离值。
在循迹模式下小车沿着设定的轨道移动,手机APP端能实时获取到小车状态。
器件
|
qty
|
Arduino UNO
|
1
|
esp8266串口wifi模块
|
1
|
L298N电机驱动模块
|
1
|
黑白循迹传感器模块
|
3
|
红外避障模块
|
2
|
超声波测距模块
|
1
|
舵机
|
1
|
蜂鸣器
|
1
|
舵机云台
|
1
|
电源开关
|
1
|
三线电压表
|
1
|
DC公头
|
1
|
电机
|
4
|
轮子
|
4
|
底盘
|
1
|
18650电池盒
|
1
|
18650电池(自备)
|
1
|
扎带
|
若干
|
导线
|
若干
|
铜柱
|
5
|
螺丝
|
若干
|
小车用Arduino UNO作为核心控制单元,同时在Arduino UNO上搭载一个esp8266串口wifi模块实现wifi控制。在使用时候需要把esp8266串口wifi模块插在Arduino UNO上去,小车在使用时候需要把esp8266串口wifi模块上的两个拨码开关拨到”ON”的位置,表示将esp8266串口wifi和Arduino UNO的串口接在一起,这样Arduino UNO与手机APP就能进行数据交互了。如图
小车采用2节18650电池供电,系统接了一个电源开关,统一给系统供电。小车左右两边各2个电机,分别把左右两个电机并接到L298N电机驱动模块的两个输出端上,如图
由于esp8266串口wifi模块的工作电压是6—9V,当电压低于6V时,esp8266串口wifi模块工作不稳定,会导致手机与esp8266串口wifi模块连接时常中断,为了避免这种情况的发生,在小车上安装一个三线电压表,用于检测电池电压,当电池电量低于6V时,用户就知道该及时充电了。在已有上一节(3.2电源及电机部分)接线基础上安装三线电压表,如图。在此做一个约定:以后所有的接线都是基于上一节(3.2电源及电机部分)进行的。
将三线电压表的红黄两根线一起接到L298N的12V位置;黑色线接到L298N的GND位置。
因为上面已经将电池的电压引到了L298N上,所以此处从L298N上给控制板供电。如图
各传感器都是接到esp8266串口wifi模块上,esp8266串口wifi模块引出了Arduino UNO所有的GPIO口,将一个传感器接到esp8266串口wifi模块的”D1″位置,就表示将该传感器接到了Arduino UNO的D1上。
由于舵机在转动瞬间会把电压拉得很低,如果直接用esp8266串口wifi模块给舵机供电可能会导致电压过低重启esp8266串口wifi模块,所以用L298N上的5V给舵机供电,将控制引脚接到esp8266串口wifi模块上标有”D9″的口,即Arduino UNO的数字9口。如图
蜂鸣器接到Arduino UNO数字13口,如图
左右两个红外避障模块分别接到模拟0和1口,如图
esp8266串口wifi模块插在Arduino UNO板上,二者之间通过串口连接,Arduino只需要将待发送的指令、数据发到串口,esp8266串口wifi模块就自动把指令、数据通过wifi发送到手机APP端,用户完全不用知道网络编程,这个过程对于用户来说是透明的,这大大方便了物联网开发。如图所示。
esp8266串口wifi模块上有两个拨码开关,拨码开关拨到”1″、”2″的位置,表示esp8266串口wifi模块与Arduino UNO断开连接,只有在这种状态下才能给Arduino UNO烧录程序;当拨码开关拨到”ON”的位置,表示esp8266串口wifi模块与Arduino UNO的串口连接在一起,在这种状态下手机APP才能收到指令和数据。esp8266串口wifi模块引出了Arduino UNO所有GPIO口,同时引出了ESP8266的部分GPIO口,小车上的所有传感器接在esp8266串口wifi模块上的Arduino UNO的GPIO口上;另外,小车还能用蓝牙控制,只需要将蓝牙模块插在esp8266串口wifi的蓝牙接口上即可。如图所示。
黑白循迹传感器模块对黑色和白色敏感,检测到其中一种颜色的时候输出高电平或者低电平(不同厂家模块输出电平不一样),利用这一原理就能让小车沿着白底黑轨运动了。此处以传感器检测到黑色输出高电平,检测到白色输出低电平为例说明。当左右两边循迹传感器都输出低电平,中间的输出高电平,表示小车正好在黑色轨道上,无需转弯,直行就可以;当左边和中间循迹传感器检测到高电平,右边的检测到低电平,说明小车需要左转;右边和中间循迹传感器检测到高电平,左边检测到低电平,说明需要右转,以此类推,就能控制小车沿着黑色轨道运动了。
红外避障传感器上有两个探头,一个不停地往外发射红外线,另一个接收反射回来的红外线,如果接收到反射回来的红外线,模块根据反射距离输出一个电压,Arduino UNO的模拟0和1口负责检测红外避障传感器输出的电压,当检测到的电压值低于程序设定的值后,蜂鸣器报警。
超声波模块固定在舵机上面,安装在车头位置,舵机能旋转0—180度,这样带动超声波模块一起旋转,超声波模块就能检测到小车正前方和左右两边距离障碍物的距离,小车根据三个方向的距离结合上面讲到的红外避障传感器输出的电压值,选择一条最优路径。当距离低于程序设定阈值时候,蜂鸣器报警,这个阈值可以通过APP动态修改。
软件分为 下位机和上位机两部分,下位机主要是Arduino UNO里面的小车控制部分;上位机即手机APP。
下位机:http://osoyoo.com/wp-content/uploads/2017/01/car.rar
上位机:http://osoyoo.com/wp-content/uploads/2017/01/BTcar.apk
暂时只有安卓版本的APP
安装好,将下位机软件烧录到Arduino UNO里,给小车上电,打开手机无线网络,会看到一个”DoitWIFI_Config”的wifi热点,这是一个免密连接的热点,连接这个热点后,打开小车控制APP选择”WIFI模式”,如图
如果是蓝牙控制的,插上蓝牙模块,小车上电后打开APP直接选择”蓝牙模式”。
进入小车控制界面,如图
About the Author