基于51单片机的智能浇花浇水系统花卉灌溉土壤湿度检测方案程序原理图设计.docx

上传人:暗伤 文档编号:67606751 上传时间:2022-12-25 格式:DOCX 页数:9 大小:229.03KB
返回 下载 相关 举报
基于51单片机的智能浇花浇水系统花卉灌溉土壤湿度检测方案程序原理图设计.docx_第1页
第1页 / 共9页
基于51单片机的智能浇花浇水系统花卉灌溉土壤湿度检测方案程序原理图设计.docx_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《基于51单片机的智能浇花浇水系统花卉灌溉土壤湿度检测方案程序原理图设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的智能浇花浇水系统花卉灌溉土壤湿度检测方案程序原理图设计.docx(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、基于51 单机的智能浇花浇系统花卉灌溉壤湿度检测案程序原理图设计(末尾附件) 3.1系统的功能分析及体系结构设计3.1.1系统功能分析本设计由STC89C52单机电路+4位共阳数码管显电路+ADC0832采样电路+泵控制电路+壤湿度传感器电路+按键电路+电源电路组成。1、数码管实时显壤湿度传感器测到的湿度。2、按键说明:从左边第个起,减键、加键、设置键。可以按键设置,设置湿度的上、下限值,并具有掉电保存,保存在单机的内部, 上电需重新设置。3、当湿低于下限值时,动打开泵进抽动灌溉,当湿于上限值时,断开泵停灌溉,4、当湿度处于上下限之间时处于,动模式,按减键动打开泵,可以按加键动关闭泵。3.1.

2、2系统总体结构本系统具体框图如下图所:原理图:泵控制电路设计泵控制电路设计微型泵(wi xn shu bng,microwater pump或mini water pump)定义:通常把提升液体、输送液体或使液体增加压,即把原动机的机械能变为液体能量从达到抽送液体的的机器统称为泵。泵般组成形式为驱动部分+泵体,泵体上有进出两个接,从进,排出,凡是采这种形式,且体积巧、袖珍的泵,都叫微型泵,也叫微型抽泵。在本系统中,使5V泵,来喷,由于泵属于功率装置,单机法直接驱动,故选择三极管9012来实现对泵的控制,在本电 路中通过LED灯来指泵是否作,如果泵作,则LED灯亮,否则,LED灯不亮。与LED灯

3、串联的电阻为限流电阻,限流作,以保护LED灯,防烧坏。当单机的相关控制引脚为低电平时,三极管导通,泵正常作;否则,泵不作。电解电容作是滤波,来滤 除泵供电电源中的低频参量,让泵更稳定的作。TRSD壤湿度传感器模块电路设计在本设计中选择壤湿度传感器来检测壤的湿度,通过电位器调节壤湿度控制阀值,可以动对菜园、花园以及花盆壤湿度进检测 控制,从实现动浇。本壤湿度传感器表采镀镍处理,有加宽传感器感应积、提导电性能、防接触壤使传感器容易锈、延长传感器使寿命等作。、接线说明(3线制)(1) VCC 外接3.3V-5V(2) GND 外接GND(3) DO 板数字量输出接(0和1)(4) AO 板电压模拟量

4、输出、模块使说明:(1)本传感器适于壤的湿度检测;(2)本传感器可以宽范围控制壤的湿度,通过电位器调节控制相应阀值,湿度低于设定值时,DO输出电平;于设定值时,DO输出 低电平。数字量输出DO可以与单机直接相连,哦通过单机来检测低电平,由此来检测壤湿度。模块中蓝的电位器是于壤湿 度的阀值调节,顺时针调节,控制的湿度会越,逆时针越。(3)模块也有模拟接,可以检测出壤湿度的模拟信号。传感器的模拟量输出接AO引脚可以与AD模块相连,通过AD转换,可以获得 更精确的壤湿度数值。壤湿度传感器模块内部电路图如下图所,其中R1电阻为分压电阻,将壤湿度传感器检测到的壤湿度信息转化为模拟电压信号即AO,模拟量信

5、号接LM393较器后,即可与LM393较器芯2号引脚所接的电位器分压后的模拟电压进较,进得出DO数字信号(即低电平信号)。C1、C2为滤波电容,C1电容对电源进滤波,让电源输出更稳定。C2电容对模拟信号进滤波,保证模拟信号输出的稳定性。R2、R3均为限流电阻,来保护LED灯,防LED灯烧坏,LED灯均为低电平有效。R4为上拉电阻,上拉就是将不确定的 信号通过个电阻钳位在电平,同时起限流作。保证LM393较器输出的低电平信号在与单机引脚连接时电平信号的读取更加稳 定。ADC0832A/D转换电路设计ADC0832是美国国家半导体公司产的种 8 位分辨率、双通道 A/D 转换芯。由于它体积,兼容性

6、强,性价深受单机爱好者及企业欢迎,其前已经有很的普及率。学习并使 ADC0832 可是使我们了解 A/D 转换器的原理,有助于我们单机技术平的提。、ADC0832 具有以下特点:(1)8 位分辨率;(2) 双通道 A/D 转换;(3) 输输出电平与 TTL/CMOS 相兼容;(4)5V 电源供电时输电压在 05V 之间;(5) 作频率为 250KHZ,转换时间为 32S;(6) 般功耗仅为 15mW;(7)8P、14PDIP(双列直插)、PICC 多种封装;(8)商级芯温宽为0C to +70C,业级芯温宽为 40C to +85C;ADC0832 为 8 位分辨率 A/D 转换芯,其最分辨可

7、达 256 级,可以适应般的模拟量转换要求。其内部电源输与参考电压的复,使得芯的模拟电压输在 05V 之间。芯转换时间仅为 32S,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独的芯使能输,使多器件挂接和处理器控制变的更加便。通过 DI 数据输端,可以轻易的实现通道功能的选择。再本设计中ADC0832的功能是将粉尘传感器输出的模拟信号转化为数字信号,然后将信号送单机进处理,试验证明,本电路满本 设计要求。在本设计中,ADC0832选择模拟输通道0即CH0作为信号的采集端。4位共阳数码管驱动电路设计数码管,也称作辉光管,是种可以显数字和其他信息的电设备。玻璃管中包括个属

8、丝制成的阳极和多个阴极。部分数码管阴 极的形状为数字。管中充以低压体,通常部分为氖加上些汞和/或氩。给某个阴极充电,数码管就会发出颜光,视乎管内的体定,般都是橙或绿。led数码管(LED Segment Displays)由多个发光极管封装在起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表。当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。常LED数码管显的数字和字符是0、1、2、3、 4、5、6、7、8、9、A、B、C、

9、D、E、F。本设计中选择4位共阳数码管来显数据。4位共阳数码管共12个引脚,4个位选,8个段 选。1、2、3、4、5、7、10、11为段选,6、8、9、12为四个数码管的位选。每个位选通过三极管进驱动,在本设计中,Q1-Q5三 极管均为驱动电路。R3-R5均为限流电阻,保护三极管。当单机控制位选的引脚为低电平时,则相关位的数码管可以亮,否则,相关位的 数码管不亮。单机控制段选的引脚通过低电平的组合即可显不同的数据信息。其具体电路原理图如下图所。系统软件设计#include / 调单机头件#include eeprom.h#define uchar unsigned char / 符号字符型 宏

10、定义 变量范围0255 #define uint unsigned int / 符号整型 宏定义 变量范围065535#include / 数码管段选定义 01 2 3 4 5 6 7 8 9uchar code smg_du=0x14,0x77,0x4c,0x45,0x27,0x85,0x84,0x57,0x04,0x05,A B C D E F 不 显 0x06,0xa4,0x9c,0x64,0x8c,0x8e,0xff; / 断码/数码管位选定义/数码管位选定义sbit smg_we1 = P20; / 数码管位选定义sbit smg_we2 = P22; sbit smg_we3 =

11、P24; sbit smg_we4 = P26;uchar dis_smg8 = 0x14,0x77,0x4c,0x45,0x27,0x85,0x84; / 数码管显sbit SCL=P12; /SCL定义为P1的第3位脚,连接ADC0832SCL脚sbit DO=P13; /DO 定义为P1的第4位脚,连接ADC0832DO脚sbit CS=P10; /CS定义为P1的第4位脚,连接ADC0832CS脚uchar shidu; / 湿度等级uchar s_high = 70,s_low = 25; / 湿度报警参数sbit dianji = P35;/ 电机IO定义/*1m延s 时函数*/

12、void delay_1ms(uint q)uint i,j; for(i=0;iq;i+) for(j=0;j= 4)i = 0;P0 = 0xff; / 消 隐smg_we_switch(i); / 位选P0 = dis_smgi; / 段选/ delay_1ms(1);/*读数模转换数据*/请先了解ADC0832模数转换的串协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串协议进的/ 1 1 0 通 道/ 1 1 1 通 道unsigned char ad0832read(bit SGL,bit ODD)unsigned char i=0,value=0,value1=

13、0; SCL=0;DO=1;CS=0; /开始SCL=1; /第个上升沿SCL=0;SCL=0; DO=SGL;SCL=1; /第个上升沿SCL=0; DO=ODD;SCL=1; /第三个上升沿SCL=0; /第三个下降沿DO=1;for(i=0;i8;i+)SCL=1;SCL=0; /开始从第四个下降沿接收数据value=value1;if(DO) value+;for(i=0;i=1; if(DO) value1+=0x80; SCL=1;SCL=0; SCL=1; DO=1; CS=1;if(value=value1) / 与校验数据较,正确就返回数据,否则返回0return value

14、; return 0;/*独* 按键程序*/ uchar key_can; / 按键值void key() / 独按键程序static uchar key_new;key_can = 20;/ 按键值还原P1 |= 0xf0;if(P1 & 0xf0) != 0xf0) / 按键按下delay_1ms(1);/ 按键消抖动if(P1 & 0xf0) != 0xf0) & (key_new = 1)/ 确认是按键按下key_new = 0; switch(P1 & 0xf0)case 0x70: key_can = 1; break; / 得到k2键值case 0xb0: key_can = 2

15、; break; / 得到k3键值case 0xd0: key_can = 3; break; / 得到k4键值elsekey_new = 1;/*按* 键处理显函数*/ void key_with()if(menu_1 = 0)if(shidu s_low)&(shidu = 3)menu_1 = 0;if(menu_1 = 1) / 设置湿度上限if(key_can = 2)s_high + ; / 湿度上限值加1 if(s_high 99)s_high = 99;if(key_can = 3)s_high - ; / 湿度上限值减1 if(s_high = s_high)s_low =

16、s_high - 1;if(key_can = 3)s_low -; / 湿度下限值减1 if(s_low = 1)s_low = 1;dis_smg0 = smg_dus_low % 10;/ 取个位显dis_smg1 = smg_dus_low / 10 % 10; / 取位显dis_smg2 = 0xef;dis_smg3 = 0xBC; /L/*电* 机控制函数*/ void dianji_kongzi()static uchar value,value1; if(shidu = 2)value = 10;dianji = 0;/ 关机电机elsevalue = 0; if(shidu

17、 = s_high)value1 +; if(value1 = 2)value1 = 10;dianji = 1;/ 打开电机else value1 = 0;unsigned char initFlagData; / 初始化数据存读取/*把* 数据保存到单机内部eepom中*/void write_eeprom()SectorErase(0x2000);/ 擦除整个扇区 注意整个扇区数据都擦出了byte_write(0x2000, s_low ); / 重新写值byte_write(0x2001, s_high ); byte_write(0x2055, initFlagData);/*把*

18、数据从单机内部eepom中读出来*/ void read_eeprom()s_low = byte_read(0x2000); / 读取字节s_high = byte_read(0x2001); / 读取低字节 并合并initFlagData= byte_read(0x2055); / 数据初始化读取/*开* 机初始化保存的数据*/ void init_eeprom()read_eeprom(); / 先 读if(initFlagData != 0x55) / 新的单机初始单机内问eeprom 如果不是0x55重新写s_low = 25;/ 初始化参数s_high = 70;initFlagD

19、ata = 0x55; / 修改值write_eeprom(); / 保存数据/*主* 函数*/ void main()delay_1ms(100);init_eeprom(); / 开机初始化保存的数据P0 = P1 = P2 = P3 = 0xff; / 初始化IOwhile(1)key();/ 独按键程序if(key_can = 200)flag_200ms = 0; P0 = 0xff; / 消 隐if(menu_1 = 0)shidu = ad0832read(1,0); / 读出湿度shidu =99-shidu * 99 / 255; dis_smg0 = 0xff; /dis_smg1 = smg_dushidu % 10; / 取湿度的个位显dis_smg2 = smg_dushidu / 10 % 10 ; / 取湿度的位显dis_smg3 = 0XFF; / dianji_kongzi(); / 电机控制函数display(); / 数码管显函数delay_1ms(1);.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁