SHT30溫濕度計
概述
使用STM32C6T6作為主控(C8T6的代碼通用,用這個主要是便宜😊),通過IIC總線連接OLED屏和溫濕度傳感器SHT30,使用標准庫配置IIC控制器,通過寫不同的地址來選擇性的與OLED屏和SHT30通訊,分時復用同一個IIC總線。讀取SHT30數據處理成溫濕度后顯示到OLED並通過串口打印。
電路
-
新建PCB工程,新建原理圖、PCB,並添加到工程。
-
選擇芯片下載並生成對應庫
- 官網下載相關數據
-
生成對應的庫
-
導入庫
-
繪制原理圖
-
基本繪制根據芯片數據手冊繪制原理圖
-
封裝選擇
-
原理圖標注
-
-
繪制PCB
-
生成PCB
-
布局調整
-
連線,切板和過孔
- 連線
- 切板
- 過孔
-
鋪銅
-
-
生成Geber文件發送給廠商印制電路板(嘉立創免費打板,可以直接發送PCB文件)
代碼
- 標准庫新建工程模板
打開MDK5, Project –>New Uvision Project ,選擇芯片STM32C6T6,復制標准庫中用到的文件到相應的文件夾,添加全局宏定義STM32F10X_LD,USE_STDPERIPH_DRIVER ,添加編譯頭文件的包含路徑。
嘗試編譯編譯成功后開始后續代碼編寫。
- 編寫配置IIC初始化的函數
使用標准庫函數,使能IIC相關時鍾,AFIO時鍾和GPIOB的時鍾
使用初始化結構體初始化GPIO,配置IIC控制器的工作方式。
- 編寫SHT30相關程序
使用初始化結構體GPIO_InitTypeDef,初始化端口PB8,該引腳用於控制SHT30的電源,即PB8為高電平時SHT30才會工作。
編寫初始化函數,先將PB8輸出高電平,然后使用IIC控制器向SHT30寫命令0x2c,0x06設置SHT30,每秒獲取一次溫濕度數據。
編寫數據讀取函數,發送 (地址<<1|0x01)即從SHT30中讀取數據,存到數據緩沖數組中,將數據根據公式轉化為溫濕度。RH = hum*100 / (2^16-1) T = -45 + 175 * tem / (2^16-1)
- 編寫OLED控制程序
新建一個u8 OLED_GRAM[144][8];用於存放要寫入OLED的顯存數據,在調用OLED_Refresh時將顯存數據寫入OLED。使用PCtoLCD2000生成數字字模,將溫度濕度圖標位圖也生成數組存儲。
編寫函數以調用字模更改顯存OLED_GRAM中的數據,更改完成后通過調用OLED_Refresh刷新顯示。
- 編寫串口初始化函數
初始化串口相關的時鍾,GPIO,使用結構體配置USART模式
- 編寫主函數main
-
初始化串口
-
初始化延時函數(配置SysTick定時器)
-
IIC初始化
-
SYSTEM_Init (在OLED屏上顯示初始化中的信息)
-
初始化SHT30
-
主循環
-
讀取溫濕度到全局變量,humi和temp
-
串口打印溫濕度
-
OLED顯示溫濕度
-
延時1s進入下一次循環
-
-
運行狀態
程序運行后OLED屏上顯示溫度和濕度
通過串口調式助手也可以看到溫濕度數據
總結
使用STM32C6T6 通過IIC總線分別與OLED和SHT30通訊,通過MOS管控制傳感器電源做到了實時的低功耗的溫濕度檢測。電路設計時考慮了低功耗設計(程序中未實現),使用Si2302 Mos管控制傳感器電源,且本電路同時支持DHT11傳感器和SHT3X傳感器。且使用了板切割槽減少由於電路長期運行帶來的熱量影響到溫度檢測的准確性。本項目結合了軟件硬件的設計,搭建了一個完整的單片機系統,實現了預期的效果,正確讀取到了溫濕度數據。通過本項目可以了解到單片機設計開發的完整流程,從零開始完成了一個具有一定實用功能的單片機系統設計。
文件下載
這是SeakrWen的博客,歡迎轉載,但請注明出處。