• 方案介绍
  • 相关推荐
申请入驻 产业图谱

基于51单片机温度控制系统报警器恒温箱蓝牙app控制设计

17小时前
119
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1 系统功能介绍

本设计的题目是 基于 51 单片机温度控制系统报警器恒温箱蓝牙 APP 控制设计。在现代实验室、食品保存及环境调节应用中,温度控制是核心需求之一。传统的温控系统多依赖机械式或简单的电子温控器,功能单一、缺乏人机交互远程控制能力。本系统结合 单片机控制、LCD 显示、继电器驱动、蜂鸣器报警、蓝牙无线通信 等功能模块,设计并实现了一个智能化的温度控制与报警系统

主要功能如下:

  1. 实时显示LCD1602 实时显示当前温度值、设定的温度上下限值以及工作状态。
  2. 按键设置:用户可通过按键设置温度上下限阈值,参数即时显示在 LCD1602 上。
  3. 自动温控
    • 当温度高于上限时,打开制冷继电器,控制外接散热器工作;
    • 当温度低于下限时,打开制热继电器,控制外接加热器工作。
  4. 报警功能:若温度超过 1 分钟仍未恢复到设定范围,则蜂鸣器报警提示。
  5. 蓝牙通讯
    • LCD 显示内容实时通过蓝牙模块上传到手机 APP;
    • 手机 APP 可以发送指令,修改温度上限和下限阈值,实现远程控制。
  6. 智能恒温:通过单片机的判断逻辑实现温度的自动调节和恒温箱的稳定运行。

2 系统电路设计

系统由 单片机最小系统电路、LCD1602 液晶显示电路、温度传感器电路、按键输入电路、继电器驱动电路、蜂鸣器电路、蓝牙通信模块电路、电源电路 等部分组成。下面逐一介绍。


2.1 单片机最小系统电路

  • 本系统核心采用 STC89C52 单片机,该芯片基于 8051 内核,拥有丰富的 IO 接口,适用于传感器采集和外设控制。
  • 单片机主要负责:
    1. 采集温度传感器的数据;
    2. 控制 LCD 显示;
    3. 判断温度与设定阈值的关系,驱动继电器;
    4. 控制蜂鸣器报警;
    5. 与蓝牙模块进行串口通信

2.2 温度传感器电路

  • 系统采用 DS18B20 数字温度传感器,其测温范围宽(-55℃~125℃),精度高(±0.5℃)。
  • DS18B20 通过单总线与单片机相连,单片机可直接读取温度数据,不需要额外的 A/D 转换芯片。
  • 温度数据被用于与设定的上下限进行比较,实现自动温控。

2.3 LCD1602 液晶显示电路

  • LCD1602 是一款字符型液晶显示模块,本系统采用 4 位数据线模式连接单片机。
  • 显示内容包括:
    • 当前温度值;
    • 设置的温度上限和下限;
    • 系统运行状态(加热/制冷/正常)。

2.4 按键输入电路

  • 系统设计 3 个按键
    1. K1:进入阈值设置模式;
    2. K2:增加数值;
    3. K3:减少数值。
  • 用户可以通过按键灵活设置温度上下限,并将数据保存到单片机中。

2.5 继电器驱动电路

  • 系统采用 两个继电器
    1. 制冷继电器 → 外接风扇或制冷装置;
    2. 加热继电器 → 外接电热丝或加热器。
  • 单片机 IO 控制三极管驱动继电器,实现加热和制冷切换。

2.6 蜂鸣器电路

  • 当温度超过上限或低于下限,并且超过 1 分钟仍未恢复到范围内,单片机驱动蜂鸣器鸣叫。
  • 蜂鸣器由 IO 口控制,通过定时器计时实现延时判断。

2.7 蓝牙模块电路

  • 本系统采用 HC-05 蓝牙串口模块,通过 UART 接口与单片机通信。
  • 功能包括:
    1. 实时上传 LCD 显示的温度值、阈值和系统状态到手机 APP;
    2. 接收 APP 下发的温度上下限参数,并更新到系统。

2.8 电源电路

  • 系统采用 +5V 直流电源,给单片机、LCD、继电器驱动、蜂鸣器和蓝牙模块供电。
  • 电源部分加入滤波电容,提高系统稳定性。

3 程序设计

程序分为 主程序、DS18B20 驱动程序、LCD 显示程序、按键检测程序、继电器控制程序、蜂鸣器报警程序、蓝牙通信程序 等部分。


3.1 主程序框架

#include <reg52.h>
#include "lcd1602.h"
#include "ds18b20.h"
#include "relay.h"
#include "uart.h"
#include "buzzer.h"
#include "key.h"

#define TIME_LIMIT 60  // 1分钟超时

float temp;
float temp_high = 30.0;
float temp_low  = 20.0;
unsigned int timer_count = 0;

void main()
{
    LCD_Init();
    DS18B20_Init();
    UART_Init();
    Relay_Init();
    Buzzer_Init();
    Key_Init();
    
    while(1)
    {
        temp = DS18B20_ReadTemp();
        Key_Scan(&temp_high, &temp_low); 
        LCD_ShowTemp(temp, temp_high, temp_low);
        UART_SendData(temp, temp_high, temp_low);
        
        if(temp > temp_high) 
        {
            Relay_CoolOn();
            Relay_HeatOff();
            timer_count++;
        }
        else if(temp < temp_low)
        {
            Relay_HeatOn();
            Relay_CoolOff();
            timer_count++;
        }
        else
        {
            Relay_CoolOff();
            Relay_HeatOff();
            timer_count = 0; // 恢复正常,计时清零
        }
        
        if(timer_count >= TIME_LIMIT)
        {
            Buzzer_On();
        }
        else
        {
            Buzzer_Off();
        }
        
        delay_ms(1000);
    }
}

3.2 DS18B20 温度采集程序

float DS18B20_ReadTemp()
{
    unsigned int temp;
    float t;
    DS18B20_Start();
    DS18B20_WriteByte(0xCC); // 跳过ROM
    DS18B20_WriteByte(0x44); // 启动转换
    delay_ms(750);
    DS18B20_Start();
    DS18B20_WriteByte(0xCC);
    DS18B20_WriteByte(0xBE); // 读取温度寄存器
    temp = DS18B20_ReadByte();
    temp |= (DS18B20_ReadByte()<<8);
    t = temp * 0.0625;
    return t;
}

3.3 按键设置程序

void Key_Scan(float *high, float *low)
{
    if(K1 == 0)  // 进入设置模式
    {
        delay_ms(10);
        if(K1 == 0)
        {
            while(!K1);
            *high += 1;  // 简化,按一次增加上限
        }
    }
    if(K2 == 0)  // 增加下限
    {
        delay_ms(10);
        if(K2 == 0)
        {
            while(!K2);
            *low += 1;
        }
    }
    if(K3 == 0)  // 减少下限
    {
        delay_ms(10);
        if(K3 == 0)
        {
            while(!K3);
            *low -= 1;
        }
    }
}

3.4 继电器控制程序

sbit RelayCool = P2^0;
sbit RelayHeat = P2^1;

void Relay_Init(void)
{
    RelayCool = 0;
    RelayHeat = 0;
}

void Relay_CoolOn(void)
{
    RelayCool = 1;
}

void Relay_CoolOff(void)
{
    RelayCool = 0;
}

void Relay_HeatOn(void)
{
    RelayHeat = 1;
}

void Relay_HeatOff(void)
{
    RelayHeat = 0;
}

3.5 蜂鸣器报警程序

sbit Buzzer = P3^7;

void Buzzer_Init(void)
{
    Buzzer = 0;
}

void Buzzer_On(void)
{
    Buzzer = 1;
}

void Buzzer_Off(void)
{
    Buzzer = 0;
}

3.6 蓝牙通信程序

void UART_Init(void)
{
    SCON = 0x50;  // 串口模式1
    TMOD = 0x20;  // 定时器1方式2
    TH1 = 0xFD;   // 波特率9600
    TL1 = 0xFD;
    TR1 = 1;
    EA = 1;
    ES = 1;
}

void UART_SendData(float temp, float high, float low)
{
    char str[20];
    sprintf(str,"T=%.1f H=%.1f L=%.1fn",temp,high,low);
    SendString(str);
}

void UART_ISR(void) interrupt 4
{
    if(RI)
    {
        char cmd = SBUF;
        RI = 0;
        if(cmd == 'U') temp_high += 1; // 上限加1
        if(cmd == 'D') temp_high -= 1; // 上限减1
        if(cmd == 'L') temp_low  -= 1; // 下限减1
        if(cmd == 'R') temp_low  += 1; // 下限加1
    }
}

4 总结

本文设计并实现了一个 基于 51 单片机的温度控制系统报警器恒温箱蓝牙 APP 控制系统。系统能够完成 温度检测、自动恒温、上下限设置、报警提示、蓝牙通信与 APP 远程控制 等功能。

主要特点:

  1. 可靠性:通过 DS18B20 数字温度传感器确保温度测量精确。
  2. 智能化:自动判断温度情况,控制继电器驱动加热或制冷装置,实现恒温。
  3. 安全性:若超过 1 分钟仍无法恢复正常,蜂鸣器报警提醒用户。
  4. 人机交互性:用户可通过按键或手机 APP 修改阈值,LCD1602 实时显示数据。
  5. 可扩展性:系统可增加数据存储、WiFi 远程监控等功能,进一步提升应用价值。

本设计为实验室恒温设备、食品冷藏柜以及温室大棚环境控制提供了有效的解决方案。

相关推荐