置頂文字

歡迎來訪 !! 如有任何問題歡迎一起討論或是 eMail 給我 legorunmail@Gmail.com

2010年12月13日星期一

LEGO NXT 藍牙遙控車

樂高有一款控制器  LEGO Power Functions IR Remote Control  加上HiTechnic 公司有個產品 IR Receiver Sensor 可當NXT的接收器,你就能像一般遙控玩具車一樣遙控你的NXT。

因為我有2台NXT所以我是利用藍牙連線互傳資料的方式來遙控,一台Master當遙控器發射訊息而另一台當Slave接收訊息後再對2顆馬達進行操控,因此一顆馬達控制左右轉向另一顆是控制前進後退。


車體的樣式組裝我是用 HiTechnic 的範例
材料:
  1. Lego MindStorms NXT
  2. 驅動馬達Motor 2顆
  3. 車體結構組件















程式不是寫的很完備還有很多地方要調整,但控制車體的轉向與前進後退功能都有,有興趣的人可以試試看,另外如果藍牙手機有NXT控制程式就可以用手機當遙控器使用。

我覺得這個藍牙遙控車最主要是讓我們學習與了解2個NXT要如透過藍牙溝通傳遞訊息, 這樣可以幫助我們往後設計更大型的樂高物件時會更有變化與多樣性。


結論:如果真的要當遙控車玩還是要買專用的Remote Control比較順手,但是要玩遙控車這樣的成本好像太高了。

在拍攝影片影片的時候,旺弟弟正在練習直笛所以背景有直笛音樂.....^_^


 程式方面如下:

//Master:遙控器程式

#define BT_CONN 1
#define INBOX1 1
#define OUTBOX1 1
#define INBOX2 2
#define OUTBOX2 2

sub BTCheck (int conn){

    if (!BluetoothStatus(conn)==NO_ERR){
        TextOut(5,LCD_LINE2,"Error");//顯示連線錯誤訊息
        Wait(1000);
        Stop(true);
    }
}

task main(){

        BTCheck (BT_CONN); //檢查與slave之連線
        int rev=0, rev1=0,sed=0,sed1=0,sed2=0,pwr1=0,pwr2=0;
       
        while(true){
            //左右轉向馬達          
            sed=MotorTachoCount(OUT_A)/20;
            if(sed!=sed1){
                pwr1=sed1-sed;
                sed1=sed;
                SendRemoteNumber(BT_CONN, OUTBOX1,pwr1);
            }

            //前進後退馬達
            sed=MotorTachoCount(OUT_B)/20;
            SendRemoteNumber(BT_CONN, OUTBOX2,sed2);
            if(sed!=sed2){
                pwr2=sed2-sed;
                sed2=sed;
                SendRemoteNumber(BT_CONN, OUTBOX2,pwr2);
            }
          }
}

------------------------------------------------------------------------

//Slave:車體接收遙控程式
#define INBOX1 1
#define OUTBOX1 1
#define INBOX2 2
#define OUTBOX2 2

sub BTCheck(int conn){
    if (!BluetoothStatus(conn)==NO_ERR){
        TextOut(5,LCD_LINE2,"Error"); //顯示連線錯誤訊息
        Wait(1000);
        Stop(true);
        }
}

task main(){
    BTCheck(0); // 從slave來看,master都是連接在line 0
    int rev=0, rev1=0, rev2=0,sed=0,sed1=0,rev3=0,rev4=0;
   
    while(true){
       
        ReceiveRemoteNumber(INBOX1, true, rev3);
        if(rev3!=rev1){
            rev1=rev3;
            ClearScreen();           
            if(rev1>0)
              OnFwd(OUT_A,50);
            if(rev1<0)
              OnFwd(OUT_A,-50);         
            Wait(200);           
            Off(OUT_A);
        }       
       
        ReceiveRemoteNumber(INBOX2, true, rev4);
        if(rev4!=rev2){
            rev2=rev4;
           if(rev2>0)
              OnFwd(OUT_B,50);
            if(rev2<0)
              OnFwd(OUT_B,-50);
          }       
    }
}//main

4 則留言:

  1. YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-

    回覆刪除
  2. 樂高-樂高-樂高-樂高-樂高-樂高-樂高-樂高-樂高-樂高-樂高-樂高-樂高-樂高 -YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA-YA

    回覆刪除
  3. 請問這位大大可不可以把這個的設計圖給小弟我?

    回覆刪除