在家里制作一个基于树莓派的智能小车
一、整体思路
组装一台智能小车可以说是男人的浪漫,对一台操控自如、金属底盘、指示灯交错的酷炫智能车,许多理工男都会像第一次去欢乐谷仰望太阳飞车时候的感受。那么如何组装一台这样机械朋克感十足地小车呢?且听我先阐述一下总体思路:
一台这样的小车首先需要几个重要系统组成,分别是底盘系统-包含车轮、底盘支架和固定螺丝,动力系统-包含电池组、控制板、发动机和串联线路,指令系统)、树莓派、指令控制程序、杜邦信号传导线,和传感系统-红外避障模块、避障程序、摄像头传感器(识别图像)、摄像头云台、舵机;这些系统构成了小车的支撑、行动、输入和输出能力;当然我们也可以根据自己需要,增加一些扩展套件,这里使用树莓派的主要原因就是便于扩展;
二、所需材料
小车底盘金属架一套,形状自选;
阻尼电机4个,轮子4个(看架子支持,有2个的,也有8个的,需要几个买几个);
树莓派 4B 版本 一个;
L298N 2路控制板2个(如果想要支持4驱,可以买8路控制器版本,价格20多大洋吧)
子母杜邦线和连接线 N个(看接线复杂度);
其他功能组件(例如红外线避障检测器,温感检测,雷达检测等等)
18650锂电池组一套(这个不是必须,我买这个是为了给L298N单独供能已提高小车续航)
三、制作过程
动力架构图如下:
L298N原理图:
底盘实物(改良后)
这里需要注意一下
马达接线时候注意是有方向的,注意正极接入的方向要统一,不然会出现四个轮子分别转向不动方向的情况;
L298N的输出,最好是 1,2路输出用于一侧的正向和逆向行驶(也就是1负责右侧正向,2就负责右侧反向)。3,4路输出用于另一侧。这样在后面写驱动时候会方便控制一些。
驱动编写,这里我选择的是python实现,主要是写起来简单高效;
还是先上一个设计架构:
指令通讯系统
Python驱动代码程序地址:https://github.com/yzzhanga/car
1 #!/usr/bin/python3 2 # -*- coding: UTF-8 -*- 3 from time import sleep 4 import RPi.GPIO as GPIO 5 6 # POINT = [5,6,16,26] 7 # GPIO接口结合 8 LEFT_FRONT_PORT = [26,17] #左前轮 正负输出,这两个输出互斥,不能同时为正,但可以同时为负,不管同时为正或负,都视为刹车; 9 LEFT_BACK_PORT = [27,22] #左后轮 10 RIGHT_FRONT_PORT = [18,23] #右前轮 11 RIGHT_BACK_PORT = [24,25] #右后轮 12 13 #忽略重复setmode导致的报警,一般是在关闭程序时候没有调用destory方法导致 14 GPIO.setwarnings(False) 15 16 class L298nOrder: 17 18 def setup(): 19 print("指令集初始化成功") 20 GPIO.setmode(GPIO.BCM) 21 GPIO.setup(LEFT_FRONT_PORT,GPIO.OUT) 22 GPIO.setup(LEFT_BACK_PORT,GPIO.OUT) 23 GPIO.setup(RIGHT_FRONT_PORT,GPIO.OUT) 24 GPIO.setup(RIGHT_BACK_PORT,GPIO.OUT) 25 26 #关闭GPIO的输出设置(这里有个前提是GPIO全部服务本集合,右可能会误关闭其他GPIO组合程序) 27 def destory(): 28 print("指令驱动销毁") 29 GPIO.cleanup() 30 31 #转向程序 左中心线的顺时针和逆时针旋转 32 def turnLeftRound(leftBool): 33 if (leftBool): 34 GPIO.output(LEFT_FRONT_PORT[0],True) 35 GPIO.output(LEFT_FRONT_PORT[1],False) 36 GPIO.output(RIGHT_BACK_PORT[0],False) 37 GPIO.output(RIGHT_BACK_PORT[1],True) 38 print ("执行指令:左转向") 39 else: 40 GPIO.output(LEFT_FRONT_PORT[0],False) 41 GPIO.output(LEFT_FRONT_PORT[1],True) 42 GPIO.output(RIGHT_BACK_PORT[0],True) 43 GPIO.output(RIGHT_BACK_PORT[1],False) 44 print ("执行指令:左转倒车") 45 #转向程序 右中心线的顺时针和逆时针旋转 46 def turnRightRound(rightBool): 47 if (rightBool): 48 GPIO.output(RIGHT_FRONT_PORT[0],True) 49 GPIO.output(RIGHT_FRONT_PORT[1],False) 50 GPIO.output(LEFT_BACK_PORT[0],False) 51 GPIO.output(LEFT_BACK_PORT[1],True) 52 print ("执行指令:右转向") 53 else: 54 GPIO.output(RIGHT_FRONT_PORT[0],False) 55 GPIO.output(RIGHT_FRONT_PORT[1],True) 56 GPIO.output(LEFT_BACK_PORT[0],True) 57 GPIO.output(LEFT_BACK_PORT[1],False) 58 print ("执行指令:右转倒车") 59 #前进挡 60 def allMove(): 61 GPIO.output(LEFT_FRONT_PORT[0],True) 62 GPIO.output(LEFT_FRONT_PORT[1],False) 63 GPIO.output(LEFT_BACK_PORT[0],True) 64 GPIO.output(LEFT_BACK_PORT[1],False) 65 GPIO.output(RIGHT_FRONT_PORT[0],True) 66 GPIO.output(RIGHT_FRONT_PORT[1],False) 67 GPIO.output(RIGHT_BACK_PORT[0],True) 68 GPIO.output(RIGHT_BACK_PORT[1],False) 69 print ("执行指令:前进") 70 #倒车挡 71 def allBack(): 72 GPIO.output(LEFT_FRONT_PORT[0],False) 73 GPIO.output(LEFT_FRONT_PORT[1],True) 74 GPIO.output(LEFT_BACK_PORT[0],False) 75 GPIO.output(LEFT_BACK_PORT[1],True) 76 GPIO.output(RIGHT_FRONT_PORT[0],False) 77 GPIO.output(RIGHT_FRONT_PORT[1],True) 78 GPIO.output(RIGHT_BACK_PORT[0],False) 79 GPIO.output(RIGHT_BACK_PORT[1],True) 80 print ("执行指令:后退") 81 #刹车 82 def stop(): 83 GPIO.output(LEFT_FRONT_PORT[0],False) 84 GPIO.output(LEFT_FRONT_PORT[1],False) 85 GPIO.output(LEFT_BACK_PORT[0],False) 86 GPIO.output(LEFT_BACK_PORT[1],False) 87 GPIO.output(RIGHT_FRONT_PORT[0],False) 88 GPIO.output(RIGHT_FRONT_PORT[1],False) 89 GPIO.output(RIGHT_BACK_PORT[0],False) 90 GPIO.output(RIGHT_BACK_PORT[1],False) 91 print ("执行指令:停止")
注意事项:
树莓派我安装的是ubuntu 21.0版本,默认是python3, 没有pip也没有rpi包,需要手动安装一下;
1 sudo apt-get install -y python-pip 2 sudo pip install rpi-python
或
1 sudo apt-get instail -y python-pip 2 sudo apt--get install -y rpi-python
四、参考资料
- https://www.jianshu.com/p/f31b90cc756f 树莓派GPIO引脚和python gpio编程api介绍
- https://zhuanlan.zhihu.com/p/106592873 GPIO说明
- https://zhuanlan.zhihu.com/p/346930154 L298N电机驱动板说明
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)