最近用Arduino做了一个简单的多个传感器组合的实验,比较简单,设想的应用场景是火灾检测。如下图所示:
一、实验材料
MQ-2烟雾传感器、5路火焰传感器、CO一氧化碳传感器,无源蜂鸣器、LED灯、arduino mega开发板、面包板以及杜邦线若干。
二、功能说明
设想在一个火灾场景中,当检测到火焰时,火焰触感器检测并触发蜂鸣器报警和LED警示灯亮,当一氧化碳浓度超标或检测到烟雾,蜂鸣器响。我用LED代替了电推杆,设想是电推杆触动灭火装置。
三、程序设计
/*
多传感器 MQ-2烟雾、CO一氧化碳、火焰传感器、警报器、电推杆的使用
*/
#include <Arduino.h>
#define smogSensor_AO A0 //烟雾传感器引脚
#define smogSensor_DO A3
#define COSensor_AO 30 //一氧化碳CO传感器引脚
#define COSensor_DO 31
int pinBuzzer_led = 12; //报警器引脚
int fire_sensor1 = 2; //5个火焰传感器引脚
int fire_sensor2 = 3;
int fire_sensor3 = 4;
int fire_sensor4 = 5;
int fire_sensor5 = 6;
int outPusher = A2; //电推杆输出引脚
unsigned int smogsensorValue = 0; //烟雾传感器值
unsigned int cosensorValue = 0; //CO传感器值
void setup()
{
pinMode(smogSensor_DO, INPUT);
pinMode(smogSensor_AO, INPUT);
pinMode(COSensor_DO, INPUT);
pinMode(COSensor_AO, INPUT);
//火焰传感器5个引脚+电推杆+警报器
pinMode(fire_sensor1,INPUT);
pinMode(fire_sensor2,INPUT);
pinMode(fire_sensor3,INPUT);
pinMode(fire_sensor4,INPUT);
pinMode(fire_sensor5,INPUT);
pinMode(outPusher,OUTPUT);
pinMode(pinBuzzer_led,OUTPUT);
Serial.begin(9600);
}
void loop()
{
//MQ-2烟雾传感器,检测值大于10,触发后警报器响
smogsensorValue = analogRead(smogSensor_AO);
Serial.print("MQ-2烟雾传感器smogSensor_AO Value = ");
Serial.println(smogsensorValue);
delay(2000);
if(smogsensorValue>10)
{
Serial.print("检测危险!MQ-2烟雾传感器smogSensor_AO Value = ");
Serial.println(smogsensorValue);
onAlarm();
}
//CO一氧化碳传感器,检测值大于350,触发后警报器响灯闪,阈值可更改
cosensorValue = analogRead(COSensor_AO);
Serial.print("CO一氧化碳传感器COSensor_AO Value = ");
Serial.println(cosensorValue);
delay(2000);
if(cosensorValue>350)
{
Serial.print("检测危险!CO一氧化碳传感器COSensor_AO Value = ");
Serial.println(cosensorValue);
onAlarm();
}
//火焰传感器,检测到火焰,触发后警报器响灯闪+电推杆打开
if (digitalRead(fire_sensor1)) {onAlarm();ePusher();}
else if(digitalRead(fire_sensor2)) {onAlarm();ePusher();}
else if(digitalRead(fire_sensor3)) {onAlarm();ePusher();}
else if(digitalRead(fire_sensor4)) {onAlarm();ePusher();}
else if(digitalRead(fire_sensor5)) {onAlarm();ePusher();}
}
//触发报警器/无源蜂鸣器的函数
void onAlarm()
{
long frequency=200;
tone(pinBuzzer_led,frequency);
delay(1000);
noTone(pinBuzzer_led);
delay(1000);
Serial.print("警报响!");
}
//触发电推杆的函数,只用在火焰传感器
void ePusher()
{
digitalWrite(A2,HIGH);
delay(2000);
}
评论(0)
您还未登录,请登录后发表或查看评论