아두이노2016. 6. 14. 18:15

스위치를 다뤄 본 김에 릴레이(Relay)까지 다뤄보기로 했습니다. 릴레이로는 지금까지 불쾌지수 및 온도에 따른 선풍기 켜기블루투스로 릴레이 제어 등등 많이 다뤄왔기 때문에 제 블로그를 즐겨보는 분들은 릴레이에 대해서 익숙하실 겁니다. 그래도 다시 설명을 해 보면 아두이노의 신호에 따라 전원을 제어하는 부품이라고 보시면 될 것입니다. 아두이노에서 전원을 켜시오! 라고 명령하면 릴레이가 딸깍 하면서 OFF 되었던 스위치를 켜 주는 것이죠. 일반적인 스위치는 사람이 손으로 조작해야 켜지거나 꺼지지만 릴레이는 전기적인 신호를 줄 때만 켜고 끌 수 있는 스위치인 것입니다. 이것을 일반적인 택트 스위치(Tact Switch)로 켜고 꺼 보려고 합니다. 사실 이전 글인 '스위치로 LED 토글하기' 에서 LED를 Relay 로 바꿔치기 한 것 뿐 입니다. 그래도 초보 분들을 위해서 아두이노와 스위치로 이런 것도 가능하다는 것을 보여 드리겠습니다.  릴레이에 대해서 더 알고 싶은 분들은 [여기] 를 클릭해 보시기 바랍니다.


제 블로그에서 릴레이가 나올 때마다 등장하는 그림 입니다.  릴레이로 220V 전원을 ON/OFF 하기 위해서는 위와 같이 생긴 전원코드가 필요 합니다. 220V용 전선, 플러그, 콘센트를 이용해서 만들어 주었습니다. 중간에 릴레이가 들어가서 전원을 끊거나 이어주는 역할을 합니다.


※ 주의: 이 글 에서는 전압과 전류가 높은 위험한 가정용 220V 전원을 다룹니다. 감전되면 위험하므로 만약 따라하실 경우 상당한 주의를 요합니다. 또한 릴레이 규격은 작은 전압 제어용부터 큰 전압용까지 매우 다양하므로 반드시 용도에 맞는 정격용량의 제품을 이용해야 합니다.



■ 연결


위와 같이 연결하고 릴레이에 220V 전원선의 한 쪽 끊어진 부분을 연결해 줍니다. (전원코드 그림 참조) 릴레이가 ON 되면 전원 플러그에 220V 전기가 흐르고 OFF 되면 전기를 끊어주게 됩니다. 릴레이의 ON/OFF 는 브레드보드에 달린 작은 Tact Switch 로 해 주게 됩니다. 한 번 누르면 켜지고 다시 누르면 꺼지는 동작 입니다.



연결은 위와 같습니다. 위의 2구 짜리 콘센트가 원래 전원이고 아래 3구짜리 콘센트가 릴레이와 연결되어 전기가 흐르거나 차단되는 콘센트 입니다. 여기에 USB 어댑터를 꼽고 USB 선풍기를 달아서 테스트를 했습니다. USB 선풍기가 아니라 어떤 장치를 연결하건 상관 없습니다. 



■ 소스


소스는 이전 글에서 LED 부분을 Relay 로 대체해 주었습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
int sw = 10;       // 스위치(SW) 핀 설정
int relay = 7;       // Relay 핀 설정
 
int state = LOW;      // Relay 상태
int reading;          // SW 상태
int previous = LOW;   // SW 이전 상태
 
long time = 0;        // Relay가 ON/OFF 토글된 마지막 시간
long debounce = 100;  // Debounce 타임 설정
 
void setup()
{
  pinMode(sw, INPUT_PULLUP); // SW 를 설정, 아두이노 풀업저항 사용
  pinMode(relay, OUTPUT);    // relay 설정
}
 
void loop()
{
  reading = digitalRead(sw);  // SW 상태 읽음
 
  //SW 가 눌려졌고 스위치 토글 눌림 경과시간이 Debounce 시간보다 크면 실행
  if (reading == HIGH && previous == LOW && millis() - time > debounce) {
    if (state == HIGH)    // relay 가 HIGH 면 LOW 로 바꿔준다.
      state = LOW;
    else                  // relay 가 LOW 면 HIGH 로 바꿔준다.
      state = HIGH;
 
    time = millis();
  }
 
  digitalWrite(relay, state);
 
  previous = reading;
}
 
cs


소스를 보면 Debounce 라는 개념이 들어갑니다. 스위치는 기계적인 장치이므로 켜거나 끌 때 기계적인 진동이나 접촉에 의해서 스위치가 짧은 시간에 여러번 ON/OFF 된 것으로 인식할 수 있습니다. 이런 현상을 Bounce 현상이라고 하고 이것을 없애 주는것이 Debounce 입니다. 즉, 소프트웨어 적으로 Debounce 시간을 설정해두고 이 시간보다 짧은 시간에 일어나는 스위치의 ON/OFF 는 무시하도록 하는 것입니다. 



잘 동작 합니다. ^^



반응형
Posted by 대네브 (deneb)

댓글을 달아 주세요

  1. 비밀댓글입니다

    2017.03.22 17:10 [ ADDR : EDIT/ DEL : REPLY ]
    • B64가 뭔지는 잘 모르겠구요.
      http://deneb21.tistory.com/222 글에 보시면 사용한 릴레이의 규격이 있습니다.
      최대 230V 10A 까지 컨트롤이 가능하니 안전하다고 봐야겠죠?
      암튼 규격에 맞게 사용하면 별로 위험하진 않을 겁니다.

      2017.03.23 00:01 신고 [ ADDR : EDIT/ DEL ]
  2. 이삭

    포스팅 잘보고 있습니다.
    220v 멀티탭을 릴레이용으로 만들려고 하니까 220v 전선이 문제가 되네요. 220v 전용 전선은 두껍고 다루기
    힘들어서 보니까 데네브님께서 쓰신 220V 전선이 220v 전용선이 아닌 것 같아서요.
    LED배선 연장전선 2P 투명선으로 쓰면 안될까 생각하고 있었는데, 여기 포스팅에서 릴레이 멀티탭이 쓰신 전선이 뭔지 알 수 있을까요?
    제가 집에 가지고 있는 220v 멀티탭이 옛날것이 있는데 그건 LED배선 연장전선 2p선 같이 생긴 것으로 돼 있더라구요.
    그래서 2p전선을 써도 스탠드하나 정도 키는데는 무리가 없을 것 같아서요. 조언 부탁드립니다.
    혹시나 제가 얘기한 2P전선에 대한 설명이 부족할 수도 있어서 관련 사이트 주소 남깁니다.
    http://smartstore.naver.com/grinmax/products/2316188695?NaPm=ct%3Djg2xs92g%7Cci%3De02b35c2996c14ec31c0d7380ccbc7f2aff671e5%7Ctr%3Dsls%7Csn%3D192111%7Chk%3Db893ceb3855898cdd4a5334d7ff1e944f8005f6b

    2018.04.17 09:37 [ ADDR : EDIT/ DEL : REPLY ]
    • 네 전용선은 아니에요. 테스트용으로 만들었던 거라서요. 실제 사용할 것을 만드신다면 반드시 220v용 전선을 이용하세요. 규격은 전선 피복에 쓰여있습니다

      2018.04.17 10:06 신고 [ ADDR : EDIT/ DEL ]
  3. 이삭

    어떻게 저도 가느다란 선으로 만들어 볼까 했는데 데네브님께서 220v 전용선으로 쓰라고 못박아 버리시니
    저도 잔머리 굴리지 말고 220v 전용선을 쓰겠습니다. 감사합니다.

    2018.04.17 12:12 [ ADDR : EDIT/ DEL : REPLY ]
  4. 시난

    안녕하세요. 기계공학과에 재학중인 학부생입니다.
    현재 종합설계 작품을 제작중인데요.
    220V 콘센트에 연결된 전자제품을 타이머에 맞춰 ON/OFF 시켜야 하는데 이 포스팅을 보고 제어할 실마리를 찾은것 같아 진심으로 감사드립니다.
    하나 궁금한점이 있는데 저희가 제어해야할 제품이 진공청소기용 모터라서 정격이 1500W(220V) 짜리인데 . . . . 얘를 제어할수 있을지 여쭙고 싶습니다... 너무 많은 전류가 흘러서 타버리는게 아닌가 해서요 ㅠㅠ;
    혹시 1500W 정도도 제어 할수있는 릴레이가 있다면 어떤거를 사용해야할지 추천해주시면 정말로 정말로 감사드리겠습니다.

    2018.05.09 13:58 [ ADDR : EDIT/ DEL : REPLY ]
    • 릴레이 용량이 문제군요. 전자부품 쇼핑몰에서 용량별로 판매하고 있으니 적당한 용량 (A) 과 작동전압의 제품을 고르시면 됩니다. 제가 사용한 릴레이는 5v 전압으로 작동되지만 12v, 24v... 작동전압이 여러가지거든요.

      2018.05.09 14:11 신고 [ ADDR : EDIT/ DEL ]
  5. 답변 감사드립니다. !!
    디바이스 마트라는 쇼핑몰에서 골라봤는데 확인 한번 해주실 수 있으신가요?

    첫번째 후보 : http://www.devicemart.co.kr/1245658
    아두이노 호환된다고 쓰여있고 , 사진을 보니 7A 250VAC 라고 적혀있어서
    제꺼 모터가 1500W니까.. 220V 으로 나누면 7A 쯤 되거든요.. 그래서 괜찮지 않을까 생각했습니다.

    두번째 후보 : http://www.devicemart.co.kr/14522
    스펙이 DC INPUT 4~32V / AC OUTPUT 50~240V / 40A 이렇더라구요.
    아두이노에서 나온 신호는 DC 5V이고 output 은 220V쓸꺼고 전류는 40A 니까 이것도 괜찮을꺼 같은데..
    아두이노랑 연결이 되는지 모르겠어요..

    둘중에 어떤게 괜찮을지 한번 봐주시면 감사드리겠습니다.. ㅠㅠㅠ

    2018.05.14 17:26 [ ADDR : EDIT/ DEL : REPLY ]
    • 님이 글에 썼다시피 아두이노 출력 5v 에 동작하고 암페어가 받쳐주면 뭘 쓰든 상관 없습니다. 아두이노용이라고 따로 만들지는 않죠. 암튼 용량은 둘 다 괜찮아 보입니다.

      2018.05.14 22:47 신고 [ ADDR : EDIT/ DEL ]
  6. 시난

    감사합니다. :) 도움 많이 받고 갑니다.!!

    2018.05.15 05:57 [ ADDR : EDIT/ DEL : REPLY ]
  7. 곰세마리

    아두이노 릴레이 공부하다 우연히 들립니다
    죄송하지만 저는 버튼을 누르면 10초동안 전원이 연결되고 다시 차단되게 하려는데 저 소스에 어떻게 추가하면 될까요..?
    high 된 후에 딜레이 10초주고 그후에 다시 low 되게끔 소스를 어딘가에 추가하면 될거같은데.. 어려워서요ㅜ

    2020.06.08 16:47 [ ADDR : EDIT/ DEL : REPLY ]
  8. 곰세마리

    dc12 전원 제어도 올려주신 소스를 이용하면 제어가 가능할까요 하니면 따로 추가를 해줘야되거나 드라이버?를 설치해줘야할까요?

    2020.06.09 00:01 [ ADDR : EDIT/ DEL : REPLY ]