如何动手自制一辆Raspberry Pi 两轮自平衡车?
这里简单说明一下电路,MPU6050模块是使用I2C接口,有四根线需要接上Raspberry Pi 的 GPIO脚位,分别是:
Vcc –> RPi GPIO header pin#1 (3.3V),
SDA–> RPi GPIO header pin#3 (SDA)
SCL–> RPI GPIO header pin#5 (SCL)
GND–> RPi GPIO header pin#6 (GND)
关于马达的部分,我使用常见的L293D 驱动IC。
GPIO header pin#11, pin#13, pin#15 控制左轮, 接到L293D的pin#2,pin#7, pin#1
GPIOheader pin#16, pin#18, pin#22 控制右轮, 接到L293D的pin#15, pin#10, pin#9
L293D的pin#3, pin#6接左轮马达
L293D的pin#14, pin#11 接右轮马达
Vs 接 12V DC
Vss 接 5V DC
(Vs& Vss 这两只脚不要搞混)
还有就是 L293D 需要有够高的电压来源才能驱动马达,我的做法是买一个 12V DC 1A 变压器,再配一个转接头再接上面包板,这样才能供应 L293D 的 Vs (pin#8)。
还要注意一点就是,请把车体前后的接线整理固定好,因为后面做平衡调校测试的时候一定会摔车好多次,前后的线路就是首当其冲, 最好都用束线带绑好。全部都固定完毕的样子
软件部份
这里我们要搞定I2C, 并且使用wiringPi函式库。它有基本GPIO功能又支持I2C 读取MPU6050数据,还有SoftPWM 功能可以控制DC motors转速,真是一举数得。
安装步骤如下
先安装i2c driver.
$ sudo apt-get install libi2c-dev
设定下次开机要启动 i2c driver,
$ sudo vi /etc/modules
增加以下两行到里面, 储存.
i2c-bcm2708
i2c-dev
有一个blacklist档案要检查
$ sudo vi /etc/modprobe.d/raspi-blacklist.conf
确认里面没有以下两行, 如果有出现, 请在前面都加上#符号 (也就是把他comment掉), 储存.
#blacklist spi-bcm2708
#blacklist i2c-bcm2708
然后Pi要重新启动
$ sudo bash; sync;sync;reboot
开机回来后, 要确认i2c driver kernel module 有正常启动
$ lsmod |grep i2c
i2c_dev 6027 0
i2c_bcm2708 4990 0
安装 git
$sudo apt-get install git-core
下载并安装 wiringPi
$ cd
$git clone git://git.drogon.net/wiringPi
$ cdwiringPi
$sudo ./build
测试MPU6050
先安装测试工具
$ sudo apt-get install i2c-tools
执行这个工具测试 i2c bus上是否有看到MPU6050.
$ sudo i2cdetect -y 0 (for a Revision 1board)
or
$sudo i2cdetect -y 1 (for a Revision 2 board)
如果看到以下输出…注意那个”68″, 就表示已经正常抓到MPU6050了.
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: — — — — — — — — — — — — —
10: — — — — — — — — — — — — — — — —
20: — — — — — — — — — — — — — — — —
30: — — — — — — — — — — — — — — — —
40: — — — — — — — — — — — — — — — —
50: — — — — — — — — — — — — — — — —
60: — — — — — — — — 68 — — — — — — —
70: — — — — — — — —
再来我们要下载测试程序尝试抓取加速度计(accelerometer) & 陀螺仪(gyroscope meter)数据.
下载测试程序, 并编译
$ cd
$git clone https://github.com/wennycooper/mpu6050_in_c.git
$ cdmpu6050_in_c
$cat README.md
$ gcc -o mpu6050_accl ./mpu6050_accl.c -lwiringPi -lpthread -lm
$gcc -o mpu6050_gyro ./mpu6050_gyro.c -lwiringPi -lpthread -lm
现在来看看加速度的数据, 请执行以下程序:
$ sudo ./mpu6050_accl
应该要看到X, Y, Z 加速度数据, 如下:
My acclX_scaled: 0.140625
MyacclY_scaled: -0.031006
MyacclZ_scaled: 0.994141
My Xrotation: -1.768799
My Yrotation: -8.047429
其中 acclX, acclY, acclZ 是三轴加速度数据
(单位是g, 没错! 就是物理课本上面的重力加速度 g=9.8m/s^2)
MyX/Y rotation 是换算出来的角度 (单位是 degree).
请试着将车体前倾或后仰, 看看数据的变化.
如果您安装MPU6050 的方向正确的话, 车体前倾或后仰应该会看到 Y rotation 介于 -90度 ~ 90度.
再来看看陀螺仪的数据, 请执行以下程序:
$ sudo ./mpu6050_gyro
应该要看到X, Y, Z轴的角速度, 单位是 degree/s
MygyroZ_scaled: -1.954198
MygyroX_scaled: -4.312977
MygyroY_scaled: 0.458015
MygyroZ_scaled: 0.366412
MygyroX_scaled: -4.053435
MygyroY_scaled: 0.427481
MygyroZ_scaled: -0.160305
请尝试着观察转动瞬间与数据的变化, 就会理解陀螺仪数据了。这里说明一下,单纯用上面那个加速度计不就可以推算出倾斜角度不是吗? 为何需要用到陀螺仪数据呢?主要是因为加速度数据很容易浮动, 后来有人发明了使用陀螺仪数据再补上加速度数据的方法, 这样就能算出比较稳定可靠的倾斜角度这套方法叫做“complementary filter”.
测试DC motors
现在我们用 wiringPi 写一个程序测试 DC motors.
$ cd
$git cl,one https://github.com/wennycooper/dcMotor.git
$ cddcMotor
$cat README.md
$ gcc -o dcMotor0 dcMotor0.c -lwiringPi-lpthread
准备要让马达转啰!! 请确认12V电源有正常插上, 并把车体用手拿起来, 执行程序!!
$ sudo ./dcMotor0
如何?? 正常的话两个马达应该正转5秒钟, 再反转5秒钟, 最后停止.
马达如果没有转, 表示前面步骤执行有错, 请回头去检查.
如果有转, 请确认两个马达都有转同样方向, 如果反向, 请把一个马达接脚两根交换, 应该可以改善.
还要注意一点, 您的两个马达都有转得很“够快”吗??
如果转得很慢, 比方说每秒钟大约才2转, 很有可能是L293D 的部分接线有问题, 请回头再确认!!
转速太慢可能会造成车体倾斜时马达来不及将车体导正, 这样就无法平衡了.
最后整合
将上面所有的程序代码全部整合到一起!!
Github上的参考代码在这里
https://github.com/wennycooper/mpu6050_in_c
下载并编译最后这套两轮自平衡车控制程序.
$ cd
$git clone https://github.com/wennycooper/mySegway.git
$ cdmySegway
$gcc -o mySegway ./mySegway.c ./motors.c -lwiringPi -lpthread -lm
这程序会根据测到的数据, 努力保持车体平衡.
如果倾斜角度过大(>60度), 会自动让马达停止.
执行
由于每一台车体平衡角度不一样, 本程序开始执行的时候是假设车体已平衡, 并取出当下角度作为基准点, 再努力透过马达运作努力保持角度。这意思是说: “程序启动瞬间请保持车体平衡”
有一点点难度,我的做法是左手放车子到地面,扶着它尽量保持车体平衡,然后平衡瞬间右手敲键盘执行程序。以下是结果录像
作者:马岗阿文
图片新闻
最新活动更多
-
11月28日立即报名>>> 2024工程师系列—工业电子技术在线会议
-
11月29日立即预约>> 【上海线下】设计,易如反掌—Creo 11发布巡展
-
11月30日立即试用>> 【有奖试用】爱德克IDEC-九大王牌安全产品
-
即日-12.5立即观看>> 松下新能源中国布局:锂一次电池新品介绍
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
-
即日-12.26火热报名中>> OFweek2024中国智造CIO在线峰会
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论