2014年12月21日 星期日

Arduino to Bluetooth module HC-06 for wireless control

Arduino經由BT module就可以做無線控制的功能,可以應用在IOT,遙控車。我在
淘寶買了一個BT module HC-06,花了大約20塊人民幣。我想先做個最簡單的功
能,也就是控制LED。由於還不會寫Android程式,所以先用PC內建的BT來做控
制。我在PC上的終端機,在BT的com port也就是UART,輸入L (light) or D (dark)
字元,然後透過BT傳送到Arduino板子的UART port,當Arduino板子接收到L or D
字元,就會去控制LED的亮暗。

1.由於寫程式需要用到UART port來燒錄,需要先將Arduino UART port接到 USB
   to UART的轉板,然後燒錄下面的程式。BT module對於Arduino的板子來說,
  只是一個UART介面的IC,所以Arduino MCU都是用Serial的函式來與BT module
  溝通。由於HC-06預設的Baud rate是9600bps,所以MUC需要用9600bps來跟
   HC-06來跟它溝通。另外我用到Arduino板子上的綠光LED,當MCU接收到"L"
   就將ledPin設置為1,LED就會亮。當接收到"D",就將ledPin設置為0,LED就會
   暗。

const int ledPin = 13; 
int incomingByte = 0;
void setup() 
{
  // open a serial connection
  pinMode(ledPin, OUTPUT); 
  Serial.begin(9600); 
 Serial.println("Control start, please press L or D");
}
void loop()
{
while (Serial.available()) 
{
  incomingByte=Serial.read();
if ( incomingByte=='L')
{
  digitalWrite(ledPin, 1);
  Serial.println("Turn on LED");
}
else if ( incomingByte=='D')
 {
   Serial.println("Turn off LED");
   digitalWrite(ledPin, 0);
 }
else
{
  Serial.println("Wrong input");
}
}
}

2.程式燒錄完後,就可以連接Arduino板子與HC-05,這時你的Arduino板子已經脫離
   你的PC了。我們只需要接VCC,GND,TXD,RXD 4條線,注意module的TXD要接到
    Arduino板子的RXD,module的RXD要接到Arduino板子的TXD。最後再供外部電
    源5V或3.3V給VCC pin,等於是同時供電給Arduino板子與HC-06。










3.最後我們打開電腦的BT,可以看到您附近有那些BT device,我們選擇連接到
    HC-06後,開啟終端機,就可以看到有一個Bluetooth serial port的選項,點選
    "OK"後,就會出現終端機畫面,這時你輸入keyboard的L或D會出現訊息,而
    LED也會隨著亮或暗。






















注:如果要修改BT module的設定,需要用AT command。我們用USB to UART轉板
        連接到BT module,只需要VCC,GND,TXD,RXD四條線,然後進到終端機模式
        輸入左邊第一排的command就可以來修改BT module的設定。例如輸入"
        AT+PIN1234"就是設定BT module的密碼為"1234",Baud rate也可以修改。
     
command
response
effect

AT+VERSION
OKlinvorV1.6
Gets the version info, no changes

AT+NAMExyz
OKsetname
Sets the module name to "xyz"

AT+PIN1234
OKsetPIN
Sets the module PIN to 1234

AT+BAUD7
OK57600
Sets the baud rate to 57600


Reference:
1.http://wiki.mikrokopter.de/en/HC-06

2014年12月12日 星期五

Arduino to Compass GY-273/HMC5883L 三軸電子羅盤

要在Arduino開發版載入電子羅盤很容易,在網路上有很多相關的網站提供Library與函式,減少入門者開發的時程。下面便是利用網路上的範例程式來驗証HMC5883L三軸電子羅盤。  


1.將Adruino的I2C pin A4,A5接到GY-273的SDA,SCL。GY-273的VCC可以直接接Arduino上的   5V,GY-273支援5~3V輸入。再連接上兩塊板子的GND,硬體設置便完成了。


2.找個blog[1]下載的Library,
3.在壓縮檔內還有一個範例程式HMC5883L_Example.ino,我們可以先用這個程式來驗証GY-273的功能。
4. 當你把程式成功upload到Arduino的板子後,再打開Serial Monitor視窗,就可以看到Arduino從HMC5883L讀到的數值。最左邊是三個軸的Raw data,中間的scaled是將Raw data轉成磁場強度,最右邊這排,便是將Raw data轉成磁角度。



在驗証Library的過程中,如果出現下面編輯的錯誤訊息
C:\Users\Documents\Arduino\libraries\HMC5883L\HMC5883L.cpp: In member function 'void HMC5883L::Write(int, int)':
C:\Users\Documents\Arduino\libraries\HMC5883L\HMC5883L.cpp:110: error: 'class TwoWire' has no member named 'send'
C:\Users\Documents\Arduino\libraries\HMC5883L\HMC5883L.cpp:111: error: 'class TwoWire' has no member named 'send'
C:\Users\Documents\Arduino\libraries\HMC5883L\HMC5883L.cpp: In member function 'uint8_t* HMC5883L::Read(int, int)':
C:\Users\Documents\Arduino\libraries\HMC5883L\HMC5883L.cpp:118: error: 'class TwoWire' has no member named 'send'
C:\Users\Documents\Arduino\libraries\HMC5883L\HMC5883L.cpp:129: error: 'class TwoWire' has no member named 'receive'
這是因為Arduino版本的問題,在舊版的arduino,Wire的函式是用send,receive指令來收發資料,但新的Arduino是用write,read。要修正這個問題,只要將  HMC5883L.cpp內的head檔
#include <WProgram.h>
改成下面這行, 就可以解決這個問題了。
#include <Arduino.h>




Reference
[1] http://bluelemonlabs.blogspot.tw/2013/08/arduino-simple-compass-with-hmc5883l.html