首页 > 其他分享 >基于stm32单片机的红外测温报警系统

基于stm32单片机的红外测温报警系统

时间:2024-09-02 16:52:30浏览次数:13  
标签:测温 MLX90614 电路 stm32 单片机 OLED WriteCommand 温度



基于stm32单片机的红外测温报警系统

  • 0、毕业设计选题原则说明(重点)
  • 1、项目简介
  • 1.1 系统构成
  • 1.2 系统功能
  • 1.3 演示视频
  • 2、部分电路设计
  • 2.1 STM32单片机核心板电路设计
  • 2.2 MLX90614红外测温电路设计
  • 2.3 OLED液晶显示电路设计
  • 3、部分代码展示
  • 3.1 MLX90614获取温度代码
  • 3.2 传感器初始化
  • 3.3 OLED初始化
  • 4、资料下载


0、毕业设计选题原则说明(重点)

  • 选题之前,同学们要弄明白一件事情,做毕业设计是干什么用的!
  • 这里我告诉大家,毕业设计对于你来说,不是让你去搞研究,掌握运用所学知识的,也不是让你去比谁做的毕业设计多么牛逼,多么厉害。
  • 说白点,它的作用就是一个,让你顺利毕业,能够拿到学位证,毕业证而已!!!
  • 当你明白这一点后,作毕业设计的要求就是在满足老师的要求后,越简单越好,这样不但容易去做,而且你自己也容易去理解,掌握,同样也能花最少的钱!!!
  • 满足老师的要求,这个没办法,毕竟他是决定你是否能通过答辩的人。
  • 每年都有很多同学找到我的时候,后悔当初为什么要把功能写的那么复杂,后悔没有提前找我咨询一下!所以在这里提醒同学们,提交开题报告之前一定要多想想,咨询下以往的学长学姐,不要自己随便写一堆提交上去!!!

1、项目简介

1.1 系统构成

  • stm32单片机+按键电路+LED电路+蜂鸣器电路+OLED显示电路+MLX90614红外测温电路。

1.2 系统功能

  • 功能介绍:
  • 1、检测到有人或物体时使用红外测温传感器测量温度
  • 2、OLED屏幕显示温度与温度报警阈值
  • 3、通过按键可设置温度报警阈值
  • 4、温度正常绿色LED亮,温度异常红色LED亮并且蜂鸣器报警
  • 5、检测到有人或物体时测量并显示温度,若温度超出报警阈值则报警;未检测到人或i物体则不显示温度,不报警。

1.3 演示视频

2、部分电路设计

2.1 STM32单片机核心板电路设计

  • STM32单片机最小系统是确保STM32系列单片机能够正常工作的最基本电路配置,通常包括电源电路、晶振电路、复位电路。这些组件共同为单片机提供稳定的工作环境和必要的时钟信号,确保单片机能够准确地执行程序指令。
  • 电源电路:为单片机提供稳定的工作电压,通常采用3.3V电源供电。电源电路的设计要保证单片机在不同工作条件下都能获得稳定的电压输出,以确保单片机的正常工作。
  • 晶振电路:提供单片机工作所需的时钟信号。晶振电路通过晶振和电容组成,为单片机提供稳定的工作脉冲,确保单片机的定时和同步需求。
  • 复位电路:实现单片机的复位功能,类似于电脑的重启。复位电路通过电容和电阻的配合,实现单片机在上电启动时的自动复位,以及通过手动按键实现复位功能,保证单片机在程序跑飞或异常情况下能够重新开始执行程序。
  • 单片机最小系统原理图如下图所示:

2.2 MLX90614红外测温电路设计

  • MX90614是一款由迈来芯公司提供的低成本,无接触温度计。输出数据和物体温度呈线性比例,具有高精度和高分辨率。TO-39金属封装里同时集成了红外感应热电堆探测器芯片MLX81101(温度是通过PTC或是PTAT元件测量)和信号处理专用集成芯片MLX90302,专门用于处理红外传感器输出信号。用以阻碍可见光和近红外光辐射的光学滤波器(可传播长波)集成在封装内提供对环境和日光的免疫。滤波器的波长通带为5.5到14μm。由于集成了低噪声放大器、17位模数转换器和强大的数字信号处理芯片 MLX90302,使得高精度和高分辨度的温度计得以实现。一个附加的片上温度传感器用来测量芯片的温度。测量完两个传感器的输出后,对应的环境温度和物体温度被计算出。计算所得物体温度和环境温度存储在MLX90302的RAM单元,温度分辨率为0.01℃,并可通过两线 SMBus(系统管理总线)兼容协议接口(IIC与之兼容)(0.02℃分辨率)或是10位PWM(脉宽调制)输出模式输出。MLX90614出厂温度范围都进行过校准,传感器测量的温度为视场里所有物体温度的平均值。
  • MLX90614 系列模块是一组通用的红外测温模块。 在出厂前该模块已进行校验及线性化,具有非接触、体积小、精度高,成本低等优点。被测目标温度和环境温度能通过单通道输出,并有两种输出接口,适合于汽车空调、室内暖气、家用电器、手持设备以及医疗设备应用等。
  • MLX90614的出厂校准温度范围很广:环境温度-40 ~ 125 ˚C,物体温度-70 ~ 382.2 ˚C。传感器测量的温度为视场里所有物体温度的平均值。MLX90614 室温下的标准精度为±0.5ºC。医疗应用版本的传感器可在人体温度范围内达到±0.1ºC 的精度。
  • 引脚说明
  • 其具体电路原理图如下图所示:
  • 基于stm32单片机的红外测温报警系统_课程设计

  • 实物图:
  • 基于stm32单片机的红外测温报警系统_毕业设计_02

2.3 OLED液晶显示电路设计

  • 常见的OLED模块驱动芯片,不同的驱动芯片具有不同的特点和适用场景,具体选择应根据显示屏的分辨率、接口类型和功能需求来确定。

OLED(有机发光二极管)显示模块的驱动芯片种类繁多,常见的一些驱动芯片包括:

  1. SSD1306:常用于128x64和128x32分辨率的OLED显示屏,具有低功耗、SPI和I2C接口等特点。
  2. SSD1351:适用于彩色OLED显示屏,支持高分辨率显示,具有SPI接口和高速刷新率。
  3. SH1106:常用于128x64和128x32分辨率的OLED显示屏,支持SPI和I2C接口,低功耗高对比度。
  4. UC1701:应用于128x64和128x32分辨率的OLED显示屏,具有低功耗、SPI和I2C接口以及图形显示功能。
  5. ST7735:适用于彩色OLED显示屏,支持SPI接口,具有高分辨率和快速刷新速度。
  6. SH1107:用于分辨率为128x64和128x32的OLED显示屏,具有SPI和I2C接口以及高对比度。
  • 其具体电路原理图如下图所示:
  • 基于stm32单片机的红外测温报警系统_stm32_03

  • 实物图如下:
  • 基于stm32单片机的红外测温报警系统_课程设计_04

3、部分代码展示

3.1 MLX90614获取温度代码

u16 SMBus_ReadMemory(u8 slaveAddress, u8 command)
{
    u16 data;                        // Data storage (DataH:DataL)
    u8 Pec;                                // PEC byte storage
    u8 DataL=0;                        // Low data byte storage
    u8 DataH=0;                        // High data byte storage
    u8 arr[6];                        // Buffer for the sent bytes
    u8 PecReg;                        // Calculated PEC byte storage
    u8 ErrorCounter;        // Defines the number of the attempts for communication with MLX90614

    ErrorCounter=0x00;                                // Initialising of ErrorCounter
        slaveAddress <<= 1;        //2-7???????
        
    do
    {
repeat:
        SMBus_StopBit();                            //If slave send NACK stop comunication
        --ErrorCounter;                                    //Pre-decrement ErrorCounter
        if(!ErrorCounter)                             //ErrorCounter=0?
        {
            break;                                            //Yes,go out from do-while{}
        }

        SMBus_StartBit();                                //Start condition
        if(SMBus_SendByte(slaveAddress))//Send SlaveAddress ???Wr=0????????
        {
            goto        repeat;                            //Repeat comunication again
        }
        if(SMBus_SendByte(command))            //Send command
        {
            goto        repeat;                            //Repeat comunication again
        }

        SMBus_StartBit();                                        //Repeated Start condition
        if(SMBus_SendByte(slaveAddress+1))        //Send SlaveAddress ???Rd=1????????
        {
            goto        repeat;                     //Repeat comunication again
        }

        DataL = SMBus_ReceiveByte(ACK);        //Read low data,master must send ACK
        DataH = SMBus_ReceiveByte(ACK); //Read high data,master must send ACK
        Pec = SMBus_ReceiveByte(NACK);        //Read PEC byte, master must send NACK
        SMBus_StopBit();                                //Stop condition

        arr[5] = slaveAddress;                //
        arr[4] = command;                        //
        arr[3] = slaveAddress+1;        //Load array arr
        arr[2] = DataL;                                //
        arr[1] = DataH;                                //
        arr[0] = 0;                                        //
        PecReg=PEC_Calculation(arr);//Calculate CRC
    }
    while(PecReg != Pec);                //If received and calculated CRC are equal go out from do-while{}

        data = (DataH<<8) | DataL;        //data=DataH:DataL
    return data;
}
float SMBus_ReadTemp(void)
{   
  return (SMBus_ReadMem
  ory(SA, RAM_ACCESS|RAM_TOBJ1)*0.02-273.15);
}

3.2 传感器初始化

static void DeviceInit(void)
{
    /* 初始化数据 */
  memset((void *)&device_data, 0, sizeof(DeviceData));
  device_data.temp_up = 32.5;
  
  Beep_Init();   /* 初始化蜂鸣器 */
  LED_Init();    /* 初始化LED */
  KEY_Init();    /* 初始化按键 */
  DI_Init();     /* 初始化物体检测模块 */
  
  OLED_Init();   /* 初始化OLED */
  SMBus_Init();
  /* 屏幕显示数据 */
  OLED_ShowString(1, 1, "T:");
  OLED_ShowString(1, 5, ".");
  OLED_ShowString(2, 1, "UP:");
  OLED_ShowString(2, 8, ".");
  
  /* 测试设置是否损坏 */
  BUZZER_ON       /* 打开蜂鸣器 */
  LED1_ON();      /* 打开红色LED */
  LED2_ON();      /* 打开绿色LED */
  Delay_ms(500);  /* 等待500ms */
  BUZZER_OFF      /* 关闭蜂鸣器 */
  LED1_OFF();     /* 关闭红色LED */
  LED2_OFF();     /* 关闭绿色LED */
  Delay_ms(500);  /* 等待500ms */
}

3.3 OLED初始化

void OLED_Init(void)
{
	uint32_t i, j;
	
	for (i = 0; i < 1000; i++)			//上电延时
	{
		for (j = 0; j < 1000; j++);
	}
	
	OLED_I2C_Init();			//端口初始化
	
	OLED_WriteCommand(0xAE);	//关闭显示
	
	OLED_WriteCommand(0xD5);	//设置显示时钟分频比/振荡器频率
	OLED_WriteCommand(0x80);
	
	OLED_WriteCommand(0xA8);	//设置多路复用率
	OLED_WriteCommand(0x3F);
	
	OLED_WriteCommand(0xD3);	//设置显示偏移
	OLED_WriteCommand(0x00);
	
	OLED_WriteCommand(0x40);	//设置显示开始行
	
	OLED_WriteCommand(0xA1);	//设置左右方向,0xA1正常 0xA0左右反置
	
	OLED_WriteCommand(0xC8);	//设置上下方向,0xC8正常 0xC0上下反置

	OLED_WriteCommand(0xDA);	//设置COM引脚硬件配置
	OLED_WriteCommand(0x12);
	
	OLED_WriteCommand(0x81);	//设置对比度控制
	OLED_WriteCommand(0xCF);

	OLED_WriteCommand(0xD9);	//设置预充电周期
	OLED_WriteCommand(0xF1);

	OLED_WriteCommand(0xDB);	//设置VCOMH取消选择级别
	OLED_WriteCommand(0x30);

	OLED_WriteCommand(0xA4);	//设置整个显示打开/关闭

	OLED_WriteCommand(0xA6);	//设置正常/倒转显示

	OLED_WriteCommand(0x8D);	//设置充电泵
	OLED_WriteCommand(0x14);

	OLED_WriteCommand(0xAF);	//开启显示
		
	OLED_Clear();				//OLED清屏
}

标签:测温,MLX90614,电路,stm32,单片机,OLED,WriteCommand,温度
From: https://blog.51cto.com/u_14938734/11899312

相关文章

  • 二进制基础和STM32的常用位运算
    目录一、引言二、二进制基础1.二进制的表示2.二进制的优势 3.二进制与十进制的转换三、位运算基础1.按位与(&)2.按位或(|)3.按位异或(^)4.按位取反(~)5.左移(<<)6.右移(>>)四、STM32的常用位运算1.清0操作2.置1操作五、实际应用场景六、注意事项一、引言   ......
  • 51c嵌入式~STM32合集1
    #STM32的启动模式配置与应用三种BOOT模式    所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式,相关文章:详解STM32启动文件。MainFlashmemory是STM32内置的Flash,一......
  • 土壤湿度传感器详解(STM32)
    目录一、介绍二、传感器原理1.原理图2.引脚描述三、程序设计main.c文件TS.h文件TS.c文件四、实验效果 五、资料获取项目分享一、介绍        传感器适用于土壤的湿度检测,模块中蓝色的电位器是用于土壤湿度的阈值调节,数字量输出DO可以与单片机直接相连,通......
  • 搭建嵌入式开发环境STM32 Keil 超详尽版
     需要准备的安装包目录一、Keil开发环境构建1、MDK531.exe2、注册机keygen3、ST-Link驱动程序4、芯片软件支持包Kel.STM32F1xx_DFP.2.4pack二、STM32CubeMX软件配置芯片1、JRE(根据自己的电脑的操作系统选择安装适合的版本)2、安装STM32CubeMX 资源链接:https://pan.......
  • stm32 TIM输出比较(PWM驱动LED呼吸灯&&PWM驱动舵机&&PWM驱动直流电机)
    理论1.输出比较简介OC(OutputCompare)输出比较输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出的功......
  • STM32 TIM输入捕获(输入捕获模式测频率&&PWMI模式测频率占空比)
    理论1.输入捕获简介IC(InputCapture)输入捕获输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数每个高级定时器和通用定时器都拥有4个输入捕获通道可配置为PWMI模式,同时测量频率和......
  • STM32F1+HAL库+FreeTOTS学习8——第一个任务,启动!
    STM32F1+HAL库+FreeTOTS学习8——第一个任务,启动!开启任务调度器1.函数vTaskStartScheduler()2.函数xPortStartScheduler()启动第一个任务1.函数prvStartFirstTask()2.函数vPortSVCHandler()上一期我们学习了列表和列表项的相关内容和API函数实验,接下来我们......
  • 【STM32 Blue Pill编程】-UART数据发送与接收(DMA模式)
    UART数据发送与接收(DMA模式)文章目录UART数据发送与接收(DMA模式)1、DMA介绍2、STM32的UART端口3、硬件准备及接线4、UART配置5、代码实现在本文中,我们将展示如何使用STM32BluePillUART通过直接内存访问(DMA)来发送和接收数据。这一过程而无需涉及CPU。......
  • 【STM32 Blue Pill编程】-UAR数据接收与发送(中断模式)
    UAR数据接收与发送(中断模式)文章目录UAR数据接收与发送(中断模式)1、UART的中断模式与轮询模式比较2、STM32的UART端口3、硬件准备及接线4、串口配置5、代码实现在本文中,我们将展示如何在中断模式下使用STM32BluePillUART来发送和接收数据。我们将使用S......
  • 【STM32 Blue Pill编程】-UART数据接收与发送(轮询模式)
    UART数据接收与发送(轮询模式)文章目录UART数据接收与发送(轮询模式)1、STM32的UART端口2、串口数据发送2.1硬件准备及接线2.2串口配置2.3串口数据发送实现3、串口数据接收4、printf函数重定向每当我们进行嵌入式系统应用程序开发时,我们都需要使用串......