다른 주제로 포스팅을 끝냈는데 @ellenalee 님이 릴레이 모듈로 선풍기를 제어 해보셨다고 하셔서 이걸 한번 비슷하게 구현해보면 릴레이 모듈의 응용으로 괜찮을 것 같아서 가상시뮬레이터에서 느낌만 비슷하게 한번 구현해 보도록 하겠습니다.
대충 DC Motor가 선풍기라고 생각해 봅시다. 느낌은 그런데로 비슷해가 표현 했네요.
[ 온도센서 측정 소스 ]
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변수 값에 따라서 릴레이모듈를 제어하면 되겠죠
if(C>35){ //35도 이상이면 참
digitalWrite(2, HIGH); //스위치 켜라
}
else{
digitalWrite(2, LOW); //스위치 꺼라
}
끝! 간단하게 느낌만 살렸습니다.
전체적인 코드를 살펴보면,
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;
}
[ 35도 이하일때 ] : 그림에서는 25도 위치
동영상을 찍어야 했지만 그냥 이미지로 간단히 차이점을 화살표로 표시 해 놨습니다. 25도일때는 0.00A로 전류가 흐르지 않는 상태이고 57도 위치에서는 79.9mA로 전류가 흐르는 상태입니다. 그 차이점으로 확인해주시기 바랍니다.
코딩에서는 35도 이상이면 모터가 회전되게 되어 있습니다. 실제 시뮬레이터로 돌아가는 장면을 보고 싶으면 공개되 회로도에서 바로 시뮬레이터를 실행 시켜서 그 결과를 확인 할 수 있습니다.
링크된 곳으로 가면 위 그림과 같은 창이 뜹니다. 거기서 1번 눌러주셔서 2번의 시뮬레이터 실행버턴의 창이 뜹니다. 그리고 2번을 누르시면 실행을 시킬 수 있습니다. 한번 온도조절을 해보시고 결과를 확인해 보세요.
상상이 어렵지만 표현은 그렇게 어렵지 않습니다. 매번 상상의 나래를 펼치라는 멘트를 날리는 이유가 바로 그 이유입니다. 온도에 따라서 선풍기를 자동을 켜볼까라는 상상력이 뭔가를 만들어 냅니다.
여러분들도 어떤 원리를 배우게 되면 그 원리에서만 멈추지 말고 상상력을 더해서 새로운 뭔가를 창조할 수 있는 능력을 키우시면 엄청난 결과를 얻을 수 있을 거에요.
언제나 그럴듯이 상상의 나래를 펼쳐 보세요.