基于Mind+的超声波红外避障Arduino机器人设计
2021-03-14苏神保刘丹
[苏神保 刘丹]
1 关于Mind+软件
Mind+是一款基于Scratch3.0开发的青少年编程软件,支持arduino、micro:bit、掌控板等各种开源硬件,用户只需要拖动图形化程序块即可完成编程,还可以使用python/c/c++等高级编程语言,让大家轻松体验创造的乐趣。对于使用Mind+的用户来说,可以根据自己的想法,结合Arduino开发板以及扩展面包板或者智能小车机器人,借助不同的传感器如电位器、声音、光敏、热敏、火焰、倾斜、有害气体、红外、人体热释电、超声波、温湿度等来创造不同的产品。Mind+还集成有各式各样的传感器、执行器、显示器和通信模块,用户只需直接调用即可,无需重新调用或者编写库函数。Mind+工作于实时模式时,可以实现视频侦测、文字朗读、语音识别、AI图像人脸识别等功能,在目前人工智能领域应用较为广泛。
Mind+的工作模式分为实时执行模式和上传模式两种。实时执行模式下可以实现硬件与舞台角色的交互,以及可以实时的控制硬件而不需要上传程序,通过计算机键盘、鼠标、语音等实时来控制硬件的工作,工作过程中全程需要数据线连接。上传模式与传统单片机下载程序类似,可以将根据用户硬件需求编写的积木代码通过串口(需安装驱动程序)烧录至Arduino开发板,硬件脱机工作。Arduino还预留有串口通信接口,可以通过串口蓝牙或者串口WIFI模块实现手机端蓝牙控制或者WIFI控制。
2 PWM控制Arduino智能小车实验
Arduino开发板提供14路数字输入输出接口,除了本身的高低电平输入输出功能外,某些IO口还具有其它特定用途,如0、1管脚用作串口通信,可以外接串口通信设备,3、5、6、9、10、11六个管脚可以输出脉冲宽度调制PWM信号,提供6路8位即(0~255)输出信号,该PWM信号通常用于调速、调光等实验。Arduino开发板还提供6路模拟输入信号(A0-A5),每一路具有10位(210=1024)的分辨率,通常用于连续变化模拟量的输入,可以将该模拟输入信号(0~1024)映射MAP至PWM端口(0~255)实现PWM控制。13管脚是Arduino专门用于测试LED的保留接口,输出为高时点亮LED,输出为低时LED熄灭。
Arduino开发板配合相关传感器,可以完成很多实验如闪烁LED灯、流水灯、按键控制LED灯、呼吸灯、电子钢琴、调光灯、声控灯、光控灯、热敏报警器、火焰报警器、人体热释电感应报警器、继电器控制、红外遥控、蓝牙遥控等,也是目前创客使用较多的单片机。Arduino开发板配合智能小车机器人底板可以实现智能小车的红外遥控控制、红外循迹、红外避障、超声波避障等相关实验。
Arduino开发板控制智能小车前进与左转程序如图1所示,5脚控制左轮前进,6脚控制右轮前进,9脚控制左轮后退,10脚控制右轮后退,因5、6、9、10的输出值范围为0~255,通过改变每个PWM引脚的输出值即可以实现智能小车机器人的前进、后退、左转、右转、停止以及速度的变化[1],下图只列出了前进和左转程序,当需要智能小车机器人完成其它动作时,修改引脚PWM值即可。
图1 智能小车机器人前进与左转程序
在实际避障实验中,可以将小车的前进、后退、左转、右转、停止五种状态分别用子函数MOTORRUN、MOTORBACK、MOTORLEFT、MOTORRIGHT、MOTORSTOP来定义模块,在主程序中调用即可。
3 超声波避障实验
Mind+的传感器模块中已经包含有HC-SR04超声波传感器,用户只需直接调用即可。在进行避障实验前,可以先用串口测试一下超声波模块的距离测量功能,将超声波模块的触发脚Trig接至Arduino开发板第8脚(也可以根据程序来设定),回响脚Echo接至第12脚,其测距程序如图2所示,前方障碍物的距离通过串口打印窗口显示出来[2]。
图2 串口输出超声波测距程序
超声波测距模块需要Arduino开发板在Trig管脚输入一个10 μs以上的高电平,系统便可发出8个40 kHz的超声波脉冲,然后检测回波信号。当检测到回波信号后,通过Echo管脚输出。由于声音的传播速度为340 m/s,根据Echo管脚输出高电平的持续时间可以计算距离值[3]。其距离值为(公式1):
HC-SR04超声波测距模块可提供大约2 cm~400 cm的非接触式距离测量功能,测距精度可达高到3 mm。通过超声波测量到前方障碍物距离后,需要智能小车机器人根据这个距离做出判断。当距离小于或等于某一标准值(如20 cm)则后退左转,而当距离大于这一标准值则前进。流程图与程序设计如图3所示。
4 红外避障实验
图3 超声波避障流程图与Mind+程序设计
Arduino智能小车机器人和51单片机智能小车一样,在小车底板上都设置有红外循迹探头与红外避障探头,红外循迹探头位于小车底板背面,用于检测地面黑线。红外避障探头位于小车的左右两边,分别由一对红外发射管与红外接收管构成。红外发射管发射出一定频率的红外线,当检测前方遇到障碍物时,红外线反射回来并被接收管接收,经过LM324比较器电路处理之后,输出LED灯会亮起,信号输出接口输出一个低电平信号,同时将这一信号送至Arduino开发板的数字输入输出管脚,Arduino通过检测这一关键信息后对小车的行驶路线做出改变即可以实现避障的目的:当左侧红外探头检测到障碍物控制小车右转,右侧红外探头检测到障碍物控制小车左转,前方无障碍物时小车前进,左右两侧均有障碍物时小车后退左转。可以通过电位器旋钮调节红外检测距离的灵敏度,有效距离范围2~30 cm左右[4]。
程序设计流程图如图4所示。
图4 红外避障程序设计流程图
将左右两侧红外感应信号P3.4,P3.5分别接至Arduino数字输入输出口的2、3引脚。主程序代码如下:(全部程序因篇幅有限未列出,小车的运行状态用子函数列出。)
5 小结
在人工智能时代领域,智能传感的应用越来越广泛,各种不同传感器的使用也给人们的生活带来了诸多方便。Mind+软件在程序设计方面较传统的单片机开发软件如keil、Arduino等都具有更通俗、更直观的优点,尤其适合高等职业教育单片机入门教学。
自主避障机器人主要依靠超声波传感器和红外传感器来实现,超声波传感器通过发射超声波信号来测量机器人与障碍物之间的距离,当接近障碍物时,Arduino通过PWM改变智能小车机器人的行驶方向。红外传感器主要是通过发射与反射红外线来判断前方是否有障碍物,虽无测距功能,但其避障原理与超声波类似。上述两种传感器结合Arduino虽然能实现简单的避障功能,但检测方式过于单一,超声波方面可以考虑通过加装舵机的方式来检测180°范围内障碍物的情况,同时可以加装LCD1602液晶显示模块来实时显示目前的距离。红外感应方面则可以通过使用光电开关E18-D80NK来取代普通的红外发射与接收二极管,从而提高其感应距离和灵敏度,提高避障的准确性。