티스토리 뷰

    릴레이는 아주 다양한 곳에 사용 가능합니다. 릴레이를 사용하면 아두이노로 더 높은 전압의 일반 전자제품을 켜고 끌 수 있습니다. 예를 들면 선풍기나 히터 같은 제품을 아두이노로 켜고 끌 수 있습니다. 저희는 직접 전자제품을 켤 때 손으로 스위치를 누릅니다. 아두이노 회로에서 이 스위치를 누르는 역할을 하는 것이 릴레이라 보시면 됩니다.

    이번 예제에서는 스마트 건조기를 만든다고 가정해 보겠습니다. 습도에 따라 릴레이가 동작하는 로직입니다. 습도만 가지고 동작하면 재미없으니 아래와 같이 조금 복잡하게 해보겠습니다.

1) 물건이 들어오면 릴레이 동작 (초음파센서 10cm 거리 이하에 감지되면 동작)

2) 습도가 높으면(50% 이상) 릴레이 계속 동작, 습도가 낮으면(50% 이하) 5초만 동작하고 릴레이 끔


<그림 1> 초음파센서와 습도센서로 동작하는 릴레이 완성 모습


​​​​부품 설명: 릴레이

    이번 예제에서는 가장 단순한 형태의 릴레이를 사용했습니다. 아래 릴레이 사진을 보면 아두이노와 연결되는 부분(5V 전압)과 가전제품과 연결될 스위치부분(고전압)이 있는 것을 알 수 있습니다. 

- 아두이노 연결부: 릴레이와 아두이노의 Vcc, GND를 연결합니다. IN 단자에는 아두이노에서 신호를 줄 핀과 연결하면 됩니다. 신호가 없을 때는 스위치가 열린 상태(Open)이고 신호가 있으면 닫힌 상태(Close)가 됩니다. 

- 가전제품 연결부: NO, COM, NC라 적혀있습니다. 가전제품 전선 하나를 끊어서 한 개는 COM에 연결하고 나머지는 NO 또는 NC에 연결합니다. 

NO(Normal Open): 평소에는 연결 안 되어 있다가 아두이노에서 릴레이로 신호를 주면 연결(Close)됩니다. 대부분 예제에서 NO를 사용한다고 보시면 됩니다. 어떤 조건이 되면 아두이노에서 신호를 줘 꺼져있는 가전제품을 켤 때 사용할 수 있습니다. 

NC(Normal Close): 평소에는 연결 되어 있다가 아두이노에서 릴레이로 신호를 주면 분리(Open)된다. 예를 들어 안전 스위치를 만든다고 가정해 봅시다. 온도가 위험수준까지 높아졌을 때 강제로 꺼지는 전기히터를 만들 때 사용할 수 있습니다.

* 릴레이의 작동원리와 가전제품과 연결하는 방법은 아래 글을 참고바랍니다.

[아두이노] 릴레이 사용하기


<그림 2> 아두이노용 릴레이


완성 회로도


<그림 3> 초음파센서와 습도센서로 동작하는 릴레이 완성된 회로도


완성된 코드

#include <DHT.h>  //온습도센서 라이브러리 사용
#define RELAY 8             //릴레이와 연결된 8번 핀
#define DHTPIN 5          //습도센서와 연결된 6번 핀
#define DHTTYPE DHT22 //습도센서 종류 DHT22
#define TRIG 2 // 초음파센서 TRIG 2번핀 할당
#define ECHO 3 // 초음파센서 ECHO 3번핀 할당

DHT dht(DHTPIN, DHTTYPE);
float hum;
float temp;
   
void setup()
{
  Serial.begin(9600);
  pinMode(RELAY, OUTPUT);
  pinMode(TRIG,OUTPUT); // 초음파센서로 아두이노가 송신
  pinMode(ECHO,INPUT);  // 초음파센서를 아두이노가 수신
  dht.begin();
  delay(2000);
}

void loop()
{
  hum = dht.readHumidity();//(온습도)온도값 읽기
  temp= dht.readTemperature();//(온습도)습도값 읽기
  digitalWrite(TRIG,LOW); //(초음파)
  delayMicroseconds(2); //(초음파)
  digitalWrite(TRIG,HIGH); //(초음파)
  delayMicroseconds(5); //(초음파)
  digitalWrite(TRIG,LOW); //(초음파)

  long distance = pulseIn(ECHO,HIGH)/58; // 초음파 간격   

//릴레이 동작. 1)물건이 들어오면 5초간 릴레이 동작, 2) 5초뒤에 습도가 50이상이면 계속 동작, 3)습도가 50이하면 정지
  
  if(distance < 10 && hum > 50){
    digitalWrite(RELAY, HIGH);
  } else if(distance < 10 && hum < 50){
    digitalWrite(RELAY, HIGH);
    delay(5000);
    digitalWrite(RELAY, LOW);
  } else if(distance > 10){
    digitalWrite(RELAY, LOW);
  }
}

* '&&'는 AND 게이트 입니다. 여기서는 '거리가 10cm이하 그리고 습도가 50% 이상이면' 형태로 사용됐습니다. 

* 여기서 사용되지 않았지만 OR 게이트는 ' || ' 입니다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함