溫度和濕度是在任何環(huán)境中被監(jiān)控的最常見參數(shù)。有大量的傳感器可供選擇來測量溫度和濕度,但最常用的是DHT11,因為它具有不錯的測量范圍和精度。它還可以與單引腳通信配合使用,因此非常容易與微控制器或微處理器連接。在本教程中,我們將學(xué)習(xí)如何將流行的DHT11傳感器與Raspberry Pi連接,并在16x2 LCD屏幕上顯示溫度和濕度的值。
DHT11傳感器概述:
DHT11傳感器可以測量具有以下規(guī)格的相對濕度和溫度
Temperature Range: 0-50°C
Temperature Accuracy: ±2 °C
Humidity Range: 20-90% RH
Humidity Accuracy: ±5 %
DHT11傳感器有模塊形式或傳感器形式。在本教程中,我們使用傳感器的模塊形式,兩者之間的唯一區(qū)別是,在模塊形式中,傳感器有一個濾波電容器和一個連接到傳感器輸出引腳的上拉電阻。因此,如果您單獨使用傳感器,請確保添加這兩個組件。
DHT11傳感器的工作原理:
DHT11傳感器配有藍(lán)色或白色外殼。在這個外殼內(nèi),我們有兩個重要的組件,可以幫助我們感知相對濕度和溫度。第一個組件是一對電極;這兩個電極之間的電阻由保濕基板決定。因此,測得的電阻與環(huán)境的相對濕度成反比。相對濕度越高,電阻值越低,反之亦然。另請注意,相對濕度與實際濕度不同。相對濕度測量空氣中的含水量相對于空氣中的溫度。
另一個元件是表面貼裝的NTC熱敏電阻。術(shù)語NTC代表負(fù)溫度系數(shù),溫度升高時電阻值將減小
先決條件:
假設(shè)您的樹莓派已經(jīng)使用操作系統(tǒng)刷新并能夠連接到互聯(lián)網(wǎng)。如果沒有,請先按照樹莓派入門教程進(jìn)行操作,然后再繼續(xù)。
還假設(shè)您可以通過終端窗口或其他應(yīng)用程序訪問您的 pi,通過這些應(yīng)用程序您可以編寫和執(zhí)行 python 程序并使用終端窗口。
在Raspberry Pi上安裝Adafruit LCD庫:
溫度和濕度值將顯示在16 * 2 LCD顯示屏上。Adafruit 為我們提供了一個庫,可以在 4 位模式下輕松操作此 LCD,因此讓我們通過打開終端窗口 Pi 并按照以下步驟將其添加到我們的樹莓派中。
第 1 步:使用以下行在樹莓派上安裝 git。Git允許您克隆 Github 上的任何項目文件,并在 Raspberry pi 上使用它。我們的庫在 Github 上,所以我們必須安裝 git 才能將該庫下載到 pi 中。
apt-get install git
第 2 步:以下行鏈接到存在庫的 GitHub 頁面,只需執(zhí)行該行即可克隆 Pi 主目錄上的項目文件
git clone git://github.com/adafruit/Adafruit_Python_CharLCD
第 3 步:使用以下命令更改目錄行,進(jìn)入我們剛剛下載的項目文件。命令行如下
cd Adafruit_Python_CharLCD
第 4 步:目錄中會有一個名為 setup.py 的文件,我們必須安裝它,以安裝庫。使用以下代碼安裝庫
sudo python setup.py install
也就是說,庫應(yīng)該已成功安裝?,F(xiàn)在同樣,讓我們繼續(xù)安裝同樣來自Adafruit的DHT庫。
在Raspberry Pi上安裝Adafruit DHT11庫:
DHT11傳感器采用單線制原理。溫度和濕度值由傳感器檢測,然后作為串行數(shù)據(jù)傳輸通過輸出引腳傳輸。然后,我們可以通過使用MCU/MPU上的I/O引腳來讀取這些數(shù)據(jù)。要了解如何讀取這些值,您必須通讀DHT11傳感器的數(shù)據(jù)表,但現(xiàn)在為了簡單起見,我們將使用一個庫與DHT11傳感器進(jìn)行通信。
Adafruit 提供的 DHT11 庫也可用于DHT11、DHT22和其他單線溫度傳感器。安裝 DHT11 庫的過程也類似于安裝 LCD 庫的步驟。
cd Adafruit_Python_DHTsudo apt-get install build-essential python-devsudo python setup.py install
完成后,您將在我們的樹莓派上成功安裝這兩個庫?,F(xiàn)在我們可以繼續(xù)進(jìn)行硬件連接。
電路圖:
下面給出了將DH11與Raspberry Pi連接的完整電路圖,它是使用Fritzing構(gòu)建的。遵循連接并建立電路
LCD和DHT11傳感器均采用+5V電源供電,因此我們使用Raspberry Pi上的5V引腳為兩者供電。DHT11傳感器的輸出引腳上使用值為1k的上拉電阻,如果您使用的是模塊,則可以避免使用此電阻。
在LCD的Vee引腳上增加了一個10k的微調(diào)器電位器,以控制LCD的對比度水平。除此之外,所有連接都非常簡單。但是記下您使用哪些 GPIO 引腳來連接引腳,因為我們的程序?qū)⑿枰?。下面的圖表應(yīng)該允許您計算出 GPIO 引腳編號。
使用圖表并根據(jù)電路圖進(jìn)行連接。我使用面包板和跳線進(jìn)行連接。由于我使用了DHT11模塊,因此我將其直接連接到Raspberry Pi。我的硬件如下所示
DHT11傳感器的Python編程:
我們必須編寫一個程序來從DHT11傳感器讀取溫度和濕度值,然后在LCD上顯示相同的值。由于我們已經(jīng)下載了LCD和DHT11傳感器的庫,因此代碼應(yīng)該非常簡單。python 完整程序可以在本頁末尾找到,但您可以進(jìn)一步閱讀以了解該程序的工作原理。
我們必須將LCD庫和DHT11庫導(dǎo)入我們的程序才能使用與之相關(guān)的功能。由于我們已經(jīng)將它們下載并安裝在我們的 Pi 上,因此我們可以簡單地使用以下行來導(dǎo)入它們。我們還導(dǎo)入時間庫以使用延遲功能。
import time #import time for creating delay
import Adafruit_CharLCD as LCD #Import LCD library
import Adafruit_DHT #Import DHT Library for sensor
接下來,我們必須指定傳感器連接到哪些引腳以及使用哪種類型的溫度傳感器。變量sensor_name分配給Adafruit_DHT。DHT11,因為我們在這里使用 DHT11 傳感器。傳感器的輸出引腳連接到樹莓派的 GPIO 17,因此我們將 17 分配給sensor_pin變量,如下所示。
sensor_name = Adafruit_DHT.DHT11 #we are using the DHT11 sensor
sensor_pin = 17 #The sensor is connected to GPIO17 on Pi
同樣,我們還必須定義LCD連接到哪些GPIO引腳。在這里,我們在4 位模式下使用 LCD,因此我們將有四個數(shù)據(jù)引腳和兩個控制引腳連接到 pi 的 GPIO 引腳。此外,如果我們也希望控制背光,您可以將背光引腳連接到 GPIO 引腳。但是現(xiàn)在我不使用它,所以我為它分配了 0。
lcd_rs = 7 #RS of LCD is connected to GPIO 7 on PI
lcd_en = 8 #EN of LCD is connected to GPIO 8 on PI
lcd_d4 = 25 #D4 of LCD is connected to GPIO 25 on PI
lcd_d5 = 24 #D5 of LCD is connected to GPIO 24 on PI
lcd_d6 = 23 #D6 of LCD is connected to GPIO 23 on PI
lcd_d7 = 18 #D7 of LCD is connected to GPIO 18 on PI
lcd_backlight = 0 #LED is not connected so we assign to 0
我們從 Adafruit 下載的 LCD 庫可用于所有類型的特色 LCD 顯示器。在我們的項目中,我們使用 16*2 LCD 顯示屏,因此我們在變量中提到了行數(shù)和列數(shù),如下所示。
lcd_columns = 16 #for 16*2 LCD
lcd_rows = 2 #for 16*2 LCD
現(xiàn)在,我們已經(jīng)聲明了LCD引腳以及LCD的行數(shù)和列數(shù),我們可以使用以下行初始化LCD顯示,該行將所有必需的信息發(fā)送到庫。
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
lcd_columns, lcd_rows, lcd_backlight) #Send all the pin details to library
為了啟動程序,我們使用 lcd.message() 函數(shù)顯示一條小的介紹消息,然后延遲 2 秒以使消息可讀。用于在 2 上打印德·行命令 n 可以使用如下所示
lcd.message('DHT11 with Pi n -CircuitDigest') #Give a intro message
time.sleep(2) #wait for 2 secs
最后,在我們的while循環(huán)中,我們應(yīng)該從傳感器讀取溫度和濕度的值,并每2秒在LCD屏幕上顯示一次。while循環(huán)中的完整程序如下所示
while 1: #Infinite Loop
濕度, 溫度 = Adafruit_DHT.read_retry(sensor_name, sensor_pin) 從傳感器#read并將各自的值保存在溫度和濕度變量中
lcd.clear() #Clear the LCD screen
lcd.message ('Temp = %.1f C' % temperature) # Display the value of temperature
lcd.message ('nHum = %.1f %%' % humidity) #Display the value of Humidity
time.sleep(2) #Wait for 2 sec then update the values
我們可以使用下面的這一行輕松地從傳感器獲取溫度和濕度值。如您所見,它返回兩個存儲在可變濕度和溫度中的值。sensor_name和sensor_pin詳細(xì)信息作為參數(shù)傳遞;這些值在程序開始時更新
濕度,溫度 = Adafruit_DHT.read_retry(sensor_name, sensor_pin)
要在LCD屏幕上顯示變量名稱,我們可以使用&d,%c等標(biāo)識符。在這里,由于我們顯示的浮點數(shù)在小數(shù)點后只有一個數(shù)字,我們使用標(biāo)識符 %.1f 來顯示可變溫度和濕度中的值
lcd.message ('Temp = %.1f C' % temperature)
lcd.message ('nHum = %.1f %%' % humidity)
使用樹莓派測量濕度和溫度:
按照電路圖進(jìn)行連接并安裝所需的庫。然后啟動本頁末尾給出的 python 程序。您的LCD應(yīng)顯示介紹消息,然后顯示當(dāng)前溫度和濕度值,如下圖所示。
如果您發(fā)現(xiàn)LCD沒有顯示任何內(nèi)容,請檢查python shell窗口是否顯示任何錯誤,如果沒有顯示錯誤,請再次檢查您的連接并調(diào)整電位計以改變LCD的對比度水平,并檢查屏幕上是否有任何內(nèi)容。
#Program to read the values of Temp and Hum from the DHT11 sensor and display them on the LCD
import time #import time for creating delay
import Adafruit_CharLCD as LCD #Import LCD library
import Adafruit_DHT #Import DHT Library for sensor
sensor_name = Adafruit_DHT.DHT11 #we are using the DHT11 sensor
sensor_pin = 17 #The sensor is connected to GPIO17 on Pi
lcd_rs = 7 #RS of LCD is connected to GPIO 7 on PI
lcd_en = 8 #EN of LCD is connected to GPIO 8 on PI
lcd_d4 = 25 #D4 of LCD is connected to GPIO 25 on PI
lcd_d5 = 24 #D5 of LCD is connected to GPIO 24 on PI
lcd_d6 = 23 #D6 of LCD is connected to GPIO 23 on PI
lcd_d7 = 18 #D7 of LCD is connected to GPIO 18 on PI
lcd_backlight = 0 #LED is not connected so we assign to 0
lcd_columns = 16 #for 16*2 LCD
lcd_rows = 2 #for 16*2 LCD
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
lcd_columns, lcd_rows, lcd_backlight) #Send all the pin details to library
lcd.message('DHT11 with Pi n -CircuitDigest') #Give a intro message
time.sleep(2) #wait for 2 secs
while 1: #Infinite Loop
humidity, temperature = Adafruit_DHT.read_retry(sensor_name, sensor_pin) #read from sensor and save respective values in temperature and humidity varibale
lcd.clear() #Clear the LCD screen
lcd.message ('Temp = %.1f C' % temperature) # Display the value of temperature
lcd.message ('nHum = %.1f %%' % humidity) #Display the value of Humidity
time.sleep(2) #Wait for 2 sec then update the values
-
傳感器
+關(guān)注
關(guān)注
2551文章
51134瀏覽量
753888 -
lcd
+關(guān)注
關(guān)注
34文章
4426瀏覽量
167577 -
DHT11
+關(guān)注
關(guān)注
19文章
277瀏覽量
57605
發(fā)布評論請先 登錄
相關(guān)推薦
評論