回答

收藏

《2023 DigiKey 汽车应用创意挑战赛》无线温度采集器设备

#竞赛 #竞赛 2098 人阅读 | 0 人回复 | 2024-01-31

本次设计的题目是基于STM32F746为主控芯片的低功耗无线温度采集器设备,其目的是想实现检测设备温度,室内温度和各种需要检测温度的地方。该设备采用STM32F746为主控,利用温度传感器持续性采集被测物体或者环境温度,通过2.4G无线发送到集中器设备,再通过485或者LAN传输到电脑端进行记录和分析,还可以给客户进行微信短信等报警处理的一套系统。设备自带OLED显示屏,通过按键唤醒,实现本地显示,满足客户需求,一节14505电池至少可以使用2年。

设计流程如下:


这里选择使用STM32F746主要其目的是由于该MCU的性能非常强大,同时可以支持LCD/OLED显示,可以快速刷新数据,给用户以非常良好的用户体验;温度传感器采用市面常用的DS18B20温度传感器,其具有耐高温,测量精度高,采用数字输出方式,抗干扰能力强等诸多优势;本次设计显示屏采用LCD显示,主要其显示内容较多,便于操控,同时又可以UI功能拓展,未以后产品**预留无限可能。
这里由于时间紧任务重,所以在传输方面,本次直接采用串口的方式传输到电脑终端,这与通过485传输功能完全一致;在低功耗方面暂未实现,因此该项目的**完善的空间较多。

代码详解:
1、 驱动DS18B20获取温度
  1. //从ds18b20得到温度值
  2. //精度:0.1C
  3. //返回值:温度值 (-550~1250)
  4. short DS18B20_Get_Temp(void)
  5. {
  6.     u8 temp;
  7.     u8 TL,TH;
  8.         short tem;
  9.     DS18B20_Start ();                    // ds1820 start convert
  10.     DS18B20_Rst();
  11.     DS18B20_Check();         
  12.     DS18B20_Write_Byte(0xcc);// skip rom
  13.     DS18B20_Write_Byte(0xbe);// convert            
  14.     TL=DS18B20_Read_Byte(); // LSB   
  15.     TH=DS18B20_Read_Byte(); // MSB  
  16.                       
  17.     if(TH>7)
  18.     {
  19.         TH=~TH;
  20.         TL=~TL;
  21.         temp=0;//温度为负  
  22.     }else temp=1;//温度为正                    
  23.     tem=TH; //获得高八位
  24.     tem<<=8;   
  25.     tem+=TL;//获得底八位
  26.     tem=(float)tem*0.625;//转换  
  27.         if(temp)return tem; //返回温度值
  28.         else return -tem;                 
  29. }
复制代码

2、 利用LCD显示温度数据
  1. BSP_LCD_DisplayStringAt(0, 60, (uint8_t *)"temp:", LEFT_MODE);
  2. i[0] = Temp / 10 + 0x30;
  3. i[1] = Temp % 10 + 0x30;
  4. BSP_LCD_DisplayChar(100, 60,i[0]);
  5. BSP_LCD_DisplayChar(124, 60,i[1]);
复制代码


3、 将温度数据利用串口的方式传输到后台终端
  1. HAL_UART_Transmit(&UartHandle,(uint8_t *)&Temp,1,100);
复制代码
最终效果如下:



STM32F746_DEMO.rar

69.37 KB, 下载次数: 2

分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条