'아두이노 적외선 통신'에 해당되는 글 1건

  1. 2017.01.21 형광등 적외선 리모컨으로 키고 끄기

ATtiny85 를 제대로 굴려볼 때다.


아두이노 첫번째 프로젝트.


형광등 리모컨 제어기.


요즘 겨울이라 방바닥이 많이 춥다.


저녁에 컴퓨터 앞에서 작업을 하거니 침대에서 놀다가 자려고 하면


불을 꺼야한다.


하지만 스위치는 .... 집 입구에 있다.


물론 세발자국도 안되지만


이 추운 겨울 방바닥을 자기전에, 그리고 일어나서 한번식 밟은 고통을 아는가.


그래서 나는 그 고통을 기술로 극복하기로 했다.




우선 형광등을 떼어 AC-DC 컨버터를 얹을 자리를 찾았다.


안정기 커버 윗부분이다.


저 조그만한 컨버터가 국내가로 3500 원이다.


알리에서 사면?


하나에 1달러던가.


앞으로 이 AC-DC 5V 700mA 컨버터는 아주 유용하게 많이 써먹을것같으니 알리에서 한무더기 사는걸로.


릴레이도 같이. 온 집안을 자동화 시켜보자.



릴레이는 당연히 들어갈 줄 알았는데


생각보다 높다.


눞여야지 딱들어맞는다.


안타깝게 저런 식으로 빼야한다.


배치는 대충 끝났으니 제작에 들어간다.



우선 5051 커넥터 두쌍을 준비한다.


하나는 파워, 하나는 릴레이에 사용된다.



이번에 인두 팁을 구매했다.


HAKKO 사의 팁인데 


내 인두는 JAYA 라는 생소한 브랜드 제품이다.


그런데 자세히 보니 팁이 빠질것 같다.


분해해보니 빠진다.


그리고 HAKKO-900M 시리즈의 구조랑 굉장히 비슷한걸 느끼고 찾아본다.


호환된다. 팁이 사이즈가 정확히 같다.


JAYA ZD-70A 제품이 생활마트에 많이 풀린 제품으로 알고있는데


구매하신 분들은 HAKKO 팁과 호환이 가능합니다.



인두 스탠드도 함께 구매. 어렸을 적 부터 가지고 있던 스탠드가 군대 갔다와서 안보이다. 아마 군대가기 전에 아버지께 인두와 함께 드린 것 같다.



메인기판을 조립해본다.


정말 별거 없다. ATtiny85 하나, 5051 숫놈 두개, IR 센서 하나 가 들어간다.


지금은 소켓과 커넥터 조립중.



VCC 라인을 강조하기 위해 빨간 테프론선으로 작업해줬다.


칙칙한 작업풍경에 홍일점 아닌가!



IR 센서는 이렇게 밖으로 빼꼼 내밀고 있는 모양으로 만들것이다.



이제 전원부를 작업해보자.


우선 5051 클림프가 작업되어있는 와이어를 이용해 연결해준다.


사진은 기판에 납땜전 납 코팅을 위해 집어둔 것.



이렇게 극성을 잘 보고 색상을 맞춰(빨간색 + / 검은색 -) 연결해준다.


이 제품의 경우에는 반대편 캐패시터를 조금 들춰내야 극성 표시가 보인다.


반대쪽 AC 전원을 위해 AC 전선을 준비해준다.


사실 이만큼 두꺼울 필요가 있나 싶지만....


DC 만 주로 만지는 전자공돌이에게 AC 는 막연한 두려움을 안겨준다.


일단 안전빵.



전원부 테스트. 잘 들어온다.



이제 릴레이를 작업해보자.


이 릴레이(1-pole)는 총 다섯개의 핀이 있다.


NO        +

COM

NC-        - 


NO 는 Normal Open. 전원이 인가되지 않으면 떨어져 있고,(OFF) 인가되면 붙는다,(ON)


NC 는 Normal Close. NO의 반대다.


COM 은 공통단자. 


즉, 전원이 안들어가 있는 상태면 전류는 COM 으로 들어와 NC 로 흘러나간다.


전원이 인가되면 COM 으로 들어와 NO 로 흘러나간다.


그럼 대충 어떻게 연결하는지 감이 잡히시는가?



대략적인 모양이다.



테스트 영상. 잘된다.



릴레이에 마저 작업을 해준다. COM 단자에 AC 전선을 하나 연결해준다. 이 선이 천장에서 나오는 전선과 직접 연결이 될것이다.


그리고 높이가 안맞아서 역시 못쓸 뻔 했던 터미널 블록도 릴레이에 붙여서 써준다.



접착은 순접으로 해줬고, 다리를 굽혀 직접 납땜해줬다.


두 단자 모두 사용이 가능하다.


추후 추출해서 다른곳에 응용하게 되면 나머지 한 단자를 써먹을 일이 있지 않을까.



이제 접착에 들어간다.


마지막으로 위치 한번 봐주고, 



3M 폼 양면테잎으로 붙여준다.



그럼 이렇게 네가닥의 AC 라인이 삐져나온다. 


AC-DC 컨버터에서 나온 두 선은 각각 다른 천장라인에, 안정기 선은 하나는 릴레이 터미널에, 하나는 천장 라인에 물려준다.



터미널 다리가 너무 휑하게 나와있어 블루택으로 절연을 해줬다.


저번에 마프 작업할때 쓰던 전기테이프가 온 집안을 다 뒤집어도 안나온다.


전기테이프는 항상 사면 일주일도 못가서 사라지는것 같다.



센서와 메인기판을 올려주고,



릴레이와 컨버터의 커넥터를 연결... 해주면 되는데.... 선 길이가 짧다...


릴레이가 맞으면 컨버터가 안맞고, 컨버터가 맞으면 릴레이가 안맞고....


결국 컨버터 배선을 좀 옮기기로 한다.



다시 커넥터 부분을 분리해서 다른곳으로 넣어준다. 가운데로 옮길 생각이다.



이제 잘 맞는다. 릴레이도 연결했고, 컨버터도 연결했다.


그리고 마지막으로 AC 커넥터에 물려준다.


구겨넣어버리기


최종점검.


아름답게 켜지고 꺼진다.


아주 만족스럽다.



설치후 몇번은 릴레이가 작동하지 않았다.


그래서 풀어헤쳐보면 또 되고... 설치하면 또 안되고.


야밤에 핸드폰 플래시 하나로 차단기 켰다 껐다 ㅎㅎ...


세번의 재설치 끝에 제대로 작동한다.


어두울때 키는건 정상적으로 작동한다.


그런데 끌때는 꽤나 가까이 가서 눌러줘야한다.


형광등이 켜져서 밝아서 그런지 리모컨이 출력이 약해서 그런지 모르겠는데


생각한것만큼 침대에 누워서 컨트롤을 할 수 있을 정도는 아니다.


 

빼꼼


만약 모르는 사람이 본다면 몰래카메라나 도청장치라고 오해할 만 한 비주얼이다.


저 금속 쉴드가 주변의 자기장인지 전기장인지를 차단 해 줘서 IR 리시버의 감도가 좋아지게  해준다고 한다.


다음에 한번 다시 뜯어서 업데이트를 해줘야 겠다..


동작 확인 LED 를 심어줄 예정. 그래야 고장인지 아닌지 아니까!


그리고 기회가 된다면 고출력 리모컨으로 바꿔야 겠다. 그게 진정한 의미의 리모트 컨트롤 전등일테니까.



2017-04-01

소스 추가


IRRemote 라이브러리 파일.

IRremote_light.zip


1. 리모컨의 버튼 값 알아내기

/*

 * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv

 * An IR detector/demodulator must be connected to the input RECV_PIN.

 * Version 0.1 July, 2009

 * Copyright 2009 Ken Shirriff

 * http://arcfn.com

 */


#include <IRremote.h>


int RECV_PIN = 11;


IRrecv irrecv(RECV_PIN);


decode_results results;


void setup()

{

  Serial.begin(9600);

  irrecv.enableIRIn(); // Start the receiver

}


void loop() {

  if (irrecv.decode(&results)) {

    Serial.println(results.value, HEX);

    irrecv.resume(); // Receive the next value

  }

  delay(100);

위의 코드는 IRRemote 라이브러리에 있는 예제 IRRecvDemo 이다.

적외선 센서를 연결하고 리모컨의 버튼을 눌러주면 신호값을 시리얼 모니터로 띄워준다.

이 예제로 적외선을 사용하는 리모컨은 모두 주소값을 알아내 아두이노를 제어할 수 있게 된다.


위의 예제로 알아낸 내 리모컨 세개의 버튼의 주소값은 

0 = 0xFFA25D, 1 = 0xFF629D, 2 = 0xFFE21D 이다.

이제 예제를 조금 수정하여 소스를 만들어보자.


#include <IRremote.h>

int RECV_PIN = 3; //적외선 센서 수신 핀 변수지정

int RELAY = 4; // 릴레이 제어 핀 변수지정


IRrecv irrecv(RECV_PIN);

decode_results results;

int tmp; // IRremote 라이브러리 함수


void setup()

{


  irrecv.enableIRIn(); // Start the receiver

  pinMode(RELAY, OUTPUT);//릴레이 제어 핀 = 출력

  pinMode(RECV_PIN, INPUT);// 적외선 센서 수신 핀 = 입력

  digitalWrite(RELAY , HIGH); //초기값을 ON 으로 설정해준다. 이 구문이 없으면 리모컨을 사용할 수 없는 상황에서 한번꺼진 형광등을 다시 켤 방법이 없어진다.

}

void loop() {

  if (irrecv.decode(&results)) {

    tmp = results.value;


    switch (tmp) {

      case (0xFFA25D): digitalWrite(RELAY, HIGH); break;//0버튼이 눌리면 LED ON

      case (0xE318261B): digitalWrite(RELAY, HIGH); break;

      case (0xFF629D): digitalWrite(RELAY, LOW); break;//1버튼이 눌리면 LED OFF

      case (0x511DBB) : digitalWrite(RELAY, LOW); break;

      case (0xFFE21D) : digitalWrite(RELAY, digitalRead(RELAY)^1); break;//2버튼이 눌리면 LED ON/OFF 토글

      case (0xEE886D7F) : digitalWrite(RELAY, digitalRead(RELAY)^1); break;

    }

    delay(200);

    irrecv.resume(); // Receive the next value

  }

여기서 빨간 부분에 못보던 값이 있을것이다.

분명 0번 의 버튼값은 0xFFA25D 라고 했는데 밑에 뭐가 하나 더있다.

저건 나도 왜그런진 모르겠는데 일정 확률로 0xE318261B 값이 뜬다.

그래서 둘중 하나라도 수신되면 켜지도록 하였다.


나머지 버튼도 비슷하게 하나의 값이 더 수신이 되어 두개씩 넣어주었다.


요즘 요걸로 아주 편안한 생활을 하고 있다.







Posted by 에르키스틴 트랙백 0 : 댓글 0