微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机的模拟智能灌溉系统

单片机的模拟智能灌溉系统

时间:11-20 来源:互联网 点击:
模拟智能灌溉系统

先上原理图


这是用proteus画的模拟图,当然还有实物图,不过都被我放在自己的工作室了(话说明明是实验室好不好)目前是在外面进一步学习,我就不把实物晒出来了。


程序的好坏在于它的流程图是否好,于是我就把我当时画的流程图拿了出来!

那么该项目到底是什么呢?

就是当年比赛的一个预习题,不过平台不一样搞得我当时比较狼狈就拿了个三等奖回来,哎,希望我嵌入式小组的学弟学妹们能够加油,帮我拿个一等奖回来!了了我心中的遗憾吧!

功能简述:

要求“模拟智能灌溉系统”能够实现土壤湿度测量、土壤湿度和时间显示、湿度阈值设定及存储等基本功能。通过电位器Rb2输出电压信号,模拟湿度传感器输出信号,再通过AD采集完成湿度测量功能;通过DS1302芯片提供时间信息;通过按键完成灌溉系统控制和湿度阈值调整功能,通过LED完成系统工作状态指示功能。系统硬件电路主要由单片机控制电路、显示单元、ADC采集单元、RTC单元、EEPROM存储单元、继电器控制电路及报警输出电路组成,系统框图如图1所示:


1. 系统工作及初始化状态说明:

1.1、自动工作状态,根据湿度数据自动控制打开或关闭灌溉设备,以L1点亮指示;

1.2、手动工作状态,通过按键控制打开或关闭灌溉设备,以L2点亮指示;

1.3、系统上电后处于自动工作状态,系统初始湿度阈值为50%,此时若湿度低于50%,灌溉设备自动打开,达到50%后,灌溉设备自动关闭;

1.4、灌溉设备打开或关闭通过继电器工作状态模拟。

2. 数码管单元:


“模拟智能灌溉系统”通过读取DS1302时钟芯片相关寄存器获得时间,DS1302芯片时、分、秒寄存器在程序中设定为系统进行初始化设定,时间为08时30分。

3. 报警输出单元:

系统工作于手动工作状态下时,若当前湿度低于湿度阈值,蜂鸣器发出提示音,并可通过按键S6关闭提醒功能。

4. 功能按键:

4.1、按键S7设定为系统工作状态切换按键;

4.2、手动工作状态下按键S6、S5、S4功能设定如下:

按下S6关闭蜂鸣器提醒功能,再次按下S6打开蜂鸣器提醒功能,如此循环;

S5功能设定为打开灌溉系统;S4功能设定为关闭灌溉系统。

4.3、自动工作状态下按键S6、S5、S4功能设定如下:

S6功能设定为湿度阈值调整按键,按下S6后,进入湿度阈值调整界面(如图3所示),此时按下S5为湿度阈值加1,按下S4湿度阈值减1,再次按下S6后,系统将新的湿度阈值保存到EEPROM中,并退出湿度阈值设定界面。


5. 实时时钟:

“模拟智能灌溉系统”通过读取DS1302时钟芯片相关寄存器获得时间,DS1302芯片时、分、秒寄存器在程序中设定为系统进行初始化设定,时间为08时30分。

6. 湿度检测单元:

以电位器Rb2输出电压信号模拟湿度传感器输出信号,且假定电压信号与湿度成正比例关系H湿度= KVRb2(K为常数),Rb2电压输出为5V时对应湿度为99%。

7. EEPROM存储单元:

系统通过EEPROM存储湿度阈值,自动工作状态下,可通过按键S6、S5、S4设置和保存阈值信息。

下面将是我写的一些代码了,大三上写的代码,可能不是那么好吧!勿见怪啊,当时都没有代码规范的思想,写得比较凌乱,我也因为对它不再想修改了,就不改格式了,因而对看本博客的同学们表示歉意了!

(1)主函数main.c#include#include #include#define  PCF8591 0x90    //PCF8591 地址#includeds1302.h>//else IOunsigned char AD_CHANNEL;unsigned long xdata  LedOut[8];unsigned int  D[32];sbit LS138A=P2^2;  sbit LS138B=P2^3;sbit LS138C=P2^4;sbit L1=P2^5;sbit L2=P2^6;sbit beed=P1^0;sbit RELAY=P1^1;sbit k4=P1^2;sbit k5=P1^3;sbit k6=P1^4;sbit k7=P1^5; //此表为 LED 的字模, 共阴数码管 0-9  - unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; unsigned char delay1[8]={10,10,0,0,0,0,0,0};unsigned char HUO,flag;unsigned char key,mode,th;/**延迟函数**/         void delay(){unsigned char a=100;while(a--); }/************at24c02功能模块***/void At24c02Write(unsigned char addr,unsigned char dat){I2C_Start();I2C_SendByte(0xa0, 1);//发送写器件地址I2C_SendByte(addr, 1);//发送要写入内存地址I2C_SendByte(dat, 0);    //发送数据I2C_Stop();}unsigned char At24c02Read(unsigned char addr){unsigned char num;I2C_Start();I2C_SendByte(0xa0, 1); //发送写器件地址I2C_SendByte(addr, 1); 

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top