DHT11是一款溫濕度傳感器,顧名思義,用于測量特定環(huán)境或密閉空間內(nèi)的大氣溫濕度。該傳感器通常用于監(jiān)測農(nóng)業(yè)、食品工業(yè)、醫(yī)院、汽車、氣象站等許多應(yīng)用中的環(huán)境參數(shù)。
該傳感器可以測量從 0°C 到 50°C 的溫度,精度為 1°C。它通常用于受控環(huán)境中,例如熱通風(fēng)系統(tǒng)、恒溫室等,以監(jiān)測溫度并采取糾正措施。濕度測量范圍為 20% 至 90%,精度為 1%。濕度表示空氣中存在的水蒸氣量。在許多情況下,例如在制造和儲(chǔ)存茶粉時(shí),濕度值必須保持在受控范圍內(nèi),必須在房間內(nèi)保持正確的濕度,否則茶會(huì)失去味道和氣味。客廳的濕度水平也應(yīng)保持在舒適的范圍內(nèi)。獲得最大舒適度的理想濕度值在 50% 到 65% 之間。
今天在本教程中,我們將學(xué)習(xí)如何將流行的 DHT11 溫度和濕度傳感器與 STM32 微控制器連接。
DHT11溫濕度傳感器
在繼續(xù)界面程序之前,讓我們了解一些有關(guān) DHT11 傳感器的信息。如前所述, DHT11 傳感器用于測量 溫度和濕度。 該傳感器帶有一個(gè)專用的內(nèi)置 NTC來測量溫度。它有一個(gè)板載 8 位微控制器,可通過單線協(xié)議將溫度和濕度值作為串行數(shù)據(jù)輸出。意思是,傳感器只有一個(gè)數(shù)據(jù)引腳,通過它可以讀取溫度和濕度值,從而節(jié)省了微控制器端的引腳。該傳感器還經(jīng)過工廠校準(zhǔn),因此易于與其他微控制器連接。
DHT11 規(guī)格:
工作電壓:3.5V 至 5.5V
工作電流:0.3mA(測量)60uA(待機(jī))
輸出:串行數(shù)據(jù)
溫度范圍:0°C 至 50°C
濕度范圍:20% 至 90%
分辨率:溫度和濕度均為 16 位
準(zhǔn)確度:±1°C 和 ±1%
所需組件
STM32F103C8
DHT11溫濕度傳感器
16x2 液晶顯示器
面包板
連接電線
電路原理圖
將 DHT11 與 STM32 微控制器連接的完整電路圖如下所示。電路是使用 Fritzing 軟件繪制的。
如您所見,我們使用I2C 接口模塊將 LCD 模塊連接到 STM32。這使連接變得簡單,并進(jìn)一步減少了控制器端使用的引腳數(shù)量。但是,如果您沒有此模塊,您也可以通過以下鏈接直接連接 LCD STM32 。
如果您有接口模塊,那么 I2C 串行接口模塊(固定 16X2 LCD 顯示器)和 STM32F103C8 之間的電路連接如下表所示:
同樣,STM32F103C8 和 DHT11 傳感器之間的電路連接如下表所示。
連接完成后,我的硬件如下所示。
整個(gè)設(shè)置由我筆記本電腦的 STM32 的 USB 端口供電?,F(xiàn)在我們的硬件已經(jīng)準(zhǔn)備好了,讓我們進(jìn)入編碼部分。
為 STM32F103C8 準(zhǔn)備 Arduino IDE
我們必須編寫一個(gè)程序來從 DHT11 傳感器中讀取溫度和濕度值并將其顯示在 LCD 模塊上。這里液晶顯示器是通過I2C適配器連接的,因此我們首先要找到這個(gè)適配器的I2C地址來與LCD通信。
將 I2C 串行 LCD 接口適配器模塊與 STM32F103C8 連接:
從電路圖中我們可以注意到 STM32F103C8 I2C 引腳 PB6 和 PB7 與 I2C 串行接口模塊的 SCL 和 SDA 引腳相連。要查找 I2C 串行接口模塊的地址,我們必須掃描可用地址。
掃描 I2C 串行接口模塊的地址:
按照以下步驟查找 LCD I2C 接口模塊的 I2C 地址。
1.首先檢查Arduino IDE的STM32包是否安裝。
2. 通過上述鏈接使用 Arduino IDE 安裝用于編程 STM32 的軟件包時(shí),默認(rèn)安裝了線庫。
3. 示例中提供了用于掃描連接的 I2C 設(shè)備的程序(在 Arduino IDE 中:Files-》Examples-》Wire-》I2C 掃描儀線)。在此之前,在 Tools-》Board-》Generic STM32F103C8 Series 中選擇板,如下所示。
4. 然后將代碼上傳到 STM32F103C8 和打開的串行監(jiān)視器。
現(xiàn)在注意 I2C 16x2 LCD 顯示器的 I2C 地址為 (0x27)。
為 I2C 16x2 顯示模塊和 DHT11 傳感器安裝庫:
現(xiàn)在我們知道了 I2C 地址,我們需要下載一個(gè)庫,以便通過 I2C 與 LCD 顯示器進(jìn)行通信。I2C LCD 顯示庫可從此鏈接下載。下載 zip 文件后,通過 sketch-》import library 在 Arduino IDE 中安裝 I2C LCD 庫。該庫也可以與 Arduino 板一起使用,用于與 I2C LCD 顯示模塊進(jìn)行通信。
同樣,為了從 DHT11 傳感器讀取串行數(shù)據(jù),我們將使用DHT11 庫。使用提供的鏈接將庫下載為 ZIP 文件,下載后,使用草圖-》導(dǎo)入庫在 Arduino IDE 中安裝 DHT庫。同樣的庫也可以與 Arduino 板一起使用。
編碼說明
本文的完整代碼可以在本頁底部找到,相同的解釋如下。最初包括所需的庫。包括用于在 STM32F103C8中使用 I2C 的Wire.h庫、用于使用 I2C 類型 LCD 顯示器的LiquidCrystal_I2C.h和用于使用 DHT 傳感器功能的DHT.h
#include#include #include
現(xiàn)在定義了與STM32F103C8的PA1相連的DHT11(OUT引腳)的引腳名稱
#define DHTPIN PA1
而且,DHTTYPE 被定義為 DHT11。
#define DHTTYPE DHT11
接下來初始化 I2C 地址為 0x27 和 16x2 類型 LCD 顯示器的LiquidCrystal_I2C類的對象 lcd 。
LiquidCrystal_I2C lcd(0x27, 16, 2);
此外, DHT 類的對象 dht與 STM32 和 DHT 類型為 DHT11 的 DHT 引腳被初始化
DHT dht(DHTPIN, DHTTYPE);
接下來在void setup() 中:
首先使用以下方法初始化 LCD
液晶顯示器開始();
然后使用以下語句開始接收來自 DHT11 傳感器的溫度和濕度值。
dht.begin();
打開黑光燈并打印歡迎信息并在三秒鐘后清除它們。
液晶背光(); lcd.setCursor(0,0); lcd.print("電路文摘"); lcd.setCursor(0,1); lcd.print("DHT11 與 STM32"); 延遲(3000); lcd.clear();
接下來在void loop() 中:
從 DHT11 傳感器連續(xù)接收該值。為了獲得溫度和濕度的單獨(dú)值并將其存儲(chǔ)在變量中,使用了以下語句。
僅獲取濕度值
浮動(dòng) h = dht.readHumidity();
僅獲取溫度值
浮動(dòng) t = dht.readTemperature();
最后在 16X2 LCD 顯示屏上打印
lcd.setCursor(0,0); lcd.print("溫度:"); lcd.print(t); lcd.print("C"); lcd.setCursor(0,1); lcd.print("濕度:"); lcd.print(h); lcd.print("%");
基于STM32的溫度計(jì)的工作
一旦您的硬件和代碼準(zhǔn)備就緒,只需將代碼寫入您的硬件,您應(yīng)該會(huì)注意到您的 LCD 顯示歡迎屏幕,然后是實(shí)時(shí)溫度和濕度值,如下所示
如果您的顯示器沒有顯示任何內(nèi)容,您可以檢查調(diào)整I2C 模塊背面的對比度電位器。我嘗試使用空調(diào)改變房間溫度,發(fā)現(xiàn)傳感器值也會(huì)相應(yīng)變化。AC 還可以選擇測量室溫,如下圖所示,我的遙控器顯示室溫為 27°C,我們的傳感器還在 LCD 上顯示 27.3°C,這非常接近。
#include
#include
庫 #include
#define DHTPIN PA1
#define DHTTYPE DHT11
LiquidCrystal_I2C lcd(0x27, 16, 2); //為LiquidCrystal_I2C類初始化對象lcd,I2C地址為0x27和16x2類型的LCD顯示
DHT dht(DHTPIN, DHTTYPE); //使用STM32的DHT引腳和DHT類型為DHT11的DHT類初始化對象dht
void setup()
{
// 初始化 LCD
lcd.begin();
dht.begin(); //開始接收溫度和濕度值。
液晶背光();// 打開黑燈并打印歡迎信息。
lcd.setCursor(0,0);
lcd.print("電路文摘");
lcd.setCursor(0,1);
lcd.print("DHT11 與 STM32");
延遲(3000);
lcd.clear();
}
無效循環(huán)()
{
浮動(dòng)h = dht.readHumidity();//獲取濕度值
float t = dht.readTemperature(); //獲取溫度值
lcd.setCursor(0,0);
lcd.print("溫度:");
lcd.print(t);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("濕度:");
lcd.print(h);
lcd.print("%");
}
-
微控制器
+關(guān)注
關(guān)注
48文章
7552瀏覽量
151417 -
STM32
+關(guān)注
關(guān)注
2270文章
10900瀏覽量
355981 -
濕度傳感器
+關(guān)注
關(guān)注
7文章
308瀏覽量
58549 -
DHT11
+關(guān)注
關(guān)注
19文章
277瀏覽量
57592 -
STM32F103C8
+關(guān)注
關(guān)注
1文章
23瀏覽量
8088
發(fā)布評論請先 登錄
相關(guān)推薦
評論