家里老楼,厨房烟道倒烟严重,单向阀什么的完全起不到作用。常常是下班到家,屋里烟雾弥漫,一星期下来桌面都是黏的。。。本页用arduino控制家里的油烟机,监测到倒烟的时候开机排烟。
亲多多下单,arduino nano一片,23元;220V转5V1.2A变压板一块,13元。加上烟雾传感器和继电器,接好线的样子是这样的:
硬件连接简介:左下棕兰线接220V市电;经变压板变为5V电压后,黑白线接入arduino nano单片机;单片机与烟雾传感器背对背绝缘粘贴在一起;传感器的输出接单片机,通过继电器模块控制右下两条棕线通断。两条棕线接市电火线与油烟机电源火线。最后,所有模块模模块之间做绝缘,统统装进一个86暗盒里只留传感器在外面。暗盒盖板插油烟机供电线。
系统工作流程:单片机存在自动模式和手动模式两个状态,两个模式间使用开关切换。手动模式常通供电,烟机使用机器面板上的按钮控制。自动模式下烟机要置于开机状态,由烟雾传感器触发继电器控制烟机工作。一旦触发烟机运行,就保持运行几分钟,确保排烟效果。
程序清单:
int ledPin=LED_BUILTIN;
int sensorPin=3;
int relayPin=2;
int buttonPin=10;
int buttonVCC=11;
int buttonGND=12;//为简化硬件连接,开关的参考电平由单片机输出提供
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin,INPUT);
pinMode(buttonVCC,OUTPUT);
pinMode(buttonGND,OUTPUT);
pinMode(sensorPin,INPUT);
pinMode(relayPin,OUTPUT);
digitalWrite(buttonVCC,HIGH);
digitalWrite(buttonGND,LOW);
}
void loop(){
if(isButtonPushed())//自动/手动模式
{//手动
setLedStatus(true);
setRelayStatus(true);
}
else{//自动
setLedStatus(false);
setRelayStatus(false);
if(isSmoked()){
onSmoking();
}
setRelayStatus(false);
}
}
void setLedStatus(bool sig) {
if(sig)
digitalWrite(ledPin, HIGH); // turn the LED on (HIGH is the voltage level)
else
digitalWrite(ledPin, LOW); // turn the LED off by making the voltage LOW
}
void setRelayStatus(bool sig) {
if(sig)
digitalWrite(relayPin, HIGH);
else
digitalWrite(relayPin, LOW);
}
bool isButtonPushed() {
if (digitalRead(buttonPin) == HIGH) // 若按键被按下
return true;
else
return false;
}
bool isSmoked(){
if (digitalRead(sensorPin) == LOW)//低电平有效
return true;
else
return false;
}
void onSmoking(){
setRelayStatus(true);
bool light=true;
int keep=300;//保持秒数
for(int i=0;i<2*keep;i++){
setLedStatus(light=!light);
delay(500);
}
}
后记:
1,本套控制装置的状态切换开关使用了单刀双置方案,投入使用后发现存在行程过程中状态不确定的BUG。继电器模块在开关切换瞬间会在通断状态之间反复切换。这种情况应当避免出现。但由于装置一直运行于自动模式下,基本不向手动模式切换。故直到最后买了新的烟机也没有修正BUG。
2,采用电子装置监测倒烟情况毕竟是被动方法。装置应付了一段时间后,最终选择了彻底解决方案:买新烟机,外墙开孔直接排烟,封堵旧烟道,这都是题外话。这样本程序也就停在了页面上的样子。