[아두이노] 릴레이 모듈+온도센서+DC모터 응용

IOT/아두이노|2019. 3. 28. 09:00

[아두이노] 릴레이 모듈+온도센서+DC모터 응용 



다른 주제로 포스팅을 끝냈는데 @ellenalee 님이 릴레이 모듈로 선풍기를 제어 해보셨다고 하셔서 이걸 한번 비슷하게 구현해보면 릴레이 모듈의 응용으로 괜찮을 것 같아서 가상시뮬레이터에서 느낌만 비슷하게 한번 구현해 보도록 하겠습니다.

1. 회로도 구성


  • 준비물 : relay DPDT 1개, DC Motor 1개, Temperature Sensor[TmP36] 1개, Power Supply, 아두이노우노
  • 내용 : 온도센서의 값에 의해서 모터가 회전할 수 있게 회로도를 구성해 보자.


대충 DC Motor가 선풍기라고 생각해 봅시다. 느낌은 그런데로 비슷해가 표현 했네요.

3. 코딩


  • 사용함수 : analogRead(), map()
  • 내용 : LED 깜박이는 소스를 이용해서 그 값을 제어값으로 해서 Light bulb 깜박이게 해보자.
  • 참고소스 : [아두이노] 온도센서(TMP36) 제어

복습

  • analogRead(아날로그핀) : 아날로그신호값을 읽음
  • map(입력값,입력최소값,입력최대값,출력최소값,출력최대값) : 입력값이 입력범위에 기준에 맞게 출력범위의 해당값을 출력.

변형함수(만든함수)

  • fmap(입력값,입력최소값,입력최대값,출력최소값,출력최대값) : map()함수와 동일하지만 자료형 타입을 float형으로만 변경했습니다. 계산값이 실수형 값이라서 map()함수를 사용하기가 애매해서 인자들을 전부 float형으로 변경했네요.

[ 온도센서 측정 소스 ]

[아두이노] 릴레이 모듈+온도센서+DC모터 응용
void loop(){
  float V =fmap(analogRead(A0),0,1023,0,5); //map함수 원리를 이용한 다이렉트 Voltage계산
   //공식
  //float V = analogRead(A0)*5.0/1023;
 
  float C = (V-0.5)*100;  //섭씨 C = (F-32)*1.8;
  float F = C*9.0/5.0+32; //화씨 F = C*1.8+32;
 
}

float fmap(long x, long in_min, long in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) /(float) (in_max - in_min) + out_min;
}

여기서 대충 온도 C변수 값에 따라서 릴레이모듈를 제어하면 되겠죠

[아두이노] 릴레이 모듈+온도센서+DC모터 응용
   if(C>35){    //35도 이상이면 참
     digitalWrite(2, HIGH); //스위치 켜라
  }
  else{
     digitalWrite(2, LOW);  //스위치 꺼라
  }  

끝! 간단하게 느낌만 살렸습니다.

전체적인 코드를 살펴보면,

[아두이노] 릴레이 모듈+온도센서+DC모터 응용
void setup()
{
  Serial.begin(9600);
  pinMode(7, INPUT_PULLUP);
  pinMode(2, OUTPUT);
}
void loop()
{
  
  float V =fmap(analogRead(A0),0,1023,0,5); //map함수 원리를 이용한 다이렉트 Voltage계산
  float C = (V-0.5)*100;  //섭씨 C = (F-32)*1.8;
  
  if(C>35){    
     digitalWrite(2, HIGH); 
  }
  else{
     digitalWrite(2, LOW);   
  }   
}

float fmap(long x, long in_min, long in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) /(float) (in_max - in_min) + out_min;
}

4. 결과


[ 35도 이하일때 ] : 그림에서는 25도 위치



[ 35도 이상일때 ] : 그림에서는 57도 위치


동영상을 찍어야 했지만 그냥 이미지로 간단히 차이점을 화살표로 표시 해 놨습니다. 25도일때는 0.00A로 전류가 흐르지 않는 상태이고 57도 위치에서는 79.9mA로 전류가 흐르는 상태입니다. 그 차이점으로 확인해주시기 바랍니다.

코딩에서는 35도 이상이면 모터가 회전되게 되어 있습니다. 실제 시뮬레이터로 돌아가는 장면을 보고 싶으면 공개되 회로도에서 바로 시뮬레이터를 실행 시켜서 그 결과를 확인 할 수 있습니다.


링크된 곳으로 가면 위 그림과 같은 창이 뜹니다. 거기서 1번 눌러주셔서 2번의 시뮬레이터 실행버턴의 창이 뜹니다. 그리고 2번을 누르시면 실행을 시킬 수 있습니다. 한번 온도조절을 해보시고 결과를 확인해 보세요.

마무리


상상이 어렵지만 표현은 그렇게 어렵지 않습니다. 매번 상상의 나래를 펼치라는 멘트를 날리는 이유가 바로 그 이유입니다. 온도에 따라서 선풍기를 자동을 켜볼까라는 상상력이 뭔가를 만들어 냅니다.

여러분들도 어떤 원리를 배우게 되면 그 원리에서만 멈추지 말고 상상력을 더해서 새로운 뭔가를 창조할 수 있는 능력을 키우시면 엄청난 결과를 얻을 수 있을 거에요.

언제나 그럴듯이 상상의 나래를 펼쳐 보세요.

댓글()

[아두이노] 릴레이 모듈 제어

IOT/아두이노|2019. 3. 27. 09:00

[아두이노] 릴레이 모듈 제어 



오늘은 릴레이 모듈을 제어하는 방법을 살펴보도록 하겠습니다. 아두이노는 기본적으로 5V 전류에 동작하는 싱글보드입니다. 그래서 5V이상의 전류를 다룰 수가 기본적으로 없습니다. 그걸 대신해주는 역할이 릴레이 모듈입니다. 높은 전압에 동작하는 전자기기를 아두이노가 릴레이 모듈을 사용하여 쉽게 제어가 가능합니다. 예로 선풍기, 에어컨, 남방기기, 현광등 외 높은 전압을 사용하는 전자기기를 제어할 수 있습니다. 릴레이 모듈은 동작은 기본적으로 스위치 역활을 연상하시면 됩니다. 이제 릴레이 모듈에 대해서 살펴보도록 하죠.

1. 릴레이 모듈


제가 가지고 있는 모델입니다. 아래 그림에서 주의할 점은 부품마다 아두이노 연결하는 핀 위치가 다릅니다. 이 부품은 가운데가 Vcc(5V) 이지만 어떤 부품은 가운데가 제어선인 경우도 있고요. 어떤 부품은 가운데가 Gnd핀인 경우도 있습니다. 실전에서는 사용하는 모듈 부품 정보를 토대로 주의해서 선을 연결하시면 됩니다. 그리고 제어 가능한 전류 표시는 위면에 잘 나와 있으니깐 본인이 제어하고자 하는 전류의 크기를 잘 체크하시고 사용하시면 되겠습니다.


이건 제가 사용하는 부품의 기준으로 설명을 드리겠습니다. 이부분은 다른 부품일때 위와 같이 연결하시면 작동하지 않습니다. 그냥 원리를 이해하는 수준으로 읽어주시기 바랍니다. 왼쪽은 실제 높은 전압을 사용하는 전류를 가운데 공용선에 연결해서 그 전류가 Output1, Output2로 흘러 갈지를 릴레이 모듈에서 제어를 하게 됩니다. 오른쪽은 아두이노와 연결하는데 Vcc(5V), Gnd 핀은 그대로 연결하시면 되고요. 제어선은 아두이노의 디지털핀(출력값)을 통해 릴레이 모듈을 제어하는 스위치 연활을 하게 됩니다. HIGH(5V) or LOW(0V) 값에 따라서 Output1과 Output2로 왔다 갔다 연결이 됩니다. 가령, Output1에 연결되어 전류가 공급되고 있다면 제어선값이 반대값이 입력되면 Output1의 연결이 끊어지고 Output2에 연결됩니다.


그림을 못 그리지만 대충 그림판에서 느낌만 그려봤네요. 가령 초기상태로 0V일 때 왼쪽 그림의 모습이라고 했을때 5V가 제어선으로 입력되면 선이 위쪽으로 붙게 됩니다. 즉, 0V일 때 아래선에 붙게 되고 5V일때 윗 선에 붙는다고 생각하시면 됩니다.

대충 어떤식으로 모듈이 움직이는지 아시겠지요.

[ 가상시뮬레이터에서 사용할 Relay DPDT 모듈 ]


처음 이것을 실험할 때 가장 애 먹은 주제입니다. 2쌍으로 위쪽과 아래쪽으로 선 연결이 나뉘는데요. 선 연결은 윗면의 그림 모양으로 되어 있는 데로 선을 연결하시면 됩니다.


대충 A,B가 한쌍이고, C,D가 한쌍입니다. 표기가 안된 쪽은 아두이노에 연결하시면 됩니다. 하나는 제어선 하나는 Gnd선입니다. 회로도 구성을 보시면 아마 쉽게 이해가 가실꺼에요.

2. 회로도 구성


  • 준비물 : relay DPDT 1개, Light bulb 2개, Power Supply, 아두이노우노
  • 내용 : Light bulb를 교대로 깜박이게 할 수 있도록 회로도를 구성해보자.


참고로 위면은 보시고 선은 연결하세요. 첨에 반대로 연결했다가 삽질을 했네요. 글자가 뒤집어지게 회전 시키고 선을 연결하세요. 정면은 오른쪽이 아두이노우노랑 연결해야 하거든요. Relay DPDT 모듈에 선 핀을 어떻게 연결해야할지 아시겠지요. 어느선이 전원선이고 어느선이 출력선인지요. 가상시뮬레이터에서 딱히 연결할 부품이 없어서 백열등 같은 모양의 전등을 연결해봤네요. Power Supply에서 10V의 전류로 불이 들어온다고 가정한 회로도 입니다.

3. 코딩


  • 사용함수 : pinMode(), digitalWrite(), delay()
  • 내용 : LED 깜박이는 소스를 이용해서 그 값을 제어값으로 해서 Light bulb 깜박이게 해보자.
  • 참고소스 : [아두이노] LED 제어

복습

  • pinMode(사용핀, 사용모드) : 사용핀을 INPUT/OUTPUT/INPUT_PULLUP 모드중 뭘로 사용할지를 정함.
  • digitalWrite(사용핀, 출력형태) : 사용핀을 HIGH(5V) or LOW(0V) 중 출력 형태를 정함.
  • delay(1000) : 1초(1000)를 대기한다.

따로 수정할 부분은 없습니다. 그냥 기본적인 LED 깜박이기 소스를 그대로 적용할 예정입니다.

[LED 깜박이기 기본 소스]

void setup() {
pinMode(13, OUTPUT);
}

void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000); 
}

13번 핀값이 HIGH와 LOW를 1초 단위로 출력되잖아요. HIGH or LOW일 때 어떤 결과가 나오는지 보도록 하죠.

4. 결과


[ digitalWrite(13, HIGH); ]



[ digitalWrite(13, LOW); ]


[실험 촬영 영상]
위에 소개한 릴레이모듈에서 초기값(0V)이 Output2로 연결되었네요. 제어선(13번) 핀에서 HIGH(5V) 상태가 되면 Output1으로 선이 연결됩니다. 제어선(5번) 핀에 HIGH or LOW의 상태에 따라서 Output1과 Output2로 교차해서 연결되어 두개의 LED가 깜박이게 되는 효과를 보여주네요.


마무리


릴레이 모듈이 일상생활에서 꽤 유용한 부품으로 활용 분야가 넓습니다. 예를 들면은 온도 센서가 있습니다. 온도에 따라 낭방기기를 On/Off 시킬 수 있겠죠. 또는 wifi 모듈과 연동한다면 집 밖에서도 인터넷을 통해서 집안 전자기기들을 작동시킬 수도 있겠죠. 전류를 컨트롤 할 수 있다는 것은 엄청난 일을 할 수 있습니다. 단순히 On/Off라고만 생각하시면 안되고 그냥 리모콘 정도의 사고에 머물면 안되고 다른 부품들과 연동했을때 원격으로 제어 하거나 자동 제어를 할 수 있는 시스템을 구축할 수 있기 때문에 그 활용도는 무궁무진 합니다.

한번 상상의 나래를 펼쳐 보세요.


댓글()