xbee통신을 통해 기울기 센서의 값을 전달하여

다른쪽의 아두이노에 연결된 모터를 제어해 보자.


양쪽의 구성은

아두이노 + xbee + 기울기센서       --> 조정기

아두이노 + xbee + 모터드라이브 + 모터  --> 자동차  이다.


아두이노와 xbee의 연결 이전글을 참고 http://eskelt.tistory.com/29

아두이노와 모터드라이브 및 모터의 연결 이전글 참고  http://eskelt.tistory.com/27


사용된 기울기 센서는


http://artrobot.co.kr/front/php/product.php?product_no=486&main_cate_no=36&display_group=1 

이다.


이 기울기 센서는 

s1, s2에서 센서가 기울어진 방향에 따라 0과 1의 디지털 신호를 보낸다

즉 네방향의 00,01,10,11 신호를 낸다.


따라서 네방향의 신호를 받아 

xbee로 신호를 전달하여

신호를 받은 아두이노에서 모터를 제어한다.


센서가 연결되어 신호를 보내는 아두이노의 회로는 아래 그림처럼

UNO에 xbee쉴드를 꼽고 기울기센서와 풀업스위치을 구성하였다.

(버튼을 누를때 작동하도록...)


신호를 보내는 아두이노 스케치

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

#include <SoftwareSerial.h>

SoftwareSerial xbee(2,3);        // xbee통신 선언 2,3번핀 사용


int s1,s2,b,data;

void setup()

{

  xbee.begin(9600);

  pinMode(7,INPUT);

  pinMode(8,INPUT);

  pinMode(9,INPUT);  

}


void loop(){

  b=digitalRead(7);     // 풀업스위치

  s1=digitalRead(8);   //기울기 센서의 s1과 아두이노 8번핀 연결

  s2=digitalRead(9);   //기울기 센서의 s2와 아두이노 9번핀 연결

  if(b==0){                // 풀업스위치가 눌러지고

    if(s1==0 && s2==0){data = 1;}          //s1, s2가 00 이면 1

    else if(s1==0 && s2==1){data = 2;}   //s1, s2가 01 이면 2

    else if(s1==1 && s2==0){data = 3;}   //s1, s2가 10 이면 3

    else{data = 4;}                             //s1, s2가 11 이면 4

  }

  else{data=0;}       // 풀업스위치가 눌러지지 않으면 0의 데이터를 저장

  

  xbee.write(data);   // 데이터를 xbee로 보낸다.

}

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


신호를 받는 아두이노 자동차의 회로는 아래 그림처럼



아두이노에 전원을 따로 구성했고(이동해야하므로)

또 모터에도 전원(9V)를 따로 구성했다.(모터가 스피드가 나도록)

(단GND를 아두이노와 연결해야함)


아두이노 자동차 스케치

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

#include <SoftwareSerial.h>

SoftwareSerial xbee(2,3);


int a;


void setup(){

  xbee.begin(9600); 

  pinMode(8,OUTPUT);

  pinMode(9,OUTPUT);

  pinMode(10,OUTPUT);

  pinMode(11,OUTPUT);

}


void loop(){

  if(xbee.available()>0){

    a = xbee.read();

    switch (a){

      case 0:               // 0이면 정지

        digitalWrite(8,0);        // 왼쪽 모터 전진 정보 핀

        digitalWrite(9,0);        // 왼쪽 모터 후진 정보 핀

        digitalWrite(10,0);       // 오른쪽 모터 전진 정보 핀

        digitalWrite(11,0);       // 오른쪽 모터 후진 정보 핀

        //delay(30); 

        break;


      case 1:               // 1이면 전진

        digitalWrite(8,1);

        digitalWrite(9,0);

        digitalWrite(10,1);

        digitalWrite(11,0);

        //delay(20);

        break;

      case 2:               // 2이면 좌회전

        digitalWrite(8,0);

        digitalWrite(9,0);

        digitalWrite(10,1);

        digitalWrite(11,0);

        //delay(20);

        break;

      case 3:                // 3이면 우회전

        digitalWrite(8,1);

        digitalWrite(9,0);

        digitalWrite(10,0);

        digitalWrite(11,0);

        //delay(20);

        break;  

      case 4:                // 4이면 후진

        digitalWrite(8,0);

        digitalWrite(9,1);

        digitalWrite(10,0);

        digitalWrite(11,1);

        //delay(20);

        break;    


    }      

   }

}

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


작동 영상


'아두이노_프로세싱 > 아두이노' 카테고리의 다른 글

LCD 쉴드 자작  (0) 2013.04.25
말하는 도트매트릭스  (2) 2012.12.22
아두이노 포토인터럽터  (0) 2012.08.24
도트매트릭스(dot matrix) 제어 2  (0) 2012.06.27
도트매트릭스(dot matrix) 제어 1  (3) 2012.06.27

아두이노간 xbee통신

프로그램 버전 : Arduino - 1.0

아두이노끼리 유선은 물론

xbee를 통해 무선통신이 가능하다.

한쪽 아두이노에서 센서 또는 스위치 등으로 신호를 받고

그신호를 다른 아두이노에서 받아 처리하여 출력하는 형식이다.

간단하게

우노에서 스위치를 누르면 숫자 5를 xbee를 통해 날리고

메가에서 숫자5를 받아 출력하는 식으로 구성해보면

우노의 배선

스위치 입력은 11번에 연결하고

xbee 쉴드 장착



우노의 스케치 소스

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

#include <SoftwareSerial.h>
SoftwareSerial xbeeS(2,3);   //xbee 통신을 위해 구성
void setup(){
  xbeeS.begin(9600);     //xbee 통신 시작
  pinMode(11,INPUT);    //11번을 스위치 입력
  pinMode(13,OUTPUT);
}
void loop(){
  if(digitalRead(11)==LOW){
    digitalWrite(13,HIGH);
    xbeeS.write(5);      //스위치 입력이 있으면 xbee에 5를 보냄
  }
  digitalWrite(13,LOW);
}

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

신호를 받을 메가의 배선



메가에서의 스케치 소스

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

int a;
void setup(){
  Serial.begin(9600);     //시리얼 통신 0번 pc와 통신
  Serial3.begin(9600);   //메가는 하드웨어적으로 시리얼 통신을 0~3번까지 제공하므로

//소프트웨어적으로 시리얼 통신을 구성할 필요 없다.

                                  // 통신할 통신장치를 1~3번에 연결하고 사용하면 된다.

                                  // SoftwareSerial을 구성하면 통신이 잘 안됨???
  pinMode(13,OUTPUT);
}
void loop(){
  if(Serial3.available()>0){
    a = Serial3.read();          //xbee의 값을 저장
    if(a==5){
       digitalWrite(13,HIGH);
       Serial.println(a);          // 값을 시리얼 모니터에 출력
       }
  }
  digitalWrite(13,LOW);
}

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

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와 연결 되었다.)


+ Recent posts