C51单片机和MLX90614红外测温传感器 电路连接介绍
时间: 2023-10-08 07:04:18 浏览: 162
C51单片机和MLX90614红外测温传感器的电路连接如下:
1. 将MLX90614的SCL引脚连接到C51单片机的P1.0口,即将传感器的SCL引脚连接到C51单片机的P1.0口。
2. 将MLX90614的SDA引脚连接到C51单片机的P1.1口,即将传感器的SDA引脚连接到C51单片机的P1.1口。
3. 将MLX90614的电源引脚连接到C51单片机的VCC口,即将传感器的电源引脚连接到C51单片机的VCC口。
4. 将MLX90614的地引脚连接到C51单片机的GND口,即将传感器的地引脚连接到C51单片机的GND口。
需要注意的是,连接时需要注意电压的匹配,C51单片机和MLX90614的电压必须一致,否则会损坏电路。另外,连接时还需注意引脚的对应关系,错误的连接方式会导致传感器无法正常工作。
除此之外,MLX90614还有一个可选的引脚,称为INT引脚,可以用于传输测量结果或响应中断。如果需要使用该引脚,可以将其连接到C51单片机的任意一个可用IO口上,并在程序中进行相应配置。
相关问题
基于STC15F2K60S2单片机和MLX90614红外温度传感器等元件设计一个红外快速检测人体温度的装置
该装置的设计流程如下:
1. 确定硬件元件:STC15F2K60S2单片机、MLX90614红外温度传感器、LCD显示屏、蜂鸣器、电源等。
2. 搭建硬件电路:按照电路图连接各个硬件元件。
3. 编写程序:使用Keil或其他编译器编写程序,实现单片机对传感器的读取、数据处理、控制LCD显示屏及蜂鸣器进行报警等功能。
具体的步骤如下:
1. 硬件元件确认
STC15F2K60S2单片机:这是一款高性能单片机,具有丰富的接口资源和强大的计算能力,适合用于嵌入式系统中。
MLX90614红外温度传感器:这是一款非接触式红外温度传感器,可以测量目标物体的表面温度,测量范围为-70℃~380℃,精度为±0.5℃。
LCD显示屏:这是一款16x2字符型液晶显示屏,可以显示单片机传输的数据,方便用户查看。
蜂鸣器:这是一款电子音响器件,可以发出一种高频声音,用于报警等功能。
电源:这是整个系统的电源,可以使用直流电源或者电池供电。
2. 硬件电路搭建
按照以下电路图连接各个硬件元件:
![电路图](https://img-blog.csdn.net/20180313204953889?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFyZGluZzEwMTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
3. 编写程序
编写程序实现以下功能:
(1)初始化程序:完成各个硬件元件的初始化工作。
(2)读取传感器数据:使用单片机读取MLX90614红外温度传感器测量到的温度数据。
(3)数据处理:对读取到的温度数据进行处理,计算出人体温度。
(4)控制LCD显示屏显示数据:将计算出的人体温度数据显示在LCD显示屏上。
(5)报警:当人体温度超过正常范围时,通过蜂鸣器进行报警。
程序示例:
```c
#include <STC15F2K60S2.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define TEMP_HIGH 38.0 // 温度报警上限
#define TEMP_LOW 35.0 // 温度报警下限
sbit BEEP = P1^5; // 蜂鸣器
sbit SDA = P1^1; // IIC总线数据线
sbit SCL = P1^0; // IIC总线时钟线
uchar buf[2]; // 存放读取到的温度值
/*************************************
函数名称:delay_us
功 能:微秒级延时
参 数:t,延时微秒数
返 回 值:无
*************************************/
void delay_us(uint t)
{
while (t--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
/*************************************
函数名称:Start_SHT30
功 能:启动IIC总线
参 数:无
返 回 值:无
*************************************/
void Start_IIC(void)
{
SDA = 1;
delay_us(2);
SCL = 1;
delay_us(2);
SDA = 0;
delay_us(2);
SCL = 0;
delay_us(2);
}
/*************************************
函数名称:Stop_IIC
功 能:结束IIC总线
参 数:无
返 回 值:无
*************************************/
void Stop_IIC(void)
{
SDA = 0;
delay_us(2);
SCL = 1;
delay_us(2);
SDA = 1;
delay_us(2);
}
/*************************************
函数名称:IIC_Ack
功 能:应答信号
参 数:无
返 回 值:无
*************************************/
void IIC_Ack(void)
{
SDA = 0;
delay_us(2);
SCL = 1;
delay_us(2);
SCL = 0;
delay_us(2);
}
/*************************************
函数名称:IIC_NAck
功 能:非应答信号
参 数:无
返 回 值:无
*************************************/
void IIC_NAck(void)
{
SDA = 1;
delay_us(2);
SCL = 1;
delay_us(2);
SCL = 0;
delay_us(2);
}
/*************************************
函数名称:Write_IIC_Byte
功 能:向IIC总线写入一个字节
参 数:byte,要写入的字节
返 回 值:无
*************************************/
void Write_IIC_Byte(uchar byte)
{
uchar i;
for (i = 0; i < 8; i++)
{
if ((byte & 0x80) == 0x80)
{
SDA = 1;
}
else
{
SDA = 0;
}
delay_us(2);
SCL = 1;
delay_us(2);
SCL = 0;
byte <<= 1;
delay_us(2);
}
}
/*************************************
函数名称:Read_IIC_Byte
功 能:从IIC总线读取一个字节
参 数:ack,是否发送应答信号
返 回 值:读取到的字节
*************************************/
uchar Read_IIC_Byte(bit ack)
{
uchar i, byte = 0;
SDA = 1;
for (i = 0; i < 8; i++)
{
byte <<= 1;
SCL = 1;
delay_us(2);
if (SDA)
{
byte |= 0x01;
}
SCL = 0;
delay_us(2);
}
if (ack)
{
IIC_Ack();
}
else
{
IIC_NAck();
}
return byte;
}
/*************************************
函数名称:Read_Temp
功 能:读取温度值
参 数:无
返 回 值:温度值
*************************************/
float Read_Temp(void)
{
float temp;
Start_IIC();
Write_IIC_Byte(0x5A << 1 | 0x00); // 发送器件地址和写指令
Write_IIC_Byte(0x07); // 发送读取温度命令
Start_IIC();
Write_IIC_Byte(0x5A << 1 | 0x01); // 发送器件地址和读指令
buf[0] = Read_IIC_Byte(1); // 读取第一个字节,发送应答
buf[1] = Read_IIC_Byte(0); // 读取第二个字节,发送非应答
Stop_IIC();
temp = (buf[1] << 8) | buf[0]; // 将两个字节拼接成一个16位的温度值
temp *= 0.02; // 温度值需要左移2位,所以要除以2的平方
temp -= 273.15; // 将温度值从K转换为℃
return temp;
}
/*************************************
函数名称:LCD_Init
功 能:LCD初始化
参 数:无
返 回 值:无
*************************************/
void LCD_Init(void)
{
P0 = 0x38;
delay_us(2000);
P0 = 0x0C;
delay_us(2000);
P0 = 0x01;
delay_us(2000);
}
/*************************************
函数名称:LCD_Show_Temp
功 能:LCD上显示温度值
参 数:temp,要显示的温度值
返 回 值:无
*************************************/
void LCD_Show_Temp(float temp)
{
uchar i, j, k;
uchar str[8];
sprintf(str, "Temp:%.1f", temp); // 将温度值转换为字符串
for (i = 0; i < 2; i++)
{
P0 = 0x80 + i * 0x40; // 设置显示位置
delay_us(2000);
for (j = 0; j < 8; j++)
{
k = str[i * 8 + j];
P0 = k;
delay_us(2000);
}
}
}
/*************************************
函数名称:BEEP_Alarm
功 能:蜂鸣器报警
参 数:无
返 回 值:无
*************************************/
void BEEP_Alarm(void)
{
BEEP = 1;
delay_us(50000);
BEEP = 0;
}
/*************************************
函数名称:Main
功 能:主函数
参 数:无
返 回 值:无
*************************************/
void Main()
{
float temp;
LCD_Init();
while (1)
{
temp = Read_Temp(); // 读取温度值
LCD_Show_Temp(temp); // 显示温度值
if (temp > TEMP_HIGH || temp < TEMP_LOW) // 温度超过正常范围,报警
{
BEEP_Alarm();
}
}
}
```
以上是一个简单的红外快速检测人体温度的装置设计流程,可以根据实际需求进行修改优化。
LU90614红外测温传感器模块和MLX90614比较
LU90614红外测温传感器模块和MLX90614都是基于红外非接触式测温原理的传感器可以用于测量物体表面的温。它们的原理和测量范围类似,但是在具体的性能应用方面可能存在差异。
MLX90614是一款有名的红外测温感器,具有高精度、高可靠性、低功耗等特点,广泛应用于热成像、温度控制、医疗设备、汽车电子等领域。它采用了MEMS技术和红外线探测技术,可以测量-40°C至+125°C范围内的物体表面温度,并且具有0.02°C的分辨率和0.5°C的测量精度。
LU90614红外测温传感器模块则是一款较新的产品,采用了数字信号处理技术和SMT工艺,具有高精度、快速响应、抗干扰等特点,可以应用于家电、智能家居、温度控制等领域。它可以测量-30°C至+110°C范围内的物体表面温度,并且具有0.1°C的分辨率和0.5°C的测量精度。
总的来说,MLX90614是一款经典的红外测温传感器,具有较高的测量精度和广泛的应用领域;LU90614红外测温传感器模块则是一款新型产品,具有数字信号处理和抗干扰等优点,适用于一些特定的应用场景。选择哪种产品需要根据具体的应用要求和成本等因素进行综合考虑。
阅读全文