看到别人做的自动行驶自行车,觉得好玩,自己也做一个,用arduino可以轻松实现。
因为开始是在做无人机,所以带着遥控器接收机等装备,一起开始设计自行车,就做个遥控的自行车吧,一个马达后轮驱动,MPU6050控制平衡,一个舵机控制前轮掌握方向,如此而已。
主要模块:
1、接收机程序(接收控制命令)
2、马达驱动程序(驱动后轮转动前行,速度可调)
3、舵机驱动程序(驱动前轮转向,以纠正车身意外倾斜)
4、陀螺仪读取
陀螺仪数据的作用:当车身发生倾斜时,要用舵机驱动前轮转向,在前进运动中,前轮的转向自然可以纠正车身的倾斜。
程序框架:
1、读取接收机数据 :re_da[0]-re_da[3]分别是1、2、3、4通道接收机数据。
2、读取陀螺仪数据:agx,agy,agz,其实就用一个agx就可以了。
3、根据接收机数据和陀螺仪数据计算马达和舵机。
4、用计算结果驱动马达和转向舵机。
用map函数直接把三通道(油门)接收机数据映射成合适的马达速度控制变量。
但是,方向舵机计算比较复杂,这也是自行车控制的特殊之处。
舵机控制前轮方向主要有如下考虑:
首先,假如转向舵为中间值(数值1500)
当陀螺仪数据X<0(车身向左倾斜)时,舵机操作前轮也向左拐。当X>0(车身向右倾斜)时,前轮也必须向右拐,以保持车身平衡。当陀螺仪数据趋近于零时,前轮直行。这就是基本的平衡控制。
但是,前轮向左,到底应该拐多少呢?按说,在速度快的时候,车把动作就要小,在车子速度慢的时候,车把动作就要大。这里没有速度数据,所以只好用油门量来代替。经实验,在油门1400的时候,转向参数20是比较合适的,在油门1800的时候,转向参数为10比较合适。于是据此得出计算公式:
kn=26-(re_da[2]-1100)/50; //转向参数,其中 re_da[2] 为油门通道数值,数值在1080-1920之间,kn就是转向参数(倍率)
val1=re_da[0]-(agx+k_x)*kn; //马达控制,其中 re_da[0] 为转向通道数值,数值在1080-1920之间,1500为中间值。agx为陀螺仪给出的倾斜度,val1就是计算出来的转向舵机的数值。
转弯实现
在上述基础上,如果转向通道re_da[0]朝一方倾斜,自行车肯定就会向另外一方倾斜,所以,要想左转,只要将车把稍微朝右偏转,在陀螺仪矫正下,车子就自动向左倾斜转弯了。
测试视频:https://v.youku.com/v_show/id_XNDMzMzQ2NDgzMg==.html?spm=a2hzp.8253869.0.0