毕业设计 单片机智能大棚温湿度控制系统(源码+硬件+论文)

这篇具有很好参考价值的文章主要介绍了毕业设计 单片机智能大棚温湿度控制系统(源码+硬件+论文)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


0 前言

🔥
这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 毕业设计 单片机智能大棚温湿度控制系统(源码+硬件+论文)

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

🧿 项目分享:

https://gitee.com/sinonfin/sharing文章来源地址https://www.toymoban.com/news/detail-475581.html

毕业设计 单片机智能大棚温湿度控制系统(源码+硬件+论文)

1 主要功能

本系统的设计的硬件主要包括:主要是单片机STC89C52,检测系统,显示电路,继电器驱动电路等。利用传感器测量大棚内的温湿度经过信号处理,将传感器测得的数据送至控制系统(STC89C52),与预设的农作物最适合生长的温湿度值的上下限进行对比,并通过显示电路将测得的温湿度进行实时显示,超过范围发出报警并且执行相应的动作,此外我们还增加了手机蓝牙查看温湿度的功能。如果不同作物的适合生长的温度不一样,可以通过键盘电路修改预设值。

          当检测的湿度低于下限时 =====>进行加湿;
          当检测的湿度高于上限时 =====>进行除湿;
          当检测的温度低于下限时 =====>进行升温;
          当检测的温度高于上限时 =====>进行降温;

这样就使温度和湿度一直控制在设定的上下限之间,这样就实现了对大棚温湿度的自动控制。
本文主要研究内容如下:
1.进行温湿度控制系统的整体研究与设计。
2.利用键盘设置温湿度的上下限值。
3.利用数字温湿度传感器测量大棚内的温湿度。
4.利用LCD对温湿度进行实时显示。
5.当大棚温湿度值超出设定范围值时,系统会自动驱动信号控制继电器对大棚温湿度进行调节。

毕业设计 单片机智能大棚温湿度控制系统(源码+硬件+论文)

2 硬件设计(原理图)

毕业设计 单片机智能大棚温湿度控制系统(源码+硬件+论文)
毕业设计 单片机智能大棚温湿度控制系统(源码+硬件+论文)

3 核心软件设计

主程序流程图

毕业设计 单片机智能大棚温湿度控制系统(源码+硬件+论文)

关键代码

include <reg52.h>
#define uint unsigned int 
#define uchar unsigned char
#include <intrins.h>

typedef bit BOOL  ; 

sbit io = P1^7 ;
sbit FMQ=P2^0;   //蜂鸣器
sbit TempH=P1^3;  //降温控制
sbit TempL=P1^2;  //加温控制

sbit HumiH=P1^1;   //除湿
sbit HumiL=P1^0;   //加湿
sbit rs = P2^5 ; 
sbit rw = P2^6 ;
sbit ep = P2^7 ;
bit flag_300ms ;

sbit K1=P3^2;
sbit K2=P3^3;
sbit K3=P3^4;

uchar yemian=0;
uchar flat=1;
uchar data_byte;
uchar RH,RL,TH,TL;
uchar WenDu_H,WenDu_L,ShiDu_H,ShiDu_L;//报警的温度和湿度
#include "eeprom52.h"


/****************************延时程序****************************/
void delay(uchar ms)
{       // 延时子程序
	 uchar i ;
	 while(ms--)
	 {
	  	for(i = 0 ; i<250;i++) ;
	 }
}

void delay1()//延时10us
{
	uchar i;
	i--;
	i--;
	i--;
	i--;
	i--;
	i--;
}
void longdelay(uchar s) //长延时
{
	 while(s--)
	 {
	  	delay(20) ;
	 }
}



/************************LCD模块******************************************/

BOOL lcd_bz()//测试LCD忙碌状态
{      
	 BOOL result ;
	 rs = 0 ;
	 rw = 1 ;
	 ep = 1 ;
	 result = (BOOL)(P0 & 0x80) ;
	 ep = 0 ;
	 return result ; 
}

void write_cmd(uchar cmd)// 写指令
{       
 	while(lcd_bz()) ;
	rs = 0 ;
	rw = 0 ;
	ep = 0 ;
	P0 = cmd ;
	ep = 1 ;
	ep = 0 ;  
}

void write_addr(uchar addr)//写地址
{       
 	write_cmd(addr|0x80) ;
}

uchar receive_byte()//接收一个字节
{
	uchar i,temp,count;
	for(i=0;i<8;i++)
	{
		count=2;
		while((!io)&&count++)//等待50us低电平结束
		temp=0;
		delay1();delay1();delay1();delay1();
		if(io==1)temp=1;
		count=2;
	
		if(count==1)break;
		data_byte<<=1;	
		data_byte|=temp;
	}
	return data_byte;
}
void receive()//接收数据
{
	uchar T_H,T_L,R_H,R_L,check,num_check;
	uchar count;
	start();//开始信号
	io=1;
	if(!io)//读取DHT11响应信号
	{
	count=2;
	while((!io)&&count++);//DHT11高电平80us是否结束
	count=2;
	while((io)&&count++);
	R_H=receive_byte();
	R_L=receive_byte();
	io=0;//拉低延时50us
	delay1();delay1();delay1();delay1();delay1();
	io=1;
	num_check=R_H+R_L+T_H+T_L;
	if(num_check=check)
	{
		TH=T_H;
		TL=T_L;
		check=num_check;
	}
	}
}


void showw()   // 问候语函数
{      
	   lcd_init(); //初始化
	    delay(10);
	
     display(0x05,'W');
     display(0x06,'e');
		 display(0x07,'l');
		 display(0x08,'c');
		 display(0x09,'o');
		 display(0x0a,'m');
     display(0x0b,'e');
	   delay(250); //短暂延时
	   delay(250);
	   delay(250);
	   

/*********************************/
/*
	   display(0x40,' ') ;
		 display(0x41,'h');
		 display(0x42,'e');
		
 */
}


/*************定时器0初始化程序***************/
void time_init()	  
{
	EA   = 1;	 	  //开总中断
	TMOD = 0X01;	  //定时器0、定时器1工作方式1
	ET0  = 1;		  //开定时器0中断 
	TR0  = 1;		  //允许定时器0定时
}



void key() //按键程序 选择菜单模式
{
     
	  if(!K1)
		   {  
			  delay(20);
			    if(!K1)
		         {   
							 while(!K1)
				           ;
							  yemian++;
                              if(yemian>=5) { yemian=0; } 
								
             }
		   }
 
	
	
}


shezhi()  //对里面的数值进行修改
{
    if(!K2)
		   {  
			  delay(50);
			    if(!K2)
		         {   
							 ;
							 
							 if(yemian==1)
							 {
							   
								if(WenDu_H<99 && WenDu_H>=WenDu_L )  {  WenDu_H+=1; }  //湿度上限加
							 }
							 

							if(yemian==2)
							 {
							  
								if(WenDu_L>=0 &&  WenDu_L<WenDu_H)   {  WenDu_L+=1; }  //温度下限加
							 }



							 if(yemian==3)
							 {
							 	if(ShiDu_H<99 && ShiDu_H>=ShiDu_L )  {  ShiDu_H+=1; }  //湿度上限加
							 }

							  if(yemian==4)
							 {
							 	if(ShiDu_L>=0 &&  ShiDu_L<ShiDu_H)   {  ShiDu_L+=1; }  //湿度下限加
//=============蜂鸣器==============================
 if( TempH==0 || TempL==0 || HumiH==0  || HumiL==0 )
   {
     FMQ=0; //打开蜂鸣器
   }
	 
if( TempH==1 && TempL==1 && HumiH==1  && HumiL==1 )
   {
     FMQ=1;  //关闭蜂鸣器
   }
							 }
							 
								write_eeprom();       //保存数据		
             }
		   }
			 
			  if(!K3)
		   {  
			    delay(50);
			     if(!K3)
		         {   
							
				           ;
							   if(yemian==1)
							 {
							   
								if(WenDu_H>0 && WenDu_H>WenDu_L )  {  WenDu_H-=1; }  //湿度上限减
							 }
							 

							if(yemian==2)
							 {
							  
								if(WenDu_L>0 )   {  WenDu_L-=1; }  //温度下限减
							 }



							 if(yemian==3)
							 {
							 	if(ShiDu_H>0 && ShiDu_H>ShiDu_L )  {  ShiDu_H-=1; }  //湿度上限减
							 }

							  if(yemian==4)
							 {
							 	if(ShiDu_L>0 )   {  ShiDu_L-=1; }  //湿度下限减
							 }
							 
								write_eeprom();       //保存数据	
             }
		   }

}



/***************************主程序*********************************/
void main()
{
	 init_eeprom();      			//读eeprom数据
   time_init();				//初始化定时器 
   showw();    //显示问候语 和名字
  
	while(1)
	{   
		
		   key();
		//====================yemian==0时 进入工作状态=================================
		 	if(yemian==0)  
			{ 
				if(flat==1)
				 {
                     flat=2;
					 lcd_init(); //初始化
					 	 
					 display(0x00,'T') ;    //Temp
                     display(0x01,':');
                     display(0x05,0xdf); // 度
		             display(0x06,'C');
					 
					 
					 display(0x40,'H') ;    //Humi
                     display(0x41,':');
					 
					 display(0x44,'%');
					 display(0x45,'R');
					 display(0x46,'H');
					 
					 display(0x09,' ');
                     display(0x0a,' ');
                     display(0x0b,WenDu_H/10+0x30);  //报警温度上限
		             display(0x0c,WenDu_H%10+0x30);
					 display(0x0d,'-');
				   	 display(0x0e,WenDu_L/10+0x30);  //报警温度下限
		             display(0x0f,WenDu_L%10+0x30);


					 display(0x49,' ');
                     display(0x4a,' ');
				     display(0x4b,ShiDu_H/10+0x30);  //报警湿度
		             display(0x4c,ShiDu_H%10+0x30);
					 display(0x4d,'-');
					 display(0x4e,ShiDu_L/10+0x30);  //报警湿度
		             display(0x4f,ShiDu_L%10+0x30);
          
          }
			
			 if(flag_300ms == 1)
	    	 {		
			     flag_300ms = 0;
                 receive();
					 
				 display(0x02,TH/10+0x30);  //温度显示
		         display(0x03,TH%10+0x30);
					 
                 display(0x42,RH/10+0x30);  //湿度显示
		         display(0x43,RH%10+0x30);
					 
					
           warn();
		     }
			
	}		
			
	//====================yemian==1 温度上限设置===========================
				if(yemian==1)  //温度
		    	{
		         if(flat==2)
				      {
                             flat=3;  
							

							 TempH=1; TempL=1;
                             HumiH=1; HumiL=1;


                             lcd_init(); //初始化
							 display(0x05,'T');
							 display(0x06,'e');
							 display(0x07,'m');
							 display(0x08,'p');
							 display(0x09,'_');
							 display(0x0a,'H');
                      }
						 
						shezhi();
						display(0x47,WenDu_H/10+0x30);  //温度上限
		                display(0x48,WenDu_H%10+0x30);
		       }
			
		//====================yemian==2温度下限设置==========================	
				if(yemian==2)   //湿度设置
			    {
		              if(flat==3)
				         {
                             flat=4;  
							
                              lcd_init(); //初始化
						     display(0x05,'T');
							 display(0x06,'e');
							 display(0x07,'m');
							 display(0x08,'p');
							 display(0x09,'_');
                             display(0x0a,'L');
						 } 
						 shezhi();
						 display(0x47,WenDu_L/10+0x30);  //湿度
		                 display(0x48,WenDu_L%10+0x30);
		      }


			  	//====================yemian==3温度下限设置==========================	
				if(yemian==3)   //湿度设置
			    {
		              if(flat==4)
				         {
                             flat=5;  
							
                              lcd_init(); //初始化
							 display(0x05,'H');
							 display(0x06,'u');
							 display(0x07,'m');
							 display(0x08,'i');
							 display(0x09,'_');
							 display(0x0a,'H');
							 
						 } 
						 shezhi();
						
		      }



			  	//====================yemian==4温度下限设置==========================	
				if(yemian==4)   //湿度设置
			    {
		              if(flat==5)
				         {
                             flat=1;  
						
                              lcd_init(); //初始化
							 display(0x05,'H');
							 display(0x06,'u');
							 display(0x07,'m');
							 display(0x08,'i');
							 display(0x09,'_');
							 display(0x0a,'L');
						 } 
						 shezhi();
					
		      }
	}
}



/*************定时器0中断服务程序***************/
void time0_int() interrupt 1
{	
	static uchar value;
	TH0 = 0x3c;
	TL0 = 0xb0;     // 50ms
	value ++;	 
	if(value % 6 == 0)
	{
		flag_300ms = 1;	   //300ms
		value = 0;
	}
}

4 实现效果

毕业设计 单片机智能大棚温湿度控制系统(源码+硬件+论文)
毕业设计 单片机智能大棚温湿度控制系统(源码+硬件+论文)

毕业设计 单片机智能大棚温湿度控制系统(源码+硬件+论文)

5 最后

包含内容

毕业设计 单片机智能大棚温湿度控制系统(源码+硬件+论文)

🧿 项目分享:

https://gitee.com/sinonfin/sharing

到了这里,关于毕业设计 单片机智能大棚温湿度控制系统(源码+硬件+论文)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【单片机毕业设计】【mcuclub-dz-032】基于单片机的智能门禁控制系统设计

    项目名:基于单片机的门禁的设计 单片机:STM32F103C8T6 mcuclub-dz-032 功能简介: 1、通过扫码枪进行扫描二维码,当二维码识别成功,10s内需触发红外避障管,并通过红外测温模块进行测温,如果温度正常,则自动开锁,如果温度异常,则声光报警3次,锁不打开 2、通过RFID进行

    2024年01月18日
    浏览(46)
  • 毕业设计 - 基于单片机的智能饮水机系统设计与实现 (物联网 嵌入式 单片机)

    Hi,大家好,学长今天向大家介绍一个 单片机项目 基于单片机的智能饮水机系统设计与实现 大家可用于 课程设计 或 毕业设计 这次设计的智能饮水机就是单片机结合传感器的一个应用。 该系统设计综合单片机以及电子技术理论,从生活实际出发,完善了饮水机的功能。整个

    2024年02月03日
    浏览(73)
  • 【单片机毕业设计】【mcuclub-dz-196】基于单片机下的新型智能花盆设计

    项目名:基于单片机下的新型智能花盆设计 项目名:花盆(实物) 项目编号:mcuclub-dz-196 单片机类型:STM32F103C8T6 具体功能: 1、通过防水式DS18B20测量土壤温度,当温度高于设置最大值时,进行风扇降温,低于设置最大值,进行防水加热 2、通过土壤湿度传感器检测湿度值,

    2024年02月19日
    浏览(69)
  • 物联网毕业设计 单片机智能扫地机器人设计与实现

    Hi,大家好,学长今天向大家介绍一个 单片机项目,大家可用于 课程设计 或 毕业设计 基于stm32的智能扫地机器人设计与实现 选题指导,项目分享: https://gitee.com/yaa-dc/warehouse-1/blob/master/iot/README.md 随着人口老龄化的到来和人民对提升生活品质的需要, 人们对在现实生活场景

    2024年02月08日
    浏览(30)
  • 【单片机毕业设计】【mcuclub-dz-112】基于单片机的智能饮水机系统设计与实现

    项目名:基于单片机的智能饮水机系统设计与实现 项目名:基于单片机的饮水机的设计 单片机:STC89C52 功能简介: 1、通过一个按键模拟加热电源的开关 2、通过防水式DS18B20检测水温,当电源打开时,温度小于设置最小值,进行自动加热,直到加热到最大值时停止; 3、通过

    2024年03月09日
    浏览(60)
  • 毕业设计 基于51单片机智能停车场管理车位引导系统设计

    选题之前,同学们要弄明白一件事情,做毕业设计是干什么用的! 这里我告诉大家,毕业设计对于你来说,不是让你去搞研究,掌握运用所学知识的,也不是让你去比谁做的毕业设计多么牛逼,多么厉害。 说白点,它的作用就是一个,让你顺利毕业,能够拿到学位证,毕业

    2023年04月15日
    浏览(58)
  • 单片机毕业设计 stm32智能扫地机器人设计与实现

    Hi,大家好,学长今天向大家介绍一个 单片机项目,大家可用于 课程设计 或 毕业设计 基于stm32的智能扫地机器人设计与实现 随着人口老龄化的到来和人民对提升生活品质的需要, 人们对在现实生活场景中取代人力的服务机器人有着迫切的需要。 同时, 机电、 自动控制、

    2024年02月04日
    浏览(35)
  • 毕业设计 基于单片机的GSM智能快递柜设计(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月23日
    浏览(46)
  • 基于c51单片机的毕业设计——智能温度控制

       本设计采用AT89C51单片机为控制芯片,硬件上用dsb18202做温度采集(有需要也可以采用dht11温湿度模块)直流电机作为降温风扇,用户可通过按键来控制转速的大小,用继电器来控制电阻丝提高温度。用lcd1602显示屏来显示环境温度并且通过按键来设置模式与最高温和最低温

    2024年02月11日
    浏览(33)
  • [毕业设计] 基于单片机的智能快递柜设计与实现 - stm32 物联网

    Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目 基于单片机的智能快递柜设计与实现 大家可用于 课程设计 或 毕业设计 单片机-嵌入式毕设选题大全及项目分享: https://blog.csdn.net/m0_71572576/article/details/125409052 一般来说,传统快递服务方式是人对人,即快递员进

    2024年01月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包