2014년 2월 8일 토요일

Bluetooth(HC-06) - 블루투스를 이용한 자동차 키트 + 안드로이드 컨트롤러


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

블루투스는 연결에 있어서 마스터와 슬레이브로 구분할 수 있습니다. 직역을 하게 되면 주인과 노예인데요. 아래와 같이 마스터 되는 부분은 주체가 되고 슬레이브가 되는 부분은 객체가 된다고 할수 있습니다.


저의 프로젝트에 있어서는 안드로이드 폰이 마스터가 되고 차량 키트부분이 슬레이브가 될것입니다.

블루투스 살펴보기
제가 사용한 것은 HC-06모델 블루투스(슬레이브)입니다. 디바이스 쇼핑몰에서는 이렇게 사용하기 편하게 나오지 않는데요. 저는 납땜이 귀찮고 이게 편해서 깔끔해 보이기 위해 카페 공동구매에서 아래와 비슷하게 되어있는 것을 구매하여 사용 하였습니다.



개인적으로 필요한 기본적인 정보들은 데이터 시트를 통하여 얻을 수 있다고 생합니다.

블루투스는 Uart통신을 하게 되는데 Uart는 가장 많이 쓰이는 주변장치 중 하나이며, 프로세서가 외부 주변장치나 다른 프로세서와 데이터 통신을 하기 위한 비동기식 입출력 프로토콜을 의미합니다. Rx와 Tx는 Receive, Transmiter를 뜻하며 전송,수신을 하게 됩니다.

이 블루투스 모듈을 아두이노와 연결하여 사용합니다. 이때 Rx와 Tx, Vcc,GND를 연결하게 되는데 여기서 중요한것은 이때 연결하는 Rx와 Tx는 안드이로이드와 통신하는 Rx,Tx가 아닌 아두이노와 연결하는 Rx,Tx입니다. 블루투스모듈은 유선으로 아두이노와 연결을 하고 무선으로 안드로이와 연결을 합니다. 

아두이노 입장에서 블루투스모듈은 하나의 외부 주변장치이기 때문입니다. 때문에 아두이노에서의 Rx와 Tx를 연결을 할때에는 아두이노의 Rx(수신)는 HC-06의 Tx(송신)와 연결을 해주게 되고 같은 이유로 아두이노의 Tx(송신)은 Rx(수신)와 연결을 하면 됩니다.

Vcc같은 경우는 원래 HC-06은 3.3v를 사용하지만 쉴드를 이용한 모델이기때문에 5V까지 허용합니다. 따라서 아두이노의 5V 출력 부분과 연결을 하고 GND는 GND끼리 연결합니다. 

데이터 시트를 보게 되면 다른 기능을 하는 핀이 많이 보이는데 사실상 쓰기도 힘들 뿐더러 쓸일이 많이 없습니다.

안드로이드에서의 설정

  안드로이드에서 블루투스를 켜줍니다.

아두이노에서의 설정
-------------------------------------------------------------------------  
  SoftwareSerial BTserial(10,11); 
  // BTserial이라는 이름의 통신장치로 2(TX), 3(RX)포트로 시리얼 통신한는 설정

void setup() {
    .....
    BTserial.begin(9600); // 통신모듈의 baudrate값을 써 통신을 시작
    .....
}

-------------------------------------------------------------------------
처음 시리얼포트를 10,11로 설정해주는 따로 있습니다. 사실 시리얼 포트로 Rx,Tx가 처음 설정이 되어있습니다. 0,1번인데요 이는 컴퓨터와의 통신 포트로 사용되니 사용을 안하시는게 좋습니다. 원하시는 핀번호로 Rx,Tx를 설정하시면 됩니다.
?! 끝입니다. 아두이노에 보면 기본적으로 TX,RX가 존재하지만 그것은 PC 시리얼 통신을 할때 사용하므로 SoftwareSerial 이라는 명령어를 통하여 다른 핀을 Tx,Rx로 설정을 해줍니다.

void setup()은 아두이노를 처음 켰을때 초기화 하는 부분입니다.
begin(9600)은 아두이노와 baundrate를 9600으로 설정하는 부분입니다. 안드로이드에서는 자동으로 설정을 해주므로 따로 설정할 필요가 없습니다.
BTserial.println()를 통하여 값을 전송할 수 있고
BTserial.read()를 통하여 값을 수신할 수 있습니다.

예)
BTserial.println("안녕하세요");

라고 한다면 연결된 블루투스 기기의 화면에서는 안녕하세요 가 출력될 것입니다.

BTserial.read();
이거는 연결된 기기에서 송신하는 데이터를 수신하는 역활을 하고요

이후에 간단한 컨트롤 명령을 통해 값을 받는 부분도 이 부분을 이용하게 됩니다.


이후에 안드로이드 완성되지는 안 았지만 어플리케이션에 대한 부분도 공개할때에 log를 통해서 확인 할수 있을 것입니다.

댓글 2개:

  1. 아두이노 메가를 블루투스와 연결할때 10,11말고 다른 걸로 할려는데0,1번은 해봤는데 안되더라고요 14번이랑 15번으로 할수없나요 아니면 다른 핀으로 바꾸는 방법을 좀 알려 주시면 감사하겠습니다. 코드에 14번 15번으로 바꿔봤는데 안되더라고요 0번1번도 그렇구요..

    답글삭제
    답글
    1. #include <- 제가 본문에 이거 빼먹었는데 이거 주입 시켜주셔야 하고 가능한 핀들은
      RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69)
      라고 합니다.

      https://www.arduino.cc/en/Reference/SoftwareSerial 공식사이트 문서와
      https://www.arduino.cc/en/Tutorial/SoftwareSerialExample 공식사이트 예제 참고하시면 될듯합니다.

      삭제