본문 바로가기
Arduino(아두이노) IoT 키트 강좌

Arduino XBee Shield 와 XBee Adapter 를 사용해서 XBee 통신으로 아두이노에 배선 된 SG90 마이크로 서보모터 제어해 보기

by 오마이엔지니어 2018. 8. 9.
반응형


Arduino XBee Shield 와 XBee Adapter 를 사용해서 XBee 통신으로
아두이노에 배선 된

SG90 마이크로 서보모터를 제어해 보는 프로젝트 입니다


아두이노는 여러가지 방법으로 무선통신(Bluetooth 또는 Wifi 등)을 할수 있습니다
그중에 Zigbee 는 다른 무선통신 방법에 비해 낮은비용과 저전력 2.4Ghz 주파수를 사용한 근거리 무선통신
이라는 특징이 있습니다
Zigbee는 저전력 모듈이기때문에 배터리의 크기를 축소할수 있게 하여 소형화가 쉽습니다
때문에 긴 배터리 수명과 보안성을요구하는 분야(무선 조명, 교통관리 시스템, 근거리 저속통신, 산업용 장치 등)에서 간단한 데이터 전송을 하는데 유용하게 사용되고 있습니다


FTDI 또는 CH340 드라이버를 사용하는 Arduino Uno 호환보드 (한국 또는 중국에서 생산하는 우노 호환보드는 대부분 FTDI 드라이버를 사용하고 있습니다)의 경우 XBee Shield 장착후 XBee 모듈을 연결했을때 X-CTU에서 비교적 디바이스 검색이 원활하게 진행이 됩니다
다만 Italy 정품 Uno (Arduino.org) 는 우노의 경우 우노에 업로드된 스케치를 초기화 해 주어야만 X-CTU에서 디바이스 인식이 가능합니다 
Italy 정품 Uno의 USB쪽 칩에 호환보드에 라이팅 되는 동일한 구버전의 펌웨어 또는 Arduino.cc 의 펌웨어를 라이팅해 주면 사용이 가능하지만 ISP장비가 필요하며, 굉장히 번거로운 작업이기 때문에 가능하면 Uno 호환 보드를 사용하길 권장합니다

<아두이노 우노 스케치 초기화 방법 - 위 이미지의 스케치 코드를 업로드 해주면 됩니다>
아두이노 IDE를 최초에 실행하면 나오는 코드이기도 하며 또는 아두이노 IDE 실행후 "파일--->예제--->Basic--->Bareminimum"
예제를 불러와서 스케치 업로드 해 주어도 됩니다

Arduino XBee Shield
Arduino Uno R3 호환보드
Orange Board (네패스 코코아팹)


오마이엔지니어에서 판매중인 위 두가지 보드로 이상없이 X-CTU에서 동작 테스트를 확인하였습니다


XBee USB Serial Adapter 를 사용하기 위해서는 FTDI 드라이버를 설치해 주어야 합니다 

XBee USB Serial Adapter

FTDI 드라이버 다운로드 하기

http://www.ftdichip.com/FTDrivers.htm


*어떤 FTDI 드라이버를 받아야 할지 모른다면 아래의 순서대로 진행 합니다*
DX22 드라이버 다운 링크를 클릭합니다

D2XX drivers please click here

셋업파일을 다운받아서 설치합니다(윈도우용)
WHQL Certified. Includes VCP and D2XX.
Available as a setup executable

XBee 모듈간 통신을 하려면 X-CTU 소프트 웨어가 필요 합니다

Digi 사 에서 다운로드가 가능합니다 하단 링크에서 각자의 OS에 맞는 다운로드 받아서 설치 합니다


X-CTU 소프트웨어 다운로드 하기

http://www.digi.com/products/xbee-rf-solutions/xctu-software/xctu

간단하게 이름, 회사, 연락처, 이메일 주소등만 적으면 다운로드가 가능합니다

테스트 방법
먼저 아두이노 우노에 시리얼 통신으로 서보모터를 제어하는 예제 파일을 업로드해 줍니다

사용된 예제파일

XBee Servo.txt


  //XBee 모듈을 이용한 서보모터(SG90) 제어
#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출
#include "Servo.h" //서보 라이브러리
 
int blueTx=0;   //Tx (보내는핀 설정)
int blueRx=1;   //Rx (받는핀 설정)
SoftwareSerial mySerial(blueTx, blueRx);  //시리얼 통신을 위한 객체선언
String myString=""; //받는 문자열
Servo myservo; //서보객체
 
void setup() {
  Serial.begin(9600);   //시리얼모니터
  mySerial.begin(9600); //시리얼 개방
  pinMode(13,OUTPUT);   //Pin 13을 OUTPUT으로 설정 (LED on/OFF)
  myservo.attach(12);   //서보 시그널 핀설정
  myservo.write(0);     //서보 초기각도 0도 설정
}
 
void loop() {
  while(mySerial.available())  //mySerial 값이 있으면
  {
    char myChar = (char)mySerial.read();  //mySerial int형식의 값을 char형식으로 변환
    myString+=myChar;   //수신되는 문자열을 myString에 모두 붙임 (1바이트씩 전송되는 것을 모두 붙임)
    delay(5);           //수신 문자열 끊김 방지
  }
 
  if(!myString.equals(""))  //myString 값이 있다면
  {
    Serial.println("input value: "+myString); //시리얼모니터에 myString값 출력
   
    if(myString=="1")  //myString 값이 'on' 이라면
    {
      digitalWrite(13, HIGH); //LED on
      myservo.write(90);     //각도 90도로 움직임
    } else if(myString=="2") {
      digitalWrite(13, LOW);  //LED OFF
      myservo.write(0);   //각도 0도로 움직임
    } else {
      for(int i=0;i<5;i++){
        digitalWrite(13, HIGH); //LED on
        delay(300);
        digitalWrite(13, LOW);  //LED OFF
        delay(300);
      }
    }
    myString="";  //myString 변수값 초기화
  }
}


예제는 위 첨부된 파일을 확인해 보면 알수 있듯이 간단합니다
서보모터 핀모드 12번이고 시리얼 통신 1 를 입력하면 서보모터가 90도로 회전하고, 2 를 입력해서 서보모터가 0도로 회전하는 예제입니다
시리얼 통신 속도는 9600 이며, 기본 SoftwareSerial.h , Servo.h 라이브러리를 사용합니다
사실 원본은 블루투스 통신 서보제어 예제인데 이를 토대로 테스트 하면서 통신 부분과 서보 회전각도 등 약간 수정을 해 보았습니다
(XBee 통신으로 정상적으로 테스트 되었고 첨부파일은 위에 첨부하였습니다)

아두이노에 스케치 업로드가 끝났으면 XBee를 XBee Shield 에 장착 합니다 (방향을 주의해서 장착합니다, 방향은 XBee Shield PCB에 XBee

모양이 그려져 있습니다, 잘 살펴보고 모양과 맞게 장착합니다)

테스트를 할때 XBee Shield 스위치 설정은 XBEE로 설정하고 테스트를 진행합니다~

XBee 는 기본 Digi사의 기본 클래식 XBee XB24-AWI-001사용하였습니다
본 테스트에서 꼭 위의 XBee를 사용해야 하는것은 아닙니다
최근 클래식 모듈이 단종되고 동일한 기능의 통신거리가 확장 된 신버전 XB24CAWIT-001 이 출시 되었습니다 (동일하게 테스트 가능합니다)
XBee 는 모듈간 직접 통신 하는 방식과 중계 통신 하는 방식 등에 따라서 여러가지 모델로 나뉩니다
각자의 프로젝트에 맞게 선별해서 사용하면 되겠습니다



구성배선도


위의 그림처럼 두개의 XBee를 Arduino Uno 와 적층 된 XBee Shield 와 XBee Adapter 에 장착후 컴퓨터에 연결합니다
배선은 위 그림을 참조해서 배선하면 됩니다 서보모터 빨간색선은 XBee 쉴드의 5V, 갈색선은 GND, 주황색선은 12번 핀에 배선하면 됩니다

(XBee Shield 의 스위치 설정은 XBEE로 향하도록 합니다)

FTDI 드라이버가 정상적으로 설치가 되어있다면 장치관리자에 시리얼 포트가 인식 됩니다
XBee Shield 에 장착된 XBee 포트가 COM185 이고 XBee Adapter 에 장착된 XBee 포트가 COM4 입니다


컴퓨터에 설치된 X-CTU를 실행 합니다

아래와 같이 실행화면이 나옵니다



아래 그림처럼 왼쪽 상단의 XBee 모듈 모양의 돋보기 버튼을 눌러 시리얼 포트를 스캔해서 찾아 줍니다


그럼 아래 그림처럼 COM4 과 COM185 에 연결 된 2개의 포트를 찾은것을 확인할수 있습니다


Next 를 눌러서 시리얼 포트 설정 단계로 넘어갑니다

아래 그림 처럼 시리얼 포트 설정을 해주고 Finish 버튼을 눌러 줍니다 (Baud Rate 는 꼭 9600 으로 설정합니다)


아래 그림 처럼 시리얼 포트 COM4 에 연결 된 한개의 디바이스가 검색되는것을 확인할 수 있습니다

포스팅 상단부에서도 설명 했지만 아두이노에 어떤 스케치가 업로드 되어 있는경우 X-CTU 에서 장치 검색이 안됩니다

(아두이노 우노에 시리얼 통신 예제를 업로드 한 상태이므로 아두이노 우노에 적층 된 엑스비 쉴드에 연결 된

XBee는 X-CTU에서 당연히 장치 검색이 안됩니다)
모두 선택 후 Add selected devices 눌러 줍니다 (1개만 선택 되겠습니다)

 

위 그림처럼 XBee Adapter에 연결 된 COM4 포트의 한개의 디바이스가 추가 되었습니다~

X-CTU 의 상단 오른쪽 모니터 모양의 메뉴를 선택해서 창 전환을 합니다


왼쪽의 접속 버튼을 눌러서 통신 접속을 해줍니다



콘솔창에 숫자 1 를 입력하면 아두이노에 배선된 서보모터가 90도로 회전하고
콘솔창에 숫자 2 를 입력하면 아두이노에 배선된 서보모터가 0도로 회전합니다
(숫자를 입력하고 엔터를 칠 필요는 없습니다 숫자를 입력하고 기다려 주면 딜레이 타임에 맞춰서 데이터가 전송됩니다)


이런 방법을 활용해서 XBee 통신으로 아두이노에 연결 된 LED, 센서, 모터 등등의 다양한 모듈을 제어할 수 있습니다

프로젝트 동영상


XBee Servo.txt
0.0MB
반응형

댓글