资料包内容:
制作出来的实物图:
Altium Designer画的原理图如下:(51hei附件中可下载工程文件)
系统框图:
自动浇花系统元件清单
1) 9*15万用板
2) STC89C52单片机
3) AD0809
4) 40脚IC座
5) 28脚IC座
6) 土壤传感器
7) 3脚排阵
8) 继电器
9) 103排阻
10) 0.56四位一体共阳数码管
11) 8550三极管*5
12) 2.2k电阻*4
13) 4.7k电阻*4
14) 10k电阻
15) 10uf电容
16) 30pf电容*2
17) 12M晶振
18) 5mmLED(红)
19) 轻触按键*4
20) 自锁开关
21) DC电源插口
22) USB电源线或电池盒
设计论文内容预览:
定时器部分以单片机AT89C51为控制核心,通过软件设置达到具体动作实现。通过按键开关对当前时间以及定时浇水时间进行设置,共阴数码管显示,当时间处在所设置的浇水时间内时,单片机发出控制信号,开始浇水。否则,停止浇水。
本次毕业设计是设计一种51单片机控制的自动浇水系统,实现室内盆花浇水的自动化系统。该系统可对土壤的湿度进行监控,并对作物进行适时适量的浇水。其核心是51单片机和土壤湿度检测器YL-69和显示电路以及浇水继电器驱动电路构成的检测控制部分。主要研究土壤湿度与浇水时间之间的关系、浇灌控制技术及设备系统的硬件、软件编程各个部分。检测部分,单片机选用AT89C51单片机,软件选用C51语言编程。土壤湿度采集与显示电路可将检测到的土壤湿度模拟量放大转换成数字量通过单片机内程序控制精确的将温度与湿度分别显示在LED数码管显示屏上,通过单片机内的中断服务程序判断是否要给盆花浇水,若需浇水,则单片机系统发出浇水信号,开始浇水,若不需要浇水,则进行下一次循环检测。在浇水系统中也同时设计一个定时浇水部分,通过按键开关设置不同的浇水时间段,在时间段以内时,单片机驱动浇水系统,开始浇水,如不在时间段内,则不浇水。
本款为土壤干湿度检测自动浇花系统,启动系统时设定土壤水分为0,即土壤最干时候为250个单位。当将土壤传感器插入泥土(可以拿个纸杯装点),数值下降,例如显示0125,即目前土壤干燥度为125个单位,总共250,也可以算出土壤湿度在50%左右。如果往里面浇水,数值会下降,因为干燥度降低 ,相反的湿度增大。数码管显示为干燥度。
如果目前数码管显示0125,你可以手动设置自动浇花启动的数值为0130,当土壤越来越干,数值到达0130单位时,继电器启动(可外接水泵),红灯亮。
单片机源程序如下:
- //程序头函数
- #include <reg52.h>
- //宏定义
- #define uint unsigned int
- #define uchar unsigned char
- #define Data_ADC0809 P1
-
- //管脚声明
- sbit Feng = P3^0;
- //ADC0809
- sbit ST=P3^3;
- sbit EOC=P3^4;
- sbit OE=P3^2;
- //按键
- sbit Key1=P3^5;
- sbit Key2=P3^6;
- sbit Key3=P3^7;
- //显示数组 0-9+F
- uchar Data_[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x71,0x3f};
- sbit Wei1 = P2^7;
- sbit Wei2 = P2^6;
- sbit Wei3 = P2^5;
- sbit Wei4 = P2^4;
- //函数声明
- extern uchar ADC0809();
- void Display(uchar X,uchar Data);
- void delay(uint t);
- //酒精含量变量
- uchar temp=0;
- //蜂鸣器变量
- uchar FF=125;
- //显示模式
- uchar Mode=0;
- uchar p;
- void main()
- {
- while(1)
- {
- //正常模式
- if(Mode==0)
- {
- //读取AD值
- temp=ADC0809();
- for(p=0;p<30;p++)
- Display(0,temp);
- //判断是否报警
- if(temp>FF)
- {
- Feng=0;
- }
- else
- {
- Feng=1;
- }
- }
- //调整模式
- else
- {
- Display(1,FF);
- }
- //功能键
- if(Key3==0)
- {
- Feng=0;
- delay(100);
- while(Key3==0)
- {
- if(Mode==0)
- Display(0,temp);
- else
- Display(1,FF);
- }
- if(Mode==0)
- Mode=1;
- else
- Mode=0;
- Feng=1;
- }
- //增加
- if(Key2==0&&Mode==1)
- {
- Feng=0;
- delay(100);
- while(Key2==0)
- {
- Display(1,FF);
- }
- FF++;
- if(FF==251)
- FF=250;
- Feng=1;
- }
- //减少
- if(Key1==0&&Mode==1)
- {
- Feng=0;
- delay(100);
- while(Key1==0)
- {
- Display(1,FF);
- }
- FF--;
- if(FF==0xff)
- FF=0;
- Feng=1;
- }
- }
- }
- //ADC0809读取信息
- uchar ADC0809()
- {
- uchar temp_=0x00;
- //初始化高阻太
- OE=0;
- //转化初始化
- ST=0;
- //开始转换
- ST=1;
- ST=0;
- //外部中断等待AD转换结束
- while(EOC==0)
- //读取转换的AD值
- OE=1;
- temp_=Data_ADC0809;
- OE=0;
- return temp_;
- }
- //延时
- void delay(uint t)
- {
- uint i,j;
- for(i=0;i<t;i++)
- for(j=0;j<10;j++);
- }
- //显示 X表示状态 Data表示数据
- void Display(uchar X,uchar Data)
- {
- Wei1=1;
- Wei2=1;
- Wei3=1;
- Wei4=1;
- P0=0xff;
- //正常模式
- if(X==0)
- {
- P0=~Data_[11];
- }
- //非正常
- else
- {
- P0=~Data_[10];
- }
- Wei1=0;
- Wei2=1;
- Wei3=1;
- Wei4=1;
- delay(10);
- Wei1=1;
- Wei2=1;
- Wei3=1;
- Wei4=1;
- P0=~Data_[Data/100];
- Wei1=1;
- Wei2=0;
- Wei3=1;
- Wei4=1;
- delay(10);
- Wei1=1;
- Wei2=1;
- Wei3=1;
- Wei4=1;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
基于单片机自动浇花系统.rar
(7.77 MB, 下载次数: 530)
|