极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 81314|回复: 116

做了一个小小的自平衡小车(更新完整版,附视频)

    [复制链接]
发表于 2013-8-15 17:44:14 | 显示全部楼层 |阅读模式
本帖最后由 pz_cloud 于 2014-9-4 22:57 编辑

暑假有时间打算做个自平衡的小车,经过三个礼拜的研究查阅各种帖子和设计制作。。。这部迷你蛋黄号终于诞生了!!


1.jpg


3.jpg

刚做出来硬件的时候运行的并不顺利。。。初期碰到很多问题还烧坏了几块板子。。调参数花了两天时间,有的参数直到后来才想到要加上去的。。。
采用6050的dmp采集角度信息,pid角度闭环控制,遥控以及无线调试是用PS2的无线手柄(也就是小车的大头)
完整版视频,用AE和Vegas折腾了两天做的视频~~~~


后续:这是加上了摄像头的平衡车,带巡线功能


本人也是第一次制作小车,最开始的初衷是在淘宝上淘到一款很小的减速电机,减速比比较合适很适合做小车,更难能可贵的是它还带有跟电机转轴直连的码盘,配上光电对射管之后每秒能输出300左右的脉冲,于是决心想做一个小小的玩具,蛋黄的制作参考了WALL-E的很多元素。。。
说一下用到的元件清单:
1.减速电机两个,这个要求不高,减速比适合就行,太慢的来不及矫正角度,太快扭矩不够

2.MPU6050 三轴加速度 陀螺仪模块 ,用作角度采样的传感器,论坛里应该大部分人都是用这一款了,我没有采用融合加速度和陀螺仪的卡尔曼滤波,而是采用芯片的DMP功能,这个之后介绍

3.Arduino pro mini 的avr mega328p做主控,体积小巧io齐全,你值得拥有

4.msp430 g2231单片机,由于6050的dmp模式要占用一个中断口而328p一共只有两个外部中断,所以两个轮子的码盘中断不好分配,这里采用430采集码盘信息然后通过串口与arduino通信,如果是用卡尔曼滤波的话这个可以省略

5.3.7v锂电池,用作电源,各种废旧手机电池都能派上用场

5.ps2无线手柄,使用arduino的psx库可以方便得用ps手柄调试和操纵,手柄淘宝上大把,30块左右一个

6.L298n模块,电机驱动模块,省得自己焊板子了,买现成的也不贵,两路输出做小车必备

7.4.2v锂电池充电模块,这个是考虑到车做的比较小电池不好拆卸,要充电的话就麻烦了,所以直接把充电模块固定上去,很好用的模块还带满电指示灯,淘宝3元一个

8.蓝牙模块,用于跟安卓手机通讯,可以忽略

讲一下原理,这个很简单,论坛里很多大神都分析过,就是负反馈控制,由测量到的角度和自身平衡时的自然角度的差作为误差,控制pwm占空比输出,进而调节电机转速,往前倒就向前跑一点,反之亦然。PID算法是关键,参数的调节也是摸索了挺久才找到规律的,值得一提的是,我查阅到的大多数资料都是使用PD算法控制,也就是不加积分项I,我一开始也是按这个思路来调节,但是站立的效果很不好,一碰就倒。尝试过各种PD参数组合均没有明显改善的时候,我试着加入了I项参数,喜出望外效果相当拔群。。。后来自己分析过,由于只求站稳的时候是属于静态控制,因而积分项的引入能消除零差,效果就是,即使你把车往前推一下,它自己也会慢慢走回去保证误差近似为0。然而在动态控制中,积分项太大会引起严重的相位滞后,也就是对角度变化的不敏感,所以我们会看到在很多项目中包括飞思卡尔的自平衡小车都是采用PD控制角度,而在动态控制里面PD的效果也确实很好。所以综合考虑之后,在我这次的方案中,我选择采用两套PID参数来控制小车站立和运行。
关于PID更详细的讲解可以参考这个帖子http://www.geek-workshop.com/for ... thread&tid=1414

各模块的连接:

插arduino主板的小板子,用质量差点的洞洞板一剪成型,主要是方便拆下来用作其他用途下面那层固定的事6050的芯片
QQ截图20130825005051.png

背面的样子
QQ截图20130825005100.png

L298n模块,装好重心大概就在轮轴上,小东西发热不大其实散热片可以拆掉的。下面固定用的是一张塑料卡,加502
QQ截图20130825005107.png

固定好之后的样子
QQ截图20130825005115.png

这个点机其实是带码盘的
QQ截图20130825005136.png

主控板加上去之后
QQ截图20130825005144.png

那块薄薄的是锂电池,ps3手柄用的
QQ截图20130825005156.png

装饰一下,用乐高积木做了铠甲
QQ截图20130825005208.png

QQ截图20130825005217.png

QQ截图20130825005224.png

基本成型了,中间那个窗口塞了颗明亮的led进去,有呼吸灯效果哦
QQ截图20130825005242.png

然后就是安装ps2手柄的接收器,在视频里有演示。说一下这个psx库的使用方法
接收器的引脚排列如图:
500_400-1336202435_9f75c2c2.jpg

PS2X_lib库文件的zip文件在附件,打开实例,把引脚定义改成你自己的,就是data,command那几个,然后连好接收器,如果是3.3v可以直接连,5v的arduino最好加个ldo降压模块再连,不过我自己试过直接连上去也能用。按示例初始化之后,每次运行Psx.poll();函数会读取一次按键状态,也就是说如果你这时候是按下某个键,那么在下次刷新之前对应变量的那一位都是1,反之则为0,读取键值就是类似这样的 if (Psx.digital_buttons & psxR2) {你的代码},组合键的使用也很简单 if ((Psx.digital_buttons & psxR2)&&(Psx.digital_buttons & psxL2)) {你的代码}。

最后说一下6050dmp的使用方法,DMP即Digital Motion Processor,MPU6050里面的一个模块,可以对原始的加速度计和陀螺仪的数据进行融合之后输出。就不需要用户进行融合了,可以减轻主控芯片的负担。

库的下载及使用方法可以参考这个帖子http://www.geek-workshop.com/for ... thread&tid=2471

最后给出我的代码。。。由于大家可能用不上430单片机以及蓝牙,所以把那部分的代码去掉了,写的有点乱仅供参考。。。


直接运行代码就行,注意dmp中断模式下6050的中断脚要接arduino的数字2脚,在获取完ypr数组之后,直接调用这几个变量就行了,关于ypr的定义给张图:
2.jpg
QQ截图20130825005123.png
f4e2043fbbe6fa6a72cf6c59.jpg

Psx_analog.zip

19.85 KB, 下载次数: 1549

回复

使用道具 举报

发表于 2013-8-16 17:10:59 | 显示全部楼层
三个礼拜做成这个效果,很不容易啦。希望楼主早日完成,和大家分享。
回复 支持 1 反对 0

使用道具 举报

发表于 2013-8-15 19:28:30 | 显示全部楼层
支持楼主,能开源下代码就更好了,让我们后来人从中学习学习
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-15 20:35:55 | 显示全部楼层
victory_6226 发表于 2013-8-15 19:28
支持楼主,能开源下代码就更好了,让我们后来人从中学习学习

恩,等我都做完之后会把详细过程和代码一起放上来的~
回复 支持 反对

使用道具 举报

发表于 2013-8-15 22:19:51 | 显示全部楼层
加红外对管,为了防摔倒?
回复 支持 反对

使用道具 举报

发表于 2013-8-15 22:50:38 | 显示全部楼层
红外对射。。其实就是一个光敏管和一个led led接常电, 光敏管就会有信号。中间有阻挡就没信号。然后就会有脉冲信号。。知道码盘多少个格子。。。数脉冲。。就能知道走了多远咯。。。。
回复 支持 反对

使用道具 举报

发表于 2013-8-16 12:20:55 | 显示全部楼层
貌似国内平稳性能都很差
,不知道是不是陀螺仪原因?
回复 支持 反对

使用道具 举报

发表于 2013-8-16 15:46:27 | 显示全部楼层
严重支持呀
最近也在做小车,看到你的成果,让我信心倍增
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-16 16:32:40 | 显示全部楼层
wisology 发表于 2013-8-15 22:19
加红外对管,为了防摔倒?

是为了更好地平衡并且定点运行啦~不加那个的话会往一边跑最后失衡的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-16 16:35:37 | 显示全部楼层
学慧放弃 发表于 2013-8-16 12:20
貌似国内平稳性能都很差
,不知道是不是陀螺仪原因?

看过国内其他人做的也有很稳的哦,我这个属于粗糙版的,参数调的不是很完美所以会颤颤。。。而且可能因为一心想着把车做小做Q弄得构造上不是很科学的。。。我是指重心比较高,而且太轻了不容易稳定。。我会继续努力改进的~~
回复 支持 反对

使用道具 举报

发表于 2013-8-17 09:13:22 | 显示全部楼层
楼主厉害   楼主万岁    支持楼主
回复 支持 反对

使用道具 举报

发表于 2013-8-17 13:02:59 | 显示全部楼层
pz_cloud 发表于 2013-8-16 16:35
看过国内其他人做的也有很稳的哦,我这个属于粗糙版的,参数调的不是很完美所以会颤颤。。。而且可能因为 ...

嗯嗯,国外有类似两轮平衡车可以站人跑,菜鸟研究中......
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-25 01:24:00 | 显示全部楼层
已更新视频和代码哦~~~
回复 支持 反对

使用道具 举报

发表于 2013-8-25 09:12:27 | 显示全部楼层
好东西要顶一下。
回复 支持 反对

使用道具 举报

发表于 2013-8-25 10:33:07 | 显示全部楼层
继续顶楼主的帖子,很不错,学习,有问题再请教楼主
回复 支持 反对

使用道具 举报

高级模式  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2018-8-22 00:27 , Processed in 0.057922 second(s), 7 queries , File On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表