這幾天查了許多關於ArduPilot的資料http://code.google.com/p/ardupilot-mega-tw/wiki/Home?tm=6
配備齊全,玩家多,資料豐富,問題是照著這種方案下去實在是會花不少錢,沒關西我想窮有窮的玩法,有錢人有有錢人的玩法><~,所以小弟我從以前跟朋友從超便宜遙控車拆下來的遙控器電路板拿來用,接收距離大概才5公尺左右吧...而且干擾的還很嚴重,經過Arduino的實測之後都還可以接收使用,我可以控制4種狀態,因為他原本是控制兩顆馬達的正反轉4條線,第一組10、01 第二組10、01 這四種狀態可以發送至我的Arduino,那麼最基本的四旋翼自主平衡我打算使用之前CATCAN公司大大贊助我們機器人研究社去做測試的SmartSensor http://www.catcan.com.tw/products/smartsensor-series/imu
該感測器具有高級的姿態演算法並且每秒會回傳20次以上的值,傳輸協定是I2C,Arduino上的寫法近期有成果再回報囉。
Arduino連結遙控接收板
焊好的電調電源
通電之後也沒問題
SmartSensor
今天一直在測試電調的設置,因為他的PWM訊號通常都可以由遙控器去做控制,高電位才可以進入設置的模式,該電調可以設置7種狀態的參數詳情請見說明書,進入之後聽到逼逼聲之後要轉換高低電位才能夠確認,因此我在這種沒有遙控器的方法之下只能寫個簡單的Arduino程式來使用電腦的Serial monitor控制我的PWM訊號,以下是我寫的Arduino程式控制pin9的PWM訊號程式
void setup() {
pinMode(9, OUTPUT);
Serial.begin(115200);
delay(500);
}
int incomingByte = 0;
void loop() {
if (Serial.available() > 0) {
incomingByte = Serial.read();
if(incomingByte == 48){
analogWrite(9, 100);
Serial.println("low");
}else{
analogWrite(9, 220);
Serial.println("high");
}
Serial.print("I received: ");
Serial.println(incomingByte,DEC);
}
}
程式寫的似乎不太好,因為當我輸入不是1或0時常常會有失控的現象,我認為非0應該就會跑else才是,但是卻會有跳0又跳1的現象發生,我不知道原因,不過輸入1和0就不會有這種問題。
另外真的希望有人可以贊助我們社團做這些研究,謝謝。
作者已經移除這則留言。
回覆刪除Serial.available()是當接收到電腦端的DATA時會是1
回覆刪除Serial.read()是讀取1個字元的ASIIC碼
所以當我們輸入"20" 這2個字元的話
此程式會顯示
high
I received: 50 //ASIIC 50=2
low
I received: 48 //ASIIC 50=0
所以我的程式才會有此反應