近期考試繁忙,先上視頻熱身熱身!
做平衡需要具備的基本配件:
一.硬件方面:
1.電源:比如航模電池11V或者7V以上,具體看電機供電電壓
2.Arduino推薦2560,因為后面可以加很多有趣的東西,比如語音,無線遙控,超聲波,觸摸屏,顯示器等等,MEGA2560有足夠的引腳
3.關鍵的東西>>MPU6050
4.電機和輪子+車架(可自制)。建議初學者買帶有編碼測速的車身,電機應帶有兩相測速,目的是可以測出電機正反轉。
5.電機驅動:可用298或者TB6612.建議用TB6612,它體積小,功率夠用。
6.降壓模塊。降壓模塊主要給Arduino供電,把11V的電壓降到8V左右通過Vin供電端給Arduino供電,如果直接接11V,小心芯片Duang機。
小車可平衡之后就可以加點控制器件:比如HC-05/06藍牙模塊或者NRF2.4G無線模塊。
二.軟件方面:
1.最重要的當然是傳說中的PID控制算法(其實不難,真不難,一個學期時不時的拿別人的程序出來看看,總會有理解的那天!)
2.理解測速和檢測方向原理(不管最高最低轉速如何,只要轉動電機有數就好,不用擔心數太小)
3.靈活運用串口監視器進行調試,可以打印數字觀察角度,PWM等。
4.要知道MEGA2560和UNO的定時器庫不一樣,需注意!
#include //mega2560定時器庫
#include //如果MsTi該庫不變紅色,需更新該庫(UNO定時庫)
5.拿到正確的MPU6050的角度和角速度。為什么說拿到呢?實話說6050不需要你太花費時間去理解它是怎么工作怎么嘰嘰歪歪的,你只需要找到它的出口值(角度和角速度)就行。就比如下面這段程序就可以得出標準的角度(f_angle )和角速度(omega)
當然在主函數錢還有它的一些定義:如何在一大堆程序里找出哪些才和它相關呢(先整體復制進來-編譯運行-正確-嘗試屏蔽掉自認為與它無關的語句以及定義-若報錯,則它有關,恢復回來-若正常編譯,則可去掉該語句)
/********MP6050相關***************/
float timeChange=10;//濾波法采樣時間間隔毫秒
float dt=timeChange*0.001;//注意:dt的取值為濾波器采樣時間
MPU6050 Mpu6050;//命名 陀螺儀類:Mpu6050
int16_t ax, ay, az, gx, gy, gz;//陀螺儀原始數據 3個加速度+3個角速度
float f_angle,angleA,omega,gyroGz,control_v;
float angle0 = 1.80,gy1 = 30; //因重心導致角度偏置;陀螺儀偏移量
/**************標準角度處理**************/
void jiao_du()
{
Mpu6050.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);//讀取原始6個數據
float ax1 = map(ax,-15924,16629,-16384,16384); //除去每個軸的漂移量
float ay1 = map(ay,-16601,16121,-16384,16384);
float az1 = map(az,-17454,15750,-16384,16384);
angleA = atan2(ax1,az1) * 180 / PI+ angle0; //加速度計算角度。得到平衡位置的角度
omega = -(gy - gy1) / 131.00; //計算角速度
gyroGz =gz / 131.00;//陀螺儀角速度,注意正負號與放置有關
unsigned long now = millis(); // 當前時間(ms)
float dt = (now - preTime) / 1000.0; // 微分時間(ms)
preTime = now;
float K = 0.8; //一階濾波
float A = K / (K + dt);
f_angle = A * (f_angle + omega * dt) + (1-A) * angleA; //得到正常的角度
}
6.(不需要)卡爾曼濾波。其實用了上面的角度處理程序,就不要卡爾曼了
因為要得到正常的角度和角速度有兩種方式:
1.算法融合得到(簡單)
2.卡爾曼濾波得到(復雜)
總接線圖:
|