0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于51单片机设计的热敏电阻测温系统

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2023-06-13 08:49 次阅读

一、项目介绍

当前文章介绍基于51单片机的热敏电阻测温系统的设计过程,用于实时监测环境温度,并在温度超过预设阈值时进行报警。由于采用的是热敏电阻测温技术,无需外置温度传感器,使得系统具有结构简单、成本较低等优点。

主控芯片采用STC89C52,具有良好的稳定性和可靠性,适应于工业控制等领域的应用需要。ADC采集模块采用PCF8591模块,可方便地实现对热敏电阻温度数据的转换和采集,提高了系统的准确度和实用性。

系统通过4位数码管显示出温度值,同时通过按键设置温度上限阀值,当温度超过阀值时,会通过蜂鸣器报警,提醒用户注意环境温度的变化情况。

在项目中主要是用到了热敏电阻和PCF8591模块。

(1)热敏电阻介绍

热敏电阻(Thermistor)是一种基于材料的电阻元件,其电阻值随温度的变化而发生相应的变化。通常情况下,热敏电阻的电阻值随温度升高而降低,反之则随温度降低而升高,这种特性被称为负温度系数(NTC)或正温度系数(PTC)。

热敏电阻的工作原理是基于材料的温度敏感性质。在热敏电阻中,存在许多导电粒子,当温度升高时,导电粒子与材料中的离子激发程度增强,导致导电粒子的数量变多,因此电阻值降低;反之,当温度降低时,导电粒子的数量变少,电阻值增加。

image-20230607174607073

(2)PCF8591

PCF8591是一款4通道、8位模数转换器ADC)和1通道、8位数模转换器DAC)的集成电路芯片。可以通过I2C总线与微控制器进行通信,实现模拟信号的输入和输出。

PCF8591的输入电压范围为0V~VCC(通常为5V),可以通过外部电阻进行放大或缩小。它还有一个内部参考电压源,可以通过软件控制选择使用。

PCF8591的输出电压范围也是0V~VCC,可以用于控制模拟信号的输出,比如控制电机的转速、LED的亮度等。

在热敏电阻测温系统中,使用PCF8591模块来采集热敏电阻的电压信号,并将其转换为数字信号,进而计算出温度值。

image-20230607175024034

image-20230607174642810

image-20230607175143298

二、设计思路

2.1 系统结构

系统采用单片机作为主控芯片,热敏电阻用于测量环境温度,PCF8591模块采集热敏电阻的温度数据并将其转换为正常温度值,通过数码管进行显示。同时,系统设置上限阀值,当温度超过该值时,系统会通过蜂鸣器报警。

2.2 硬件设计

(1)主控芯片

本系统采用STC89C52单片机作为主控芯片,具有强大的计算能力、稳定的性能和较低的功耗,支持多种外设接口,适合于工业控制等领域的应用需求。

(2)温度传感器

本系统采用热敏电阻作为温度传感器,其结构简单、价格便宜,且无需额外的电源供应,可直接通过PC8591模块的输入端口进行检测

(3)ADC采集模块

系统采用PCF8591模块进行ADC采集,具有4路模拟输入通道和一个模拟输出通道,采样精度高达8位,能够满足本系统对温度信号的准确采集需求。

(4)数码管显示模块

系统采用4位共阳数码管进行数据显示,其显示范围为-999~+9999,可满足本系统对温度数据的实时显示需求。

(5)蜂鸣器报警模块

系统采用蜂鸣器进行报警提示,当温度超过预设阈值时,蜂鸣器会发出持续声响,提醒用户注意环境温度的变化情况。

(6)按键模块

按键模块,方便用户进行阀值的设置和调整操作。

2.3 软件设计

(1)温度采集与转换

系统使用ADC采集热敏电阻的温度信号,并将采集到的数字信号转换成温度值进行显示。转换公式为: T=(adc_value/255.0)*330,其中adc_value为AD转换器输出的数字值,330是热敏电阻的参考电阻值。

(2)温度上限阀值设置

系统通过按键实现温度上限阀值的设置和调整操作,用户可以根据自己的需求进行设定。

(3)报警功能设计

系统在采集到温度超过预设阈值时,蜂鸣器会发出声响进行提醒,并且LED指示灯会亮起。

2.4 总体流程

(1)初始化各个模块,包括单片机、PCF8591、数码管、蜂鸣器和按键等。

(2)采集热敏电阻的温度信号,并将数字信号转换为温度值。

(3)将温度值通过数码管进行显示。

(4)检测当前温度是否超过预设阈值,若超过,则触发报警并点亮LED指示灯。

(5)用户可以通过按键设置温度上限阀值,系统会保存设置的阈值并进行下一次温度比较。

三、代码实现

以下是基于51单片机设计的热敏电阻测温系统的实现代码。

#include < reg52.h >
 #include < intrins.h >typedef unsigned char u8;
 typedef unsigned int u16;
 ​
 #define PCF8591_address_write 0x90
 #define PCF8591_address_read  0x91
 ​
 sbit SCLK = P1^0;      //PCF8591模块时钟线
 sbit DOUT = P1^1;      //PCF8591模块数据线
 sbit DIN = P1^2;       //PCF8591模块数据线
 sbit CS = P1^3;        //PCF8591模块片选线
 ​
 sbit LATCH1 = P3^4;    //锁存器1
 sbit LATCH2 = P3^5;    //锁存器2
 ​
 sbit KEY1 = P2^0;      //按键1
 sbit KEY2 = P2^1;      //按键2
 ​
 sbit BUZZ = P2^3;      //蜂鸣器
 ​
 u16 ADC_value;         //采集到的ADC值
 float temperature;     //计算得到的温度值
 ​
 u8 table[] = {  //共阳数码管段码表
     0xc0,   //0
     0xf9,   //1
     0xa4,   //2
     0xb0,   //3
     0x99,   //4
     0x92,   //5
     0x82,   //6
     0xf8,   //7
     0x80,   //8
     0x90,   //9
     0xbf,   //-
 };
 ​
 void delay(u16 i){
     while(i--);
 }
 ​
 void delay_ms(u16 ms){
     u16 i, j;
     for(i=0; i< ms; i++){
         for(j=0; j< 110; j++);
     }
 }
 ​
 void write_PCF8591(u8 data){
     u8 i;
     DIN = 1;
     SCLK = 0;
     CS = 0;
     for(i=0; i< 8; i++){
         DOUT = (data & 0x80) > > 7;
         data < <= 1;
         SCLK = 1;
         SCLK = 0;
     }
     CS = 1;
 }
 ​
 u16 read_ADC(){
     u16 value;
     CS = 0;
     DIN = 1;
     SCLK = 0;
     DIN = 0;
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     SCLK = 1;
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     value = P1;
     SCLK = 0;
     value < <= 8;
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     SCLK = 1;
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     _nop_();
     value |= P1;
     CS = 1;
     return value;
 }
 ​
 void display(u8 addr, u8 dat){
     LATCH1 = 0;
     LATCH2 = 0;
     P0 = addr;
     LATCH1 = 1;
     LATCH1 = 0;
     P0 = table[dat];
     LATCH2 = 1;
     LATCH2 = 0;
 }
 ​
 void main(){
     u8 set_value = 40;  //温度上限阀值
     u8 temp;
     write_PCF8591(0x40);
     while(1){
         ADC_value = read_ADC();
         temperature = (float)ADC_value * 330 / 255;
         temperature -= 50;
         if(temperature > set_value){  //温度超过上限阀值,触发报警
             BUZZ = 1;
         }
         else{
             BUZZ = 0;
         }
         if(temperature < -99){
             temp = '-';
             display(0x00, temp);
             display(0x01, 10);
             display(0x02, 10);
             display(0x03, 10);
         }
         else if(temperature < 0){
             temp = '-';
             display(0x00, temp);
             temp = ~(int)temperature + 1;
             display(0x01, temp/10);
             display(0x02, temp%10);
             display(0x03, 11);  //小数点
         }
         else if(temperature > 999){
             display(0x00, 10);
             display(0x01, 9);
             display(0x02, 9);
             display(0x03, 9);
         }
         else{
             display(0x00, temperature/100);
             display(0x01, temperature/10%10);
             display(0x02, temperature%10);
             display(0x03, 11);  //小数点
         }
         if(KEY1 == 0){  //按键1按下,增加上限阀值
             delay_ms(10);
             if(KEY1 == 0){
                 set_value++;
                 while(!KEY1);
             }
         }
         if(KEY2 == 0){  //按键2按下,减小上限阀值
             delay_ms(10);
             if(KEY2 == 0){
                 set_value--;
                 while(!KEY2);
             }
         }
         delay_ms(10);
     }
 }

代码中采用了共阳数码管,通过采集热敏电阻产生的电压值,计算得到环境温度值,再通过数码管进行显示;当温度超过设定的上限值时,会触发蜂鸣器报警。可以通过按键对温度上限阀值进行设置和调整操作。
审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2550

    文章

    51038

    浏览量

    753086
  • 热敏电阻
    +关注

    关注

    14

    文章

    1163

    浏览量

    101502
  • NTC
    NTC
    +关注

    关注

    7

    文章

    424

    浏览量

    52045
  • 51单片机
    +关注

    关注

    274

    文章

    5702

    浏览量

    123494
  • 测温系统
    +关注

    关注

    0

    文章

    115

    浏览量

    21990
收藏 人收藏

    评论

    相关推荐

    如何去实现一种基于51单片机热敏电阻测温系统

    本设计以51系列单片机STC89C52为控制核心,以液晶显示模块、键盘为人机接口,负温度系数热敏电阻器(NTC)为采样传感器,实现了一个基于51单片
    发表于 07-14 08:33

    如何实现一个基于51单片机热敏电阻测温设计

    如何实现一个基于51单片机热敏电阻测温设计?基于51单片机
    发表于 10-18 06:14

    基于单片机热敏电阻测温设计资料分享

    基于单片机热敏电阻测温设计1.基本功能1)具有声光报警功能;2)使用液晶显示;3)温度上、下限报警值设定;温度上、下限报警;4)手动方式设定温度上下限;总体方案设计温度控制系统主要由
    发表于 02-18 07:49

    简述热敏电阻测温原理

    热敏电阻测温原理与热电偶的测温原理不同的是,热电阻是基于电阻的热效应进行温度测量的,即电阻体的阻
    的头像 发表于 01-19 14:03 3w次阅读

    基于51单片机热敏电阻温度计仿真设计

    基于51单片机热敏电阻温度计仿真设计
    发表于 10-25 10:14 9次下载

    39-基于51单片机热敏电阻测温设计

    本设计以51系列单片机STC89C52为控制核心,以液晶显示模块、键盘为人机接口,负温度系数热敏电阻器(NTC)为采样传感器,实现了一个基于51单片
    发表于 11-05 12:21 48次下载
    39-基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的<b class='flag-5'>热敏电阻</b><b class='flag-5'>测温</b>设计

    39-基于51单片机热敏电阻测温设计

    系统由STC89C52单片机+热敏电阻+TLC2543AD模块+LCD1602显示模块+报警模块+电源构成。具体功能:1、LCD1602显示测得的温度值与设定的温度范围2、按键可以设置温度范围;3、超过设置的温度范围,开始报警;
    发表于 11-23 16:36 10次下载
    39-基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的<b class='flag-5'>热敏电阻</b><b class='flag-5'>测温</b>设计

    基于单片机热敏电阻测温设计

    基于单片机热敏电阻测温设计1.基本功能1)具有声光报警功能;2)使用液晶显示;3)温度上、下限报警值设定;温度上、下限报警;4)手动方式设定温度上下限;总体方案设计温度控制系统主要由
    发表于 12-23 19:19 16次下载
    基于<b class='flag-5'>单片机</b>的<b class='flag-5'>热敏电阻</b><b class='flag-5'>测温</b>设计

    基于51单片机热敏电阻测温仿真程序

    基于51单片机热敏电阻测温仿真设计(包含仿真及源程序)
    发表于 05-19 16:16 14次下载

    ntc热敏电阻测温电路

    ntc热敏电阻测温电路 NTC热敏电阻测温电路 NTC热敏电阻测温电路主要指利用负温度系数
    的头像 发表于 08-28 18:24 4278次阅读

    ntc热敏电阻测温电路原理

    ntc热敏电阻测温电路原理 NTC热敏电阻测温电路是一种常见的温度测量电路,它通过利用热敏电阻的阻值和温度的关系来实现温度的测量。 一、
    的头像 发表于 08-28 18:24 4174次阅读

    ntc热敏电阻测温c程序

    ntc热敏电阻测温c程序  热敏电阻是一种温度敏感的电阻,它的电阻值随温度变化而变化,可以用于温度测量。在实际应用中,我们可以利用NTC(N
    的头像 发表于 08-28 18:24 2377次阅读

    基于51单片机热敏电阻数字温度计设计

    电子发烧友网站提供《基于51单片机热敏电阻数字温度计设计.rar》资料免费下载
    发表于 01-03 11:17 34次下载

    基于51单片机热敏电阻数字温度计设计

    电子发烧友网站提供《基于51单片机热敏电阻数字温度计设计.rar》资料免费下载
    发表于 01-12 09:32 22次下载

    热敏电阻测温范围小的原因

    热敏电阻是一种利用材料电阻随温度变化的特性来测量温度的传感器。它广泛应用于各种领域,如工业自动化、家用电器、汽车电子等。然而,热敏电阻测温范围相对较小,这主要是由于其工作原理和材料特
    的头像 发表于 07-18 10:35 482次阅读