一、项目和创意方向介绍
项目概述:
在快节奏的生活与工作中,保持室内环境的舒适度对于提升工作效率和居住质量至关重要。本项目旨在设计一款集高科技与实用于一体的智能桌面温湿度仪,它不仅能够实时监测并显示当前环境的温度和湿度,还以其简约而不失科技感的设计,成为现代办公与家居环境中的一道亮丽风景线。
创意方向:
本项目选择了“音影娱乐”为创意方向利用STM32G030K6T6微控制器作为核心处理单元,该芯片具备高性能、低功耗的特点,能够高效处理来自传感器的数据,并通过算法优化显示精度与响应速度。选用高精度温湿度传感器模块,确保用户获取的信息准确无误。采用两块清晰易读的三位数码管作为显示界面,分别展示温度和湿度值,设计简洁直观,用户无需复杂操作即可一目了然当前环境状态。
二、原理图及PCB介绍
设计思路:
温湿度传感器把数据传输给STM32单片机,然后单片机对数据进行处理控制数码管进行显示。
方案框图:
使用用DigiKey官网的Scheme-it在线工具绘制。单片机通过读取温湿度传感器的数据来驱动两个三位数码管进行显示。
电路原理图:
使用嘉立创EDA绘制,整体原理图如下
主控电路使用磁珠和电容进行滤波,提升主控芯片供电稳定性。
晶振电路外接32.768kHz的无源晶振。
温湿度传感器电路
三态输出8位移位寄存器电路,通过3个595移位寄存器控制两个数码管显示数值。
按键唤醒电路当主控芯片休眠时,提供一个中断信号,唤醒芯片开始工作的。
共阴极3位数码管电路
电池供电电路使用MOS管做防反接保护。
SWD下载调试接口下载调试程序使用。
本次项目中使用了指定厂商意法半导体公司的STM32G030K6T6芯片和莫仕(molex)公司的排针
PCB设计:
使用嘉立创EDA绘制。
三、成品功能测试
实物图:
显示温度
显示湿度
四、程序说明
包含相关头文件。
#include "main.h"
#include "adc.h"
#include "i2c.h"
#include "tim.h"
#include "gpio.h"
初始化,配置时钟。
int main(void)
{
/* USER CODE BEGIN 1 */
float temperature = 0;
float humidity = 0;
/* 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 */
HAL_DeInit();
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC1_Init();
MX_I2C1_Init();
MX_TIM14_Init();
/* USER CODE BEGIN 2 */
HAL_Delay(100);
SN74HC595_Send_Data(SN_DIG,0xFF); //¹Ø±ÕÊýÂë¹ÜÏÔʾ
SN74HC595_Send_Data(SN_LED1,0x00);
SN74HC595_Send_Data(SN_LED2,0x00);
/* USER CODE END 2 */
HAL_SuspendTick(); //ÔÝÍ£µÎ´ð¶¨Ê±Æ÷£¬·Àֹͨ¹ýµÎ´ð¶¨Ê±Æ÷Öжϻ½ÐÑ
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); /* Ö´ÐÐWFIÖ¸Áî, ½øÈë˯Ãßģʽ */
检测按键状态,读取温度和湿度数据,控制睡眠模式
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(device_paramter.KeyStatus == KEY_SHAKE_STATE)
{
HAL_Delay(10);
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5) == GPIO_PIN_RESET)
{
while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5) == GPIO_PIN_RESET);
SHT40_Read_RHData(&temperature,&humidity); //¶ÁÈ¡ÎÂʪ¶È
device_paramter.Temp = temperature * 10; //·Å´óÎÂʪ¶È
device_paramter.Humi = humidity * 10;
HAL_TIM_Base_Start_IT(&htim14); //¿ªÊ¼¶¨Ê±Æ÷£¬ÏÔʾÁ½´ÎÊý¾Ý
device_paramter.sleepStatus = 0; //Çå³ýÐÝÃß±êÖ¾
device_paramter.KeyStatus = KEY_NO_PRESS; //Çå³ý°´Ï±êÖ¾
}
}
else if(device_paramter.sleepStatus == 1) //ÏÔʾ½áÊø£¬½øÈëÐÝÃß
{
HAL_SuspendTick(); //ÔÝÍ£µÎ´ð¶¨Ê±Æ÷£¬·Àֹͨ¹ýµÎ´ð¶¨Ê±Æ÷Öжϻ½ÐÑ
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); /* Ö´ÐÐWFIÖ¸Áî, ½øÈë˯Ãßģʽ */
}
}
/* USER CODE END 3 */
}
五、活动总结
通过这次活动进一步提升了我的动手能力,也发现了很多自己的不足并加以改正,很感谢硬禾学堂举办的活动。