蔡明 鄧萍 唐軍
本文利用溫濕度傳感器DHT11和STM32單片機設計了一個簡易簡易環境溫濕度測量系統,并利用PC機上的串口調試助手軟件對采集到的數據進行了顯示。
1引言
在日常辦公教學中,大部分的活動都在室內完成,在夏天溫度較高的時候,需要對室內開空調進行降溫處理,以保證教學活動的順利進行,故室內環境溫度、濕度是一個重要的參數,對于我校教室空調的使用,起到了決策依據的作用。因此,快速、準確地測量出環境溫濕度,具有重要意義。
本文利用溫濕度傳感器DHT11和STM32單片機進行溫濕度數據采集設計,并從節約成本的角度出發,考慮實際使用的便利,利用PC機上的串口調試助手完成數據顯示。
2硬件設計
系統利用DHT11完成溫濕度基礎數據采集,采集到的數據通過單總線傳送到STM32單片機上,再利用STM32的USART0與PC進行通信,將數據通過PC上的串口調試助手顯示出來。
DHT11是一款有已校準數字信號輸出的溫濕度傳感器。精度濕度+-5%RH,溫度+-2℃,量程濕度20~90%RH,溫度0~50℃,其接口為4引腳封裝,1腳VDD供電,2腳為單總線的DATA串行數據引腳,在本設計中,DATA引腳接STM32的PE0進行數據通信,3腳為NC空腳,4腳為電源地。
STM32單片機是ST公司生產的Cortex-M3內核ARM單片機,多應用在高性能、低成本、低功耗的嵌入式設計中,本設計采用的型號為STM32F103VET6,經過PLL的9倍頻,可以運行在72MHz的時鐘頻率上。
由于STM32的USART0通信引腳(PA9和PA10)無法直接和PC進行通信,因此在STM32和PC之間還需要一個串口轉換芯片進行數據轉換。
3軟件設計
在軟件設計中,重點是設計DHT11的驅動,如前所述,DHT11是單總線器件,通過DATA與STM32進行通信,每次只能傳送1bit數據,而依據DHT11數據手冊,一次完整的通信包括40bit,即5byte數據。40bit數據在傳輸時,先傳輸高位信號,再傳低位信號,當40bit傳送完成,在STM32內存變量中,將用5個byte變量存放其數據,我們設計了一個數組bufer[5]來存儲。當一次正確的數據傳輸完成后,bufer[0]存儲的數據為濕度的整數部分,bufer[1]存儲的數據為濕度的小數部分;bufer[2]存儲的數據為溫度的整數部分,bufer[3]存儲的數據為溫度的整數部分。定義的5個字節數組還剩下了一個bufer[4],為校驗字節,用于指示傳送數據是否正確,其判定根據為:如果bufer[4]=buf[0]+buf[1]+buf[2]+buf[3],那么整個流程傳送過程正確,否則錯誤。
由于DHT11單總線傳輸數據,因此,除了設計接收好字節數據的處理之外,更重要的是依據其時序圖,設計基本的字節傳送驅動函數。
在傳輸過程中,首先由STM32發起開始信號,開始信號發送完成后,STM32延時等待20us~40us,再讀取DH11T的DATA單總線的回應信號,如果讀取的值為0,即說明DHT11發送了回應信號,否則就判定沒有接收到DHT11的響應信號,需重由STM32重新對DHT11發送開始信號。下面就傳送過程中的起始信號、響應信號、位“0”,位“1”進行闡述。
3.1起始信號、響應信號
結合STM32程序設計來講起始信號的過程,首先將STM32對應的端口配置為推挽輸出模式,然后將DATA端口置0,即PE0輸出0,輸出0的時間至少要為18ms以上,程序中設計選擇為20ms;延時20ms時間到了之后,將數據端口DATA置1,再延時30us,至此由STM32發出的起始信號完成,系統進去等待DHT11響應階段。
在響應過程階段,STM32首先應該將DATA端口PE0的端口方向改為浮空輸入,然后再去讀取端口PE0的值。DHT11正常響應會將DATA端口數據先拉低40~80us,然后再拉高40~80us,設計STM32程序,如果檢測上上述過程,則認為響應信號正常,進入信號傳輸階段,否則就認為無響應,返回響應失敗標志。
當由STM32發出的起始信號得到DHT11正確的響應信號后,系統即進入讀取數據階段。在此階段主要是由DHT11發出的高電平脈沖時間來判定就是總線傳輸數據是0還是1,如圖5所示,如果傳送的是0,那么其高電平時間將在其高電平時間將在28us以下,如果傳送的是1,那么其高電平時間在70us左右。因此,在程序設計中,當檢測到DATA信號為1開始計時,40us延時以后,再去讀取DATA的值,如果此時讀取的值為0,那么說明傳送的值為0,否則為1。
這樣的操作將會連續進行40次,將其存儲到bufer寄存器里邊,當40次完成后,即可利用前述字節出來方法進行數據處理,得到溫度與濕度。
由于系統的設計目的是采集溫濕度信息,為空調開啟提供依據,因此,并不需要很高的精度,從化簡程序出發,我們只保留了溫濕度的整數信息,即buffer[0]表示濕度,buffer[1]表示溫度。
采集到的信號通過STM32的USART1發送給PC機,USART1配置成波特率為9600,數據長8bit,停止位為1bit,無校驗位的格式。
4系統調試
系統設計完成后,我們利用單片機小系統板、DHT11傳感器模塊和PC進行了調試,實驗證明,可以在PC機上正確顯示出數據。
5結語
本文利用溫濕度傳感器DHT11,STM32小系統板實現了溫濕度數據的測量,并利用PC串口助手進行的溫濕度信息顯示,經過測試,達到了設計要求。
參考文獻:
[1]王志宏,白翠珍.基于DHT11的實驗室多點溫濕度報警系統設計[J].山西電子技術,2011(04).
[2]張衛星,張桂香,譚成午.基于STM32的環境多點監測系統設計[J].計算機測量與控制,2014(10).
作者簡介:
蔡明(1977—),男,漢族,宜賓,宜賓市骨干教師,中教一級,長期從事中學教學與管理工作,參與多項教學改革課題。