基于Arduino的智能循迹小车的设计与实现

2022-02-19 11:37杨潞霞安琪霞曹砚江
电子测试 2022年1期
关键词:循迹铁丝小车

杨潞霞,安琪霞,曹砚江

(1.太原师范学院计算机系,山西晋中,030619;2.山西大学商务学院,山西太原,030031)

0 引言

智能汽车作为一种智能化的交通工具,实现了车辆工程、人工智能、自动控制、计算机等多个学科领域理论技术的交叉和融合,是未来汽车发展的趋势[1]。循迹小车可以看作是缩小化的智能汽车[2],是一种运用传感器、单片机、电机驱动以及自动控制等技术来实现的自动行走的高新科技,该技术可广泛应用于无人驾驶、仓储业、制造业等。本文提出了一种可以沿铁丝自动行驶且自动识别硬币并发出报警的小车实现方案,并以LDC1000传感器、STM32芯片、Arduino芯片等模块及元器件搭建小车硬件系统,编写相应的单片机控制程序,实现小车的自动行走和报警等功能。通过实验测试,该小车系统能够在铁丝轨道完成自动循迹和自动识别硬币功能,可以为智能汽车的研究提供实验基础。

1 系统设计方案

1.1 设计思路

本文设计的自动循迹小车硬件主要包括Arduino主控芯片、驱动模块、STM32控制芯片、LDC1000传感器、测速模块和显示模块等。该小车采用2个直流电机分别控制2个车轮,通过2个LDC1000电感模块判断铁丝轨迹的位置来引导小车行驶的方向。具体方案是:小车在行驶过程中,LDC1000传感器不断向STM32芯片传回检测的Rp值,并根据该值进行阈值比较,继而来判断小车是否正在规定区域内行驶;若不在,Rp值小于预设的阈值,此时将相应判断结果以数字信号传送到STM32对应的输出端口;由STM32输出端口将判断结果传送到主控器Arduino上,主控器则通过SPI总线的片选线确定电机相应端口的开闭,而电机的相应端口直接控制着左右轮电机的转到方向,这样就调整了小车的行进方向,确保小车在规定区域内正常行驶。系统整体结构图如图1所示。

图1 系统结构图

1.2 控制模块选型

Arduino是一款便捷灵活、方便上手的开源硬件产品,具有丰富的接口,有数字I/O口,模拟I/O口,同时支持SPI,IIC,UART串口通信[3]。能通过各种各样的传感器来感知环境,它没有复杂的单片机底层代码与难懂的汇编,只是简单而实用的函数,此外还具有简便的编程环境IDE,有极大的自由度。本系统逻辑功能较复杂,不仅仅需要接收传感器的数据及计算判断,还需要控制电机,对控制器的数据处理能力要求很高,从系统运行效率、程序简单性来考虑,选择了Arduino芯片作为整个系统的控制模块。

1.3 循迹模块选型

LDC1000传感器主要针对近距离金属探测应用,系统体积小,成本低。该传感器感测系数可调,导体感测范围可自定义,对特定的金属导体可实现近距离感测。采用了SPI接口编程,占用硬件资源少[4],只需外接一个PCB线圈或者自制线圈就可以实现非接触式电感检测,分辨率高。本设计中用于小车轨道的金属铁丝距离较近,用连接自制线圈实现LDC1000的非接触式电感检测。

1.4 测速模块设计

本设计使用编码轮和光电开关来实现测速和测量行驶。光电编码器是由一个红外发射器射出光,射于黑色条纹上时,将被间断的红外线反射于接收器上,在接收器的输入端会受到同轮子转速为正比关系的光脉冲信号,进而在接收器的输出端形成具有一定频率的光信号,再利用微处理器对电脉冲进行计算,就可得到小车的移动速度。

1.5 电源模块选择

使用两节18650电池作为电源直接供给电机驱动板。传感器和单片机的供电要求较为苛刻,需要直流5V供电。LDC 1000更是需要波纹小的电源,故本设计选择一个7805稳压模块,将12V外接电压降到5V,最大电流1.5A。输出端使用大容量电容来保证输出电压平稳,不受电机的影响。

1.6 显示模块选型

显示模块可以选择LED数码模块和OLED显示屏,前者廉价,但是显示位数有限;后者相对显示内容丰富、清晰显示信息量大,且功耗低、速度较快。本设计选用OLED显示屏显示行驶距离和行驶时间等信息。

2 电路与程序设计

2.1 主要电路设计

2.1.1 LDC1000传感器与STM32的连接

本设计中主要采用LDC1000测量值来判断小车是否在细铁丝上行走,LDC1000采集到的数据发送给STM32芯片,当采集到的数据发生变化时,STM32会给出判断,并将判断信号值上传到主控器Arduino,Arduino根据判断信号值来给出调整电机转动的控制信号。

图2 LDC1000与STM32连接图

2.1.2 液晶显示电路

Arduino芯片外接OLED液晶显示屏用于显示时间、距离、检测数值等相关参数,具体连接引脚线如图3所示。

图3 液晶显示电路图

2.1.3 驱动模块电路

本小车系统中最关键的电路还有电机驱动模块,L298N电机驱动模块与左、右电机驱动轮共同决定着小车的行进方向[7],其与主控器Arduino及电源连接示意图如图4所示,图中MEGA2560是Arduino的控制芯片。

图4 驱动电路图

2.2 程序设计

2.2.1 金属轨道检测程序设计

LDC1000的传感器检测金属原理主要是利用电磁感应原理[5,6]。在PCB线圈或自制线圈中加上一个交变电流,线圈周围就会产生交变电磁场,这时若有金属物体进入此电磁场就会在金属物体表面产生涡流(感应电流)。涡流电流跟线圈电流方向相反,涡流产生的反向磁场跟线圈耦合形成一个变压器[7]。由于变压器的互感作用,在初级线圈可检测到次级线圈(金属物体的涡流效应)的参数。LDC1000是依靠检测等效并联电阻来测定金属物体是靠近还是远离线圈,所以当有金属物体接近时,就会使传感器的Rp数值发生变化,本设计是根据Rp变化值范围(当前的Rp值与初始的Rp值之差)判断小车是否在正确的铁丝轨道上,即小车是否行驶发生了偏移,具体主程序流程图如图5所示。

图5 主程序流程图

2.2.2 小车循迹程序设计

循迹小车的状态分为三种:铁丝轨道(正常),铁丝轨道外(左偏,右偏),检测到有硬币(左偏,右偏)。这个判断过程是由STM32完成的,通过设置左右两个LDC1000传感器的阈值实现左右偏移的判断,当大于阈值时则为检测到铁线,小于阈值时则没有,以此作为前轮转向以及后轮转向的依据,向相应方向进行调整。

图6 循迹程序流程图

2.2.3 循迹及硬币检测程序设计

当传感器检测到铁丝时,由于铁丝的表面积较小,产生的涡流较小,读出LDC1000采集回来的Rp值要比正常数值增大100-150;而当检测的硬币时,由于硬币的表面积较大,产生的涡流大,读出LDC1000采集回来的Rp值要比正常的的数值增大600以上。因此,本文通过设定阈值来区分检测到铁丝与硬币两种不同的物质,当STM32将LDC1000检测到的Rp值范围进行逻辑判断后转换成高低电平传给Arduino主控芯片时,主控芯片通过SPI总线片选功能选择硬币偏左还是偏右,进而控制蜂鸣器发出响声。

图7 硬币检测程序流程图

3 测试方案与测试结果

3.1 测试方案

将小车放置在在规定的平面跑道,跑道的标识是一根直径0.6mm—0.8mm的细铁丝,形状如图8所示,启动小车,各个模块协同工作,小车顺时针自动沿着铁丝轨道行走,手动记录小车行进时间、距离。此时,安装在小车底盘的LDC1000传感器在小车偏离跑道时进行检测,并将数据实时传回给处理器,以及时控制小车行进方向,OLED显示屏也将自动显示小车行驶时间与距离。

图8 铁丝轨道示意图

3.2 测试结果

经测试,小车运行正常,能够自动循迹行走,也能够检测到周围硬币及时报警,显示屏能够实时显示小车行驶的距离和运行时间。具体测试结果与手动记录结果比较如下表1:

表1 小车功能测试数据

实测时间( s) 14 11 12检测硬币数目 4 3 3

4 结语

通过多次测试与改进,可自动在铁丝轨道循迹行走的智能小车基本完成,自动循迹跑完一圈大约用时15s左右;硬币识别基本准确;在直行和转弯过程中基本都能根据细铁丝标识的平面跑道正常运行,稳定性好,运行速度较快。但后续可通过改进算法、优化程序等方法进一步提高小车的运行速度和自动化程度,为其在物流、医疗等领域内广泛应用提供基础。

猜你喜欢
循迹铁丝小车
基于DFT算法的电力巡检无人机循迹检测系统设计
大车拉小车
铁丝有多长
自制小车来比赛
铁丝的幽默世界
浅谈基于机器视觉和姿态检测的循迹智能车
刘老师想开小车
两轮自平衡小车的设计与实现
两长两短
智能差分循迹小车设计