多語言實現Arduino“高溫監控儀”

2021年8月23日 吳新

借助于溫度傳感器、風扇模塊和幾個LED燈,我們利用Arduino開發制作一個“高溫監控儀”:當環境溫度處于較適宜的溫度范圍時(比如28℃以下),綠色LED燈亮,風扇模塊無動作;當溫度有小幅度升高時(28℃以上、30℃以下),黃色LED燈發光進行預警,同時風扇模塊低速轉動進行風力降溫,直至恢復正常;當溫度較高時(30℃以上),紅色LED燈發光進行報警,風扇模塊高速轉動進行風力快速降溫……在整個過程中,屏幕每隔3秒鐘就顯示一次實時檢測到的溫度數據。


1.實驗器材與電路連接


實驗器材:Arduino UNO主板一個,DHT11溫濕度傳感器一個,風扇模塊一個,綠色、黃色和紅色LED燈各一支,面包板一塊,各色杜邦線若干;對照設計好的電路接線圖進行器材連接(如圖1)。

多語言實現Arduino“高溫監控儀”

首先,將Arduino的5V和GND通過杜邦線連接至面包板一側的紅色和藍色線槽;接著,將綠色、黃色和紅色LED燈的短腿(負極)均插接至藍色線槽,長腿(正極)則分別插接至a列某行插孔中,再通過同種顏色的杜邦線將正極與Arduino的11號、12號和13號數字引腳相連;然后,將溫度傳感器和風扇模塊的VCC端和GND端均通過杜邦線與面包板的紅色、藍色線槽連接,二者的信號端則分別插接至Arduino的2號和3號數字引腳;最后,通過數據線將Arduino與計算機USB接口連接,完成電路連接(如圖2)。

多語言實現Arduino“高溫監控儀”

2.Arduino IDE代碼編程實現“高溫監控儀”


在Arduino IDE中對DHT11溫濕度傳感器進行編程控制的前提是要安裝DHT.h庫,首先依次點擊菜單“項目”-“加載庫”-“管理庫”項,在彈出的“庫管理器”中以“DHT11”為關鍵詞進行搜索,會出現一個名為“DHT sensor library(by Adafruit)”的庫,顯示支持DHT11(目前最新版本為1.4.2);接著,點擊“安裝”按鈕(如圖3),在彈出的提示窗口中點擊“Install all”按鈕進行下載和安裝;結束后返回“加載庫”中查看,底部“推薦的庫”中就會顯示有“DHT sensor library”項,說明安裝成功。

多語言實現Arduino“高溫監控儀”

首先導入DHT.h庫:“#include <DHT.h>”,并且通過語句“DHT dht(2, DHT11);”對連接在2號數字引腳的溫度傳感器信號端進行初始化;然后定義Fan、GreenLED、YellowLED和RedLELD四個變量,對風扇模塊(3號數字引腳)、綠色(11號)、黃色(12號)和紅色(13號)LED燈進行引腳編號聲明:“int Fan = 3;”“int GreenLED = 11;”“int YellowLED = 12;”和“int RedLED = 13;”;接下來,在setup()函數中先通過語句“Serial.begin(9600);”設置串口監視器的波特率,再通過語句“dht.begin();”開啟DHT11溫度傳感器的數據通訊,最后通過pinMode()對風扇模塊和四個LED燈的引腳模式均設置為輸出模式:“pinMode(Fan, OUTPUT);”“pinMode(GreenLED, OUTPUT);”“pinMode(YellowLED, OUTPUT);”和“pinMode(RedLED, OUTPUT);”(如圖4)。

多語言實現Arduino“高溫監控儀”

在loop()函數中先定義浮點型變量Temperature,通過“float Temperature = dht.readTemperature();”語句實現對檢測溫度數據的讀取,然后將該數據在串口監視器中輸出:“Serial.print("當前溫度為:");”“Serial.print(Temperature);”和“Serial.println("℃");”;接著,構建“if…else if…else…”三分支選擇結構,對溫度數據進行數值區間判斷:如果溫度在28℃以下——“if (Temperature <= 28.00)”,則控制綠色LED燈發光:“digitalWrite(GreenLED, HIGH);”;如果溫度在28℃-30℃之間——“else if (Temperature > 28.00 && Temperature <= 30.00)”,則控制黃色LED燈發光、風扇低速轉動:“digitalWrite(YellowLED, HIGH);”“analogWrite(Fan, 127);”;如果溫度超過30℃,則控制紅色LED發光、風扇高速轉動:“digitalWrite(RedLED, HIGH);”“analogWrite(Fan, 255);”。


注意,DHT11溫濕度傳感器的數據采樣頻率不能太高,因此通過語句“delay(3000);”來實現3秒鐘的延遲;最后,關閉LED燈和風扇模式:“digitalWrite(GreenLED, LOW);”“digitalWrite(YellowLED, LOW);”“digitalWrite(RedLED, LOW);”和“analogWrite(Fan, 0);”,完成程序的編寫(如圖5)。

多語言實現Arduino“高溫監控儀”

將程序保存、編譯、上傳至Arduino,對“高溫監控儀”進行三種不同環境溫度情況的測試,串口顯示器3秒鐘就顯示一次溫度數據的實時檢測值,同時還會觸發不同顏色的LED燈或風扇模塊產生對應的預設“動作”(如圖6)。

多語言實現Arduino“高溫監控儀”

3.Python實現“高溫監控儀”


首先,通過語句“import time”和“from pinpong.board import Board,Pin,DHT11”導入time和pinpong庫的相關內容,并且初始化Arduino uno開發板:“Board("uno").begin()”;接著,通過五個語句分別對DHT11溫濕度傳感器、風扇模塊和三個LED燈的對應引腳進行聲明,包括引腳號和輸入或輸出模式(注意風扇模塊是PWM輸出):“dht11 = DHT11(Pin(Pin.D2))”“Fan = Pin(Pin.D3, Pin.PWM)”“GreenLED = Pin(Pin.D11, Pin.OUT)”“YellowLED = Pin(Pin.D12, Pin.OUT)”和“RedLED = Pin(Pin.D13, Pin.OUT)”。


在“while True:”循環結構中,先建立變量Temperature并為其賦值:“Temperature = dht11.temp_c()”,即獲取溫度傳感器的攝氏度數據,并且將它打印輸出:“print('當前溫度為:',Temperature,'℃')”;然后再建立“if…elif…else…”三分支選擇結構,對變量Temperature的數值進行判斷,當檢測的環境溫度在28℃以下時:“if Temperature <= 28.00:”,綠色LED燈發光:“GreenLED.write_digital(1)”;當溫度在28℃-30℃之間時:“elif (Temperature > 28.00 and Temperature <= 30.00):”,黃色LED燈發光、風扇模塊中速轉動:“YellowLED.write_digital(1)”“Fan.write_analog(127)”;當溫度超過30℃時(else語句),紅色LED燈發光、風扇模塊高速轉動:“RedLED.write_digital(1)”、“Fan.write_analog(255)”;最后,添加延遲3秒鐘的“time.sleep()”語句,并且將三支LED燈和風扇模塊均關閉:“GreenLED.write_digital(0)”“YellowLED.write_digital(0)”“RedLED.write_digital(0)”和“Fan.write_analog(0)”(如圖7)。

多語言實現Arduino“高溫監控儀”

保存程序,按功能鍵F5運行,測試Arduino“高溫監控儀”,效果與使用Arduino IDE代碼編程的實現效果是完全一致的(如圖8)。

多語言實現Arduino“高溫監控儀”

4.Mind+圖形化編程實現“高溫監控儀”


首先,點擊Mind+左下角的“擴展”項,將Arduino Uno主控板和DHT11/22溫濕度傳感器加載至主界面;接著,在“循環執行”中建立名為“溫度”的變量,為其賦值為“讀取引腳2‘DHT1’溫度(℃)”,并且在串口監視器中以9600的波特率進行字符串輸出;然后建立“如果…那么執行…否則如果…那么執行…否則…”三分支選擇結構,分別對變量“溫度”的值進行數值區間判斷:如果小于等于28℃,則“設置數字引腳11輸出為高電平”(綠色LED燈發光);如果大于28℃且小于等于30℃,則“設置數字引腳12輸出為高電平”(黃色LED燈發光)、“設置PWM引腳3輸出127”(風扇模塊中速轉動);否則(即大于30℃時),執行“設置數字引腳13輸出為高電平”(紅色LED燈發光)、“設置PWM引腳3輸出255”(風扇模塊高速轉動);最后,等待3秒鐘,將三支LED均設置為低電平、風扇模塊設置PWM值為0進行關閉操作。


將程序保存后點擊“上傳到設備”項,測試Arduino“高溫監控儀”,同樣也會實現每隔3秒鐘檢測一次環境溫度的功能,并且對不同的溫度數據進行開關對應顏色的LED燈及風扇模塊不同轉速的控制,與使用代碼編程實現的效果是完全一致的(如圖9)。

多語言實現Arduino“高溫監控儀”