아두이노로 제어하기 좋은 로봇을 찾아오다 얼마전 드디어 쓸만한 녀석을 발견했습니다.

바로 무선제어 6족보행 로봇이란 제품입니다.





6족 보행로봇으로 전진,후진,좌회전,우회전이 가능하며 제공되는 적외선 리모컨을 통해 무선 조정이 가능합니다.
여러대의 로봇을 동시에 조정할 수 있도록 점퍼세팅으로 총 6대의 로봇을 동시에 조정할 수 있게 제작되었습니다.
조립도 간단하고 접착제같은건 사용하지 않아 신속하고 깔끔하게 제작이 가능합니다.

왜 좋은가?

1. 저렴한 가격
2. 손쉬운 제작 ( 8세이상 조립가능, 납땜불필요)
3. 손쉬운 아두이노 연동 가능( 전선 결합 불필요, 적외선 통신으로 제어)


조립시 필요한 것:
1.5V 알카리인 건전지 4개( 조정기용 2개, 로봇본체용 2개,  1.2V 충전지로도 잘 작동됩니다.)
스크류 드라이버

아두이노로 제어할 경우 필요한 재료:
 아두이노, IRED(적외선 LED) 1개,  저항 1개
(5미터 이상의 장거리 제어를 원하면 트랜지스터 1개, 저항 1개가 추가로 필요합니다.  관련글 링크 참고)


동영상1. 로봇 기본동작 보기

리모컨 제어로 전진, 후진, 좌회전, 우회전이 가능합니다.


아두이노로 제어하기

1. 하드웨어 준비
적외선 리모컨 신호를 아두이노 디지털 출력을 통해 출력하면됩니다.  이를 위해서 IRED(적외선LED) 1개와 저항 1개가 전부입니다.   원거리에서 제어하려면 트랜지스터를 사용해야 합니다.  연결방법은 일반 LED와 동일하게 저항1개와 함께 직렬 연결해주시면 됩니다.  본 예제에서는 PWM출력을 지원하는 아두이노 디지털 3번핀을 사용합니다.

리모콘 신호 전송을 위해 아두이노에 IRED 연결


IRED연결은 일반 LED 연결과 유사합니다.



2. 라이브러리 준비
적외선 리모컨의 역활을 아두이노가 대신하려면 여러분이 직접 38KHz의 캐리어 주파수에 수신기의 코드부호를 실어서 출력해주면 됩니다.  하지만 많은분들에게 쉽지 않은 도전과제이므로 천재적이면서 친절하기까지 하신 분들이 미리 만들어둔 라이브러리를 활용하여 비교적 손쉽게 아두이노로 리모컨 신호를 발신할 수 있습니다. 

아래의 링크에 가셔서 해당 라이브러리를 아두이노 스케치 library 폴더안에 복사하여 라이브러리 설치를 완료합니다.


위에서 준비해놓은 라이브러리는  RC5, SONY, NEC 코드 등의 송신 및 수신을 위한 기능이 제공되며 여기서는 NEC코드 발신 함수만 사용하면 됩니다. 리모컨 신호를 이용해 가전기기를 제어하는 것에 대해 일전에 소개해 드린적이 있는데요  이번에도 마찬가지로 코드부호를 스캔하여 해독한 결과 이 로봇도 NEC코드와 유사한 전송방식을 사용하는것을 알게되었습니다.
차이점은 데이타 전송폭이 짧다는 점과 반복표시용 코드를 사용하지 않는다는 것입니다. 

하지만 로봇제어를 위해 복잡한 내용은 모르셔도 상관 없습니다.  단지, 아래와 같은 함수 하나만 사용하기 때문입니다.


  irsend.sendNEC( codedata , nbits );   // codedata에 수신기용 코드값과   nbits에 코드값의 비트 수를 적어주면 됩니다.

위와 같은 함수로 해당코드값을 전송하면,  아두이노의경우 디지탈 3번핀에 해당되는 코드신호가 출력되고 이곳에 연결된 IRED를 통해 빛신호로 변환되어 출력되고  로봇에 내장된 적외선 수신기에서 해당 코드를 수신한뒤 대응되는 모터의 작동이 이뤄지게 되는 것입니다.


아래의 소스는 1초에 한번씩 전진, 후진, 좌회전, 우회전 신호를 발신하는 예제입니다.


#include <IRremote.h>

IRsend irsend;  

void setup()
{
// 특별한 초기화 설정이 불필요합니다.
}

void loop() {
   irsend.sendNEC( 0xc5000000, 8); //전진
   delay(1000);
   irsend.sendNEC( 0x45000000, 8); //후진
   delay(1000);
   irsend.sendNEC( 0x25000000, 8); //좌회전
   delay(1000);
   irsend.sendNEC( 0x85000000, 8); //우회전
   delay(1000);
  
}


위의 소스는 1초에 한번씩만 코드를 발송하므로 지속적으로 작동상태가 유지되지 않습니다. 따라서 만약 전진을 지속적으로 하려면 1초에 수회 정도 전진에 해당되는 코드를 반복하여 전송해야합니다. 


동영상2. 위 소스로 로봇 제어되는 장면

보통 이동형 로봇을 제작시 아두이노같은 마이크로콘트롤러 보드에 모터 구동 회로를 장착하고 모터 2개를 제어할 경우 방향제어를 위해 최소 4개의 전선을 연결하여 제어하게 됩니다. 이에 반해 본 로봇킷의 경우 모터 회로 구현이 이미 되어있는데다 전선의 연결이 불필요하고 빛으로 연결되어 있으므로 비용도 절감되고 제어도 간단해 질 수 있으므로 기초 이동형 로봇 제어 학습시 효과적으로 응용할 수 있는 방법으로 판단됩니다.  (물론 전용 모터드라이버 연결법이 더 다양한 제어가 가능합니다. 가령 속도조절이 가능함)

거리센서 등을 통해 주변 물체를 감지하고 회피하는 로봇의 제작이나  전파(Zigbee, Bluetooth, Wifi 등 활용)를 통한 무선통신으로 신호를 수신 받고 이를 광통신으로 변환하여 원격제어되는 로봇의 구현도 가능합니다.

게다가 수신모듈+모터드라이버 역활을 하는 제어기만 활용할 수도  있습니다.


사진. 리모컨 수신기 및 모터구동 드라이버 보드: 
좌측에 전원연결(2핀)부, 우측에 모터2개 연결부(4핀), 상부에 ON/OFF스위치,  하부에 리모컨 채널 조정용 헤더핀(6핀)이 있으며 가운데에 IR수광모듈이 보입니다.


기타.  작동중 오동작이 계속되면 건전지를 교체해 보시기 바랍니다.  모터 구동시 전력소모가 큰 편이므로 배터리 소모가 빨리 됩니다.


관련 제품 링크

 무선제어 6족보행 로봇

 아두이노 UNO

 적외선 무선통신킷



내용추가
2011.July.26 
아래의 관련글 링크에 리모콘 신호 송수신 회로와  PC에서 키보드 입력으로 로봇을 제어하는 소스 예제를 포함한 글을 새로 등록하였습니다. 참고하세요


관련글 링크

 .IR무선 리모콘 송수신 회로로 로봇 제어하기



로보밥 여름특집!!!   얼렁뚱땅 움직이면 쏘는 버블건을 제작했습니다.

아파트 계단이나 현관문에 많이사용되는 모션센서형 전등을 많이 보셨을 겁니다.   사람이 없을때는 미작동 되다가 다가오면 작동되므로 에너지 절약도 되고, 스위치 작동시키는 불편함도 없으므로 실생활에 매우 유용한 자동화 기기입니다.

이때 사용되는 센서가 PIR 근적외선 모션센서인데요 인체에서 방사되는 근적외선의 변화량을 감지하는 PIR센서가 들어있습니다. 아마도 많은 분들이 이를 응용하여 무언가를 만들고 싶어하실겁니다. 저도 마찬가지죠 ^^.   마침 며칠전 대형 할인점에 갔다가 버블건을 보고 좋은 응용예가 생각이 나서 만들어 봤습니다.

버블건의 원리는 모터의 회전시 물펌프로 비누액체를 뿜어올려주면서 동시에 팬으로 바람을 불어 비누방울을 날려주는 것입니다.  헉;;;  이 가격에 이런 기계를 만들어내는 분들에게 감사의 인사를 드리고 싶습니다 ^^.

모터 하나로 물펌프와 송풍용팬을 동시에 작동시키는 구조인데요, 보통 모터를 제어하려면 모터 드라이버를 사용하거나 릴레이를 사용하는게 정석일테지만,  이 버블건은 모터만 켜주면 되는건 아니고 방아쇠와 연결된 핸들이 비누액을 버블홀에 골고루 발라주는 역활을 하므로 반드시 방아쇠를 잡아 당겨줘야하는 구조였습니다.

음,,,   결국  서보모터 하나로 해결이 되었습니다.  그냥 손가락으로 당기듯이 서보모터를 작동시키는 방법입니다.
 단, 방아쇠의 스프링 장력이 좀 쌘것같아서 일부를 절단한 상태입니다.

버블건도 전등같이 하루 종일 켜져 있으면 효율적이지 않겠죠?!
항상 켜져있는것보다 사람이 곁에 있을경우에만 작동시킬 수 있으므로 효율적이며,  모르고 다가온 사람에게 놀라움을 선물할 수 도 있게됩니다. 


 

 

 





구현TIP
PIR 모션센서는 5V~12V에서 작동됩니다만,  9V이상의 전압에서 더 반응성이 좋습니다.  가령, 5V전원으로 사용시 감지된 뒤에 한동안 재 감지가 잘 되지 않는 현상이 있습니다.  9V전원을 사용후 이증상이 없어지는것을 확인했습니다.  즉, 수시로 감지되는 경우 9V이상의 전압으로 작동하시기 바랍니다.  단, 신호출력선은 아두이노에 입력해야 하므로 9V에 연결하시면 안되고 5V전원선과 10K옴 저항으로 연결해주셔야 합니다.


 

회로 연결 방법


아두이노 스케치 소스
#include <Servo.h>

const int ledPin = 13;
const int inputPin = 2;
const int posA = 90;
const int posB = 60;
Servo myservo;
unsigned long lastShotTime;

void setup(){
  pinMode(ledPin, OUTPUT);
  pinMode(inputPin, INPUT);
    myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  lastShotTime = millis();
  Serial.begin(9600);
}

void loop(){
  int val = digitalRead(inputPin);
 // Serial.println( val);
   delay(500);
   if(val){
     myservo.write(posA);
     digitalWrite( ledPin, LOW);
   }else{
    digitalWrite( ledPin, HIGH);   
    trigger();
   }
}

void trigger(){
  if((lastShotTime + 20000UL) < millis() ){
    readyShot();
  }
  longShot();
  lastShotTime = millis();
  Serial.println( lastShotTime);
}

void readyShot(){
  myservo.write(posB);
  delay(500);
  myservo.write(posA);
  delay(500);
  myservo.write(posB);
  delay(500);
  myservo.write(posA);
  delay(500);
  myservo.write(posB);
  delay(500); 
  myservo.write(posA);
  delay(500);   
}

void longShot(){
  myservo.write(posB);
  delay(3000);
  myservo.write(posA);
}

소스 소개
PIR 센서에서 움직임이 감지되면, 출력선의 전압신호가 High에서 Low로 떨어집니다. 이를 디지탈핀에서 감지하여 서보모터를 회전시켜서 버블건을 작동시키게 됩니다.   지정된 시간(20000ms, 20초)동안 미작동상태에서 작동될 경우, 초기 거품 생성을 위해 3회를 짧게 작동시킨 후 지정된 시간(3000ms, 3초)동안 작동 되도록 프로그램 되었습니다.


재료:
1. 버블건 4,000원 ~ 10,000원 정도 (문방구, 대형할인점)
2. 아두이노(Arduino) 
3. PIR 근적외선 모션센서 
4. 서보모터
5-1. 휴대형 전원 => 9V 배럴잭 + 9V 건전지 (알카라인 고급형)
5-2. 실내형 전원 => 9V 아답터 전원 

( 9V 전지는 알카라인 고급형을 사용하셔야 잘 작동됩니다. 저가 9V 망간전지로는 서보모터 작동이 잘 안되네요)

 

연결법 안내 사진추가(2012.6.10)
안내해드린 모션센서가 5V에서 작동시엔 감이 너무 느려서 답답하며 9V ~12V 전원을 사용해야 정상 작동이 됩니다. 이때 어떻게 연결을 해야하는지 문의가 많으셨는데요...  늦게나마  아래의 사진을 올려드리오니 참고하시기 바랍니다. 아두이노 전원이 9~12V 정전압 전원인경우 아래 그림과 같이 아두이노에 있는 Vin 단자로부터 전원출력이 가능하므로 편리합니다. 별도의 전원을 사용하실때는  Vcc와 GND에 별도전원을 연결하시고  꼭  아두이노+센서+전원의 GND를 공통 함께 연결해주시기 바랍니다. 



 

아두이노에 WaveShield를 얹히면 음악재생기가 됩니다.  여기에 9V 전지등을 연결해주면 곧바로 휴대형이 되는데요, 무공해 에너지를 사용하면 더욱 좋겠죠?!  그래서 건전지 없이 태양전지를 연결하여 구동해 봤습니다.  쨍쨍 비치는 태양에너지를 쓸모있게 활용하는데 태양전지만한게 없겠죠...  날씨가 좋은경우 그늘에서도 문제없이 구동되네요.  생각과 달리 태양전지는 흐린날에도 약간이지만 전기를 생산합니다.  눈으로 한번 보시죠,  여러분의 창작품에도 응용하시면 좋을것 같습니다.

 

 

 

동영상1.음원은 개구리 우는소리로 넣었습니다.  개구리 우는 소리가 제법 큽니다.   확인을 위해 태양전지를 뒤집자 개구리가 울음을 끄치네요 ^^.   다시 태양을 바라보자 소리를 내기 시작합니다.


동영상2. 이제 제법 여름 기운이 느껴집니다.  너무 덥죠!  그늘에서도 작동하는지 테스트 해봤습니다.  잘~ 나오네요..  낮잠잘때 배경음으로 딱 좋을것 같습니다.  공원 밴치등에 불필요한 전력없이 태양전지로 작동되는  자연의 소리를 넣어주면 좋을것 같습니다.

동영상3.공원에서 되돌아 오는길에 자전거 뒷자석에 태양전지를 달고, 달려오면서 음악을 감상해 봤습니다.   제법 좋네요 ^^.
건전지 걱정없고,  스위치도 필요없습니다.  실내에 들어오면 자연히 꺼지고요,  밝은 곳으로 이동하면 다시 자동 재생됩니다.  와우~ Wow!!





보통 볼 수 있는 피에조보다 비교적 큰, 직경 50mm의 피에조를 이용하여 LED를 켜봤습니다.  정말 켜집니다. ^^.



^^. 로보밥 얼뚱연구소에 또하나의 재밌는 제품이 들어왔습니다. 예전부터 이제품 찾는 분들이 많았는데 드디어 입수하게 되었습니다.
 자세한 소개이전에 일단 테스트 영상을 올려봅니다.

Adafruit Industries사의 아두이노용 웨이브 쉴드이며,  직접 납땜하여 조립하는 DIY형 제품입니다.
mp3플레이어의 경우 전용 하드웨어 코덱칩을 사용하곤 하는데요, 요제품은 걍 wav파일을 곧바로 DAC칩으로 재생해버리므로 코덱같은거 없습니다.  단점일수있지만 반대로 장점일 수 도있죠,
low level 의 wav데이타를 곧바로 DA로 변형후 OPamp로 증폭하여 출력합니다.
그리고, 사실 mp3 배우기 전에  wav부터 배우는게 순서가 맞을것 같습니다.
SD메모리 슬롯도 내장하여 용량문제없이 음악재생이 가능하고, SD메모리만 응용할 수도 있습니다.

아래의 예제는 sd메모리에 미리 넣어둔 wav파일 몇개를 지정된 키를 누를때마다 재생하는 예제입니다.
관련예제는 해당제품 안내페이지에서 모두 보실 수 있습니다.
기회가 되면 상세 리뷰도 소개해 드리겠습니다.

 

 

 

 

 

PCB와 조립용 부품이 제공되며 직접 납땜으로 완성시키는 DIY형 제품입니다.

 

+ Recent posts