温度监控系统下位机温度超出警报 基于51单片机

目录

前言

一、准备

 二、设计方法思路

三、连接硬件

四、代码设计

 五、编译程序

 六、下载程序

总结


前言

温室监控系统是一种应用于农业领域的智能化技术,通过实时监测和控制温室内的环境参数,提高农作物的生长质量和产量。而上位机作为温室监控系统的核心控制中心,负责实时显示和管理温室内的各项数据。

在温室监控系统中,上位机扮演着至关重要的角色。它通过与传感器、执行器等设备进行通信,实时采集温度、湿度、光照等数据,并将这些数据以直观的方式展示给用户。通过上位机,用户可以随时了解温室内的环境状况,及时采取相应的措施,保证农作物的健康生长。

实时显示数据是温室监控系统上位机的重要功能之一。它使用户能够直观地观察温室内各项参数的变化趋势,并及时做出相应的调整。通过实时显示数据,用户可以监测温度是否过高或过低,湿度是否适宜,光照是否充足等,从而为农作物提供一个理想的生长环境。

在本文中,我们将介绍一种温室监控系统上位机实时显示数据的方法。我们将使用C#编程语言和Windows Forms框架,通过串口与温室监控设备进行通信,并实时显示温度、湿度等数据。我们将详细介绍代码的实现过程和关键技术,帮助读者理解和应用这一功能。

通过本文的学习,读者将能够掌握温室监控系统上位机实时显示数据的方法和技巧,为农业生产提供科学化、智能化的支持。相信通过温室监控系统的应用,我们能够提高农作物的产量和质量,为农业发展做出更大的贡献。

温度监控系统是一种广泛应用于各种场景的实时监测系统。本文将介绍如何使用51单片机来实现一个温度监控系统下位机,并在温度超出一定范围时触发警报。 


一、准备

  • 硬件
  1. 51单片机(例如STC89C52)
  2. DS18B20温度传感器
  3.  蜂鸣器 

  • 软件

Keil 5(MDK)


 二、设计方法思路

 接收上位机设置的报警温度的上、下限数值,接收到有效串口协议后,声明两个变量并把上下限数值赋值给变量,再设置标志位防止进入死循环,如果下位机实际温度数值大于或小于上位机的上下限,则发出警报。


三、连接硬件

将DS8B20温度传感器与51单片机进行连接,将蜂鸣器连接到单片机的相应引脚上。 


四、代码设计

这段代码主要是控制温度传感器和蜂鸣器的功能。

在主函数中,循环调用Read_data函数和Temp_compare函数。

Read_data函数用来读取和解析通讯协议,根据不同的device类型进行相应的操作。例如,如果device为FRAME_LED,则将HV和LV合并为采光时间;如果device为FRAME_TEMP,则将tempH和tempL以十六进制形式发送。

Temp_compare函数用来比较温度是否超过上下限,并控制蜂鸣器的开关。如果温度大于上限,则蜂鸣器连续响铃;如果温度小于下限,则蜂鸣器连续响铃。最后,将蜂鸣器关闭。

整体来说,这段代码是一个温度监控系统,通过读取温度传感器的数据,并根据设定的上下限比较温度是否超过范围,如果超过则触发蜂鸣器报警。

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
*实验现象:下载程序后,把外设设备接上合适电源 将OLED SCL接P17 SDA接P16;风扇负极接P11;喷灌(电机)接P10;温湿度传感器(DHT11)I/O接P37。
*本程序使用普中科技A2开发板
*******************************************************************************/
#include <REG52.h>
#include <stdio.h>
#include "Uart.h"
#include "Dht1.h"
#include "Greenhouse.h"
#include "Distionctrl.h"
#include "oled.h"

#define LCD_DB P0 // LCD数据口

sbit Buzzer = P3^0; // 蜂鸣器

sbit DS8B20_DQ = P^0; // DS8B20数据线

u8 temp_flag,temp_up,temp_down; //标志位,温度上限,温度下限
u16 Beep_time = 6000;          //蜂鸣器警报时间
void Read_data(u8 device,u16 HV,u8 LV)//读取解析到的通讯协议  device 类型 HV高八位 LV低八位
{
	switch(device)//判断类型
	{
		case FRAME_LED://采光
			Led_time =  (HV<<8)+LV;//把高八位左移8位加上低八位赋值给采光时间
			break;
		case FRAME_FAN://风扇
			Fan_time =  (HV<<8)+LV;//把高八位左移8位加上低八位赋值给风扇时间
			break;
		case FRAME_SPRINK://喷灌
			Sprink_time =  (HV<<8)+LV;//把高八位左移8位加上低八位赋值给喷灌时间
			break;
		case FRAME_TEMP://温度
			 	Send_TempHumi_Data(FRAME_TEMP,tempH&0xFF,tempL&0xFF);//把获取的温度数据以十六进制发送
				Delayms(50);
			break;
		case FRAME_HUMI://湿度
			 	Send_TempHumi_Data(FRAME_HUMI,humiH&0xFF,humiL&0xFF);//把获取的湿度数据以十六进制发送
				Delayms(50);
			break;
		case FRAME_TEMPBound://温度上下限
			  temp_flag  = 1;							//说明已经收到温度上下限了
			 	temp_up = HV;             //收到上位机的温度上限赋值给变量
				temp_down = LV;			//收到上位机的温度下限赋值给变量
			break;
		case FRAME_HUMIBound://湿度上下限
			  humi_flag = 1;						//说明已经收到湿度上下限了
			 	humi_up = HV;					//收到上位机的湿度上限赋值给变量
				humi_down = LV;			//收到上位机的湿度下限赋值给变量
			break;
	}
}
        void Temp_compare(void)
        {
        	if(temp_flag == 1)  //接收到
	        {
		        if(tempH >= temp_up)  //如果温度大于上限
		        {
				    while(Beep_time--)  //6000以   时间自减
				    {
					Beep =!Beep;  //反转
					Delayus(100);
				    }
				    Beep_time = 0; //防止负数错误
				    temp_flag = 0; //清空标志位
		        }
		        if(tempH < temp_down)//如果温度小于下限
		        {
			        while(Beep_time--)
				{
					Beep =!Beep;
					Delayus(100);
				}
				Beep_time = 0;//防止负数错误
				temp_flag = 0;//清空标志位
		}
			Beep = 1;	   //执行完以上判断,蜂鸣器关闭
	  	Beep_time = 6000; //重新赋值蜂鸣器时间
	 }
}

int main(void)
{
    while(1)
    {
        Read_data(temp,17,00);
        Temp_compare();
    }
}

 
五、编译程序

使用Keil C51进行编译,生成HEX文件。 


 六、下载程序

使用编程器将生成的HEX文件下载到51单片机中。
至此,温度监控系统下位机的开发就完成了。当温度超出30度时,蜂鸣器会触发警报。 


 总结

该系统能够接收上位机设置的报警温度上下限数值,一旦当前温度超出范围,下位机会通过蜂鸣器发出警报音。谢谢阅读

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值