多方法實現Arduino“水火警報儀”

2021-08-17 16:56牟曉東
電腦報 2021年31期
關鍵詞:低電平蜂鳴器火情

牟曉東

水火無情,為了能對“水情”“火情”的意外情況及時報警,我們借助雨水傳感器和火焰傳感器,利用Arduino開發制作一個“水火警報儀”系統——LED燈發光、蜂鳴器發聲和屏幕顯示警報信息。

1.實驗器材與電路連接

實驗器材:Arduino UNO主板一個,雨水傳感器一個,火焰傳感器一個,紅色LED燈一支,低電平觸發蜂鳴器一個,面包板一塊,各色杜邦線若干。

首先,將Arduino的5V和GND通過杜邦線連接至面包板;接著,將雨水傳感器和火焰傳感器的VCC和GND端均插接至面包板(與Arduino的5V和GND相連),二者的DO數字輸出端則分別插接至Arduino的7號和8號數字引腳;然后,將蜂鳴器的VCC和GND端同樣也插接至面包板,它的I/O信號端插接至12號數字引腳;最后,將LED燈長腿插入13號、短腿插入相鄰的GND引腳,再通過數據線將Arduino與計算機USB接口連接(如圖1)。

值得一提的是,雨水傳感器和火焰傳感器的數字輸出信號均為“反邏輯”結果——當雨水傳感器的感應板上沒有水滴時,數字輸出信號是高電平“1”;而當檢測到有水滴時,則輸出低電平“0”。另外蜂鳴器上如果標有“低電平觸發”字樣時,其工作模式與此類似,只有使用低電平“0”去觸發時才會發聲。

2.Arduino IDE代碼編程實現“水火警報儀”

首先進行變量的定義:語句“int Beep = 12;”和“int led = 13;”分別對應蜂鳴器和LED燈的引腳編號,語句“int WaterSensorPin = 7;”和“int FireSensor

Pin = 8;”則分別對應雨水傳感器和火焰傳感器的引腳編號;接著,在setup()函數中對它們進行引腳模式的聲明,蜂鳴器和LED燈是輸出模式——“pinMode(Beep,OUTPUT);”“pinMode(led,OUTPUT);”,兩個傳感器是輸入模式——“pinMode(WaterSensorPin,INPUT);”“pinMode(FireSensor

Pin,INPUT);”;然后,再通過語句“Serial.begin(9600);”設置串口監視器的波特率(如圖2)。

在loop()函數中,先定義WaterSensorValue和FireSensorValue兩個變量,通過“int WaterSensor

Value = digitalRead(WaterSensorPin);”和“int FireSensorValue = digitalRead(FireSensor

Pin);”兩個語句,實現分別讀取雨水傳感器和火焰傳感器數字信號;接著,構建“if……else……”雙分支選擇結構,判斷雨水傳感器和火焰傳感器所檢測的信號是否為低電平:“WaterSensorValue == LOW or FireSensorValue == LOW”,其中有一個成立(或同時成立)的話,則進行“亮燈、發聲、屏顯”三種形式的報警——語句“digitalWrite(led,HIGH);”控制LED燈,語句“digitalWrite(Beep,LOW);”控制蜂鳴器(注意是低電平觸發),語句“Serial.println(“警報——水火無情,火速檢查!”);”是向串口監視器輸出提示信息;否則,則通過類似的三個語句來實現“熄燈、無聲、屏顯”——“digitalWrite(led,LOW);”“digitalWrite(Beep,HIGH);”和“Serial.println(“情況正常,請保持!”);”;最后,添加遲延0.5秒鐘的語句“delay(500);”(單位是毫秒),避免死機。完成程序的編寫(如圖3)。

保存程序并編譯、上傳至Arduino,打開串口監視器后對“水火警報儀”進行測試:在沒有“水情”“火情”的正常情況下,LED燈不亮、蜂鳴器不響,屏幕顯示“情況正常,請保持!”;當在雨水傳感器的感應板上滴水滴時(或用濕紙巾接觸),LED燈發光、蜂鳴器發聲,屏幕顯示“警報——水火無情,火速檢查!”;或者使用打火機靠近火焰傳感器進行“打火”測試,同樣也會觸發警報(如圖4)。

3.Python代碼編程實現“水火警報儀”

使用Python同樣可以控制Arduino實現“水火警報儀”。首先,通過語句“import time”和“from pinpong.board import Board,Pin”導入time和pinpong庫,并且初始化Arduino uno開發板:“Board(“uno”).begin()”;接著,通過語句“Beep = Pin(Pin.D12, Pin.OUT)”和“led = Pin(Pin.D13, Pin.OUT)”,聲明蜂鳴器和LED燈分別插接在Arduino的12和13號數字引腳,并且均為數字輸出端;類似地,語句“WaterSensor = Pin(Pin.D7, Pin.IN)”和“FireSensor = Pin(Pin.D8, Pin.IN)”,則是對雨水傳感器和火焰傳感器進行聲明,分別接插在7號和8號數字引腳,且均為數字輸入端。

在“while True:”循環結構中,先建立Water_Sensor_Value和Fire_Sensor_Value兩個變量,通過賦值語句“Water_Sensor_Value = WaterSensor.read_digital()”和“Fire_Sensor_

Value = FireSensor.read_digital()”,實現讀取雨水傳感器和火焰傳感器所檢測到的數字信號功能;然后再建立“if……else……”雙分支選擇結構,通過對條件表達式“Water_Sensor_Value == 0 or Fire_Sensor_Value == 0”進行邏輯值的判斷,條件成立,說明有“水情”或“火情”,則執行“亮燈、發聲、屏顯”動作——“led.write_digital(1)”“Beep.write_digital(0)”和“print(‘警報——水火無情,火速檢查!)”;條件不成立的話(else分支),則執行“熄燈、無聲、屏顯”動作——“led.write_digital(0)”“Beep.write_digital(1)”和“print(‘情況正常,請保持!)”;最后,添加延遲0.5秒鐘語句“time.sleep(0.5)”(如圖5)。

程序保存后再按功能鍵F5運行程序,測試Arduino“水火警報儀”,功能與IDE代碼編程完全一致(如圖6)。

4.Mind+圖形化編程實現“水火警報儀”

首先,點擊Mind+左下角的“擴展”項,將Arduino Uno主控板加載至主界面,注意不要加載其中的水分傳感器和火焰傳感器,因為該積木塊默認封裝的數據讀取模式是模擬方式,不符合我們的需求。接著,建立“如果……那么執行……否則……”雙分支選擇結構,先對插接在7號和8號數字引腳的雨水傳感器、火焰傳感器進行數字信號的讀取,再進行邏輯“或”運算判斷;條件成立的話,設置數字引腳13輸出為高電平——LED燈發光,設置數字引腳12輸出為低電平——蜂鳴器發聲,串口字符串輸出“警報——水火無情,火速檢查!”;條件不成立,則對應熄滅LED燈、蜂鳴器不發聲和輸出顯示“情況正常,請保持!”的操作;最后,添加“等待0.5秒”時間延遲積木模塊(如圖7)。

保存程序后再點擊“上傳到設備”項,測試Arduino“水火警報儀”,同樣也會實現對“水情”和“火情”的檢測報警功能。

猜你喜歡
低電平蜂鳴器火情
掌控板制作簡易鋼琴
一種實用的電腦接口判斷方法
本尼丟了蜂鳴器
基于555定時器的聲光觸摸三控照明電路的設計*
數字電子技術的應用
一種近電預警器
淺談物理電路與數字電路
電視機起火了
面對火情要冷靜
信息的通訊: 制作一個真實的發報機
桃花-电影-完整版视频在线观看