簡述
利用Arduino UNO闆制作火災報警器。三個按鍵代替煙感傳感器,溫感傳感器和紫外線傳感器。三個不同顔色的燈代表三個傳感器的檢測狀态。如果檢測到有煙,溫度過高或紫外線過強,則燈亮。為了防止誤判,隻有當兩個及以上的傳感器檢測到火災狀态時才報警。
期待結果
按下相應按鍵後相應燈亮,如果同時按下兩個及以上,則相應燈亮且蜂鳴器報警。
代碼
int smoke = 8;//煙感檢測器
int temperature=9;//溫感檢測器
int uv=10;//紫外線檢測器
int smokeLight=3;//煙感報警燈
int temperatureLight=4;//溫感報警燈
int uvLight=5;//紫外線報警燈
int beep=2;//蜂鳴器
int counter=0;//計數已經檢測到的探測器個數
int smokeLastState = 1;//煙感前次狀态
int temperatureLastState=1;//溫感前次狀态
int uvLastState=1;//紫外線前次狀态
int smokeState = 0;//煙感實時狀态
int temperatureState=0;//溫感實時狀态
int uvState=0;//紫外線實時狀态
void setup() {
// 把三個檢測器的模式設為輸入,拉上模式,實踐檢測出PULLUP時按鈕的狀态會是1
pinMode(smoke,INPUT_PULLUP);
pinMode(temperature,INPUT_PULLUP);
pinMode(uv,INPUT_PULLUP);
//三個燈 輸出模式
pinMode(smokeLight, OUTPUT);
pinMode(temperatureLight,OUTPUT);
pinMode(uvLight,OUTPUT);
//蜂鳴器 輸出模式
pinMode(beep,OUTPUT);
Serial.begin(9600);
}
void loop() {
//先把三個燈和蜂鳴器滅掉
digitalWrite(beep,LOW);
digitalWrite(smokeLight,LOW);
digitalWrite(temperatureLight,LOW);
digitalWrite(uvLight,LOW);
Serial.println("======Start,請按按鈕======");
//給人反應時間的緩沖時間
delay(5000);
//讀取三個按鈕的狀态
smokeState = digitalRead(8);
temperatureState=digitalRead(9);
uvState=digitalRead(10);
//分别比對三個檢測器現在狀态和前次狀态。如果不同,序列槽螢幕輸出該燈的顔色,計數器加一
if(smokeState!=smokeLastState)
{
digitalWrite(smokeLight,HIGH);
counter+=1;
Serial.println("red");
}
if(temperatureState!=temperatureLastState)
{
digitalWrite(temperatureLight,HIGH);
counter+=1;
Serial.println("green");
}
if(uvState!=uvLastState)
{
digitalWrite(uvLight,HIGH);
counter+=1;
Serial.println("blue");
}
//判斷計數器是否》=2,如果是,蜂鳴器報警,序列槽輸出“報警!”
if(counter>=2)
{
digitalWrite(beep,HIGH);
Serial.println("報警!");
}
//如果計數器<2,蜂鳴器不報警,序列槽輸出“不達到報警标準”
else
Serial.println("不達到報警标準");
//讓實驗效果呈現的緩沖時間
delay(3000);
//用于debug的
//Serial.println(smokeLastState);
//Serial.println(temperatureLastState);
// Serial.println(uvLastState);
//
// Serial.println(smokeState);
// Serial.println(temperatureState);
// Serial.println(uvState);
//将LastState恢複為1
//将counter的值還原為0
counter=0;
smokeLastState = 1;
temperatureLastState=1;
uvLastState=1;
//将三個燈滅掉
digitalWrite(‘smokeLight,LOW);
digitalWrite(temperatureLight,LOW);
digitalWrite(uvLight,LOW);
Serial.println("=====End=====");
}
參考文檔
按鍵狀态變化檢測:https://www.yiboard.com/thread-594-1-1.html
按下點亮,再次按下熄滅:https://blog.csdn.net/u011303443/article/details/77415929
按下按鍵,LED燈點亮。放開按鍵,LED燈熄滅:https://www.china-scratch.com/news/1405