1、52|电子制作 2023 年 2 月信息工程0 引言随着科技的发展,在车间、仓库、码头等场所出现了很多的物流小车代替人工工作,它们极大地节约了人力成本,而且还有工作效率高、准确度高等特点。目前物流小车的导航方式主要有巡线的和雷达,巡线导航的方式需要在它行走的路线上铺上一条线(磁感线,有颜色的线等)给它导航,该工作需要较大的人力,且它转向时会存在不稳定的情况,而用 OpenCV 识别彩色线的导航方式,对光线的要求会比较苛刻;雷达导航不存在上述的问题,但是雷达价格较贵。相比巡线导航和雷达导航方式,二维码识别导航既可以降低成本又能大大提高导航的精度12。1 物流小车整体设计二维码识别物流小车主要由识
2、别解码层和运动控制层两个部分组成,识别解码层由摄像头、OpenCV、树莓派和降压模块组成,运动控制层由 MEGA2560 板、电机驱动板和编码电机组成。识别解码层通过摄像头采集二维码数据,然后把数据传送到树莓派上,经过 OpenCV 分析处理,并信息发送到运动控制层;运动控制层的 MEGA2560 板接收到树莓派发送来的信息,并把信号传输给电机驱动板来控制物流小车,若摄像头没有采集到预设的二维码信息,那么电机就保持不动23。二维码识别物流小车设计主要分为硬件设计和软件设计,硬件设计主要包括树莓派 3b+与 USB 摄像头和MEGA2560 板的连接设计、MEGA2560 板与电机驱动板和编码器
3、的连接设计、电机驱动板和电机的连接设计等;软件设计包括树莓派镜像的下载、OpenCV视觉库的安装和使用、Arduino 控制程序等。其系统结构框图如图 1 所示。2 硬件设计 2.1 硬件结构设计物流小车的硬件主要包括树莓派 3b+、免驱 USB 摄像头、MEGA2560 控制板、降压模块、12V 锂电池、直流电机驱动板和编码器电机等46。硬件模拟结构设计图如图 2所示。图 2 小车硬件模型结构设计图 2.2 硬件设计2.2.1 电机驱动模块的设计电机驱动采用两块 L298N 电机驱动板,可同时驱动四个直流电机,单路有 7A 大功率,光基于二维码识别技术的物流小车的设计周旭华,伍懿美,周志强,
4、张凌峰(河源职业技术学院,广东河源,517000)基金项目:1.2021年“创新强校工程”广东省省级重点平台和重大科研项目(青年创新人才项目自然科学)基于自动驾驶技术的植保机器人的研究与实现(2021KQNCX222);2.2022年河源职业技术学院校级课题:基于物联网技术的智慧实训室管理系统的设计与开发(2022KY01);3.2020年河源市社会发展计划项目:基于ROS的消防巡检机器人的研究与实现(河科158)。摘要:设计了一种利用免驱USB摄像头识别二维码的物流小车,该小车以树莓派3b+为核心控制器,MEGA2560板为辅助控制器,免驱USB摄像头为主要传感器,摄像头采集到二维码的信息并
5、反馈到树莓派上进行解码分析,从而判断出二维码的信息,树莓派将识别到的信息发送给MEGA2560板控制小车的运动状态及行驶方向,MEGA2560板接收到树莓派的指令后,区分出是否符合做出改变的数据后,再向电机驱动板传输信号,电机驱动板通过引脚来控制小车左右电机的正反转,从而实现转向。通过测试,本文设计的物流小车可以实现通过摄像头采集二维码信息并利用树莓派控制小车行走。关键词:树莓派;二维码;摄像头;物流小车树莓派3b+USB摄像头MEGA2560L298N电机驱动板1L298N电机驱动板2编码电机4USB串口USB图 1 系统结构框图DOI:10.16589/11-3571/tn.2023.03
6、.013wwwele169com|53信息工程耦隔离输入信号,带有欠压保护,稳定可靠。驱动板上的+5V 引脚可以接 5V 或者 3.3V,为信号端提供电源,ENA1和 ENA2 为电机使能端,可接 MEGA2560 驱动板上的 PWM来调节电机的转速。连接电路图如图 3 和图 4 所示。其工作的原理:L298N 电机驱动板接收到树莓派传输来的指令后向电机驱动板发送信号,电机驱动板可通过MEGA2560 板上的 PWM 端口单独控制左右电机的速度。电机驱动板的 IN1、IN2 和 ENA1 控制左电机的正反转和速度,IN3、IN4 和 ENA2 控制右电机的正反转和速度。GNDIN4IN3ENB
7、+5VGNDIN2IN1ENA+5VM1-M1+M2-M2+Q+Q-L298N驱动板1M1-M1+VCCC1C2GND左后电机M1-M1+VCCC1C2GND左前电机左前电机5V114038GND124442GND2625VGND2835V+12GND图 3 电机驱动板与 MEGA2560 板和左侧电机的连接电路图2.2.2 电源模块的设计要想物流小车正常稳定地行驶,电源模块是整个硬件系统中必不可缺的一部分。由于每个硬件系统的电压需求不一样,为了满足各个硬件系统的用电要求,本文采用两个规格为 12.6V、1500mAh 的大容量可充电电池。在使用时,给电池充满电时电压能达到 12.6V。连接电
8、路图图如图 5所示。GNDIN4IN3ENB+5VGNDIN2IN1ENA+5VM1-M1+M2-M2+Q+Q-L298N驱动板2M1-M1+VCCC1C2GND右前电机右前电机M1-M1+VCCC1C2GND右后电机右后电机5VGNDGNDGND5V5V9303210363419221824+12GND 图 4 电机驱动板与 MEGA2560 板和右侧电机的连接电路图2.2.3 底盘控制模块的设计底盘的控制平台采用 Arduino 驱动板为核心,Ardunio是一种开源的电子工具,ArduinoIDE 里开源的库文件能直接被调用,容易上手且灵活性较好。MEGA2560 兼容arduino 开
9、发核心处理器是 Atmega2560,同时具有 54 路数字输入/输出口(其中 15 路可作为 PWM 输出),16 路模拟输入,一个 16MHz 晶体振荡器,一个 USB 口,一个电源插座,一个 ICSP 接口和一个复位按键。它板通过 USB线与树莓派连接,接收树莓派传来的指令,以此给予电机驱动板相连接的端口信号,带动电机驱动。GNDIN4IN3ENB+5VGNDIN2IN1ENA+5VM1-M1+M2-M2+Q+Q-L298N驱动板1GNDIN4IN3ENB+5VGNDIN2IN1ENA+5VM1-M1+M2-M2+Q+Q-L298N驱动板2M1-M1+VCCC1C2GND左后电机M1-M
10、1+VCCC1C2GND左前电机左前电机M1-M1+VCCC1C2GND右前电机右前电机M1-M1+VCCC1C2GND右后电机右后电机5V114038GND124442GND2625VGND2835V5VGNDGNDGND5V5V9303210363419221824OUTIN-IN+降压模块电源USB1USB2树莓派44910111230323436384042231819222426285VGNDUSBMEGA2560GNDGNDGNDGNDGNDGNDGNDGND5V5V5V5V5V5V5V5V扩展板GNDGNDGNDGNDGNDGNDGNDGND5V5V5V5V5V5V5V5VUSB
11、USB摄像头9303210363418241922328226111238404442+12+12+12GNDGNDGND图 5 Arduino UNO 与各模块连接图54|电子制作 2023 年 2 月信息工程3 软件设计软件系统是官方的 melodic18.04 镜像,需要按照OpenCV 3.478。按照系统的功能要求,软件整体设计流程图如图 6 所示。3.1 二维码的采集和处理二维码采集由连接在树莓派上的 USB 摄像头和读取摄像头画面的驱动程序两部分组成,主要用来采集路线的二维码并传送到树莓派上,再由计算机视觉库 OpenCV 里的图像处理算法分析处理。部分源程序如下所示:impor
12、t cv2import serialfrom pyzbar import pyzbarimport timeser=serial.Serial(/dev/ttyUSB1,9600,timeout=1)import csvfound=set()capture=cv2.VideoCapture(0)capture.set(3,480)capture.set(4,360)PATH=test.csvwhile(1):ret,frame=capture.read()test=pyzbar.decode(frame)for tests in test:testdate=tests.data.decode(
13、utf-8)#print(testdate)if testdate not in found:with open(PATH,a+)as f:csv_write=csv.writer(f)date=testdate csv_write.writerow(date)found.add(testdate)time.sleep(0)ser.write(testdate.encode()print(testdate)cv2.imshow(T,frame)if cv2.waitKey(1)=ord(q):break 3.2 底盘控制程序运动控制层由小车底盘、MEGA2560 板、L298N 电机驱动板和运
14、动层控制程序组成,主要负责接收树莓传送来的指令控制小车的行驶,利用左右轮的正反转来实现转弯。底盘控制程序是用 Arduino 写的,通过 MEGA2560 和树莓派的通讯来实现信息的传递,在编写程序时需要先定义管脚,改变高低电平来改变电机的正反转和停止,再通过读取树莓派发送的串口信息来判断是否对电机的运动状态进行改变部分源程序如下所示:/*encoder 接口*/#define encoderLF_A 3 /左前 A 相#define encoderLF_B 28 /左前 B 相#define encoderLR_A 2 /左后 A 相#define encoderLR_B 26 /左后 B
15、相#define encoderRF_A 18 /右前 A 相#define encoderRF_B 24 /右前 B 相#define encoderRR_A 19 /右后 A 相#define encoderRR_B 22 /右后 B 相/*motor LF,P4 口*/#define enA_LF 11#define in1_LF 40#define in2_LF 38/*motor LR,P3 口*/#define enB_LR 12#define in3_LR 44#define in4_LR 42/*motor RF,P4 口*/#define enA_RF 9#define in
16、1_RF 304 测试结果测试前先通过官网下载的镜像烧录到 8GB 以上的内存卡上,再插入树莓派上,进行 OpenCV,Arduino 及 所 需 的 功 能 包 下 载和安装(官方的镜像一般只有Python),并进行编程和通信。开始给树莓派3b+及L298N电机驱动板接通电源远程登录树莓派,给串口权限,运行python程序把二维码放到摄像头前识别并解析二维码内容,把二维码内容发送到MEGA2560板检测串口是否有信息保持不动根据串口信息执行相关动作直行转向刹车图 6 软件设计流程图wwwele169com|55信息工程测试时,先将小车放在盒子架空,插上电源,然后通过电脑远程登录树莓派,在电脑上控制树莓派运行 Python 程序,观察摄像头是否正常,再把打印出来的二维码放到摄像头前进行识别,识别成功后并发送时再给电机插上电源,观察电机是否能够根据二维码内容实现运动,等它达到想要的效果之后,再把它放到一个较大的空间上实现最终的效果。测试图如图 7 所示。图 8 摄像头采集视图通过调试,小车能根据二维码信息行驶,摄像头能够把采集的二维码进行识别解析并发送到 MEGA2560 板,再通过 M