2016년 6월 26일 일요일

아두이노 입출력 확장 보드

이 글은 아두이노 입출력 확장보드에 대한 글이다.
레퍼런스는 다음과 같다.
아두이노 확장보드는 다중 모터 구동, 통신 등 다양한 기능을 하나의 보드에 합쳐 놓고, 관련 센서나 액추에이터의 입출력을 손쉽게 하려는 목적에서 개발된 보드이다. 아두이노 확장보드는 몇가지 변종이 있다. 여기서는 많은 센서와 모터가 필요한 로봇, 로버 개발에 편리한 아두이노 입출력 확장 보드를 다룬다.

1. IO Expansion Shield For Arduino (V5) (SKU: DFR0088)
이 보드는 DFRobot IO expansion board로 알려져 있다. XBee를 지원한다. 아울러, SD카드를 제공해 기능적 확장이 가능하다. 이 보드 다음과 같은 기능을 가진다.
  • Motor driver
  • Digital input / output
  • Analog PWM
  • RS485
  • Xbee
  • Bluetooth
  • APC220(쉬운 무선 통신 지원 장치. UART/TTL 인터페이스 지원. 1km 장거리 통신)
  • SD card read/write


다음 그림은 DFR0088의 다이어그램이다 (XBee 혹은 Bluetooth 장치가 중간에 마운팅되어 있다). 오른쪽 위에 디지털 핀(GND, VCC, D) 13쌍, 오른쪽 아래에는 아날로그 핀(GND, VCC, S) 6쌍을 지원한다. 이외에 중앙에 통신 지원 핀, 우측에 RS485 핀, 왼쪽 위/아래에 서버 파워 팀을 지원하고 있다.

다음 다이어그램은 쉴드 기능을 좀 더 상세히 보여주는 그림이다.


다음은 블루투스 장치를 이용해, 간단히 Serial 로 데이터를 입력받는 블루투스 입력 코드 예 이다. 이를 위해, HC-05, HC-06과 같은 블루투스 장치를 앞의 그림에 보이는 APC220 Bluetooth 단자의 RX, TX, GND, VDD에 연결해야 한다. 연결하면, 시리얼 포트 연결은 안되므로, 먼저 다음 코드를 아두이노 보드에 전송한 후, 블루투스를 연결하자. 

int ledPin = 13;

void setup()
{
  Serial.begin(115200);              // start serial communication for Bluetooth
}
  
void loop() {
  if( Serial.available() )           // if data is available to read
  
     val = Serial.read();            // read it and store it in 'val'
   digitalWrite(ledPin, HIGH);
   delay(500);
   digitalWrite(ledPin, LOW);

   delay(500);
     Serial.println("Data received") // Send info back
  }
}

당연히, 블루투스 통신을 위해서는, 블루투스를 페어링할 수 있는 안드로이드 스마트 폰이나 패드가 있어야 한다 (보통, 암호는 1234이다). 제대로 페어링 된 후, Bluetooth Terminal과 같은 프로그램으로 글자하나를 보내 보면, 13번 핀에 연결된 LED가 한번 점멸할 것이다.

다음은 RS485 송신 코드이다.

int EN = 2; //RS485 has a enable/disable pin to transmit or receive data. Arduino Digital Pin 2 = Rx/Tx 'Enable'; High to Transmit, Low to Receive
void setup()
{
  pinMode(EN, OUTPUT);
  Serial.begin(19200);
}
void loop()
{
// send data
  digitalWrite(EN, HIGH);//Enable data transmit
  Serial.print('A');
  delay(1000);
}

다음은 RS485 수신 코드이다.

int ledPin = 13;
int EN = 2;
int val;
void setup()
{
  pinMode(ledPin, OUTPUT);
  pinMode(EN, OUTPUT);
  Serial.begin(19200);
}
void loop()
{
  // receive data
 digitalWrite(EN, LOW);//Enable Receiving Data
 val = Serial.read();
  if (-1 != val) {
    if ('A' == val) {
      digitalWrite(ledPin, HIGH);
      delay(500);
      digitalWrite(ledPin, LOW);
      delay(500);
    }
 }
}

2. Nexus duino I/O expansion 60008
이 글에서는 지난 시간에 언급한 Nexus 4WD Mecanum Wheel Kit 로버 (rover)에 사용한 IO Expansion Shield V1.2 for Arduino 아두이노 확장보드에 대해 다루도록 한다.

이 보드는 다음과 같은 특징이 있다.
  • XBee header
  • 1 servo external power supply terminal
  • 8 analog IO port and power
  • PWM interface
  • RS485 interface
  • Wireless data-transmission interface
  • Module size 53 x 70mm
  • Weight 33.5g
이 보드는 센서, 서보, RS485 디바이스를 연결하는 것이 쉽다. 이 보드는 아두이노 메가, 아두이노 두에밀라노베(Arduino Duemilanove) 등과 호환된다.

3. 마무리
이 글에서는 아두이노 확장 보드를 간단히 다루어 보았다. 이 확장보드는 로봇, 로버 등을 개발하기 용이하도록 되어 있어, 개발 생상성과 품질을 높여준다.