이미 소개해 드렸던 촬영된 이미지를 JPEG 포멧으로 압축하여 시리얼통신으로 전송해주는 카메라를 PC와 직접 연결하여 테스트해봤습니다. 시리얼 통신으로 촬영된 데이타를 전송해주므로 시리얼통신을 지원하는 모든 기기에 연결 가능합니다. 게다가 JPEG 이미지 포멧으로 압축하여 전송을 해주므로 저장만 해주면 PC에서도 그대로 확인이 가능해집니다. 본 동영상에서는 USB to 시리얼 변환기를 통해 PC와 연결한 뒤, 기본 제공되는 PC 용 테스트 프로그램을 이용하여 실시간 이미지 전송과 Single Shot(한장촬영) 기능을 테스트 및 해상도와 전송속도 조절기능도 사용해봤습니다.
PC와 연결 구성
PC USB포트<-> USB 케이블 <-> USB to Serial FTDI 변환기 <-> TTL Serial JPEG Camera
아두이노와 전자회로를 배울때 가장 먼저 해보는것이 LED ON/OFF 제어인데요, LED 대신 IRED(적외선 LED)를 장착하고 마치 모르스 부호같이 규칙에 맞쳐 ON/OFF를 해주면 복잡한 데이타도 송수신이 가능합니다. 여러분이 매일 사용하고 계신 TV같은 가전기기가 바로 이렇게 눈에 보이지 않는 빛을 통해 제어되고 있습니다. 이 기술을 잘 활용하면 여러분의 아두이노로 리모콘을 대체하거나 반대로 리모콘 명령에 따라 동작하는 아두이노 기기의 제작이 가능합니다.
본 글을 통해 아래의 적외선 송수신 기본회로를 소개해 드리고 실제로 리모콘으로 조정되는 로봇을 아두이노로 제어하는 방법도 안내해 드리겠습니다
1. 초간단 적외선 송신 회로 2. 고출력 적외선 송신 회로 ( 5미터 이상의 장거리? 전송가능) 3. 리모컨 신호 수신 회로
1. 초간단 적외선 송신 회로
그림1.의 회로를 보시면 바로 아시겠죠? 네, 일반적인 LED를 켤때 사용하는 회로와 동일하게 연결하면 됩니다. 차이점이라면 보통 IRED는 대부분의 LED보다 좀더 저 전압에서 구동된다는 점입니다. 따라서 일반 LED보다는 조금더 큰 저항을 사용하면 됩니다. 저항값이 작으면 좀더 IRED를 밝게 켤 수 있지만 대신 IRED와 아두이노에 무리가 갈 수 있으므로 적당한 저항값을 선정해주시면 됩니다. 하지만 정답은 없습니다. 예제에서는 560옴 저항을 사용하였습니다.
예제에 사용된 IRED 규격: 정격 1.36V , 최대 1.7V, 피크주파수 940nm, 화각+-20도
5V 전압을 가할 경우, I= V/R 공식을 참고하시면 약, 9mA 전류가 흐를 수 있음을 계산으로 예상할 수 있습니다. 아두이노의 경우 핀 한개에서 출력할 수 있는 전류허용량은 20mA에 불과합니다. 초간단 회로로 광신호 도달 거리가 짧을 경우 그림2. 와 같은 고출력 전송회로를 사용하면 됩니다. 위 예제에선 아두이노 디지탈3번 핀을 통해 ON/OFF 제어를 하게됩니다. 참고로, 디지탈 3번핀은 PWM 출력을 지원해주는 핀중 하나입니다.
2. 고출력 적외선 송신 회로
본 회로는 보통의 가전기기 제어용 리모콘에서 사용되는 회로입니다. 수십에서 수백 mA의 고출력 송신이 가능하므로 비교적 원거리(5미터 이상)로 광신호를 전송할 수 있습니다. 이를 위해 트랜지스터를 사용하는데요 아두이노에서 저 전류 제어로 ON/OFF를 제어하고 실제로 IRED에 전류공급은 트랜지스터가 담당하여 비교적 큰 전류를 사용할 수 있게 됩니다. 그림2.를 참고하여 회로를 구성하시면 됩니다. 여기서 R1은 330옴 R2는 1옴을 사용하였습니다. 실제로 테스트 해본 결과 방이나 거실 전역에서 방향에 상관없이 신호전달이 되는것을 확인했습니다. 기본 제공되는 리모콘보다 더 고출력인것 같네요;; (사실 본 회로에 5V는 조금 과할 수 있습니다. 아두이노와 함께 사용하실 경우 5V 대신 3.3V 전압을 사용하면 좋습니다.)
예제 회로의 경우 일시적으로 매우 큰 전류가 흐르게되지만 매우 짧은 시간동안만 구동되므로 전체적인 전류소모율은 적은 편입니다. 참고로, 상용 리모콘의 경우 미작동중엔 sleep모드로 대기하다가 버튼이 눌리는 순간 깨어나서 IR송신 후 다시 잠에 들게 되므로 건전지 2개로 수개월씩 작동이 가능합니다. 회로도로 잘 이해가 가지 않으신 분들은 아래의 실제 연결된 사진을 참고하시기 바랍니다.
사진1. 고출력 IR 송신회로 실제 구성예
3. 적외선 수신 회로
적외선 송신측 IRED의 피크 주파수와 일치하는 파장의 포토트랜지스터나 포토다이오드를 이용하여 수신부 구현이 가능합니다. 하지만 우리주변엔 다양한 파장의 빛들이 가득차 있으므로 노이즈에 해당하는 빛신호를 차단하고 원하는 광신호만 추출해주는 필터회로가 있어야 실용이 가능해 집니다. 리모콘 수광 모듈은 이를 위한 소자와 필터회로가 일체화된 제품으로 매우 손쉽게 특정 파장 및 주파수의 빛 신호에 반응하는 수신기로 활용할 수 있습니다.
예제에 사용된 적외선 수광모듈 사양: 감응되는 빛의 파장: 940nm , 빛 신호의 주파수: 38KHz
참고로, 적외선 송신시 사용된 IRED가 850nm 파장의 빛을 출력한다면, 수광모듈도 850nm 용으로 맞쳐줘야 수신률이 높아집니다. 마찬가지로 빛 신호의 캐리어 주파수(가령 38KHz)도 송/수신 모듈이 일치되어야 합니다. 예제에선 940nm 피크 파장의 IRED와 940nm형 수광모듈을 사용하였으며, 캐리어 주파수는 38KHz로 맞췄습니다.
IR 수광 모듈의 연결법도 매우 간단하며 (그림3을 참고) 전원만 공급해주고 VOUT단자로 출력되는 신호를 참고하기만 하면 됩니다. 다만, 전원 입력부에 노이즈가 있어 문제가 되는경우라면 전원 입력부에 저항과 콘덴서를 이용하여 노이즈를 감쇄시켜줘야 합니다. (보통은 생략이 가능합니다. 필요한 경우 관련자료에서 IR수광모듈 데이타 시트를 참고하시기 바랍니다.) 위 회로에서는 VOUT 출력을 아두이노 디지탈11번 핀에 연결하여 신호를 감지하는 경우를 가정하였습니다.
아두이노로 적외선 신호 송신 및 수신하기 - 프로그래밍 편
위에서 소개해드린 방법으로 하드웨어 준비는 간단히 끝났습니다. 이제는 아두이노로 리모콘 제어 신호를 발신하기 위해선 전송규약에 맞쳐 ON/OFF제어가 필요한데 많은 분들에게 쉽지 않은 과제입니다. 따라서 전용 라이브러리를 활용하시면 좋은데요 공개된 아두이노 라이브러리들을 둘러보시고 적절한것을 선택하시면됩니다. 본 글에선 IR Remote 라는 라이브러리를 참고로 하였습니다. IR Remote 라이브러리의 경우 IR 송신을 위해서 D3핀을, 수신을 위해서 D11핀을 기본으로 사용하고 있습니다.
IR Remote 라이브러리로 적외선 리모콘 신호 발신하여 로봇 원격 제어하기
이제는 실제로 리모콘으로 제어되는 로봇을 아두이노로 제어해 보도록 하겠습니다.
제어대상: 원격제어 6족보행 로봇 전송프로토콜: 유사 NEC 코드 전송부 회로: 그림1. 또는 그림2 의 회로 모두 사용 가능
if (Serial.available() > 0) { // read the incoming byte: incomingByte = Serial.read(); // say what you got: Serial.print("I received: "); Serial.println(incomingByte, DEC); Serial.flush(); } switch( incomingByte){ case 56: //forward irsend.sendNEC( 0xc5000000, 8); //전진 break; case 50: //backward irsend.sendNEC( 0x45000000, 8); //후진 break; case 52: // turn reft irsend.sendNEC( 0x25000000, 8); //좌회전 break; case 54: // turn right irsend.sendNEC( 0x85000000, 8); //우회전 break; case 53: //stop 정지 , 아무신호도 안 보내면 정지합니다. break; } delay(500); // 0.5초를 주기로 반복 }
아두이노에 위 소스를 프로그래밍 하신 뒤 시리얼 모니터 창을 여시고, send 입력란에 아래의 해당 숫자키를 입력한 뒤 엔터를 입력하여 전송해줍니다.
전진
8
후진
2
좌회전
4
우회전
6
정지
5 or 기타키 or 그냥 엔터
가령, 전진을 하려면 숫자 8을 누르고 엔터를 쳐주면됩니다. 중지하려면 5번을 누르고 엔터를 치면됩니다.
소스 해석: 시리얼 포트를 통해 값이 전송되면 첫번째 바이트 값을 읽고 이값에 따라 방향제어 변수값을 수정합니다. 또한 이값은 별도의 입력이 없는경우 그대로 유지되므로 매번 순환루프 마다 보관해둔 방향제어 변수값에 따라 리모콘 신호를 발신하게 됩니다.
방향 제어 명령을 유선 시리얼 통신으로 받는 대신, 무선으로 전송 하거나 조이스틱이나 버튼 또는 센서를 이용하여 변화시켜주면 전파를 이용한 로봇제어나 자율이동형 로봇의 제작도 가능합니다.
동영상1. 실행 예제 보기
키보드 숫자를 입력후 엔터를 치면 시리얼통신으로 아두이노에 전송되고 이 값에 따라 적절한 리모콘 신호를 보내어 로봇을 제어하게됩니다. 본래 적외선은 사람 눈으로는 보이지 않지만 대부분의 카메라로는 볼 수 있습니다. 동영상 후반부를 보시면 광신호가 약 0.5초에 한번씩 송출될때 로봇이 움직이고, 신호가 없으면 로봇이 멈추는것을 확인하 실 수 있습니다.
끝으로, 온갖 가전기기들이 리모콘으로 제어되고 있습니다. 이는 아두이노로 제어할 수 있는 기기들이 많다는 뜻이기도 한데요 여러분은 어떤 기기를 제어해 보시겠습니까? 가령 저렴하게 구입이 가능한 리모컨 제어되는 MP3플레이어로 말하는 로봇 만들기도 가능합니다. 아래의 관련글에서 좀더 세부적인 리모콘 프로토콜 정보도 참고하시기 바랍니다.
즐거운 DIY 생활 보내시길!!
관련 제품 링크
.무선제어 6족보행 로봇
.아두이노 UNO
.적외선 무선통신킷
기타정보 링크 .아두이노로 무선제어 6족보행 로봇 제어하기 63 .말하는 로봇 만들기( 적외선 리모콘 프로토콜 ) 31 .IR수광모듈 데이타시트(첨부파일 참조)