打算做一个智能小车,可以遥控控制,也可以自己避障、甚至给他写上算法,自己可以走迷宫,当初看MIT的《Introduction to EECS I 6.01》这门课的时候就该做的,可是当时水平有限,现在有能力了,赶紧补上当初落下的期末作业。
汲取上次 DIY Cellphone的教训,这次的项目,从开始,每一步的更改都要 push到 github,这是链接:https://github.com/hardihuang/rc_car
视频介绍:【Arduino 遥控小车】制作分享
车架
车架和轮子是从淘宝上买的kit,因为主要事想锻炼自己的编程水平,所以硬件方面就可以用别人的,以后有时间了,可以做一个铁架子,比较结实,因为这是亚克力的,容易碎。
拼好后:
遥控手柄
用之前研究过的 《NRF 24L01 2.4GHz无线通信模块》实现遥控手柄和小车之间的数据交换,蓝牙其实也可以,但是不喜欢用手机上的软件控制,觉得限制很多,操作也不舒服,一个joystick相比起来就更好操作些。
在面包板上更新了布局,增加了左右spinning原地旋转功能按钮。
电机控制
尝试用L9110s控制四个电机的旋转方向,但烧了仅有的两块板子,虽然一块钱一块,但是要买又得等三四天,所以用8个三极管,自己在面包板上搭了一个2 channel H bridge,工作正常,但可能是三极管功率的问题,马达转的很慢。
查到一篇文章讲解H bridge,研究了他的原理,知道了为什么我会无故吧那几个板子烧坏了 ——《H-Bridge Motor Driver Using Bipolar Transistors》
文章最后面写到:
Never apply +VDC to R1 and GND to R2 at the same time! You’ll short circuit the battery.
Never apply +VDC to R3 and GND to R4 at the same time! You’ll short circuit the battery.
这就是我烧坏的原因吧,同时导通同侧的两个transistor,导致电池正负短路,才会升起那神秘而又美丽的magic smoke,哈哈
板子L298N回来后换上了,跑的特别快。
线路板
之后在洞洞板上设计了布局,焊好了所有的部件,刚开始打算自己用覆铜板做一个PCB出来,顺便学习下工艺,但发现小车这个项目没有空间要求,做的太小也没必要,所以或许下次把。
手柄的线路板用了一块旧手机的锂电池,还有一块充电板,布局比较紧凑,很小巧,效果不错,还多焊了几个按钮,方便以后软件升级时,拓展功能使用。
先把遥控包装在了一个药盒里,还加了两个shoulder button,用鼠标微动做的,调整满意后再打印壳子。
车灯部分
用两个正白3w灯珠做前大灯,两个尾灯用四个红色led串联为一组实现,黄色的可以加在车前两侧,作为转向灯。直接使用电池的电压,用一个5v的继电器控制开合,
ISO 100 F/2.2 快门2s时拍摄下的小车原地旋转图片,有种外星飞船的感觉,哈哈
电源部分
刚开始电源用的两节18650串联,8v电压,但很快就没电了,所以后来买了一个大电池盒,两节分别并联后再串联在一起,电量翻倍,应该能玩更久。
18650电池都是从旧笔记本的电池里拆出来的,一块电池里有6节锂电池。
代码部分
经过上次 DIY cellphone 的洗礼,准备逻辑自己从头写,先用自己最大能力写完,之后再参考别人的优化。否则总是复制粘贴,会把我惯坏的。
首先是前后走,逻辑很简单,只需要给左右侧的轮子提供同样的PWM信号,让他们以同样的速度、方向前进就可以了,然后通过反转h bridge的两个线的极性来实现倒退。
左右转弯也不是很难,比如向前走的同时,将joystick又向左拨动一点,这时只需要将当前左轮的速度,减去向左转的值,从而减慢左轮的速度,导致车向左转。当joystick拨到最左时,左轮完全停止转动,右轮保持原速,从而实现最快转弯。右转是同样的道理。
难的地方在如何把joystick的0 — 512 — 1023的值去转化成小车需要的0 — 255 的pwm信号和方向。最后用arduino里的map() fuction很轻松的实现了。
之后查找相关的代码,发现了一个很不错的文章 《Arduino DC Motor Control Tutorial》,里面的代码和我写的很相像,所以就参考他的优化了下我的代码
目前只实现了用遥控控制的功能,循迹、避障和写算法走迷宫的功能后续慢慢添加。