天天看點

【Arduino UNO】利用三個按鍵制作簡易火災報警器

簡述

利用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