牟曉東
水火無(wú)情,為了能對(duì)“水情”“火情”的意外情況及時(shí)報(bào)警,我們借助雨水傳感器和火焰?zhèn)鞲衅?,利用Arduino開(kāi)發(fā)制作一個(gè)“水火警報(bào)儀”系統(tǒng)——LED燈發(fā)光、蜂鳴器發(fā)聲和屏幕顯示警報(bào)信息。
實(shí)驗(yàn)器材:Arduino UNO主板一個(gè),雨水傳感器一個(gè),火焰?zhèn)鞲衅饕粋€(gè),紅色LED燈一支,低電平觸發(fā)蜂鳴器一個(gè),面包板一塊,各色杜邦線若干。
首先,將Arduino的5V和GND通過(guò)杜邦線連接至面包板;接著,將雨水傳感器和火焰?zhèn)鞲衅鞯腣CC和GND端均插接至面包板(與Arduino的5V和GND相連),二者的DO數(shù)字輸出端則分別插接至Arduino的7號(hào)和8號(hào)數(shù)字引腳;然后,將蜂鳴器的VCC和GND端同樣也插接至面包板,它的I/O信號(hào)端插接至12號(hào)數(shù)字引腳;最后,將LED燈長(zhǎng)腿插入13號(hào)、短腿插入相鄰的GND引腳,再通過(guò)數(shù)據(jù)線將Arduino與計(jì)算機(jī)USB接口連接(如圖1)。
值得一提的是,雨水傳感器和火焰?zhèn)鞲衅鞯臄?shù)字輸出信號(hào)均為“反邏輯”結(jié)果——當(dāng)雨水傳感器的感應(yīng)板上沒(méi)有水滴時(shí),數(shù)字輸出信號(hào)是高電平“1”;而當(dāng)檢測(cè)到有水滴時(shí),則輸出低電平“0”。另外蜂鳴器上如果標(biāo)有“低電平觸發(fā)”字樣時(shí),其工作模式與此類似,只有使用低電平“0”去觸發(fā)時(shí)才會(huì)發(fā)聲。
首先進(jìn)行變量的定義:語(yǔ)句“int Beep = 12;”和“int led = 13;”分別對(duì)應(yīng)蜂鳴器和LED燈的引腳編號(hào),語(yǔ)句“int WaterSensorPin = 7;”和“int FireSensor
Pin = 8;”則分別對(duì)應(yīng)雨水傳感器和火焰?zhèn)鞲衅鞯囊_編號(hào);接著,在setup()函數(shù)中對(duì)它們進(jìn)行引腳模式的聲明,蜂鳴器和LED燈是輸出模式——“pinMode(Beep,OUTPUT);”“pinMode(led,OUTPUT);”,兩個(gè)傳感器是輸入模式——“pinMode(WaterSensorPin,INPUT);”“pinMode(FireSensor
Pin,INPUT);”;然后,再通過(guò)語(yǔ)句“Serial.begin(9600);”設(shè)置串口監(jiān)視器的波特率(如圖2)。
在loop()函數(shù)中,先定義WaterSensorValue和FireSensorValue兩個(gè)變量,通過(guò)“int WaterSensor
Value = digitalRead(WaterSensorPin);”和“int FireSensorValue = digitalRead(FireSensor
Pin);”兩個(gè)語(yǔ)句,實(shí)現(xiàn)分別讀取雨水傳感器和火焰?zhèn)鞲衅鲾?shù)字信號(hào);接著,構(gòu)建“if……else……”雙分支選擇結(jié)構(gòu),判斷雨水傳感器和火焰?zhèn)鞲衅魉鶛z測(cè)的信號(hào)是否為低電平:“WaterSensorValue == LOW or FireSensorValue == LOW”,其中有一個(gè)成立(或同時(shí)成立)的話,則進(jìn)行“亮燈、發(fā)聲、屏顯”三種形式的報(bào)警——語(yǔ)句“digitalWrite(led,HIGH);”控制LED燈,語(yǔ)句“digitalWrite(Beep,LOW);”控制蜂鳴器(注意是低電平觸發(fā)),語(yǔ)句“Serial.println(“警報(bào)——水火無(wú)情,火速檢查!”);”是向串口監(jiān)視器輸出提示信息;否則,則通過(guò)類似的三個(gè)語(yǔ)句來(lái)實(shí)現(xiàn)“熄燈、無(wú)聲、屏顯”——“digitalWrite(led,LOW);”“digitalWrite(Beep,HIGH);”和“Serial.println(“情況正常,請(qǐng)保持!”);”;最后,添加遲延0.5秒鐘的語(yǔ)句“delay(500);”(單位是毫秒),避免死機(jī)。完成程序的編寫(xiě)(如圖3)。
保存程序并編譯、上傳至Arduino,打開(kāi)串口監(jiān)視器后對(duì)“水火警報(bào)儀”進(jìn)行測(cè)試:在沒(méi)有“水情”“火情”的正常情況下,LED燈不亮、蜂鳴器不響,屏幕顯示“情況正常,請(qǐng)保持!”;當(dāng)在雨水傳感器的感應(yīng)板上滴水滴時(shí)(或用濕紙巾接觸),LED燈發(fā)光、蜂鳴器發(fā)聲,屏幕顯示“警報(bào)——水火無(wú)情,火速檢查!”;或者使用打火機(jī)靠近火焰?zhèn)鞲衅鬟M(jìn)行“打火”測(cè)試,同樣也會(huì)觸發(fā)警報(bào)(如圖4)。
使用Python同樣可以控制Arduino實(shí)現(xiàn)“水火警報(bào)儀”。首先,通過(guò)語(yǔ)句“import time”和“from pinpong.board import Board,Pin”導(dǎo)入time和pinpong庫(kù),并且初始化Arduino uno開(kāi)發(fā)板:“Board(“uno”).begin()”;接著,通過(guò)語(yǔ)句“Beep = Pin(Pin.D12, Pin.OUT)”和“l(fā)ed = Pin(Pin.D13, Pin.OUT)”,聲明蜂鳴器和LED燈分別插接在Arduino的12和13號(hào)數(shù)字引腳,并且均為數(shù)字輸出端;類似地,語(yǔ)句“WaterSensor = Pin(Pin.D7, Pin.IN)”和“FireSensor = Pin(Pin.D8, Pin.IN)”,則是對(duì)雨水傳感器和火焰?zhèn)鞲衅鬟M(jìn)行聲明,分別接插在7號(hào)和8號(hào)數(shù)字引腳,且均為數(shù)字輸入端。