xbee 통신

프로그램 버전 : Arduino - 1.0

사용된 Xbee 모듈은

http://www.sparkfun.com/products/8664 이다

Xbee 모듈의 설정은

http://www.sparkfun.com/datasheets/Wireless/Zigbee/XBee-Manual.pdf 참고

기본 설정된 값은

Xbee 모듈과 컴퓨터와 UART방식으로 9600bps 로 통신하고

(물론 설정을 변경해 통신속도를 바꿀수 있다. 변경방법은 위 Manual.pdf참고)

Xbee 모듈간은 250000bps로 통신한다.

Xbee라고 다를것 없이 아두이노에서의 스케치는

softwareserial 라이브러리를 이요해서 TX, RX핀을 설정하고

다른 통신모듈과 같이 스케치 하면 된다.

(다른 통신모듈과 통신 거리, 속도, 가격 등이 다르므로

사용 목적에 맞게 선택하면 된다.)

Xbee 모듈 2개, Xbee 쉴드, Xbee explorer 사진이다.

모듈을 쉴드와, explorer에 끼우고

모듈을 장착한 쉴드를 아두이노 UNO보드에 끼운 사진이다.





각각 쉴드가 장착된 아두이노는 com4번과

explorer에 기운 Xbee는 com8번에 연결되었다.

(장치관리자에서 확인)

com4-아두이노-Xbee       <------통신------>       Xbee-com8

결국은 한 컴퓨터의 com4에서 com8번으로 통신을 구현 했지만

이는 통신의 확인을 위한 작업 이고

응용하면

Xbee연결된 아두이노를 센서나 모터를 연결하여 외부에 두고

Xbee를 통해 컴퓨터로 센서 값이나 모터를 제어할 수 있다.

Xbee가 장착된 아두이노와 Xbee가 연결된 pc와의 통신

스케치 소스

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

/*Xbee가 장착된 아두이노와 Xbee가 연결된 pc와의 통신*/

#include <SoftwareSerial.h>

SoftwareSerial XbeeSerial(2,3);  //아두이노 2,3번 핀을 통해 통신

int a,b;

void setup(){

  Serial.begin(9600);

  XbeeSerial.begin(9600);

}

void loop(){

  if(Serial.available()>0){   

    a = Serial.read();             // 시리얼 모니터에 입력된 값을 a에 저장

    XbeeSerial.println(a);       // Xbee를 통해 다른Xbee가 연결된 pc에 값 출력

    delay(100);

  }

  if(XbeeSerial.available()>0){

    b = XbeeSerial.read();        // Xbee가 연결된 pc에서 입력한 값 b에 저장

    Serial.println(b);                // Xbee를 통해 아두이노Xbee로 값을 보내고 시리얼 모니터에 출력

    delay(100);

  }

}

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

작동영상

(Serial 모니터는 아두이노, 컴포트 마스터는 Xbee-explorer와 연결 되었다.)


관련글

블루투스 설정에 관한 글 http://eskelt.tistory.com/14

블루투스 활용에 관한 글 http://eskelt.tistory.com/16

블루투스 자동차 http://eskelt.tistory.com/22

에서 작성된 스마트폰 + 블루투스 + 아두이노자동차 배선도 이다

(모터, 모터드라이버,블루투스,아두이노를 연결)

모터의 출력을 높이기위해 모터 쪽으로 배터리를 따로 연결 하였다.

주의점은 아두이노의 GND와 추가 배터리의 GND를 연결해야 한다.



관련글
블루투스 설정에 관한 글  http://eskelt.tistory.com/14
블루투스 활용에 관한 글  http://eskelt.tistory.com/16

프로그램 버전 : Arduino - 1.0 

안드로이드 스마트폰과 아두이노를
블루투스 통신으로 연결하여
스마트폰에서 폰의 기울기나 버튼 누름 정보를
아두이노로 받아 처리후 모터를 제어해 보도록 한다.
즉 안드로이드 스마트폰으로 아두이노 자동차를 제어해 보자.

먼저 스마트폰과 아두이노의 블루투스장치를 페어링 시킨다.

다음으로 안드로이드 스마트폰에서
페어링된 블루투스(아두이노)로 정보를 보낼 앱이 필요하다.
(사실 아이폰으로 해보려 했지만 블루투스 통신 방법이 다르고
관련 앱이 흔치 않아 포기했다)

사용한 앱은 BluCar이다.

설치후 실행해 보면





Connect to a device 버튼을 눌러 아두이노 블루투스와 연결한다.
(연결이 되었다는 표시는 각각의 블루투스 모듈에 따라 다르다
사용된 RN-42모듈은 빨간 불에서 파란불로 바뀌며,
한번에 되지 않고 여러번 connect해야 연결되었다.
또, 페어링시킨 후 블루투스의 설정을 변경해야하는 모듈도 있지만
이 모듈은 그런 번거로움 없이 사용된 앱과 연결이 되었다.)

연결되면 블루투스를 통해 아두이노로 값을 날린다.
이 앱은
폰을 왼쪽으로 기울이면 -> 4
오른쪽으로 기울이면 -> 8
Forward 버튼을 누르면 -> 16
Reverse 버튼을 누르면 -> 32
버튼을 누르고 기울이면 각각의 값을 더한 값을 날린다.

이 값을 가지고 스케치 하여 모터를 제어 하면 된다.

앱을 이용해 제어한 자동차는 모터2개, 모터드라이버,
블루투스모듈, 아두이노프로미니를 연결하여 제작하였다.
(자동차라고 까지 부르기에는 조금 미흡한... 그냥 모터달린....)




스케치소스
-------------------------------------------------------------------------------
/*스마트폰으로 제어하는 자동차*/
#include <SoftwareSerial.h>
SoftwareSerial BTserial(2,3);    //블루투스 모듈 통신 설정
int a = 0;
void setup(){
  BTserial.begin(115200);      //블루투스 모듈 통신 시작
}

void loop(){
    a = BTserial.read();      // 스마트폰에서 블루투스 모듈로 들어오는 신호를 a에 저장
    switch (a){
      case 0:               // 0이면 정지
        analogWrite(6,0);        // 왼쪽 모터 전진 정보 핀
        analogWrite(9,0);        // 왼쪽 모터 후진 정보 핀
        analogWrite(10,0);       // 오른쪽 모터 전진 정보 핀
        analogWrite(11,0);       // 오른쪽 모터 후진 정보 핀
        delay(30); break;
      case 4:               // 4면 제자리 좌회전
        analogWrite(6,0);
        analogWrite(9,250);
        analogWrite(10,250);
        analogWrite(11,0);
        delay(20);
        break;
      case 8:               // 8이면 제자리 우회전
        analogWrite(6,250);
        analogWrite(9,0);
        analogWrite(10,0);
        analogWrite(11,250);
        delay(20);
        break;     
      case 16:               // 16이면 전진
        analogWrite(6,250);
        analogWrite(9,0);
        analogWrite(10,250);
        analogWrite(11,0);
        delay(20);
        break;
      case 20:               // 20이면 좌회전
        analogWrite(6,0);
        analogWrite(9,0);
        analogWrite(10,250);
        analogWrite(11,0);
        delay(20);
        break;
      case 24:                // 24이면 우회전
        analogWrite(6,250);
        analogWrite(9,0);
        analogWrite(10,0);
        analogWrite(11,0);
        delay(20);
        break;
      case 32:                // 32이면 후진
        analogWrite(6,0);
        analogWrite(9,250);
        analogWrite(10,0);
        analogWrite(11,250);
        delay(20);
        break;   
    }
}
------------------------------------------------------------------
(앱에서 블루투스를 통해 보내는 값이 기울기에 따른 변화된 값이 아니라 정해진 값이여서
아날로그출력(PWM)으로 할 필요 없이(0과 250 값만 사용하니) 디지털 출력으로 모터를 제어하면 될것을.....
조금 더 머리가 좋으면 간략하게 짤수도 있을텐데....)

작동 영상

+ Recent posts