任 靜
(蘭州石化職業技術大學,甘肅 蘭州 730060)
SHT11溫濕度傳感器是目前在物聯網領域應用較廣泛的測溫器件,它因安裝簡便、維護方便、可靠性高等特點獲得了廣泛應用。如在智能家居應用中,SHT11常作為測量家居環境溫濕度的傳感器件。在本文中,SHT11溫濕度傳感器插接在以STM32F103VET6為微處理器的單片機開發板上,單片機采集處理SHT11的溫濕度信息后通過串口輸出,利用串口調試助手工具即可查看溫濕度數據。
SHT11溫濕度傳感器將溫度測量、濕度測量、信號變換、A/D轉換及加熱器功能集成到一個芯片上。濕度測量通過1個電容式聚合體測濕組件實現,溫度測量通過1個能隙式測溫組件完成。傳感器內部有1個14位的A/D轉換器,將測溫元件和測濕元件轉換得到的電信號轉換為數字量。
SHT11溫濕度傳感器的典型工作電路如圖1所示,各引腳的功能如下:腳1和4是信號地和電源,其工作電壓范圍是2.4~5.5 V;腳2和腳3是二線串行數據接口,其中DATA為數據線,SCK為時鐘線;腳5~8—未連接。

圖1 SHT11溫濕度傳感器工作電路圖Figure 1 SHT11 temperature and humidity sensor working circuit diagram
SHT11通過二線串行數據接口(SCK和DATA線)來進行訪問,電路結構較簡單。從圖1可以看出,二線串行數據接口(SCK和DATA線)和I2C的通訊方式很類似,但該二線串行數據接口的通信協議和I2C協議是不兼容的。因此需要用通用微處理器I/O口仿真該通信時序。
SHT11溫濕度傳感器的硬件連接測試電路,主要使用了北京新大陸教育有限公司開發的1+X傳感網應用開發實訓套件中的M3模塊開發板,如圖2所示。M3模塊開發板使用了STM32F103VET6微處理器,集成了傳感器通用接口模塊、串口等。

圖2 M3主控模塊開發板Figure 2 M3 main control module development board
SHT11溫濕度傳感器和STM32F103VET6單片機的硬件連接如圖3所示。圖中U2A為傳感器通用接口模塊,使用時將SHT11溫濕度傳感器插接在此接口模塊上即可。傳感器通用接口模塊和SHT11的具體引腳連接如圖3中所示,U2A的7腳和9腳分別和STM32F103VET6的PB6和PB7連接;作為I2C通訊的SCK和DATA信號線,它們分別和SHT11溫濕度傳感器的3腳(SCK)和2腳(DATA)連接,把溫濕度傳感器測得的數據通過這兩根信號線和微處理器通訊。

圖3 SHT11和單片機硬件連接電路圖Figure 3 SHT11 and SCM hardware connection circuit diagram
因SHT11的SCK線和DATA線與STM32單片機的PB6和PB7相連接,因此在SHT11的初始化中需將PB6和PB7端口設置為輸出端口,并將SCK線拉低,DATA線拉高。相應的程序代碼設計如下:

SHT11的啟動時序是當SCK為高電平時,DATA由高電平變為低電平。SCK再由低電平變為高電平,正好經過一個周期,此時DATA線變為高電平,此后SHT11便開始啟動,正常工作。否則,SHT11便處于休眠狀態。相應的啟動程序代碼為:


命令字包含三個地址位(目前為000)和5個命令位。常用的命令字有:溫度測量命令00000011濕度測量命令00000101,讀狀態寄存器命令00000111,寫狀態寄存器命令00000110,軟件復位命令00011110。各命令代碼定義如下:
#define SH1x_MEASURE_T_CMD 0X03

當向傳感器發送相應的命令字時,需先將SCK電平拉低,才可以寫入DATA的數據,并且命令字總是從最高位開始寫起。當寫完命令字以后,在下一次時鐘脈沖的上升沿到來之后,等待傳感器接收到命令字的ACK應答信號。當傳感器正確接收到命令字后,應將DATA線電平拉低,在等待ACK應答信號的時間里,SCK應保持高電平。相應的寫命令字的程序代碼設計如下:


當傳感器測量結束,SHT11會將DATA線電平拉低,接著發送2字節的測量數據和1字節的CRC校驗數據。每成功讀到一個字節,單片機需要將DATA線電平拉低,作為ACK應答信號。讀取數據時,總是從最高位開始,右值有效。例如對于默認的12位分辨率濕度測量,前4位為無用數據,從第5個SCK時鐘開始算作最高位。當單片機讀完數據后,會將DATA線電平拉高,以結束本次通訊,隨后SHT11進入休眠狀態,等待下次啟動時序的到來。相應的讀測量結果的程序代碼設計如下:


溫濕度數據的計算與分辨率、電源電壓等參數有關。現給出溫濕度數據的計算公式,在默認情況下,SHT11溫度測量分辨率為14位,濕度測量分辨率為12位。
3.5.1 濕度信號轉換
如果單片機讀得的數字結果為signal_out,則humidity計算公式為:

公式中的參數取值如下:

分辨率 C1 C2 C3 12bit -2.0468 0.0367 -1.5955E-6 8bit -2.0468 0.5872 -4.0845E-4
在默認分辨率下,C1=-2.0468,C2=0.0367,C3=-1.5955E-6。
3.5.2 溫度信號轉換
如果單片機讀得的數字結果為signal_out,則temp計算公式為:

公式中的參數取值如下:

VDD d1/(℃) d1/(℉)5V -40.1 -40.2 4V -39.8 -39.6 3.5V -39.7 -39.5 3V -39.6 -39.3 2.5V -39.4 -38.9分辨率 d2/(℃) d2/(℉)14bit 0.01 0.018 12bit 0.04 0.072
在默認分辨率下,d1=-39.7(供電電壓3.3V),d2=0.01。
如果出現通訊中斷等情況,可以使用復位。復位的發生是當DATA保持高電平時,觸發SCK時鐘9次或更多,然后發送“傳輸啟動”時序,向SHT11寫入復位命令控制字,相應的程序設計如下:

3.7.1 溫度測量程序設計
在3.5.2中已經給出了默認分辨率下的溫度信號轉換公式。根據此公式將單片機從SHT11讀得的測量數據進行轉換,便得到了正確的溫度數據,相應的程序如下:


3.7.2 濕度測量程序設計
在3.5.1中已經給出了默認分辨率下的濕度信號轉換公式。根據此公式將單片機從SHT11讀得的測量數據進行轉換,便得到了正確的濕度數據,相應的程序如下:


在STM32F103VET6單片機開發板的開發程序中,添加SHT11溫濕度傳感器的測量程序文件,可采集環境的溫濕度數據,通過串口調試助手可查看采集到的數據。圖4所示為單片機開發板M3主控模塊插接SHT11的硬件設備連接;圖5所示為通過串口調試助手輸出的溫濕度數據。

圖4 M3主控模塊插接SHT11溫濕度傳感器Figure 4 The M3 main control module is connected to the SHT11

圖5 串口助手查看到的溫濕度采集數據Figure 5 Temperatureand humidity data obtained by the serial port assistant
本文采用北京新大陸開發教育有限公司1+X傳感網應用開發實訓套件中的M3主控模塊開發板,詳細闡述了SHT11溫濕度傳感器和STM32F103VET6單片機的電路連接以及測量通訊的程序代碼。經過驗證,本系統能在串口調試助手正確顯示采集的溫濕度數值。