본문 바로가기

Arduino

Arduino + IRLED + motion (아두이노 IRLED로 간단한 모션인식)






Sky vega광고..얘는 왼쪽 오른쪽을 어떻게 구별하는걸까.. 서..설마 카메라?




리모컨 만들때 쓰이는
IRLED와 적외선수신부를 이용하면 무척 저렴하게
근접 센서와 물체 감지센서를 구현할 수 있습니다. (물체가 있다 없다 정도만...)


물체감지는 IRLED와 센서를 송신 수신 라인을 마주보도록 구성해놓고
그 사이에 물체가 있을경우 수신이 안되므로 판단할 수 있고,

근접센서는 송.수신부를 같은 방향으로 구성해놓고,
송신한 적외선이 물건에 부딪혀 수신부에 들어오는 여부를 판단해서
근접한 물건이 있는지 없는지 알 수 있습니다.

아두이노로 IRLED를 이용한 근접 센서를 테스트해보고...
저 스카이베가 광고가 생각이 나서 센서 두개를 구성해서 간단한 모션인식을 만들어봤습니다.

IRLED는 SI5312-H
수광부는 KSM-603LM5ND

각각 600원, 120원으로 엘레파츠에서 구입.. 싸다 싸..

이미 Arduino를 위한 IR송수신 라이브러리가 존재하므로 그것을 이용 
http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html  

근접 센서로서 테스트를 해보니 대략 7cm이내로는 인식이 잘 됩니다.




요렇게 두개 연결
(수신부에 잡음없애려면 회로를 더 구성해야하지만 단순 있다 없다만 판단하면 되므로 다 무시)




왼쪽에서 오른쪽인지, 오른쪽에서 왼쪽인지 구별하기 위한 스케치 작성.
원래는 수신부를 thread를 써서 하려고 했는데 IR library 와 동시에 사용하는게 불가능해 보여서
(고치는게 능력밖 ;;)
아래와 같이 단순한 코드로 작성 했습니다.
각각의 경우에 1과 2를 시리얼로 뿌려줍니다. 

#include <IRremote.h>

#define PIN_IR 3
#define PIN_DETECT1 5
#define PIN_DETECT2 6
#define PIN_STATUS 13

IRsend irsend;
void setup()
{
  Serial.begin(9600);
  
  pinMode(PIN_DETECT1, INPUT);
  pinMode(PIN_DETECT2, INPUT);
  pinMode(PIN_STATUS, OUTPUT);
  irsend.enableIROut(38);
  irsend.mark(0);
}

void loop() {
  int i = 0;
  int pr1 = digitalRead(PIN_DETECT1);
  int pr2 = 1;
  
  if (pr1 == 0) {
    while (i < 100) {
      delay(10);
      pr2 = digitalRead(PIN_DETECT2);
      if (pr2 == 0) {
        //Serial.println("Right -> Left");
        Serial.println(1);
        delay(100);
        break;
      }
      i++;
    }
  }

  i = 0;
  pr1 = 1;
  pr2 = digitalRead(PIN_DETECT2);
  
  if (pr2 == 0) {
    while (i < 100) {
      delay(10);
      pr1 = digitalRead(PIN_DETECT1);
      if (pr1 == 0) {
        //Serial.println("Left -> Right");
        Serial.println(2);
        delay(100);
        break;
      }
      delay(10);
      i++;
    }
  }
}


 
근데 시리얼로 뿌려만 주면 재미 없으니까!!
우분투 compiz화면 효과와 연동시켰습니다.

Linux쪽 프로그램은 단순 시리얼 프로그래밍에 key event 발생시키는 유틸을 써서 했어요.
(이것도 처음에는 BT장치로 하려고 했었는데 시간이 걸려서 우선 시리얼로 해봤습니다.)




결과

 

요런기능을 쓸일이 없다는게 함정.









  • Favicon of http://www.chinawholesaletown.com/ BlogIcon China Wholesale 2012.04.07 15:04

    good blog

  • help 2012.06.05 13:15

    모션인식 따라해보려고 하는데요..
    도움좀 주실수있으신가요..

  • dustnekdk 2012.06.11 18:19

    dsd

  • PantyUP 2012.06.11 18:20

    아두이노 모션인식에 관심이 많은 대학생 입니다^^;; 한번 따라 해봤는데 자꾸 에러가 나서 작동이 잘 안되네요 ㅠ.ㅠ 혹시 회로도를 알려주시면 공부하는데 많은 도움이 될꺼 같습니다. pantyup@naver.com 입니다. 감사합니다~

  • help2 2012.06.11 19:09

    학교 과제로 아두이노로 모션인식 관련된걸 해야합니다. 그래서 이리저리 자료를 찾다보니 이렇게 유익한 글이 있네요. 하지만 막 대학생을 달고 교수님도 아두이노에 관해 가르쳐 주지 않은 상태에서 무작정 할려니 하나도 모르겠습니다. 그러니 해당 블로그 내용에 나와있는 화면 넘기는 기능에 관한 자료좀 보내주실수 있으세요? 메일은 dustnekdk@naver.com 입니다.

  • Favicon of https://printk.tistory.com BlogIcon Pulse@ 2012.06.14 11:25 신고

    갑자기 자료요청 하시는 분들이 많네요.
    우선 아두이노로 Led 켜보는것부터 한번 해보세요. 저 회로 연결한건 led 대신에 송신부 연결한것하고
    회로가 거의 동일합니다. 저항은 110 짜리 두개씩 쓴거구요.
    수신부는 부품 데이터 시트를 한번 보시길... 전원 접지 신호핀 3개를 각각 아두이노랑 연결 하면 됩니다.

    리눅스 관련 유틸은 crikey 다운받아서 compiz 화면 돌리는 단축키인 alt+ctrl+방향키로 설정하면 됩니다.

  • 도도콩 2012.06.25 19:18

    수고 많으 싶니다. crikey 유틸은 어디서 받아야 하나요? ㅜㅜ 아무리 우분투 센터에 검색을 해도 안나오네요ㅜㅜ joongundo@naver.com입니다. 연락 기다릴께요!

    • Jj 2012.06.26 10:46

      http://www.shallowsky.com/software/crikey/

      여기서 다운받으시면 됩니다.

  • 아돌이 2014.02.14 12:15

    안녕하세요
    이 홈페이지 하나만 보고
    아두이노를 구입해 회로 구성및 컴파일까지 끝냈습니다.
    시리얼 모니터에도 1,2 숫자가 뜨며 반응을 하고 있습니다.

    "리눅스 관련 유틸은 crikey 다운받아서 compiz 화면 돌리는 단축키인 alt+ctrl+방향키로 설정하면 됩니다."

    남은것은 이 부분인데 이해가 가지 않습니다.