侵权投诉
技术:
GPU/CPU 传感器 基础元器件 网络通信 显示 交互技术 电源管理 材料 操作系统 APP 云技术 大数据 人工智能 制造 其它
应用:
可穿戴设备 智能家居 VR/AR 机器人 无人机 手机数码 汽车 平衡车/自行车 医疗健康 运动设备 美颜塑身 早教/玩具 安防监控 智能照明 其它
订阅
纠错
加入自媒体

自制Raspberry Pi 两轮自平衡车

本文将介绍如何利用Raspberry Pi自行制作一台两轮自平衡车(segway)。

自制Raspberry Pi 两轮自平衡车

硬件需求

Raspberry Pi + 外壳 + WiFi网卡。请自行先刻录并安装 Raspbian 操作系统来开机。WiFi网卡是edimax的, 安装方法不另赘述

DC motors + 轮胎 + 车架 + 压克力板 + 铜柱

L293D IC 马达驱动IC

MPU6050六轴传感器

机构组装

自制Raspberry Pi 两轮自平衡车

安装车体, 包括L架, 马达, 轮胎, 最后把压克力板还有铜柱都装上去。装完以后的样子如下图.

自制Raspberry Pi 两轮自平衡车

安装线路

开始插面包板

自制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)。

还要注意一点就是,请把车体前后的接线整理固定好,因为后面做平衡调校测试的时候一定会摔车好多次,前后的线路就是首当其冲, 最好都用束线带绑好。全部都固定完毕的样子

自制Raspberry Pi 两轮自平衡车

软件部份

这里我们要搞定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

$ 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 的部分接线有问题, 请回头再确认!!

转速太慢可能会造成车体倾斜时马达来不及将车体导正, 这样就无法平衡了.

最后整合

将上面所有的程序代码全部整合到一起!!

这程序会根据测到的数据, 努力保持车体平衡.

如果倾斜角度过大(>60度), 会自动让马达停止.

执行

由于每一台车体平衡角度不一样, 本程序开始执行的时候是假设车体已平衡, 并取出当下角度作为基准点, 再努力透过马达运作努力保持角度。这意思是说: “程序启动瞬间请保持车体平衡”

有一点点难度,我的做法是左手放车子到地面,扶着它尽量保持车体平衡,然后平衡瞬间右手敲键盘执行程序。以下是结果录像

作者:马岗阿文


声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号