项目背景:
前段时间笔者接触到了一个关于救援小车的项目,这个小车还需要适应比较复杂的地形。因此淘宝里类似于树莓派智能小车的产品(大都是亚克力板拼接或底座太低)不太适合。因此笔者买了一个能够水陆两栖的遥控汽车,希望能够把它从遥控小车改装成能受树莓派控制的小车。
关于小车:
笔者调研了市面上一大部分小车,终于选择了如下图所示的这一款水陆两栖小车。
小车到了之后经过了一番拆卸。。。
拆卸之后肯定是不能在水里开了,但是这个车的架构还是非常有型的。并且还是有所收获的:
a.该车供电电压为9.6v,配有8节电池,每次充满电需大概4个小时。
b.车中心有一个被刮去名称的寄存器模块,用来实现遥控器的近距离控制。
c.该车配有3个直流电机。其中两个一起接入中心的模块,用来控制小车四个轮胎的前后方向,以达到四驱的目的。另一个直流电机控制两个前轮的左右方向。
根据上面的信息。若要用树莓派控制小车,需将小车中心的寄存器模块用电烙铁取下来。用一个电机模块,供电电压能够在9.6v左右。连接小车3个直流电机的同时,能够受树莓派的逻辑电压控制。
关于驱动模块:
经过大量教程的搜集与市场调研,找到了这样一款驱动模块L298N直流电机驱动模块:
该模块供电范围在7-35v,逻辑电压在5-7v,且驱动电流在2A,非常适合树莓派对其进行控制。
模块连接:
该模块与小车直流电机、树莓派的连接如下图所示:
图中树莓派引脚如下图所示,上面的IN1-IN4分别连接树莓派的GPIO.1 GPIO.0 GPIO.2 GPIO.3:
连接后的实物如下图所示(图中的一些传感器请先无视):
注意:用电烙铁将原本的正负线取下后可能会残留一部分焊锡无法取出,这样不好插进电机模块的固定位置。因此笔者将正负线用杜邦线一头再次焊接好,并将焊接的地方用黑胶布粘牢。另一头减掉直接,用漏出来里面的铜丝接入驱动模块,调整好后用热熔胶将其彻底固定,防止漏电。
经过前期的工作,终于将小车与树莓派连接好了。不过这里笔者给树莓派本身也配了一个5v2a的电池模块,因此这里还是有两个电池的。若只需要一个电池供电,还得准备一个DC-DC可调节降压模块,一边用杜邦线连接电源的正负极,中间电压调成5v,由于该电源电流不会超过3A,因此另一边可以用杜邦线引出,接到树莓派2号(+)与6号(-)引脚(注意:一定保证连接引脚正确,这边供电不具有保险措施)。
代码编写:
接下来是对小车驱动的代码编程了。笔者这里先主要介绍如何能够让小车简单跑起来。对于直流电机的旋转放书需要参照如下图所示的表格:
首先将需要库进行安装
sudo apt-get install python-pip
sudo pip install RPi.GPIO
接下来对小车连接的各个GPIO口进行初始化
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
IN1 = 11
IN2 = 12
IN3 = 13
IN4 = 15
GPIO.setup(IN1,GPIO.OUT)
GPIO.setup(IN2,GPIO.OUT)
GPIO.setup(IN3,GPIO.OUT)
GPIO.setup(IN4,GPIO.OUT)
然后是对小车向前1秒的编写
GPIO.output(IN1,False)
GPIO.output(IN2,False)
GPIO.output(IN3,GPIO.HIGH)
GPIO.output(IN4,GPIO.LOW)
time.sleep(1)
GPIO.cleanup()
到这里我们就可以实现小车的向前移动了。接下来可以测试一下其他的方向移动。
向后:
GPIO.output(IN1,False)
GPIO.output(IN2,False)
GPIO.output(IN3,GPIO.LOW)
GPIO.output(IN4,GPIO.HIGH)
向左:
GPIO.output(IN1,GPIO.HIGH)
GPIO.output(IN2,GPIO.LOW)
GPIO.output(IN3,False)
GPIO.output(IN4,False)
向右:
GPIO.output(IN1,GPIO.LOW)
GPIO.output(IN2,GPIO.HIGH)
GPIO.output(IN3,False)
GPIO.output(IN4,False)
左上:
GPIO.output(IN1,GPIO.LOW)
GPIO.output(IN2,GPIO.HIGH)
GPIO.output(IN3,GPIO.HIGH)
GPIO.output(IN4,GPIO.LOW)
右上:
GPIO.output(IN1,GPIO.HIGH)
GPIO.output(IN2,GPIO.LOW)
GPIO.output(IN3,GPIO.HIGH)
GPIO.output(IN4,GPIO.LOW)
左下:
GPIO.output(IN1,GPIO.HIGH)
GPIO.output(IN2,GPIO.LOW)
GPIO.output(IN3,GPIO.LOW)
GPIO.output(IN4,GPIO.HIGH)
右下:
GPIO.output(IN1,GPIO.LOW)
GPIO.output(IN2,GPIO.HIGH)
GPIO.output(IN3,GPIO.LOW)
GPIO.output(IN4,GPIO.HIGH)
总结:
现在小车便可以简单跑起来了,但这样还是远远不够的,我们希望得是能够用按键来控制小车。后面会给大家讲解如何实现。感谢各位观看,如有不足,欢迎在评论内留言与讨论。如果觉得写得好的,可以给我点赞+收藏+关注哦,再次感谢各位!
参考:
【公开课】树莓派教程