文章目录

  • 一.前言
  • 二.材料准备
  • 三.硬件部分
  • 四.软件部分
    • 1. 底层封装库
    • 2.中间层
    • 3.应用层
  • 五.外壳设计
  • 六.资料链接

一.前言

该作品是我在华工电工开放实习的作品,本作品由七部分组成。中央为Stm32F405RG芯片,使用两节18650电池供电,在外围加入大量外设。

DBS18B20温度传感器用于外界温度的测量;舵机、蜂鸣器用于检测响应;增加三个按键用于报警临界值的设定;数码管用于温度的实时显示,也用于临界值设定(配合按键使用);两个串口中USART2用于蓝牙连接手机,通过手机APP能够远程监控外界温度,USART1可以通过有线或者无线的方式连接PC,通过上位机能够直观地实时监测外界温度。因为外设数量较多,故引入了开源操作系统FreeRTOS用于多线程任务管理。

下面我分为硬件部分软件部分外观设计给大家介绍一下这个温度报警器。关于该作品的所有资料我放到了博客的最后。

框架图:

二.材料准备

材料 数量
STM32F405RG芯片 1
DBS18B20温度传感器 1
按键开关 3
电源开关 1
复位开关 1
5V蜂鸣器 1
共阳数码管 1
HC-08蓝牙 1
25M贴片晶振(C9006) 1
HC-08蓝牙 1
TPS54302 降压芯片 1
MP2451 降压芯片 1
0603/0805元件 若干
表格仅供参考,详情看原理图为准。

三.硬件部分

开发环境:Altium Designer17

硬件部分并没有太复杂的电路,主要都是一些模块的拼凑。

原理图:

四.软件部分

开发环境:Keil 、 CubeMX
Vesion : 5.28 、 5.4.0
开发语言:C++

代码主要分为底层库中间层上层(应用层),底层主要用于对各种外设的封装,中间层一般用来放置一些跟上位机、算法、通信相关的东西,而上层应用层则是最终的执行代码,简单的说即是最终执行的任务。

1. 底层封装库

底层库的封装作用是将上层需要用到的外设驱动进行封装,外设包括:定时器延时、DBS18B20温度传感器、共阳数码管显示、舵机、串口。驱动层封装的函数只为上层文件所调用,而不能调用上层函数,将项目分层包装是为了增强项目的扩展性与可读性。

比如:Nixie_tube.cpp(共阳数码管驱动)

 uint8_t tens_temp=0;uint8_t ones_temp=0;uint8_t decimals=0;
void Nixie_tube_display(float value)
{//提取出value的个位、十位、小数位extern uint8_t tens_temp;extern uint8_t ones_temp;extern uint8_t decimals;uint16_t value_int=(uint16_t)(10*value);decimals=value_int%10;ones_temp=(value_int/10)%10;tens_temp=(value_int/100)%10;/*十位*/HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_15,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);Led_output(tens_temp);HAL_Delay(1);/*个位*/HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_15,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);Led_output(ones_temp);HAL_Delay(1);/*小数位*/HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_15,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);Led_output(decimals);HAL_Delay(1);}

代码只列部分,详情自己看源码工程。

2.中间层

中间层用于连接底层与应用层,我一般用来写上位机、算法、通信部分。温度报警器的代码比较简单,只用到上位机。

开机温度:

加入热水测试:

注:因为上位机的程序不是我写的,所以这一部分的代码被我删去了。

3.应用层

应用层用来编写最终最后执行的任务,使用FreeRTOS实时系统用作任务管理。FreeRTOS共创建5个任务,任务间通过调度器进行任务切换。任务间优先级相同,5个任务轮流占用时间片进行运行。线程1至线程4执行频率都为1000Hz(1ms执行一次),线程5执行频率为1Hz(1s执行一次)。线程之间相互独立,复杂程序经过底层驱动以及中间层封装为函数,应用层直接调用即可。

/* Private variables ---------------------------------------------------------*/
TaskHandle_t Temperature_collecting_Handle;
TaskHandle_t Upper_computer_Handle;
TaskHandle_t Temperature_display_Handle;
TaskHandle_t Beep_steering_Handle;
TaskHandle_t Bluetooth_sent_Handle;/* Private function prototypes -----------------------------------------------*/
void Temperature_collecting(void *arg);
void Upper_computer(void*arg);
void Temperature_display(void*arg);
void Beep_steering(void*arg);
void Bluetooth_sent(void*arg);/* Function Init -------------------------------------------------------------*/
void System_Tasks_Init(void)
{vTaskSuspendAll();/*温度采集*/xTaskCreate(Temperature_collecting,"Temperaturecollecting",Normal_Stack_Size,NULL,PriorityHigh,&Temperature_collecting_Handle);/*上位机*/xTaskCreate(Upper_computer,"Uppercomputer",Normal_Stack_Size,NULL,PriorityHigh,&Upper_computer_Handle);/*数码管显示*/xTaskCreate(Temperature_display,"Temperaturedisplay",Normal_Stack_Size,NULL,PriorityHigh,&Temperature_display_Handle);/*蜂鸣器、舵机任务*/xTaskCreate(Beep_steering,"Beepsteering",Normal_Stack_Size,NULL,PriorityHigh,&Beep_steering_Handle);/*蓝牙串口发送任务*/xTaskCreate(Bluetooth_sent,"Bluetoothsent",Normal_Stack_Size,NULL,PriorityHigh,&Bluetooth_sent_Handle);if (!xTaskResumeAll())taskYIELD();
}/* Function Task -------------------------------------------------------------*//*1.温度采集任务*/
void Temperature_collecting(void *arg)
{static TickType_t _xPreviousWakeTime = xTaskGetTickCount();static TickType_t _xTimeIncrement = pdMS_TO_TICKS(10);for (;;){ Current_Temperature=DS18B20_Get_Temp();vTaskDelayUntil(&_xPreviousWakeTime, _xTimeIncrement);}
}/*2.上位机任务*/
void Upper_computer(void*arg)
{static TickType_t _xPreviousWakeTime = xTaskGetTickCount();static TickType_t _xTimeIncrement = pdMS_TO_TICKS(1);for (;;){//     Sent_Contorl(&huart6);//上位机发送(上位机代码已删,所以把这里注释)vTaskDelayUntil(&_xPreviousWakeTime, _xTimeIncrement);}
}/*3.数码管显示任务*/
void Temperature_display(void*arg)
{static TickType_t _xPreviousWakeTime = xTaskGetTickCount();static TickType_t _xTimeIncrement = pdMS_TO_TICKS(1);for (;;){ /*当前温度显示*/if(Selet_Mode==Current_Temperature_display){Nixie_tube_display(Current_Temperature);}else {/*报警值设定*/Nixie_tube_display(Alarm_Temperature);}vTaskDelayUntil(&_xPreviousWakeTime, _xTimeIncrement);}
}/*4.蜂鸣器、舵机任务*/
void Beep_steering(void*arg)
{static TickType_t _xPreviousWakeTime = xTaskGetTickCount();static TickType_t _xTimeIncrement = pdMS_TO_TICKS(1);for (;;){   /*蜂鸣器报警*/if((Current_Temperature>Alarm_Temperature)&&(Systemtime>2)){if(Beep_flag==1800){HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET);vTaskDelayUntil(&_xPreviousWakeTime, _xTimeIncrement);}else{Beep_flag++;}}else{Beep_flag=0;HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET);vTaskDelayUntil(&_xPreviousWakeTime, _xTimeIncrement);}/*舵机控制*/if(Current_Temperature<=30){__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, 2500);}}
}/*5.蓝牙数据发送任务*/
void Bluetooth_sent(void*arg)
{static TickType_t _xPreviousWakeTime = xTaskGetTickCount();static TickType_t _xTimeIncrement = pdMS_TO_TICKS(1000);for (;;){ Systemtime=Get_SystemTimer()/1000000;My_printf2("\r\nSystemtime=%u\r\n",Systemtime);My_printf2("Alarm_Temperature=%f\r\n",Alarm_Temperature);My_printf2("Current_Temperature=%f\r\n",Current_Temperature);vTaskDelayUntil(&_xPreviousWakeTime, _xTimeIncrement);}
}

作品最终的效果的效果非常棒,预期的功能全部都能够完美实现。

本来是想拍一个展示视频的,但是后来作品交上去之后就再也拿不回来了。只留有之前的手机蓝牙接收消息的录屏,单片机通过蓝牙发送消息到手机,手机可以监控温度报警器的 开机时间 (s)报警温度 (℃)当前环境温度 (℃),执行频率为1Hz,所以是1s发送一次。

当温度超过设定值时,蜂鸣器就会响,舵机也会做出相应的反馈。三个按键可以调节报警温度。

蓝牙功能展示:

五.外壳设计

作品最后要上交展示,所以给它做了个外壳,电路板装在外边,里面主要用来走线以及放电池盒。黄色的材料是木头,白色的材料是薄PC板。

开发环境:Soildword2019

装上后的实物图:

上电后的实物图:

六.资料链接

  1. 温度报警器硬件(Altium Designer17)   类型:收费5元。
  2. 温度报警器固件(Keil5.28+CubeMX5.4) 类型:点赞、关注即可直接下载。
  3. 温度报警器实验报告PDF        类型:点赞、关注即可直接下载。

作品分享:基于STM32的温度报警器含源码、原理图、PCB文件、作品报告相关推荐

  1. 基于STM32的智能宠物看护喂养系统(程序源码+原理图+PCB+Boom表+实物操作说明)

    基于STM32的智能宠物看护喂养系统(程序源码+原理图+PCB+Boom表+实物操作说明) **0  引言** 随着我国经济的快速发展,人们的生活水平不断提高,饲养宠物已经成为成为一种潮流.目前,市场 ...

  2. 希雷伺服源码原理图/PCB/BOM/技文档TMS320F28 希雷伺服,全套资料 , 主控芯片,TMS320F28034PNT,方案有显示,驱动

    希雷伺服源码原理图/PCB/BOM/技文档TMS320F28 希雷伺服,全套资料 , 主控芯片,TMS320F28034PNT,方案有显示,驱动,控制编码部分组成 全套资料包括,原理图,PCB,BOM ...

  3. S7200源码及PCB文件,S7 224XP 226图纸

    S7200源码及PCB文件,S7 224XP 226图纸 id=651541838037&

  4. 【027】基于Vue+Nodejs+Mysql模仿微博的图片分享系统(管理员、用户两种身份)(含源码、数据库、实验报告、运行教程)

    观前提醒:源码.数据库.实验报告在文末 该Web小型软件系统是基于图片分享的模仿微博社交平台,用户在里面可查看别人分享的内容,同时也可以发布自己的内容.在浏览分享的帖子中,用户可以进行点赞.评论.收藏 ...

  5. 基于51单片机霍尔测速直流电机控制设计(含源码+原理图+论文+PCB封装)、基于STM32闭环步进电机控制系统设计(仿真,程序,说明)-转发分享

    设计思路: 本文主要研究了利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法.本文中采用了三极管组成了PWM信号的驱动系统,并且对PWM信号的原理.产生方法以及如何通过软件编 ...

  6. 毕设分享SSM 中药店商城系统(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2.1 界面展示 3 设计方案 3.1 概述 3.2 系统流程 3.3 系统结构设计 4 项目获取 1 项目简介 Hi,各位同学好呀,这里是M学姐! 今天向大家分 ...

  7. 计算机毕设分享 springboot中药店商城系统(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2.1 界面展示 3 设计方案 3.1 概述 3.2 系统流程 3.3 系统结构设计 4 项目获取 1 项目简介 Hi,各位同学好呀,这里是M学姐! 今天向大家分 ...

  8. 基于SSM框架开发生鲜水果蔬菜电商平台系统.rar(含源码及数据库文件)

    基于SSM框架开发,可用于练手,学习开发使用,尤其适合毕业设计,主要功能,商品列表.商品详细页.购物车.登录.注册.商品收藏.订单列表等主要功能.直接用idea或eclipse开发工具,可直接打开项目 ...

  9. SwiftUI macOS源码大全之倒计时App基于coredata(教程含源码)

    实战需求 SwiftUI macOS源码大全之倒计时App 本文价值与收获 看完本文后,您将能够作出下面的界面 关键技术 .toolbar ToolbarItem ToolbarItemGroup . ...

最新文章

  1. 最近在做托盘时,发现 CnTrayIcon1的OnClick 事件,不能被其它按钮来执行,蛋疼。...
  2. Word提供的【样式和格式】设计!
  3. Sqoop_ 简单介绍
  4. 每句话都可以品味一生
  5. 【CodeForces - 255B】Code Parsing(思维,字符串)
  6. opencomm在c语言中的作用,使用OpenMPI从Fortran调用C语言
  7. android两个java文件内容_java – 在1个请求中将多个文件从Android上传...
  8. python定义栈_Python栈实现
  9. Spring自学日志02(对象的创建,依赖注入)
  10. 谁对EXTJS熟悉,有关关闭panel的问题?
  11. 007 - VUE + hexo blog
  12. visio专业版svg图片裁剪
  13. 即席查询之Presto
  14. 融云技术分享:融云安卓端IM产品的网络链路保活技术实践
  15. Format oracle 用法,oracle sqlplus中column格式化命令之heading用法
  16. shell 脚本学习
  17. Elasticsearch 可以更改 Mapping 吗?如何修改?
  18. 为什么日本人不吃鲤鱼
  19. 雷军亲自站台,游戏手机能否成为市场增长新引擎?
  20. 编程语言是怎么发展的?

热门文章

  1. 武汉光华芯CJC5340 ADC 数字音频系统模拟数字转换器
  2. Springboot 为了偷懒,我封装了一个自适配的数据单位转换工具类
  3. Laravel使用验证码gregwar/captcha
  4. 短视频直播带货app源码, 一套系统刷视频购物都能用
  5. 重磅推出!安全扫码专业委员会数智商盟码上线了!!
  6. 基于Java+Jsp实现的指定城市天气实时查询系统
  7. Kaggle Compete: Plant Pathology 2020-FGVC7
  8. 新手入门民谣吉他推荐,开启你的音乐之路!
  9. 5个实用的地理位置API推荐
  10. |- apache -| 手机真机测试之访问本地apache服务器