여름이 다가옴에 따라 사무실 창문을 열어 놓는 시간이 길어지고 있는데, 사무실이 1층에 위치한데다가 창문이 인도와 마주 접해 있다보니 외부에서 유입된 담배 냄새가 사무실 안으로 퍼지는 일이 잦아졌다. 환풍기를 하루 종일 켜 놓는 건 전기요금과 소음의 문제가 있어 바람직하지 않고, 필요할 때만 환풍기를 켤 수 있는 방법을 찾게 됐다. 하지만 리모컨이 달린 환풍기는 없었고, 선풍기는 리모컨이 달린 제품이 있지만 크기가 커서 사무실에서 쓰기에는 적합치 않았다. 그래서 아두이노를 이용해 간단히 만들어 보려고 했는데, 기왕이면 센서로 담배 연기를 감지해서 필요할 때만 환풍기를 작동시키는 기능을 구현해 보기로 했다.
우선 담배 냄새를 감지하는 센서를 찾아봤는데, 마땅히 추천되는 제품이 없어서 일단 무난한 가격대의 제품으로 구입을 했다. ZP07-MP503 라는 제품인데, 4개의 핀 중 2개가 데이터핀이고 총 4가지 경우의 공기질 측정 결과를 리턴한다. 핀 두개가 모두 0이면 clean, 둘 중 하나만 1이면 slight 또는 middle, 둘 다 1이면 heavy 상태를 의미한다.
작동 여부를 확인하기 위해 아두이노 Nano 보드에 능동부저와 함께 연결하고 다음과 같이 코드를 업로드했다.
int sensor1Pin = 2;
int sensor2Pin = 3;
int buzzerPin = 4;
void setup() {
pinMode(sensor1Pin, INPUT_PULLUP);
pinMode(sensor2Pin, INPUT_PULLUP);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600);
while(!Serial && millis()<5000) {
}
}
void loop() {
// "1" 핀과 "2" 핀 모두 선택 됨
if ( (digitalRead(sensor1Pin) == LOW) && (digitalRead(sensor2Pin) == LOW) ) {
Serial.println("1 : clean");
delay(1000);
}
// "1" 핀은 선택 안 되고, "2" 핀만 선택 됨
else if ( (digitalRead(sensor1Pin) == HIGH) && (digitalRead(sensor2Pin) == LOW) ) {
Serial.println("2 : slight");
delay(1000);
}
// "1" 핀만 선택 되고, "2" 핀은 선택 안 됨
else if ( (digitalRead(sensor1Pin) == LOW) && (digitalRead(sensor2Pin) == HIGH) ) {
Serial.println("3 : middle");
digitalWrite(buzzerPin, HIGH);
delay(100);
digitalWrite(buzzerPin, LOW);
delay(900);
}
// "1" 핀과 "2" 핀 모두 선택 안 됨
else if ( (digitalRead(sensor1Pin) == HIGH) && (digitalRead(sensor2Pin) == HIGH) ) {
Serial.println("4 : heavy");
digitalWrite(buzzerPin, HIGH);
delay(1000);
digitalWrite(buzzerPin, LOW);
}
}
담배를 안 피우다보니 대신 방향제를 가까이 대거나 입김을 불어서 테스트를 진행했다. 처음에는 별 반응이 없어서 뭔가 잘못된 건 줄 알았는데, 찾아보니 이 센서는 예열 시간이 필요하다고 한다. 제품 기술문서에는 3분 이내라고 돼 있는데, 혹시 몰라 5분 정도 놔뒀다가 테스트를 시작했다. 예열이라고 표현돼 있는데, 실제로 센서의 금속 부분이 따뜻한 걸로 봐서는 공기질 측정을 위해 기계에 어느정도 열이 발생돼야 하는 거 같다. 예열된 이후부터는 잘 작동했다.
'아두이노 > 담배 냄새 배출기' 카테고리의 다른 글
#3 제작 - 조립 (0) | 2024.08.17 |
---|---|
#2 제작 (0) | 2024.08.08 |