stm32+HAL库制作红外测温枪

stm32+HAL库制作红外测温枪

前言

本文展示用cubeMX+MDK制作一个红外测温枪的过程。

关注公众号小电动车,回复"测温枪"获取工程文件及其他资料,建议结合工程阅读本文。
在这里插入图片描述

效果

在这里插入图片描述

组成

组成框图{#fig:组成框图}

MCU

stm32c8t6核心板{#fig:组成框图}

电源

电源模块1{#fig:电源模块1}

电源模块MB102{#fig:电源模块MB102}

在这里插入图片描述
{#fig:电池盒}

上图的两种电源模块从功能上讲差不多,白色的可以用miniusb供电,可切换两路电压3.3或5v,黑色的可以用usb口对外输出电压,带一个开关等。

本文选用的是白色的那款,使用了充电宝供电。

传感器

红外温度传感器GY906{#fig:mlx90614}

红外温度传感器GY906(1m){#fig:mlx90614(1m)}

这两款区别只是测量范围不同,都是用SMbus(类似iic)方式通信。淘宝各种价格都有(可能是因为电赛),如果需要购买注意甄别。

显示模块

0.96存OLED{#fig:0.96寸OLED}

四线iic通信,线少,方便,显示信息不多的情况下非常实用。

控制

8*8自锁开关{#fig:8*8自锁开关}

笔者没有按钮,所以用这种开关代替,8*8大小可以刚好插到面包板上。

下载器

stm32下载器{#fig:下载器}

只需四根杜邦线,可下载也可供电。

其他

面包板{#fig:面包板}

因为东西不多,用面包板方便搭出原型,这种带红蓝四路的面包板刚好适配上文的两种电源模块,非常方便。注意面包板红蓝线中间有断开,可以自己测一下。
还有面包板专用的线。

核心板

建立工程

新建工程{#fig:新建工程}

打开cubeMX,新建一个工程。

选择c8型号{#fig:选择芯片}

打开晶振{#fig:配置晶振}

配置时钟72MHz{#fig:配置时钟}

打开晶振后直接输入72,会自动配置好时钟树。

打开GPIO{#fig:LED}

为了确保核心板可以用,先点个灯看看:在核心板的丝印上看到LED对应引脚是PC13,在右边选择,打开输出模式。
一般LED都是负极接引脚,低电平亮,在中间设置默认输出高电平,避免初始化结束就亮。
选择推挽输出模式,用户标签输入LED,之后会自动生成LED的宏定义,方便调用。

配置{#fig:选择MDK工程}

输入地址,选择生成MDK工程。

生成工程{#fig:生成工程}

勾选此项,否则代码都会在一个c文件内,然后点击生成工程。

错误弹窗{#fig:弹出错误}

出现这个弹窗可能是因为中文路径的问题,导致启动s文件没找到,之后再MDK手动添加。

点亮LED

手动添加启动文件{#fig:添加启动文件}

打开MDK工程,右击这个文件夹,添加已存在的文件。

选择启动文件{#fig:选择.s文件}

添加完后,按快捷键F7编译。 在while添加代码:(建议打开代码补全)

HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);//翻转引脚输出
HAL_Delay(500);     //延时500ms

连接好下载器,F8下载程序(下载失败可能是启动方式等问题,需调整核心板上的跳帽),可以看到LED开始闪烁。

OLED屏显示

打开iic{#fig:开启iic}

打开iic模块,生成工程(此时需要关闭MDK)。
在工程文件夹内的./Core/Inc和./Core/Src分别添加OLED.h,
OLED.c文件(附件已提供),打开MDK,在main.c上方的注释之间包含已经做好的OLED.h头文件,打开它可以看到可调用的函数。

/* USER CODE BEGIN Includes */
#include "OLED.h"
/* USER CODE END Includes */

在main函数的注释之间添加初始化和刷新屏幕代码,打印HelloWorld。

/* USER CODE BEGIN 2 */
OLED_Init();    //初始化
OLED_CLS();     //清空屏幕,刷新

OLED_ShowStr(0, 0, "Hello World!", 2);//调用函数显示字符串
/* USER CODE END 2 */

把电源模块、核心板、屏幕插在面包板上,并用导线连接,下载程序。

在这里插入图片描述

到现在,OLED屏幕已经可以使用了。

温度传感器

与温度传感器的通信需要使用SMbus协议(类似iic),cubeMX也可以开启硬件外设,这里为了方便,使用模拟SMbus。
在这里插入图片描述
在这里插入图片描述

打开PB0, PB1,默认拉高,开漏输出,更改名字。
在工程文件夹内的./Core/Inc和./Core/Src分别添加mlx90614.h,
mlx90614.c文件(附件已提供),打开MDK,在main.c上方的注释之间包含已经做好的mlx90614.h头文件,打开它可以看到可调用的函数。

/* USER CODE BEGIN Includes */
#include "OLED.h"
#include "mlx90614.h"
/* USER CODE END Includes */

在下方找到一个用户代码区,定义变量。

/* USER CODE BEGIN 0 */
float Tem;                  //存储读取到的温度值
uint8_t String_Value[10];   //OLED的显示的字符串
/* USER CODE END 0 */

在循环内添加代码,每3ms读取一次温度值并显示。

/* USER CODE BEGIN WHILE */
while (1)
{
    
    Tem = SMBus_ReadTemp();//温度读取函数
    sprintf(String_Value," T = %.1f ^", Tem);//把浮点数转入到字符串内
    OLED_ShowStr(0, 0, String_Value, 2);//显示字符串
    HAL_Delay(3);
/* USER CODE END WHILE */

把温度传感器插在面包板上,并用导线连接,下载程序。
可以看到读取出的温度值。
到此温度传感器已经完成,按钮方面用中断或者查询可以完成,此处不在赘述。

下载

关注公众号小电动车,回复"测温枪"获取工程文件及其他资料,建议结合工程阅读本文。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46143152/article/details/113787146