牟曉東
水火無情,為了能對“水情”“火情”的意外情況及時報警,我們借助雨水傳感器和火焰傳感器,利用Arduino開發制作一個“水火警報儀”系統——LED燈發光、蜂鳴器發聲和屏幕顯示警報信息。
實驗器材: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”去觸發時才會發聲。
首先進行變量的定義:語句“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)。
使用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號數字引腳,且均為數字輸入端。