1. 引言
大家好!在这个数字化时代,温度监测的重要性不言而喻。今天,咱给各位分享一个小项目,即基于STM32F103C8T6单片机的智能测温系统,它不仅能实时监测温度,还能通过手机APP远程管理和查看数据,可以说是温度监测的多面手。作者在这里还给大家准备了资料,可以拉到文末领取,里面的项目不少,可以先拿来练练手哦~
2. 器件准备
在动手之前,咱们得先把所需的器件准备齐全。下面是我们需要的器件清单:
- 核心单片机:STM32F103C8T6,这款单片机以其强大的处理能力和丰富的外设接口而受到青睐。
- 温度检测模块:GY-906传感器,这款传感器以其高精度和高灵敏度而著称。
- 数据显示模块:OLED显示屏,用于实时显示温度数据和用户设定的温度阈值。
- 数据存储模块:AT24C256模块,负责存储温度数据。
- 数据传输模块:蓝牙模块,用于将数据上传至手机APP。
- 语音播报模块:JR6001模块,用于语音播报温度信息。
- 按键:四个按键,用于调整温度阈值、清空存储数据和拍照功能。
3. 原理图
接下来,让咱们一起来看看这个智能测温系统的原理图。这张图详细展示了各个模块之间的连接关系和工作原理。
大家在查看时可以发现,每个模块都扮演着重要的角色,它们共同协作,确保系统能够稳定运行。
核心单片机
STM32F103C8T6作为系统的核心,负责协调各个模块的工作,处理传感器数据,并控制其他模块的运行。
温度检测模块
GY-906传感器负责实时监测环境温度,并将数据传输给STM32单片机。这款传感器以其出色的性能,确保了温度数据的准确性。
数据显示模块
OLED显示屏不仅能够实时显示当前的温度读数,还能显示用户设定的温度阈值,让用户对系统状态一目了然。
数据存储模块
AT24C256模块作为数据存储单元,能够存储大量的温度数据,方便用户随时查看和分析。
数据传输模块
蓝牙模块使得系统能够与手机APP进行通信,实现数据的远程传输和监控。
语音播报模块
JR6001模块能够在温度超过预设阈值时发出语音提示,增加了系统的交互性。
4. 示例代码
代码是系统的基石,下面是一些关键的示例代码。
首先是主程序,这段代码它包含了多个功能模块,用于实现温度监测、显示、存储和传输。
int main(void)
{
delay_init();
Store_Init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
uart3_init(9600); //串口3初始化波特率为9600
AT24C256_Init();
OLED_Init(); //延时初始化 //初始化LED灯
Key_Init();
HC05_Init();
Timer_Init();
LED_Init();
LED1=!LED1;
SMBus_Init();
OLED_Clear();
OLED_ShowChinese(0,0,"温度:");
OLED_ShowString(100,0,"C",OLED_8X16);
OLED_Update();
OLED_ShowChinese(0,16,"阈值:");
OLED_Update();
OLED_ShowChinese(0,32,"存储数据");
OLED_ShowString(64,32,":",OLED_8X16);
OLED_Update();
OLED_ShowChinese(0,48,"存储地址");
OLED_ShowString(64,48,":",OLED_8X16);
OLED_Update();
yuzhi=Store_Data[1];
dizhi=Store_Data[2];
USART_SendString(USART3, "A7:00012\r\n");
delay_ms(10);
while(1)
{
OLED_ShowFloatNum(48,0,temp,2,2,OLED_8X16);
OLED_Update();
OLED_ShowNum(48,16,yuzhi,2,OLED_8X16);
OLED_Update();
KeyNum=Key_GetNum();
if(KeyNum==1){
Store_Data[1]++;
Store_Save();
yuzhi=Store_Data[1];
}
if(KeyNum==2&&yuzhi>0){
Store_Data[1]--;
Store_Save();
yuzhi=Store_Data[1];
}
if(KeyNum==3){
Store_Data[2]=dizhi=1;
Store_Save();
}
if(KeyNum==4){
AT24C256_WriteFloat(dizhi,temp);
AT24C256_ReadFloat(dizhi);
OLED_ShowFloatNum(70,32,temp,2,2,OLED_8X16);
OLED_Update();
dizhi+=4;
Store_Data[2]=dizhi;
Store_Save();
send_AT24C256_FloatsAsStrings(1,dizhi-1);
}
OLED_ShowNum(80,48,dizhi,5,OLED_8X16);
OLED_Update();
}
}
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
{
temp=SMBus_ReadTemp();
if(temp>yuzhi){
USART_SendString(USART3, "A7:00011\r\n"); //温度异常
delay_ms(10);
GPIO_SetBits(GPIOA, GPIO_Pin_0);
GPIO_ResetBits(GPIOA, GPIO_Pin_1);
}
else{
GPIO_SetBits(GPIOA, GPIO_Pin_1);
GPIO_ResetBits(GPIOA, GPIO_Pin_0);
}
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除TIM2更新事件的中断标志位
}
}
以下这段代码则是用于操作STM32单片机上的FLASH存储器。里面的函数允许用户读取和写入FLASH中的数据,以及擦除FLASH的页面。
void MyFLASH_ProgramWord(uint32_t Address, uint32_t Data)
{
FLASH_Unlock(); //解锁
FLASH_ProgramWord(Address, Data); //编程字
FLASH_Lock(); //加锁
}
/**
* 函 数:FLASH编程半字
* 参 数:Address 要写入数据的半字地址
* 参 数:Data 要写入的16位数据
* 返 回 值:无
*/
void MyFLASH_ProgramHalfWord(uint32_t Address, uint16_t Data)
{
FLASH_Unlock(); //解锁
FLASH_ProgramHalfWord(Address, Data); //编程半字
FLASH_Lock(); //加锁
}
5. 应用场景
关于智能测温系统呢,它可是个多面手,它不仅能在实验室里大显身手,还能在工业现场和智能家居中发挥重要作用。下面,就可以看看这个系统在不同场景下的应用:
家庭智能恒温
想象一下,外面大雪纷飞,你窝在沙发上,手里拿着一杯热可可,而你的智能测温系统正默默地工作着,确保室内温度始终保持在你最喜欢的22度。无论是暖气还是空调,它都能自动调节,让你的家始终保持舒适。而且,通过Wi-Fi,你甚至可以在下班路上就远程调整家中的温度,一进门就是温暖如春。
工业设备温控
在工业领域,温度控制同样重要。比如,一台精密的机床在工作时,如果温度过高,可能会导致零件变形,影响产品质量。而智能测温系统就能实时监控设备的温度,一旦检测到异常,就能及时发出警报,甚至自动调节冷却系统,确保设备始终在最佳状态下运行。
农业温室控制
在现代农业中,温室的温度控制对于作物生长至关重要。测温系统能够精确控制温室内的温度,为作物提供最适宜的生长环境。而且,通过集成更多的传感器,如湿度传感器、光照强度传感器,我们的系统还能进一步提升智能化水平,帮助农民实现精准农业。
实验室温度控制
在实验室里,无论是化学实验还是生物实验,温度的控制都是实验成功的关键因素之一。智能测温系统能够提供精确的温度监测,确保实验条件的稳定性。而且,通过数据存储模块,实验过程中的温度变化都能被记录下来,方便后续的数据分析和实验复现。
冷链物流温度监控
在冷链物流中,温度的精确控制对商品的保鲜至关重要。使用STM32温度监控系统,可以实时监控运输过程中的温度变化,确保商品在合适的温度下存放,减少损耗,保证商品的新鲜度。
通过这些应用场景,我们就能看到,这个系统不仅能够提供精确的温度监测,还能通过智能化的控制和管理,能够切实地为各行各业带来便利和效率的提升的。
6. 资料领取
资料可以点击链接进行获取:免费领取单片机资料