아두이노 블루투스 통신 방법 및 코드

Posted by Doony
2015. 10. 23. 14:09 아두이노 드론 프로젝트

아두이노를 활용하여 블루투스 통신을 할 수 있는데요. 저희의 경우 컴퓨터로 PID게인 값을 넣기 번거롭기에 HC-06이라는 블루투스 모듈을 활용하여 원격제어 했는데요. 이렇게 생긴 놈입니다.


아두이노에 이렇게 연결해야 하는데요. 보통 센서의 경우, 3V를 먹던데 이 놈은 5V를 줘야합니다. 

회로를 연결 했으면 코딩을 해볼까요?

우선 블루투스 통신을 사용하려면 SoftwareSerial이라는 내장 라이브러리를 써야하는데요.

이 라이브러리를 쓰면 RX, TX핀인 시리얼포트 0번과 1번 이외에 다른 핀을 블루투스에 연결하여 활용할 수 있는데요. 실제로 각 프로세서마다 시리얼 포트 개수에 한계가 있기 때문에 여러 기기와 통신할 때 사용할 수 있는 유용한 라이브러리입니다. 또 실제 블루투스를 시리얼 포트에 연결하면 아두이노에 코드를 업로드할 때 블루투스 통신과 충돌할 수 있다고 하네요.


저희가 핸드폰으로 원격제어하기 위해 추가한 코드는 다음과 같은데요. 

#include <SoftwareSerial.h>


SoftwareSerial BTSerial(2, 3); // 블루투스 통신을 2번 (RX)과 3번 (TX) pin으로 하겠다

void setup(){

BTSerial.begin(9600); //블루투스 통신과 시리얼 통신의 통신속도가 같을 필요는 없네요.

Serial.begin(230400);

}

void loop()

{

bluetoothEvent(); //bluetoothEvent라는 함수를 반복하여 실행

}

void bluetoothEvent()

{


  while (BTSerial.available()) { 



    desired_angle = BTSerial.parseInt();

    desired_angle_x = BTSerial.parseInt();

    min_output = BTSerial.parseInt();

    max_output = BTSerial.parseInt();

    initiator = BTSerial.parseInt();

    PID_scaler = BTSerial.parseFloat();


    P_angle_gain = BTSerial.parseFloat();

    Pgain = BTSerial.parseFloat();

    Igain = BTSerial.parseFloat();

    Dgain = BTSerial.parseFloat();

    buffering = BTSerial.parseFloat();


//11개 정도의 값을 bluetooth통신을 통해 받았네요. 


  }

}

안드로이드폰을 활용하신다면 블루투스 통신을 하기 위한 어플이 여럿 있어요. 블루투스 모듈과 휴대폰이 연결된 걸 확인한 후 작동시키니 잘 되네요. 매번 컴퓨터로 가서 값을 변경해주지 않아도 되서 편해서 좋은 것 같습니다.. (점점 게을러지는게 아니라 편리한 방법이 있으면 계속 활용해봐야겠죠??;;;) 아무튼 이번 포스팅은 여기서 마치겠습니다!