반응형

스위치를 다뤄 본 김에 릴레이(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 는 무시하도록 하는 것입니다. 



잘 동작 합니다. ^^



반응형

+ Recent posts