OTTO like 使用 SG90 伺服馬達當作機器人動作控制的馬達,開發 ROSA 複雜系統,並未使用大眾習慣泛用的 Servo.h 函數庫,主要原因是避免未來加入其它功能造成 Timer 或中斷衝突問題。這裡定義 SG90 的驅動脈波寬度,轉 0° 為 560 ms,轉 180° 為 2000 ms 為基準來設計。
#define MAXus 2000 // us 2000 us = 2 ms = 0.002 sec
#define MINus 560 // us
#define GAIN (MAXus-MINus)/180.0
// Servo 的角度定義 -------------------------------------
#define hon 251 // hold on
#define hof 250 // hold off
#define idl 255 // Servo idle
SG90 伺服馬達,若持續每約 20 ms 送一次脈衝訊號,馬達會持續通電可以維持住設定的角度,用手是扳不動馬達,這種情形稱為 hold on,反之沒有持續送訊號就稱為 hold off,馬達不吃電,此時很容易扳動馬達,所以 hon 與 hof 就是設定要不要繼續讓馬達吃電維持固定角度。idl 表示不變更馬達設定。
下面的代碼分別表示不同的馬達角度,SG90 不是非常精準的伺服馬達,馬達設定角度跟實際旋轉的角度有些微偏差,因為 OTTO like 需要兩腳站立行走,如果角度偏差太大會造成行走偏斜,所以用代碼編寫動作程序,相同程式燒錄到不同 OTTO like 只要修改這些代碼角度,重新編譯後就可以很簡單修正偏差。
// OTTO 右腿上肢
#define RR6 30 // 注意 LR4 才不會卡到
#define RR4 40
#define RR3 65
#define RMD 100
#define RL3 135
#define RL4 150
#define RL6 166
#define RL9 180
// OTTO 左腿上肢
#define LR9 0
#define LR6 28
#define LR4 48
#define LR3 62
#define LMD 90
#define LL3 125
#define LL4 140
#define LL6 155 // 注意 RL4 才不會卡到
// OTTO 右腿下肢
#define RU9 0
#define RU6 20
#define RU4 35
#define RU3 47
#define RU2 59
#define RSD 81
#define RD3 110
#define RD4 126
#define RD6 141
#define RD9 180
// OTTO 左腿下肢
#define LU9 0
#define LU6 30
#define LU4 46
#define LU3 63
#define LU2 73
#define LSD 95
#define LD3 123
#define LD4 138
#define LD6 155
#define LD9 180
沒有留言:
張貼留言