Tag Archives: bluetooth

[樂高EV3機器人教學] 藍牙配對步驟

http://lab.cavedu.com/ev3_btpair

本頁說明兩台EV3主機之間的藍牙配對步驟,兩台主機的名稱為 EVA-13 與 EVA-02(您可在EV3軟體中自由修改主機名稱)。
 
STEP1:進到設定(扳手)頁面, 找到 Bluetooth 選項,點選後將藍牙開啟,開啟之後會在螢幕左上角看到藍牙符號。
 
   
 
STEP2:接著進入 Connections 選單,會先列出已配對的藍牙裝置(RK-HP),請點選 Search。
 
   
STEP3:Search一段時間後,螢幕上會顯示本主機周圍可找到的藍牙主機,可能為電腦、手機、EV3主機或任何支援藍牙通訊的裝置 (Arduino)。在此要連線的是 EVA-02 這台主機。點選它並按 [Connect]。
   
STEP4:Sea會再次詢問您是否要連接 EVA-02,請選[V]。接著設定 passkey 配對金鑰,預設為1234。就用這一組號碼就好。
 
   
 
STEP5:這時請看到 EVA-02 這台主機,當收到外部的藍牙配對要求時,會顯示畫面詢問您是否要允許本要求。點選[V] 之後,要輸入 passkey,這時直接按 [V]  就可以了。畫面顯示 Connected! 就代表配對完成了。
 
      
 
STEP5:配對完成之後,在EVA-13 的 Connections選單中就會看到 EVA-02了。
 



 
 






 
 


 
 

[樂高EV3機器人教學] 藍牙控制(雙觸碰感測器)

http://lab.cavedu.com/ev3_btbutton <- 程式碼由此下載

本篇是將 [雙觸碰感應器線控車 Switch 與 Multi-task 兩種寫法] 擴充成為藍牙遙控版本。程式碼請由以上頁面下載,分為 Handle 與 Car 兩個程式,您需將這兩個程式分別下載到兩台EV3主機上。先來看影片吧

[youtube=http://youtube.com/watch?v=nTTilwrme3Y] 
 
在執行程式之前,您需先將兩台 EV3 主機進行藍牙配對,執行時請先啟動 Car程式,再啟動 Handle程式。因為 Car 會被動接收來自 Car 的指令。
 
Handle:
 
兩個獨立的無窮迴圈,以左邊的迴圈來說,按下2號觸碰感測器之後會使用 Messaging 指令發送一個 TRUE(資料形態為 Logic,就是Boolean),反之則送出 FALSE。另一個迴圈也是相同的概念。在 Messaging 指令我們還可以設定這個 message 的 title,以左邊的迴圈來說就是 [right],右邊則是 [left],這樣一來同樣是送出 TRUE,但是 Car 就能藉由 title 來判斷要給誰來用了,不會搞混。
 
另外由Messaging指令中可看到我們指定的接收端是一台名為「EVA」的EV3主機。
 
注意:您可以在 Switch 後面加一個 Wait 時間,例如等候個 0.3 秒左右,因為事實上我們不需要這麼頻繁地發送藍牙訊息,有可能會造成當機。

 
手把的範例,您可隨意設計,拿得順手就好
 



Car:使用一般雙馬達車體即可。
 
一樣是兩個無窮迴圈,以左邊的來說,使用判斷條件為 Messaging / Compare / Logic 的 Switch,接收的 title 為 [right],如果接收到的內容為 TRUE,則要B馬達全速運轉,反之則停止。另一個迴圈則是去看 [left] 來控制 C 馬達轉動。
 



[雙A計劃] Part3:Android 手機透過藍牙接收 Arduino 類比腳位狀態

本篇將教導大家如何使用手機讀取Arduino上類比腳位的數值,在此我們接上的是旋鈕式可變電阻。實際上可連接的元件不只可變電阻,所有的類比式感測器例如光敏電阻、熱敏電阻等都可以這樣使用!

[雙A計畫] 常見問題整理

       [雙A計畫] 藍芽模組(HC05/06)常用指令教學

[雙A計劃] Part0:App Inventor 透過藍牙傳送訊號給 Arduino

[雙A計劃] Part1:App Inventor 經由藍牙控制 Arduino LED 亮滅

[雙A計劃] Part2:App Inventor 經由藍牙控制 Arduino LED 漸明漸暗

[雙A計劃] Part4:App Inventor 藍牙遙控 Arduino 雙輪機器人

[雙A計劃] Part5:Paperduino 藍牙控制 LED 閃爍

[雙A計畫]Part6:Arduino 傳兩筆資料到 Android 手機

[雙A計劃] Part7:Arduino超音波感測距離回傳數值給Android手機

[雙A計劃] Part8:Android 手機對 Arduino 同時進行資料收發

先來看影片吧:

[youtube=”https://www.youtube.com/watch?v=Xlk_2cYytFI&feature=youtu.be”]

範例程式請點我下載(App Inventor中文學習網檔案庫)  App Inventor 2檔名:ReceiveDatafromArduino.aia

材料清單:

1 Android系統智慧型手機

2.Arduino相容開發板 (本文使用 Arduino MEGA2560)

3.藍牙收發接收器(本系列使用JY-MCU04 或 JY-MCU05),

4.麵包板

5.1個 1K歐姆可變電阻

先由下圖將藍牙及可變電阻接上Arduino (藍牙RX – Arduino D11, 藍牙TX – Arduino D10腳位)

 

STEP1:App Inventor 編寫藍牙訊息接收程式

畫面元件很簡單,點選 BT List 之後,會顯示藍牙配對裝置清單,點選您已經配對好的藍牙裝置之後,Arduino的類比腳位資訊就會顯示在畫面中央的 TextBox 上。

這邊要注意的地方是要將Clock1的TimerInterval更改成10,也就是每 0.01秒更新一次。這麼一來才比較不會發生漏抓Arduino 發出來的訊息


螢幕快照 2014-04-02 下午11.35.50     
 4

程式說明:

本段程式重點在於手機在讀取Arduino訊號時,並不是直接向Arduino取得資料,而是採用間接的手法。先讓手機丟出一個訊號(本範例為發送49)。Arduino在等待接收到此訊號後,才會將感應器的數值以封包的形式傳送給手機。在第二個if後就是手機解讀Arduino所傳送過來的封包,並顯示到手機上。

請注意在程式初始化時我們把 Timer 關掉了,不然還沒有藍牙連線成功之前就發送藍牙訊息的話,會一直顯示錯誤畫面。

text 文字變數是用來接收 Arduino 送來的標頭,如果是’a’ 就代表這是一串封包的第一個,可以開始讀取了。

螢幕快照 2015-06-05 下午1.04.24

 

在 Clock.Timer事件中,會先送出一個49的數字作為確認碼,Arduino 接收到這筆資料之後就知道要開始傳送資料了。由於 Arduino A0 腳位的數值範圍是 0~ 1023,但是封包卻是以 8 bit (一位元組)為單位,因此要把數值以 8位元為單位來組合,並存入 number 變數中,就能順利將數字還原了。最後將 number 變數值顯示於 TextBox 中。

螢幕快照 2014-04-02 下午11.36.20

 

在斷線時,關閉計時器與藍牙連線,並讓畫面恢復到初始狀態

螢幕快照 2015-06-05 下午1.04.29

STEP2:Arduino 程式碼

#include <SoftwareSerial.h>
#include <Wire.h>
SoftwareSerial I2CBT(10,11);
byte serialA;
void setup(){

  Serial.begin(9600);
  I2CBT.begin(9600);
}
///////////////////main///////////////////

void loop (){
    byte Data[3];
    byte cmmd[20];
    int insize;
    char str[256];
    int i=analogRead(A0);//read sensor value
    serialA=I2CBT.read();
    Data[0]='a';
    Data[1]=i/256;
    Data[2]=i%256;
    sprintf(str,"i: %d 0: %d 1: %d 2: %d",i,Data[0],Data[1],Data[2]);
     Serial.println(str);
     if (serialA == 49){
         for(int j=0;j<3;j++)
         I2CBT.write(Data[j]);
         
         serialA=0;
      } 
  //delay(100);    
}
App Inventor receive Arduino analog status

 

 

[雙A計劃] Part2:App Inventor 經由藍牙控制 Arduino LED 漸明漸暗

本篇將簡單介紹如何用手機的 Slider 滑桿元件來控制Arduino上的LED燈漸明漸暗,當然就是用到 analogWrite的 PWM效果囉。

[雙A計畫] 常見問題整理

       [雙A計畫] 藍芽模組(HC05/06)常用指令教學

[雙A計劃] Part1:App Inventor 經由藍牙控制 Arduino LED 亮滅

[雙A計劃] Part2:App Inventor 經由藍牙控制 Arduino LED 漸明漸暗

[雙A計劃] Part3:Android 手機透過藍牙接收 Arduino 類比腳位狀態

[雙A計劃] Part4:App Inventor 藍牙遙控 Arduino 雙輪機器人

[雙A計劃] Part5:Paperduino 藍牙控制 LED 閃爍

[雙A計畫]Part6:Arduino 傳兩筆資料到 Android 手機

[雙A計劃] Part7:Arduino超音波感測距離回傳數值給Android手機

[雙A計劃] Part8:Android 手機對 Arduino 同時進行資料收發

範例程式請點我下載(App Inventor中文學習網檔案庫)  App Inventor 2檔名:SlideControlLED.aia

 

材料清單:

1 Android系統智慧型手機

2.Arduino相容開發板 (本文使用 Arduino MEGA2560)

3.藍牙收發接收器(本系列使用JY-MCU04 或 JY-MCU05)

4.麵包板

5.1個220歐姆色碼電阻

6.1顆LED

先由下圖將藍牙發射器及LED接上Arduino (藍牙RX – Arduino D10, 藍牙TX – Arduino D11腳位)

App Inventor 編寫簡易的藍牙訊息發送程式

畫面元件很簡單,點選 BT List 之後,會顯示藍牙配對裝置清單,點選您已經配對好的藍牙裝置之後,就可藉由畫面中間的滑桿元件(自定義數值範圍為0~80,您也可以偷懶直接就定義為0~255)。App Inventor 會每隔按鈕就可點選。反覆點選就會送出不同的字元給Arduino 來控制LED亮滅。

螢幕快照 2014-04-04 上午12.28.35

程式說明:

STEP1:在 ListPicker1.BeforePicking事件中,將 BluetoothClient.AddressAndNames指令為 ListPicker1內容,代表點選將其內容連結到手機的已配對藍牙裝置清單。
 
STEP2:在 ListPicker1.AfterPicking事件中,確認連線成功之後,設定相關按鈕為 enabled/ disabled。

螢幕快照 2014-04-04 上午12.29.00

STEP3:

本程式重點在於使用 CLock.Timer事件每 0.01 秒將 Slider 的當下數值透過 BluetoothClient元件的 SendText 指令送出。最後按下 Disconnect 斷線按鈕則中止藍牙連線,並將個畫面元件回復到初始狀態等候下一次連線。

ffff

STEP2:Arduino的CODE

#include <SoftwareSerial.h>
#include <Wire.h>//引用二個函式庫SoftwareSerial及Wire

SoftwareSerial I2CBT(10,11);//定義PIN10及PIN11分別為RX及TX腳位

byte cmmd[20];
int insize, a;

void setup() {

   Serial.begin(9600); //Arduino起始鮑率:9600

   I2CBT.begin(57600); //藍牙鮑率:57600(注意!鮑率每個藍牙晶片不一定相同,請務必確認

   pinMode(9, OUTPUT);  //請注意您使用的Arduino 該腳位是否支援 PWM (會有~符號),否則會看不到效果

}

void loop() {

while(1){

   //讀取藍牙訊息
   if ((insize=(I2CBT.available()))>0){
      Serial.print("input size = ");
      Serial.println(insize);
      for (int i=0; i<insize; i++){
          Serial.print(cmmd[i]=char(I2CBT.read()));
          Serial.print(" ");
      }//此段請參考上一篇解釋

   }

 if(insize==4){  
      a = (cmmd[0]-48)*10;
      a=a+(cmmd[1]-48);
 }
 if(insize==3){
      a=(cmmd[0]-48);
 }
 Serial.println(a);
 analogWrite(9,map(a,0,80,0,255));   //使用 a 變數控制 LED 亮度  
 } //while
}
App Inventor PWM LED