基于51单片机的红外非接触测温仪阈值报警方案原理图设计

系统的功能分析

(附文件)

系统功能分析
本设计由STC89C52单片机电路+1602液晶显示电路+MLX90614ESF红外非接触温度检测电路+按键电路+蜂鸣器报警电路。
1、液晶实时显示MLX90614ESF检测的环境温度值和被测物体温度值,显示中E环境温度,O物体温度。
2、可以通过按键设置温度的阈值,如果MLX90614检测到的温度高于设置的阈值,则蜂鸣器报警,否则,蜂鸣器不报警。
系统总体结构
本系统具体框图如下图所示:
在这里插入图片描述
原理图:
在这里插入图片描述
STC89C52单片机核心系统电路设计
STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。

STC89C52单片机最小系统电路由复位电路、时钟电路和电源电路。拥有这三部分电路后,单片机即可正常工作。单片机最小系统原理图如下图所示。

在这里插入图片描述
5V电源电路设计
本系统选择5V直流电源作为系统总电源,为整个系统供电,电路简单、稳定。DC为电源的DC插座,可以直接接USB电源线,一端插在DC插座上,另外一端可以插在5V电源上,如电脑USB、充电宝、手机充电器等等。LED为红色LED灯,作为系统是否有点的指示灯,电阻为1K电阻,起到限流作用,保护LED灯,以防电流过大烧坏LED灯。SW为自锁开关,开关按下后,红灯亮,此时系统电源5V直流输出。开关再次按下后,红灯灭,此时系统电源无5V电源输出。
在这里插入图片描述
GY-906 MLX90614ESF非接触式红外测温模块电路设计
MLX90614是一款非接触式温度测量的红外温度计。 TO-39封装内集成了对红外灵敏的热电堆探测器芯片和信号处理ASSP(专用集成电路)芯片。
由于集成了低噪声放大器,17位ADC和强大的DSP单元,使得高精度的温度计得以实现。温度计出厂设置为数字SMBus输出,在整个温度测量范围内的分辨率为0.02℃。
用户可以将输出配置为PWM格式。作为标准,将PWM格式配置成10位来连续传送测量温度。测量温度范围为-20…120℃,分辨率是0.14℃。本传感器体积小,成本低,易集成。
在这里插入图片描述

系统软件设计

在这里插入图片描述

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>		 
#include<intrins.h>
#include "delay.h"
#include "1602.h"
#include "mlx90614.h"

sbit buzzer=P1^0; //引脚定义
sbit key1=P2^0;
sbit key2=P2^1;

unsigned long time_20ms;  //定时计数
char dis0[16];			  //液晶数组显示暂存
char dis1[16];
unsigned int setNum = 37; //设置值
//---------------------------------------
//Name: CALTEMP           
//Temperature data is T=(Data)*0.02-273.15
//---------------------------------------
bit rekey =0;//防止按键重复按下
bit disFlag =0;//更新显示标志
unsigned int  Tem;	   //温度
float objTemp,envTemp;	 //物体温度和环境温度

void Init_Timer0(void);	 //函数声明

void main (void)
{   
	Init_Timer0();        //定时器0初始化
	             
	LCD_Init();           //初始化液晶
	DelayMs(20);          //延时有助于稳定
	LCD_Clear();

	while (1)         //主循环
	{
		if(disFlag==1)	   //显示标志
		{
			Tem=ReadObjectTemp();	 //读取实物温度
			objTemp=(float)(Tem)*0.02-273.15;
	
			Tem=ReadEnvironTemp();	 //读取环境温度
			envTemp=(float)(Tem)*0.02-273.15;

			sprintf(dis0,"E: %4.1f'C   ",envTemp);//打印温度值
			LCD_Write_String(0,0,dis0);//显示
			sprintf(dis1,"O:%5.1f'C   %3d  ",objTemp,setNum);//打印温度设置值
			LCD_Write_String(0,1,dis1);//显示

			if(objTemp>setNum)
			{buzzer =0;	}	//温度高蜂鸣器鸣叫
			else
			{buzzer=1;}		//温度低 停止
			disFlag = 0;

		}

		if((key1 == 0)||(key2 == 0))   //有按键按下
		{
		 	if(rekey == 0)
			{
				DelayMs(10);
				if(key1 == 0)  //按键1按下
				{
					rekey =1;	//防止重复按下
					if(setNum<200) setNum++;	  //++
				}
				else if((key2 == 0))//按键2按下
				{
				 	rekey =1;	//防止重复按下
					if(setNum>0) setNum--;		//--
				}
			}
		}
		else
		{
			rekey = 0;	 //防止重复按下
		}					
	}
}


void Init_Timer0(void)
{
	TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;
	EA=1;            //总中断打开
	ET0=1;           //定时器中断打开
	TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1 
{
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;	
	time_20ms++;
	if(time_20ms%20==0)	  //定时更新显示
	{disFlag = 1;}
}


.

链接:https://pan.baidu.com/s/1kBEZQXSYoqjkmm7ENmfTDQ
提取码:ejvs

.

红外测温仪51单片机的MLX90614 制作而成。MLX90614 是一款用于接触式的红外温度传感器,集成了红外探测热电堆芯片与信号处理专用集成芯片,全部封装在 TO-39。 低噪声放大器、17 位 ADC 和强大的 DSP 处理单元的全集成,使传感器实现了高精度,高分辨率的测量。 传感器的测量结果均出厂校准化,数据接口为数字式的PWM和 SMBus(System Management Bus) 输出。 作为标准,PWM 为 10 位,且配置为-20˚C 至 120 ˚C内,分辨率为 0.14 ˚C的连续输出。 一、制作内容 通过 MLX90614 接触式测得物体温度 二、制作器材 1、主控屏+5V电源 2、DCP-PRJ09红外测温仪 三、实验原理图 四、制作步骤: 1.接上电源 2. 运行 Keil uVision软件,新建一个工程,新建一个工程文件。 3.将文件添加到工程中并编译,如有错,请更改直到编译成功,如有错,请更改直到编译成功 4.用编程器将生成的 HEX 文件烧写到单片机中,或用 STC 单片机专用的串口烧写软件,通过MAX232 串口烧写到单片机中(只能用于 STC单片机)。或用仿真器来执行程序,将程序下载到仿真器中,具体方法请参考仿真器的使用一节。用编程器将生成的 HEX 文件烧写到单片机中。 5. 程序下完后可以看到液晶屏有温度显示,用手掌覆盖红外传感器上方2cm 处,看到此时液晶屏温度即为手掌的表面温度。 6.按下1键可以看到数码管显示,用手掌覆盖红外传感器上方 2cm 处,看到此时数码管温度即为手掌的表面温度。此时液晶屏温度保持不变。 7.按下除1键其他键,此时液晶屏又重新显示温度。 源代码及参考资料见附件。
在疫情期间,迫切需要接触式温度测量设备,因此我将提供所有数据来设计和编程该设备。3D打印外壳,PCB,代码和所需的库。 硬件部件: Arduino Nano MLX90614是红外测温仪 0.96英寸OLED显示屏 红外红外避障(物体检测)传感器 3D打印外壳 按钮DS318-开/关开关 LED 5毫米清除绿色和红色 5V蜂鸣器 2针PCB安装螺钉端子接线端子间距5mm 电阻(1k,330Ω) 步骤1:接线和PCB设计 如图所示,PCB的设计可确保元素之间的良好连接。 1- OLED显示屏 OLED显示器是您可以在Arduino项目中使用的一些最酷,最先进的模块。它们外形小巧,功耗极低,同时提供鲜艳生动的色彩。SSD1306 I2C和SPI OLED模块是一些最便宜且最常用的。I2C版本仅需2条控制线即可用于I2C,这使其常适合Arduino项目,并为其他外设提供了许多其他引脚。 要将显示器连接到您的Arduino SCL --------> A5 SDA --------> A4 Vin --------> 5v GND -------->地 2- MLX90614 MLX90614是用于接触式温度测量的红外线温度计。 它还通过I2C接口与Arduino通信 SCL --------> A5 SDA --------> A4 Vin --------> 5v GND -------->地 特征: 使用芯片:MLX90614电源:3-5v(内部低压降稳压器) 通讯:标准IIC(I2C)通讯协议 体积小,成本低 用两种类型的销钉安装在分线板上 10k带有可选跳线的I2C接口上拉电阻 易于整合 出厂时已在宽温度范围内校准: -40…+ 125°C用于传感器温度和 -70…+ 380°C用于物体温度。 0.5°C的高精度 在较宽的温度范围内(Ta和To都为0…+ 50°C)高(医学)精度校准 0.02°C的测量分辨率 单区和双区版本 SMBus兼容数字接口 可定制的PWM输出,可连续读取 睡眠模式可降低功耗 3-物体检测传感器 IR红外避障(物体检测)传感器用于检测人类是否以(距离:2〜30 cm)接近设备以自动测量其温度,并且还用于在一定时间内未检测到所有设备时关闭所有组件。 OUT --------> A1 VCC --------> 3v GND -------->地 4- 2N2222晶体管 此处使用晶体管来打开/关闭mlx90614传感器 5- LED和警报 蜂鸣器连接到(引脚3) 红色LED连接到(引脚5) 绿色LED已连接到(Pin 7) 6-按钮连接到引脚9 步骤2:3D打印盒 该盒子是使用SolidWorks设计的,然后如图所示进行打印,它很小,紧凑且可靠。STL文件见附件。 步骤3:源码 Arduino编程为当有人接近并且测量5秒后设备仍在屏幕上时计算许多读数的平均值,并在未检测到设备后关闭系统 附件随附了代码和所需的库 步骤4:最终实物图
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值