树莓派笔记5:自制小车(简单避障)
利用树莓派做智能小车是个很常见的玩法,整个过程涉及手工制作、GPIO控制、Python程序编写、网络通信等内容,知乎上有的大神还加入图像识别甚至人工智能元素,我自己在制作过程中真的感觉非常有意思,也很有成就感。为了做这个小车,我不惜破费买了各种小车零件和电子元器件(其实花不了多少钱),还突击学习了Python,参考书上的内容和网络上的信息也搞出了自己的小车,虽然功能真的很简单,这次记录的是简单的避障功能实现。
1 小车结构
整个小车涉及的元件:
①树莓派,作为主控芯片;
②小车底盘及其他配件,淘宝上30块钱就能买到;
③L298N 电机驱动模块,用来控制小车电机;
④HC-SR04 超声波测距模块,用来检测距离;
⑤干电池组或者锂电池,为L298N供电,需要12V左右;
⑥杜邦线、导线、螺丝刀等工具。
下图是整体的结构示意,小车的每个轮子都装有电机,电机与L298N模块相连,而树莓派控制L298N模块进而控制电机运动,同时树莓派也控制超声波测距模块检测距离。
2 树莓派GPIO概念
之所以树莓派可以直接控制电子元件,是因为它提供了GPIO区,所谓GPIO就是可以自由配置引脚的模式,比如可以配置成输出模式从而输出高低电平,或者可以配置成输入模式接收电平信号,正因为树莓派的GPIO功能,让它看起来似乎更加底层化了。
使用GPIO前首先需要了解的是引脚的编号方式,如下图所示,按照物理方位的话是按照从左到右、从上到下的方式从1编号到40,但是在编写程序是一般不用物理编码方式,如果用C语言写的话需要导入wiringPi库,用Python写的话需要导入RPi.GPIO库,这两种库的引脚编号方式都不同,例如按照RPi.GPIO编号方式,物理号码为38的引脚编号为BCM.20,而物理号码为40的引脚编号为BCM.21。完整的编码表可以查阅网上资料。
Python程序下涉及GPIO的主要代码摘录如下:
import RPi.GPIO as GPIO #导入GPIO模块
GPIO.setmode(GPIO.BCM) #设定编号模式
GPIO.setwarnings(False) #关闭警告说明
GPIO.setup(1, GPIO.IN) #设置引脚1(BCM编号)为输入通道
GPIO.setup(2, GPIO.OUT) #设置引脚2为输出通道
value=GPIO.input(1) #读取通道1的输入值( 0 / GPIO.LOW / False 或者 1 / GPIO.HIGH / True)
GPIO.output(2, GPIO.HIGH) #设置通道2输出高电平的状态,状态可以为0 / GPIO.LOW / False 或者 1 / GPIO.HIGH / True
GPIO.cleanup() #清理通道资源
3 车体拼装
首先把小车车架拼好,买来的车架是有说明书的,而且车架本身也很简单,用固定片把各个电机固定好就基本OK了,需要注意的是马达朝向、螺丝朝向等小细节,有时候朝向不对会卡住轮子,或者不方便后续的绕线等操作。下图是我拼装好的车架图(这里已经把电机控制模块和测距模块加上去了)。