성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>아두이노에서 적외선 송신기 기본 사용법</h1> <p> 지난 글에 IR 수신기를 알아봤으니, <br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 아두이노에서 적외선 수신기 기본 사용법 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11670'>http://www.sysnet.pe.kr/2/0/11670</a> </pre> <br /> 이제 당연히 그 수신했던 데이터를 송신해 볼 차례입니다. ^^ 이를 위해 송신기에 사용한 부품 먼저 소개합니다.<br /> <br /> <img width='200px' alt='Infrared_led.jpg' src='/SysWebRes/bbs/Infrared_led.jpg' /><br /> <br /> 구매 링크는 다음과 같습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 아두이노 KY-005 적외선 발광 센서 모듈(AS0164) ; <a target='tab' href='http://arduinostory.com/goods/goods_view.php?goodsNo=1000000164'>http://arduinostory.com/goods/goods_view.php?goodsNo=1000000164</a> 제조사: 애니벤더 원산지: 중국 사양: 펄스 순방향 전류: 0.3 ~ 1A 역방향 전압: 5V 온도 범위: -25 ~ +80 크기: 가로 19mm x 세로 15mm </pre> <br /> 역시 별다른 datasheet가 없는데요, 동일하진 않지만 유사한 모델로 보이는 다음의 문서를 찾을 수 있어 사용하는데 지장은 없습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > KY-005 Infrared Transmitter Module ; <a target='tab' href='https://arduinomodules.info/ky-005-infrared-transmitter-sensor-module/'>https://arduinomodules.info/ky-005-infrared-transmitter-sensor-module/</a> Operating Voltage 5V Forward Current 30 ~ 60 mA Power Consumption 90mW Operating Temperature -25°C to 80°C [-13°F to 176°F] Dimensions 18.5mm x 15mm [0.728in x 0.591in] </pre> <br /> 게다가 Pin 배치 역시 <a target='tab' href='지난 IR 수신기'>지난 IR 수신기</a> 때와 비슷하므로,<br /> <br /> <table ext="true" style="border: 1px solid black"> <tr> <td>KY-005</td> <td>Arduino</td> </tr> <tr> <td>S</td> <td>Signal</td> </tr> <tr> <td>Middle</td> <td>+5V</td> <tr> <td>-</td> <td>GND</td> </tr> </table> <br /> 이에 맞게 배치를 하면 됩니다.<br /> <br /> <img alt='ir_send_1.png' src='/SysWebRes/bbs/ir_send_1.png' /><br /> <br /> 보는 바와 같이 제 경우에는 Signal 핀을 아두이노의 13번 핀에 연결하고 추가로 4번 핀을 Push 버튼으로 입력받는 용도로 했습니다. 즉, Push 버튼을 한 번 누르면 IR 송신을 하도록 만들고 싶은 것입니다. 여기서 주의할 것은, IR 송신을 위한 핀이 아두이노의 CPU에 종류에 따라 이미 정해져 있다는 것입니다. (기본 핀을 바꾸려면 헤더 파일의 코드를 변경해야 합니다.) 이에 대해서는 IRRemote 라이브러리의 readme에 자세하게 나와 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > z3t0/Arduino-IRremote ; <a target='tab' href='https://github.com/z3t0/Arduino-IRremote'>https://github.com/z3t0/Arduino-IRremote</a> </pre> <br /> 제가 테스트하는 아두이노 레오나르도 호환 보드는 Atmega32u4를 사용하기 때문에 "Atmega32u4 5, 9, <b>13</b>"에 해당하고 이 중에서 굵은 글씨로 되어 있는 13번을 따른 것입니다. 이제 코딩을 해야 하는데요, 지난번과 동일하게 <a target='tab' href='https://github.com/z3t0/Arduino-IRremote'>IRRemote 라이브러리</a>를 포함한 다음 <a target='tab' href='http://www.sysnet.pe.kr/2/0/11670'>이전에 수신해 두었던 데이터</a>를,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 33E09F86 Unknown encoding: 33E09F86 (32 bits) Raw (26): 3550 -1750 600 -400 600 -1800 550 -450 600 -450 600 -1800 550 -450 600 -450 600 -500 600 -450 600 -400 650 -400 550 </pre> <br /> (Unknown 인코딩이므로) Raw 데이터 그대로 전송하면 됩니다 따라서 이것을 음수 표현 없이 다음과 같이 배열로 만들어 줍니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > #include <boarddefs.h> #include <IRremote.h> #include <IRremoteInt.h> #include <ir_Lego_PF_BitStreamEncoder.h> const int buttonPin = 4; const int khz = 38; <span style='color: blue; font-weight: bold'>IRsend irsend;</span> <span style='color: blue; font-weight: bold'>unsigned int light_onoff_signal_buf[] = { 3550, 1750, 600, 400, 600, 1800, 550, 450, 600, 450, 600, 1800, 550, 450, 600, 450, 600, 500, 600, 450, 600, 400, 650, 400, 550 };</span> </pre> <br /> 그다음, 이것을 4번 핀에 연결한 버튼이 눌린 경우 sendRaw 함수를 이용해 전송하면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > void setup() { Serial.begin(9600); pinMode(buttonPin, INPUT_PULLUP); // <a target='tab' href='http://www.sysnet.pe.kr/2/0/11605'>풀업 모드의 입력</a> } void loop() { int buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { } else { Serial.println("Sent"); <span style='color: blue; font-weight: bold'>irsend.sendRaw(light_onoff_signal_buf, sizeof(light_onoff_signal_buf) / sizeof(int), khz);</span> } delay(1000); } </pre> <br /> 우와~~~ 정말 형광등이 꺼졌다 켜졌다 합니다. ^^<br /> <br /> <a target='tab' href='http://www.sysnet.pe.kr/bbs/DownloadAttachment.aspx?fid=1358&boardid=331301885'>첨부 파일은 이 글의 전체 소스 코드와 회로 그림에 대한 원본 fzz 파일</a>이 들어 있습니다. 또한 아래는 KY-005 Infrared Transmitter Module에 대한 Fritzing 부품 파일입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > KY-005 Infrared Transmitter Module Zip File ; <a target='tab' href='https://arduinomodules.info/download/ky-005-infrared-transmitter-module-zip-file/'>https://arduinomodules.info/download/ky-005-infrared-transmitter-module-zip-file/</a> </pre> <br /> <hr style='width: 50%' /><br /> <br /> 참고로, <span style='text-decoration: line-through'>실습을 해보면 아시겠지만 "<a target='tab' href='http://arduinostory.com/goods/goods_view.php?goodsNo=1000000164'>아두이노 KY-005 적외선 발광 센서 모듈(AS0164)</a>"의 기능이 그리 훌륭하지 않습니다.</span> 제 경우에 약 3m부터는 IR LED의 방향이 (아주) 정확히 수신 센서의 방향을 향해야만 동작을 했습니다. 따라서 처음 테스트할 때는 동작 유무 확인을 위해 수신 센서 근방에서 하는 것이 좋습니다. 집에서 전등 On/off를 하는 리모컨에 달린 IR 송신기와 비교해보면, 일상적으로 사용하기에는 불편할 정도라는 것을 알 수 있습니다. <span style='text-decoration: line-through'>테스트 용이 아닌, 현실적으로 응용하고 싶다면 저 부품이 아닌 다른 걸로 선택하시는 것이 좋을 것입니다.</span><br /> <br /> 재미있는 것은, 이 글의 회로도에는 Vcc 입력 핀을 아두이노의 5V 핀과 연결했지만 사실 그 입력은 IR 송신기에서 사용하지 않습니다. IR 송신 보드를 자세히 보면 그 핀이 아무런 역할도 하지 않음을 알 수 있습니다. 즉, 그냥 5V 입력 핀을 연결하지 않아도 됩니다. (그렇게 따지면 IR LED는 아두이노 입력 핀의 3.3V 전압으로 작동했다는 이야기가 됩니다.)<br /> <br /> 제가 가지고 있는 IR 송신기의 보드 일체형이 아닌 단품으로 된 제품이 있는데, 일반 LED처럼 다리가 2개 달린 IR LED입니다. 따라서, Signal + GND 핀만 의미가 있는 것입니다. 아래는 단품 IR LED와 5V 전압을 컬렉터 입력으로 <a target='tab' href='http://www.sysnet.pe.kr/2/0/11659'>PN2222A 트랜지스터</a>를 이용해 증폭을 한 것으로,<br /> <br /> <img alt='ir_send_2.png' src='/SysWebRes/bbs/ir_send_2.png' /><br /> <br /> 성능이 좀 더 나아집니다. <span style='text-decoration: line-through'>그런데, 집에 있는 형광등 리모컨이 3V(1.5V 건전지 2개)에서 동작함에도 불구하고 확실히 "<a target='tab' href='http://arduinostory.com/goods/goods_view.php?goodsNo=1000000164'>아두이노 KY-005 적외선 발광 센서 모듈(AS0164)</a>" 제품보다 훨씬 송신 감도가 좋습니다. (아마도 송신기의 제품 차이가 있는 것 같습니다.) 이를 감안하면 기존 리모컨을 대체하는 용도로는 현재의 부품 구성으로는 사용 측면에서 답답함이 좀 있습니다.</span><br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
2614
(왼쪽의 숫자를 입력해야 합니다.)