一、前言
项目介绍:近年来,空气质量和室内温湿度控制引起了广泛关注。良好的环境条件直接影响人体健康和生活质量,尤其在家庭、农业、工业和仓储等领域尤为重要。在此背景下,基于 SHT41 传感器的环境温湿度检测器项目应运而生。SHT41 传感器作为新一代高精度设备,具有低功耗、高精度和快速响应的特点,适合各类环境监测。本项目旨在设计一个基于SHT41的环境温湿度检测器,使用STM32F103C8T6和OLED屏进行显示当前环境的温湿度,用作原型开发阶段。
设计思路:使用锂电池供电,主控使用STM32F103C8T6核心板,通过I2C2读取SHT41的数据,通过I2C1在OLED屏上显示。
框图介绍:
二、原理图及PCB介绍
系统供电采用的是3.7V的锂电池供电,所以需要降压至3.3V给主控、以及其他部分供电。一个基于MIC5219-3.3YM5-TR的3.3V稳压电路,其中VCC为输入电压,通过C1的1μF电容进行滤波后输入稳压芯片的IN端,芯片的OUT端输出稳定的3.3V电压,输出端使用C2(100nF)和C3(1μF)电容进行进一步滤波,而芯片的EN(使能端)接地使得稳压器一直处于工作状态,BY(旁路端)未接,起到降低噪声的作用,整个电路通过这些元件保证了稳定的3.3V输出。
MIC5219-3.3YM5-TR:
MIC5219-3.3YM5-TR是MICROCHIP(美国微芯)是一款高效的线性稳压器,具有高峰值输出电流能力、极低压差电压和优于 1% 的输出电压精度。轻载时压差通常为 10mV,满载时压差小于 500mV,广泛应用于各种电子设备中。
特性
• 500mA 输出电流能力
SOT-23-5 封装 - 500mA 峰值
2mm×2mm MLF® 封装 - 500mA 连续
2mm×2mm 薄型 MLF® 封装 - 500mA 连续
MSOP-8 封装 - 500mA 连续
• 满载时最大压差低至 500mV
• 极严格的负载和线路调节
• 微型 SOT-23-5 和 MM8™ 功率 MSOP-8 封装
• 超低噪声输出
• 低温度系数
• 电流和热限制
• 电池反接保护
• CMOS/TTL 兼容启用/关断控制
基于SHT41传感器所需的应用电路比较简单,使用SDA和SCL作为I2C通信接口,分别通过R1和R2两个10kΩ的上拉电阻连接到VDD供电,VDD与地之间通过C4的100nF电容进行滤波,确保供电稳定,SHT41用于检测环境的温湿度,通过I2C接口与外部设备进行数据传输。
主控采用的是STM32F103C8T6核心板,直接使用排母进行连接,引出两个I2C接口。STM32F103C8T6是意法半导体的一款主流高性能系列Arm Cortex-M3 MCU,配有64 KB Flash存储器,72 MHz CPU,电机控制、I2C、USB和CAN。
- Arm®32位Cortex®-M3 CPU内核
- 最大频率72 MHz,以零等待周期访问存储器时的性能达1.25 DMIPS/MHz (Dhrystone 2.1)
- 单周期乘法和硬件除法指令
- 2个12位1 μs A/D转换器(多达16通道)
- 转换范围:0 V至3.6 V
- 双采样和保持功能
- 温度传感器
- DMA
- 7通道DMA控制器
- 支持的外设包括:定时器、ADC、SPI、I2C和USART
- 7个定时器
- 3个16位定时器,每个定时器有多达4个用于IC/OC/PWM或脉冲计数的通道和正交增量编码器输入
- 用于电机控制的16位PWM定时器,带死区生成和紧急停止功能
- 2个看门狗定时器(独立看门狗和窗口看门狗)
- SysTick定时器24位递减计数器
- 通信接口多达9个
- 多达2个I2C接口 (SMBus/PMBus®)
- 多达3个USART(ISO 7816接口、LIN、IrDA功能、调制解调器控制)
- 多达2个SPI (18 Mbit/s)
- CAN接口(2.0B当前最新)
- USB 2.0全速接口
- CRC计算单元,96位唯一ID
三、成品功能测试
关键代码及说明:
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
Bsp_I2c_Init();
Bsp_Oled_Init();
sensirion_i2c_init();
while (sht4x_probe() != STATUS_OK) {
sensirion_sleep_usec(1000000); /* sleep 1s */
}
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
int32_t temperature, humidity;
int8_t ret = sht4x_measure_blocking_read(&temperature, &humidity);
if (ret == STATUS_OK) {
OLED_ShowString(0, 2, (uint8_t*)temperature, 16, 0); //正相显示6X8字符串
OLED_ShowString(0, 4, (uint8_t*)humidity, 16, 0); //正相显示6X8字符串
}
sensirion_sleep_usec(1000000);
}
/* USER CODE END 3 */
}
这段主程序用于初始化外设并通过 SHT4x 温湿度传感器实时监测环境温度和湿度。程序首先初始化 HAL 库和系统时钟,然后配置 GPIO 和其他外设,包括 I2C 通信和 OLED 显示屏。接着,通过循环检测 SHT4x 传感器是否可用,若可用则进入主循环。在主循环中,调用 sht4x_measure_blocking_read() 获取温度和湿度数据,并通过 OLED_ShowString() 函数将其显示在 OLED 屏幕上,最后程序每隔一秒进行一次测量。
int16_t sht4x_measure_blocking_read(int32_t* temperature, int32_t* humidity) {
int16_t ret;
ret = sht4x_measure();
if (ret)
return ret;
sensirion_sleep_usec(sht4x_cmd_measure_delay_us);
return sht4x_read(temperature, humidity);
}
int16_t sht4x_read(int32_t* temperature, int32_t* humidity) {
uint16_t words[2];
int16_t ret = sensirion_i2c_read_words(SHT4X_ADDRESS, words,
SENSIRION_NUM_WORDS(words));
/**
* formulas for conversion of the sensor signals, optimized for fixed point
* algebra:
* Temperature = 175 * S_T / 65535 - 45
* Relative Humidity = 125 * (S_RH / 65535) - 6
*/
*temperature = ((21875 * (int32_t)words[0]) >> 13) - 45000;
*humidity = ((15625 * (int32_t)words[1]) >> 13) - 6000;
return ret;
}
这段代码用于从 SHT4x 温湿度传感器中阻塞式地读取温度和湿度数据。sht4x_measure_blocking_read 函数首先调用 sht4x_measure() 开始测量,如果成功则等待传感器完成测量,然后调用 sht4x_read 读取温度和湿度。sht4x_read 函数通过 I2C 接口读取两个 16 位数值,分别表示温度和湿度,然后使用相应的公式将原始数据转换为实际的温度(以千分之一度为单位)和相对湿度(以千分之一百分比为单位),最终将计算结果存储在传入的指针中并返回读取状态。
四、活动总结
在进行基于 SHT41 传感器的环境温湿度检测器项目过程中,我深刻体会到科技在改善生活质量和提升环境监测精度方面的巨大潜力。这次经历不仅让我更加深入地理解了温湿度对人类健康和环境的重要性,也让我对实际项目的实施有了更全面的认识。同时,我非常感谢主办方组织此次活动,希望能够吸引更多爱好者的参与。