Loading... 趁着暑假时间充裕,准备制作一辆简易的树莓派小车,让树莓派不再吃灰,写此文记录折腾的过程。 ## 小车需求简要介绍 - 采用双轮差速方式移动 双轮方式需要的零件相对较少,省钱即是王道。 - 通过网络远程控制小车 可通过wifi远程控制,或者配置内网穿透实现任意地点控制。 - 能够实时传送图像 安装摄像头模块 - 超声波测距 安装超声波测距模块 - 小车的结构大致仿照微雪电子的Alphabot2,详见[AlphaBot2 for micro:bit](https://www.waveshare.net/shop/AlphaBot2-for-micro-bit.htm)  ## 材料 - 树莓派4B - N20减速电机 x 2 - 43MM橡胶轮胎 x 2 - 小车万向轮 x 2 - TB6612FNG驱动模块 - 摄像头模块 - 超声波测距模块 - 导线、面包板等 ## TB6612FNG驱动接口详解 TB6612FNG驱动如下图所示  接口说明: 1. VM:电机驱动电源输入(2.74-10.8V) 2. VCC:逻辑电平输入(5.0V) 3. AO1和AO2:接直流电机A 4. BO2和BO1:接直流电机B 5. PWMA:控制电机A的转速 6. AIN1和AIN2:控制电机A(停止、正转、反转) 7. STBY:正常工作/待机状态控制端 8. PWMB:控制电机B的转速 9. BIN1和BIN2:控制电机B(停止、正转、反转) 10. GND:接地 AIN1和AIN2用于控制电机A停止、正转、反转,真值表如下 | AIN1 | 0 | 0 | 1 | | ---- | ---- | ---- | ---- | | AIN2 | 0 | 1 | 0 | | 状态 | 停止 | 正转 | 反转 | BIN1和BIN2的真值表同上 ## 接线 附上树莓派40PIN引脚对照表  树莓派GPIO和TB6612FNG的接线情况如下表 | 树莓派GPIO接口(BCM编码) | TB6612FNG驱动接口 | 说明 | | :---------------------: | :---------------: | :--------------------------------------: | | 27 | STBY | 设置TB6612FNG驱动模块的状态(工作/待机) | | 18 | PWMA | 基于PWM控制电机A转速 | | 14 | AIN1 | 控制电机A停止、正转、反转 | | 15 | AIN2 | 控制电机A停止、正转、反转 | | 19 | PWMB | 基于PWM控制电机B转速 | | 23 | BIN1 | 控制电机B停止、正转、反转 | | 24 | BIN2 | 控制电机B停止、正转、反转 | 电机驱动和树莓派4B共用一个5V 3A的电源,具体接线草图如下(下图是我用Notability画的,略显粗糙,将就一下)  实际接线图  ## 测试代码 小车需要有前进、后退、左转、右转、停止等5个动作,使用python编写测试代码如下 ```python #motorTest.py #导入 GPIO库 import RPi.GPIO as GPIO import time #设置 GPIO 模式为 BCM GPIO.setmode(GPIO.BCM) #定义引脚 STBY = 27 PWMA = 18 AIN1 = 14 AIN2 = 15 PWMB = 19 BIN1 = 23 BIN2 = 24 #设置 GPIO 的工作方式 GPIO.setup(STBY, GPIO.OUT) GPIO.setup(PWMA, GPIO.OUT) GPIO.setup(AIN1, GPIO.OUT) GPIO.setup(AIN2, GPIO.OUT) GPIO.setup(PWMB, GPIO.OUT) GPIO.setup(BIN1, GPIO.OUT) GPIO.setup(BIN2, GPIO.OUT) pwma = GPIO.PWM(PWMA,300) pwmb = GPIO.PWM(PWMB,300) # 前进或后退(大于零前进,小于零后退) def goForward(speed): if(speed>=0): GPIO.output(AIN1,GPIO.LOW) GPIO.output(AIN2,GPIO.HIGH) GPIO.output(BIN1,GPIO.LOW) GPIO.output(BIN2,GPIO.HIGH) pwma.start(speed) pwmb.start(speed) time.sleep(0.02) else: GPIO.output(AIN2,GPIO.LOW) GPIO.output(AIN1,GPIO.HIGH) GPIO.output(BIN2,GPIO.LOW) GPIO.output(BIN1,GPIO.HIGH) pwma.start(-speed) pwmb.start(-speed) time.sleep(0.02) # 左转或右转(大于零左转,小于零右转) def turnLeft(speed): if(speed>=0): GPIO.output(AIN2,GPIO.LOW) GPIO.output(AIN1,GPIO.HIGH) GPIO.output(BIN1,GPIO.LOW) GPIO.output(BIN2,GPIO.HIGH) pwma.start(speed) pwmb.start(speed) time.sleep(0.02) else: GPIO.output(AIN1,GPIO.LOW) GPIO.output(AIN2,GPIO.HIGH) GPIO.output(BIN2,GPIO.LOW) GPIO.output(BIN1,GPIO.HIGH) pwma.start(-speed) pwmb.start(-speed) time.sleep(0.02) def motorStop(): GPIO.output(AIN1,GPIO.LOW) GPIO.output(AIN2,GPIO.LOW) GPIO.output(STBY,GPIO.HIGH) #以60%的速度前进 goForward(60) time.sleep(2) #以60%的速度后退 goForward(-60) time.sleep(2) #左转 turnLeft(60) time.sleep(2) #右转 turnLeft(-60) time.sleep(2) #停止 motorStop() pwma.stop() pwmb.stop() GPIO.cleanup() ``` ## 测试结果 将上述代码保存到motorTest.py中,运行测试脚本`python3 motorTest.py` 视频见知乎[DIY树莓派小车(一)树莓派4B+TB6612FNG驱动直流电机 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/392388975) © 允许规范转载 赞 0 如果觉得我的文章对你有用,请随意赞赏