본문 바로가기
아두이노/담배 냄새 배출기

#2 제작

by songbum 2024. 8. 8.

선택한 환기용 팬은 5V 에서 작동되는 작은 것이긴 하지만 아두이노 보드에서 직접 전원을 공급받을 수는 없고 외부 전원을 사용하도록 만들기 때문에 전원 공급을 프로그램에서 제어하려면 릴레이가 필요하다.  지난 번에 작업할 때 사용했던 것과 동일한 릴레이를 사용하기로 했다.

https://songbum.tistory.com/18

 

#3 기획 및 검토 - 솔레노이드 밸브, 릴레이

전기를 이용해 수도 밸브 개폐를 제어하려면 '솔레노이드 밸브' 를 사용해야 한다고 한다.  다양한 제품들이 판매되고 있는데, 내가 사용하려는 환경이 별로 가혹하지 않기 때문에 1만원대 초반

songbum.tistory.com

 

그리고 센서가 작동하지 않더라도 내가 원할 때 적외선 리모컨을 사용해 환기용 팬을 작동시킬 수 있도록 했다.  이것도 전에 작업했던 경험이 있어서, 따로 테스트 하지 않고 바로 적용했다.

https://songbum.tistory.com/3 

 

#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