基于51单片机智能大棚浇花花盆浇水灌溉补光散热设计

发布者:salahc1983最新更新时间:2021-09-30 来源: eefocus关键字:51单片机 手机看文章 扫描二维码
随时随地手机看文章

一.硬件方案

本设计通过光敏电阻检测光照强度,然后A/D模块PCF8591处理后,将光照强度值实时显示在液晶上,并且可以按键控制光照的强度值,当光照低于设定的阈值,1颗白色高亮LED灯亮进行补光,光照高于设定的阈值,就不用管。通过DS18B20检测温度值,并且实时显示在1602液晶上,并且可以通过按键设定温度值,当温度低于设定值时,通过一颗黄色高亮LED灯模拟。


主要由STC89C52单片机、LCD1602液晶显示、光照检测、土壤湿度传感器、A/D采样PCF8591、风扇控制、继电器控制、补光灯、补温灯、按键及电源组成;如图:

在这里插入图片描述

二.设计功能

(1)通过光敏电阻检测光照强度,然后A/D模块PCF8591处理后,将光照值实时显示在液晶上,按键可以设置光照阈值。当光照低于设定的阈值,高亮LED灯亮进行补光,否则关闭。

(2)通过DS18B20检测温度值,实时显示在1602液晶上,可以通过按键设定温度阈值,当温度低于设定值时,补温灯打开,否则关闭;当温度超过设定值时,风扇旋转。

(3)通过土壤湿度传感器检测土壤的湿度,将湿度值显示在液晶上,按键设置湿度阈值,当土壤湿度小于设定的阈值,继电器打开,继电器可以外接水泵;否则继电器不动作。


三.设计原理图

(1)原理图主要采用AD软件进行设计,如图:

在这里插入图片描述

(2)PCB图如下:

在这里插入图片描述

四.软件设计

(1)程序流程图

在这里插入图片描述

(2)主程序源码


void main (void)

{     

unsigned char midval;             

Init_Timer0();


LCD_Init();           //初始化液晶

DelayMs(20);          //延时有助于稳定

LCD_Clear();          //清屏


led_l = 0;relay = 0;led_b = 0;fan = 0; //上电检测下 方便检测硬件

DelayMs(200);  

led_l = 1;relay = 1;led_b = 1;fan = 1;


sprintf(disdat,"L:%2d R:%2d T:%2d C",Lval,Rval,distem);//打印电压电流值

LCD_Write_String(0,0,disdat);//显示

sprintf(disset," L:%2d R:%2d T:%2d",(unsigned int)setLval,(unsigned int)setRval,(unsigned int)setTval);//打印电压电流值

LCD_Write_String(0,1,disset);

while (1)         //主循环

{


key(); //按键处理程序

if(readADCFlag == 1) //定时读取adc

{

midval=ReadADC(1); //转换的结果,在下次,才能读出

Lv=5.15-(float)midval*5.15/255; //光照

Lval  = (unsigned int )(Lv * 100 )/5.16;

DelayMs(10);          //延时有助于稳定

midval=ReadADC(0); //读取AD检测到的 光敏地值

Tv=5.15-(float)midval*5.15/255; //光照

Rval  = (unsigned int )(Tv * 100 )/5.16;

sprintf(disdat,"L:%2d R:%2d T:%2d C",Lval,Rval,distem);//打印电压电流值

LCD_Write_String(0,0,disdat);//显示

LCD_Write_Char(14,0,0XDF) ;

readADCFlag = 0 ;


sprintf(disset," L:%2d R:%2d T:%2d ",(unsigned int)setLval,(unsigned int)setRval,(unsigned int)setTval);//打印电压电流值

LCD_Write_String(0,1,disset);

if(SetFlag == 1) //进入设置

{

LCD_Write_Char(0,1,'S') ; //显示S

LCD_Write_Char(5,1,' ') ;

LCD_Write_Char(10,1,' ') ;

}

else if(SetFlag == 2)

{

LCD_Write_Char(0,1,' ') ;

LCD_Write_Char(5,1,'S') ;  //显示S

LCD_Write_Char(10,1,' ') ;

}

else if(SetFlag == 3)

{

LCD_Write_Char(0,1,' ') ;

LCD_Write_Char(5,1,' ') ;  //显示S

LCD_Write_Char(10,1,'S') ;

}

else

{

LCD_Write_Char(0,1,' ') ;

LCD_Write_Char(5,1,' ') ;  //显示S

LCD_Write_Char(10,1,' ') ;

}

if(Lval <= setLval) //光照对比

{

led_l = 0;    //打开led

}

else

{

led_l = 1;    //关闭led

}

if(Rval <= setRval) //土壤对比

{

relay = 0;    //打开继电器

}

else

{

relay = 1;   //关闭继电器

}

if(distem <= setTval) //温度对比

{

led_b = 0;   //led及风扇处理

fan = 1;

}

else

{

led_b = 1;   //led及风扇处理

fan = 0;

}


}

if(readTem==1) //定时温度读取

{

    temp=ReadTemperature();    //温度读取

temperature=(float)temp*0.0625;    //温度处理

if(temperature >1) //防止温度读错

{distem = (unsigned int )temperature;} //温度处理

readTem=0;

}

}

}

关键字:51单片机 引用地址:基于51单片机智能大棚浇花花盆浇水灌溉补光散热设计

上一篇:基于51单片机的全自动洗衣机设计
下一篇:基于51单片机的红外点滴输液检测系统

推荐阅读最新更新时间:2024-11-20 14:25

#51单片机#Modbus通信协议的特点及其RTU协议帧数据介绍
Modbus通信协议的特点 Modbus协议是应用于电子控制器上的一种通用语言。 通过此协议,控制器之间,控制器经由网络和其他设备之间可进行通信。不同厂商生产的控制设备可以连成工业网络,进行集中控制,这已成为了一种工业标准。 该协议定义了控制器能够认识和使用的数据结构,描述了控制器请求访问其他设备的过程,回应其他设备的请求的方式,侦测错误记录的方法,同时制定了通信数据的格局和内容的公共格式。 多机通信时,Modbus协议规定每个控制器必须知道自己的设备地址,识别按照地址发来的数据并对其做出反应,包括:决定是否产生动作,产生何种动作,若需回应,反馈消息应按Modbus协议发出。 Modbus协议的整体框架和格式较为复杂庞
[单片机]
#<font color='red'>51单片机</font>#Modbus通信协议的特点及其RTU协议帧数据介绍
基于51单片机的高频频率计的设计
  基于51 单片机设计 了一款测试范围在1Hz~10MHz的频率计。系统通过峰值有效电路和有效值电路将正弦渡、方波和三角波转化为直流信号送入单片机,通过编写相应的程序计算出其有效值和峰峰值的比,实现自动检测的目的,并由显示电路显示测量结果。该系统电路简洁、软件编写简单、调试难度低。   目前在频率测量领域中,对于高频率信号高精度测量大都使用ARM、FPGA等高速处理器加专用计数芯片来完成。但这种方法程序编写复杂,并且其处理器外围电路复杂,这增加了其调试难度,降低了可操作性。   文中设计的高频信号频率计,除数据处理和显示交由单片机负责外,测频核心电路用经检测的模拟电路完成,该高频频率计电路简洁,软件编写简单,降低了调试难度的同时
[单片机]
基于<font color='red'>51单片机</font>的高频频率计的设计
用定时器做的流水灯
简介:在51单片机开发板上,用定时器做了一个流水灯程序,调整非常灵活,很实用拿出来和朋友们一起分享 #include reg52.h unsigned char sz ={ 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f, 0xbf,0xdf,0xef,0xf7, 0xfb,0xfd, }; void main() { unsigned char cnt = 0; //声明定时器并赋值 unsigned char sec = 0; //声明计数器并赋值 TMOD = 0x01; //设置定时器模式为1 TH0 = 0xb8; //高位定时器并赋初值 TL0 = 0x00; //低位定时
[单片机]
51单片机的一些开发实用技巧
一.C语言中嵌入汇编语言 单片机开发中,通常我们使用C语言编写主程序,这样可以充分借助C语言工具提供的运算库函数及强大的数据处理能力。但C语言的可控性不及汇编语言,在有些对时序要求严格的处理上,我们还需用灵活性更强的汇编语言来编写。上海AVR单片机培训这样就产生了C语言和汇编语言混合编程的问题,一般分成三种方式:1.汇编语言调用C语言函数;2. C语言调用汇编语言;3. C语言中嵌入汇编语言。这里我们主要介绍第3种,即C语言中嵌入汇编语言。 下面的一段程序是主程序调用精确的205μS延时子程序并使P1.0交替输出高、低电平的方波。 /*------------程序名test.c------------*/ #include P
[单片机]
<font color='red'>51单片机</font>的一些开发实用技巧
MCS-51单片机的存储器分为哪几个空间
MCS-51单片机的存储器分为哪几个空间?如何区分不同空间的寻址? MCS-51单片机有4个存储空间,它们是片内程序存储器和数据存储器,在片外可以扩展的程序存储器和数据存储器。这4个存储空间可以分成三类:片内数据存储空间(256B的RAM和128B的特殊功能寄存器)、片外数据存储空间(64KB)、片内和片外统一编址的程序存储空间(64KB)。不同的存储空间,它们有各自的寻址方式和访问指令。片内数据存储空间用MOV指令访问。片外数据存储空间用MOVX指令访问。片内和片外统一编址的程序存储空间用MOVC指令访问。
[单片机]
关于51单片机的定时器T0、T1总结
这是我总结的51单片机的中断定时器原理,之后会附上附件。第一次发帖,不足之处请多多包含! 我总结的文稿画面很花,所以给上个参考,各位不习惯的话,请酌情选择。 目录 一、原理: 1、对中断和定时器进行初始化: ①定时器/计数器工作方式寄存器 ②设定初值 ③开启中断和定时器 2、设置中断服务程序: 3、主函数: 二、各个定时器和工作方式: 方式0: 方式2: 方式3: 借鉴:郭天祥《新概念51单片机C语言教程》 一、原理: 51单片机,拥有两个定时器,用来中断计数,分别是T0和T1。而52单片机和51单片机的定时器是一样的,只是52比51多了一个定时器/计数器T2,它们的设置都大同小异,下面我来总结各个定时器的用法。 定时器
[单片机]
关于<font color='red'>51单片机</font>的定时器T0、T1总结
C51单片机编程规范总则
简介:本标准规定了程序设计人员进行程序设计时必须遵循的规范。本规范主要针对C51编程语言和keil编译器而言,包括排版、注释、命名、变量使用、代码可测性、程序效率、质量保证等内容。 1.单片机C51编程规范-总则 格式清晰 注释简明扼要 命名规范易懂 函数模块化 程序易读易维护 功能准确实现 代码空间效率和时间效率高 适度的可扩展性 2. 单片机C51编程规范-数据类型定义 编程时统一采用下述新类型名的方式定义数据类型。 建立一个datatype.h文件,在该文件中进行如下定义: typedef bit BOOL; // 位变量 // typedef unsigned char INT8U; // 无符号8位整型变量 //
[单片机]
51单片机----16*16LED点阵
一、LED点阵发光原理 想要点亮点阵中的某一个LED灯。只要使得那个灯所在的行输出高电平,所在列输出低电平就好。 二、点阵扫描实验 1 /*********************************************** 2 实验名称: 点阵扫描 3 实验说明: 扫描每个LED灯,检查点阵是否完好 4 实验时间: 2014/12/24 5 ***********************************************/ 6 #include 7 #include 8 9 #define uchar unsigned char 10 #define uint unsigned int 11 12 sbi
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved