
2.2 硬件设计
智能搬运小车的硬件有Arduino主控制器、伺服电动机、超声波传感器、QTI传感器及颜色传感器等。智能搬运小车的硬件结构框图如图2.4所示。

图2.4 智能搬运小车的硬件结构框图
2.2.1 伺服电动机
伺服电动机是智能搬运小车做移动动作的动力,只能顺时针或逆时针连续旋转,有三根引线,即B(黑)、R(红)及W(白),分别代表地线、电源线及信号控制线。智能搬运小车的机械臂由角度舵机控制。
伺服电动机模块的实物图如图2.5所示。

图2.5 伺服电动机模块的实物图
伺服电动机与Arduino主控制器的接口连接见表2.1。
表2.1 伺服电动机与Arduino主控制器的接口连接

伺服电动机与Arduino主控制器连接后,编写简单的代码就可以使智能搬运小车移动起来,可以前进、左转、右转、后退及掉头等。
智能搬运小车在运行过程中的具体控制方式如下。
前进:Arduino主控制器控制两个伺服电动机正转,同速、同向。
后退:Arduino主控制器控制两个伺服电动机反转,同速、同向。
左转:Arduino主控制器控制左伺服电动机停止转动,右伺服电动机以一定的速度使右车轮转动,实现左转。
左旋转:Arduino主控制器控制左伺服电动机逆时针转动,右伺服电动机顺时针转动,实现大幅度左转。
右转:Arduino主控制器控制右伺服电动机停止转动,左伺服电动机以一定的速度使左车轮转动,实现右转。
右旋转:Arduino主控制器控制右伺服电动机逆时针转动,左伺服电动机顺时针转动,实现大幅度右转。
掉头:Arduino主控制器控制一个伺服电动机正转,另一个伺服电动机反转,实现掉头。
智能搬运小车系统的初始化、IO设置及伺服电动机输出脉宽的驱动程序代码为



主函数通过调用前进、左转、右转、左旋转及右旋转等子函数实现相应的动作,如调用loop函数中的前进子函数,则智能搬运小车会一直前进,不会停下来。
小提示
①伺服电动机在使用前一定要先调零,即连续输入1.5ms的高电平脉冲、20ms的低电平脉冲,当伺服电动机静止不动时,则完成调零;否则,要用螺钉旋具微调伺服电动机的调零旋钮(顺时针或逆时针转动)进行调零。
②伺服电动机的调速:当连续输入1.7ms的高电平脉冲、20ms的低电平脉冲时,伺服电动机沿顺时针以最大的速度旋转;当连续输入1.3ms的高电平脉冲、20ms的低电平脉冲时,伺服电动机沿逆时针以最大的速度旋转;当伺服电动机需要按照顺时针或逆时针的某个角度转动时,则调节相应的输入脉冲宽度即可。
③由于伺服电动机的型号参数不可能完全相同,前进、后退等动作很难一致,在移动的过程中不可能走直线,往往有一定的偏差,因此在寻线时需要添加其他的传感器,如QTI传感器进行辅助判断。
2.2.2 QTI传感器
QTI传感器是采用光电接收器探测物体表面反射光强度的传感器,当QTI传感器对着暗淡的物体表面时,反射光强很低;当QTI传感器对着明亮的物体表面时,反射光强很高。不同的光强对应着不同的电平输出信号。由此可以约定,当QTI传感器探测到黑色物体时输出高电平,探测到白色物体时输出低电平。QTI传感器有三个引脚,即GND、Vcc、SIG,分别代表地、电源、信号控制,与Arduino主控制器的相关引脚连接就可以获取QTI传感器的信号。QTI传感器的实物图如图2.6所示。

图2.6 QTI传感器的实物图
QTI传感器与Arduino主控制器的接口连接见表2.2。
表2.2 QTI传感器与Arduino主控制器的接口连接

QTI传感器根据红外光信号照射到被测物体表面后反射回来的不同灰度值,简单识别所处的环境,再根据环境做相应的动作。
前行:在黑色轨迹上行走时,保持前行状态。
后退:在黑色轨迹上行走时,保持后退状态。
右转:当寻迹传感器检测到智能搬运小车在黑色轨迹上向左偏离时,可通过Arduino主控制器控制智能搬运小车右转,直到智能搬运小车回到正常轨迹上。
左转:当寻迹传感器检测到智能搬运小车在黑色轨迹上向右偏离时,可通过Arduino主控制器控制智能搬运小车左转,直到智能搬运小车回到正常轨迹上。
停车:当寻迹传感器检测到前方为全白,即检测到智能搬运小车到站时,可通过Arduino主控制器控制智能搬运小车停车。
QTI传感器采集数据的驱动程序代码为


该代码段仅给出了如何在系统初始化、外设初始化后读取QTI传感器采集数据的实例程序代码。如果希望智能搬运小车按照设定的路线移动,则需要配合特定的场地或环境条件编写专门的寻迹算法,使智能搬运小车根据识别场地环境的灰度值,按照既定或复杂的路线进行寻线移动。
小提示
QTI传感器非常适合寻线、探测场地边缘等场合。在安装时,QTI传感器与探测物体的距离以10mm为佳,中间两个QTI传感器的中心距离以11mm为宜,也可以是中心点对着场地寻线的边缘,旁边两个QTI在开槽杆件的两端。若智能搬运小车在前进的过程中出现抖动现象,则可以通过微调QTI传感器的安装位置来消除抖动。
2.2.3 超声波传感器
超声波传感器主要用于测距定位或感知是否有障碍物,在智能搬运小车中主要用于定位距离或扫描是否有色块。超声波传感器的测距驱动程序代码为


在上述HC-SR04超声波传感器模块测距驱动程序代码中,首先调用init()函数实现系统和外设初始化,随后调用测距子函数实现超声波测距,以达到避障和距离定位的目的。
小提示
HC-SR04超声波传感器模块在安装时要平视(在仰视或俯视时都会引起误差),有效测量范围为2~450cm,测距精度可达2mm。
2.2.4 颜色传感器
自然界中的各种颜色都是由不同比例的红、绿、蓝三原色混合而成的。颜色传感器就是通过检测某个颜色中的三原色比例进行颜色识别的。智能搬运小车采用的是TCS230颜色传感器。TCS230颜色传感器的实物图如图2.7所示。在识别颜色时,TCS230颜色传感器依次选定颜色滤波器(红、绿、蓝),只有对应颜色的入射光可以通过,其他颜色的入射光被阻止,从而得到对应颜色的光强。

图2.7 TCS230颜色传感器的实物图
TCS230颜色传感器自带两个高亮的白色LED灯,可有助于提高颜色识别的准确性;输入引脚S0、S1用于选择输出比例因子或电源关断模式,不同的输出比例因子可控制不同的输出频率,以适应不同的需求;输入引脚S2、S3用于选择滤波器的类型;输入引脚LED用于点亮两个LED灯;OUT为频率输出引脚,典型输出频率范围为2Hz(0.5s)~500kHz(2μs);GND为接地引脚;+5V和VDD引脚接5V电源。在工作时,TCS230颜色传感器首先打开LED灯,选择输出比例因子;然后依次选定不同的颜色滤波器,每选定一个颜色滤波器,就检测由输出引脚输出的不同频率(光强)的方波脉冲数;最后根据得到的三原色脉冲数的比例识别颜色。S0~S3为TCS230颜色传感器的工作控制引脚。表2.3给出的是S0~S3的组合选项。
表2.3 S0~S3的组合选项

在理论上,白色是由等量的红色、绿色及蓝色混合而成的。TCS230颜色传感器对三原色的敏感性不同,导致输出的R、G、B光强不相等,在使用前必须进行白平衡调整。所谓白平衡,就是告诉智能搬运小车什么是白色,使TCS230颜色传感器对“白色”中三原色R、G、B的输出是相等的。
通过白平衡调整可以得到在识别颜色时需要用到的选通信道时间基准。白平衡的调整过程为:在TCS230颜色传感器前的适当位置(一般为2cm左右)放一个白色物体,打开LED灯,选择输出比例因子,依次选定红色、绿色及蓝色的滤波器,在每个通道(也称信道)的脉冲计数为255时就关闭通道,分别得到在每个通道中所用的时间。这个时间就是识别颜色时要用的时间基准。识别颜色就是根据时间基准计算脉冲数。其具体过程为:打开LED灯;选择输出比例因子(与白平衡时相同);依次选定不同的颜色滤波器,颜色滤波器的选通时间与在白平衡处理过程中获得的相应通道的时间基准相同;根据得到的脉冲数来识别颜色。
TCS230颜色传感器与Arduino主控制器的接口连接见表2.4。
表2.4 TCS230颜色传感器与Arduino主控制器的接口连接

在RGB模式下,某一种色彩是由红、蓝、绿三原色组成的。该色彩的三原色会在某个范围内变化,适当扩大三原色的变化范围,测试色彩就不会出错。为了防止出错,可设置出错条件,在出错的情况下再进行三原色值的调整,直到测试出正确的色彩。TCS230颜色传感器相应的代码设置、颜色识别驱动代码为







主函数先调用白平衡函数可以得到三个基准颜色滤波器的时间基准,再通过颜色测试函数Robot checkColor()进行测试时间值对比,可得出相应颜色的时间值,根据这些颜色的三原色范围值,即可快速测出色块的颜色。
小提示
TCS230颜色传感器安装后,与色块的距离是固定的,是不可以改变的,否则所调节的白平衡不对,识别的颜色也会出错。如果使用上述程序代码的颜色判断函数,则TCS230颜色传感器的最佳安装高度为27mm。