선택한 환기용 팬은 5V 에서 작동되는 작은 것이긴 하지만 아두이노 보드에서 직접 전원을 공급받을 수는 없고 외부 전원을 사용하도록 만들기 때문에 전원 공급을 프로그램에서 제어하려면 릴레이가 필요하다. 지난 번에 작업할 때 사용했던 것과 동일한 릴레이를 사용하기로 했다.
https://songbum.tistory.com/18
#3 기획 및 검토 - 솔레노이드 밸브, 릴레이
전기를 이용해 수도 밸브 개폐를 제어하려면 '솔레노이드 밸브' 를 사용해야 한다고 한다. 다양한 제품들이 판매되고 있는데, 내가 사용하려는 환경이 별로 가혹하지 않기 때문에 1만원대 초반
songbum.tistory.com
그리고 센서가 작동하지 않더라도 내가 원할 때 적외선 리모컨을 사용해 환기용 팬을 작동시킬 수 있도록 했다. 이것도 전에 작업했던 경험이 있어서, 따로 테스트 하지 않고 바로 적용했다.
#2 기획 및 검토 - 적외선 리모컨
방의 전등을 리모컨으로 켜거나 끄고 싶다. 전에 살던 신축 아파트에서 잘 사용했었는데, 이번에 이사온 오래된 아파트에는 없어서 좀 많이 아쉽다. 기존 스위치를 교체하는 방식의 제품들이 판
songbum.tistory.com
환기용팬은 지름 140mm 에 USB 전원으로작동되는 제품인데, 비교적 소음이 적어서 선택을 했다. 만약 풍량이 적어서 냄새 배출이 잘 안 되면 좀 더 큰 환풍기로 교체할 생각이다. 어차피 릴레이를 사용하기 때문에 220V 사용 제품이라면 어떤 환기용 팬이든 사용이 가능하다.
위와 같이 구성하고, 아두이노 IDE 에서 아래와 같이 프로그램을 업로드했다.
#include <IRremote.hpp>
int sensor1Pin = 2;
int sensor2Pin = 3;
int buzzerPin = 4;
int valvePin = 5;
int RECV_PIN = 6;
IRrecv irrecv(RECV_PIN);
int is_by_remote;
int is_fan;
void setup() {
pinMode(sensor1Pin, INPUT_PULLUP);
pinMode(sensor2Pin, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT);
digitalWrite(valvePin, HIGH);
pinMode(valvePin, OUTPUT);
IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK);
Serial.begin(9600);
while(!Serial && millis()<5000) {
}
is_by_remote = 0;
is_fan = 0;
}
void loop() {
// 리모컨 사용중이면 우선 처리
if (IrReceiver.decode()) {
Serial.print("Pushed remote controller key : ");
Serial.println(IrReceiver.decodedIRData.decodedRawData);
if (IrReceiver.decodedIRData.decodedRawData != 0) {
// press "8" button
if (IrReceiver.decodedIRData.decodedRawData == 3927310080) {
if (is_fan == 0) {
Serial.println("START by remote");
is_fan = 1;
is_by_remote = 1;
digitalWrite(valvePin, LOW);
digitalWrite(buzzerPin, HIGH);
delay(300);
digitalWrite(buzzerPin, LOW);
}
}
// press "7" button
if (IrReceiver.decodedIRData.decodedRawData == 4161273600) {
if (is_fan == 1) {
Serial.println("STOP by remote");
is_fan = 0;
is_by_remote = 0;
digitalWrite(valvePin, HIGH);
digitalWrite(buzzerPin, HIGH);
delay(300);
digitalWrite(buzzerPin, LOW);
}
}
}
IrReceiver.resume(); // Enable receiving of the next value
}
else {
// 리모컨에 의해 팬이 작동중일 경우는 무시
if (is_by_remote == 1) {
}
else {
// "1" 핀과 "2" 핀 모두 선택 됨
if ( (digitalRead(sensor1Pin) == LOW) && (digitalRead(sensor2Pin) == LOW) ) {
Serial.print("1 : clean : ");
Serial.println(is_fan);
if (is_fan == 1) {
is_fan = 0;
digitalWrite(valvePin, HIGH);
}
delay(1000);
}
// "1" 핀은 선택 안 되고, "2" 핀만 선택 됨
else if ( (digitalRead(sensor1Pin) == HIGH) && (digitalRead(sensor2Pin) == LOW) ) {
Serial.print("2 : slight : ");
Serial.println(is_fan);
if (is_fan == 1) {
is_fan = 0;
digitalWrite(valvePin, HIGH);
}
delay(1000);
}
// "1" 핀만 선택 되고, "2" 핀은 선택 안 됨
else if ( (digitalRead(sensor1Pin) == LOW) && (digitalRead(sensor2Pin) == HIGH) ) {
Serial.print("3 : middle : ");
Serial.println(is_fan);
if (is_fan == 0) {
is_fan = 1;
digitalWrite(valvePin, LOW);
}
digitalWrite(buzzerPin, HIGH);
delay(100);
digitalWrite(buzzerPin, LOW);
delay(900);
}
// "1" 핀과 "2" 핀 모두 선택 안 됨
else if ( (digitalRead(sensor1Pin) == HIGH) && (digitalRead(sensor2Pin) == HIGH) ) {
Serial.print("4 : heavy : ");
Serial.println(is_fan);
if (is_fan == 0) {
is_fan = 1;
digitalWrite(valvePin, LOW);
}
digitalWrite(buzzerPin, HIGH);
delay(300);
digitalWrite(buzzerPin, LOW);
delay(700);
}
}
}
}
'아두이노 > 담배 냄새 배출기' 카테고리의 다른 글
#3 제작 - 조립 (0) | 2024.08.17 |
---|---|
#1 기획 및 검토 - ZP07-MP503 공기질 센서 (0) | 2024.08.06 |