历史上的今天
返回首页

历史上的今天

今天是:2024年10月25日(星期五)

正在发生

2019年10月25日 | 单片机自动浇花系统设计

2019-10-25 来源:51hei

自动浇水,检测湿度,湿度上下限值可调,自动与手动模式!

制作出来的实物图如下:
 
功能介绍

单片机土壤湿度检测自动浇花系统系统采用STC89C52单片机+ADC0832+LCD1602液晶+土壤湿度传感器+防水温度传感器+抽水电机+ 按键+蜂鸣器设计而成。

液晶第一行显示       实际的湿度
液晶第二行显示 湿度上限值   湿度下限值
按键说明:
     从左边第一个起,减键、加键、设置键。

1.单片机型号:STC89C52/51、AT89C52/51、AT89S52/51 可任选。

2.产品自带单片机上电复位电路、手动复位电路(复位按键)、晶振电路(给单片机提供时钟周期)。

3.采集LCD1602液晶显示土壤湿度和温度,报警参数也可以同时显示出来,直观明了。

4.可以设置湿度和温度的上下限报警范围,并具有掉电保存功能,保存在STC单片机内部,上电无需重新设置。

5.当湿度低于下限值时,打开水泵进行抽水自动灌溉同时声光报警,当湿度高于上限值时,自动关闭水泵停止灌溉。

6.当温度高于上限值时,打开水泵进行抽水自动灌溉同时声光报警,当温度低于下限值时,自动关闭水泵停止灌溉。

7.具有手动模式,按减键手动打开抽水电机,可以按加键手动关闭抽水电机。

8.送配套水泵用的水管。


背面:
 
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
 


电路原理图如下:
 
传感器上的D0不用接   AO接0832芯片上就可以了

说明:上面四个文件夹内容是一样的,只是用不同的软件打开而已。

1、.SchDoc为 Altium Designer格式:需要安装软件 Altium Designer。
2、.sch为 Protel 99SE格式:需要安装软件 Protel 99SE。
3、PDF格式:用PDF软件打开即可,如福昕PDF阅读器、Adobe Reader 等软件。
4、word格式:用 word 或 WPS 软件即可打开。


自动浇花系统2版元件清单:            
编号    "注释
Comment"    "描述
Description"    "数量
Quantity"
1    BUZZER    蜂鸣器    1
2    10uF    直插电解电容    1
3    30pf    直插瓷片电容    2
4    104    直插瓷片电容    1
5    220uF    直插电解电容    1
6    发光二极管    5mm直插发光二极管    1
7    LCD1602    LCD1602液晶显示器    1
8    Header 2    排针2-Pin    1
9    POWER    DC电源插座    1
10    Header 3    排针3-Pin    1
11    S9012    PNP 三极管    2
12    2.2K    色环电阻    1
13    1K    色环电阻    3
14    10K    色环电阻    2
15    SW-PB    按键6X6X5MM    4
16    SWITCH    自锁开关    1
17    MCU    51单片机    1
18    ADC0832    模数转换芯片    1
19    12M    晶振    1
配套器材            
1    导线    XXcm    1
2    焊锡    XXcm    1
3    USB转DC3.5mm电源线    系统供电    1
4    9*15万用板        1
5    单片机插座    40脚IC座    1
6    IC插座    8脚IC座    1
7    LCD1602插座    16P排母    1
8    LCD1602引出脚    16P排针    1

单片机源程序如下:

#include                  //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255

#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535


#include


sbit SCL=P1^4;                //SCL定义为P1口的第3位脚,连接ADC0832SCL脚

sbit DO=P1^5;                //DO定义为P1口的第4位脚,连接ADC0832DO脚

sbit CS=P1^3;                //CS定义为P1口的第4位脚,连接ADC0832CS脚


sbit beep = P3^3;   //蜂鸣器IO口定义

uint temperature,s_temp ;  //温度的变量

uchar shidu;     //湿度等级

uchar s_high = 70,s_low = 25;        //湿度报警参数


sbit dianji = P1^6;     //电机IO定义


bit flag_300ms ;

uchar key_can;                 //按键值的变量

uchar menu_1;        //菜单设计的变量


//这三个引脚参考资料

sbit rs=P1^0;         //1602数据/命令选择引脚 H:数据              L:命令

sbit rw=P1^1;         //1602读写引脚                 H:数据寄存器          L:指令寄存器

sbit e =P1^2;         //1602使能引脚          下降沿触发

uchar code table_num[]="0123456789abcdefg";


/********************************************************************

* 名称 : delay_uint()

* 功能 : 小延时。

* 输入 : 无

* 输出 : 无

***********************************************************************/

void delay_uint(uint q)

{

        while(q--);

}


/********************************************************************

* 名称 : write_com(uchar com)

* 功能 : 1602命令函数

* 输入 : 输入的命令值

* 输出 : 无

***********************************************************************/

void write_com(uchar com)

{

        e=0;

        rs=0;

        rw=0;

        P0=com;

        delay_uint(3);

        e=1;

        delay_uint(25);

        e=0;

}


/********************************************************************

* 名称 : write_data(uchar dat)

* 功能 : 1602写数据函数

* 输入 : 需要写入1602的数据

* 输出 : 无

***********************************************************************/

void write_data(uchar dat)

{

        e=0;

        rs=1;

        rw=0;

        P0=dat;

        delay_uint(3);

        e=1;

        delay_uint(25);

        e=0;        

}


/********************************************************************

* 名称 : write_sfm2(uchar hang,uchar add,uchar date)

* 功能 : 显示2位十进制数,如果要让第一行,第五个字符开始显示"23" ,调用该函数如下

                  write_sfm1(1,5,23)

* 输入 : 行,列,需要输入1602的数据

* 输出 : 无

***********************************************************************/

void write_sfm2(uchar hang,uchar add,uint date)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

        write_data(0x30+date/10%10);

        write_data(0x30+date%10);        

}


/********************************************************************

* 名称 : write_string(uchar hang,uchar add,uchar *p)

* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下

                  write_string(1,5,"ab cd ef;")

* 输入 : 行,列,需要输入1602的数据

* 输出 : 无

***********************************************************************/

void write_string(uchar hang,uchar add,uchar *p)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

                while(1)

                {

                        if(*p == '')  break;

                        write_data(*p);

                        p++;

                }        

}


/********************************************************************

* 名称 : init_1602()

* 功能 : 初始化1602液晶 

* 输入 : 无

* 输出 : 无

***********************************************************************/

void init_1602()

{

        write_com(0x38);

        write_com(0x38);

        write_com(0x0c);

        write_com(0x06);

        delay_uint(1000);

        write_string(1,0,"   shidu:00%    ");

        write_string(2,0," SH:00%  SL:00% ");

        write_sfm2(2,4,s_high);        //显示湿度上限

        write_sfm2(2,12,s_low);                   //显示湿度下限

}



/***********************1ms延时函数*****************************/

void delay_1ms(uint q)

{

        uint i,j;

        for(i=0;i                for(j=0;j<120;j++);

}


/***********读数模转换数据********************************************************/        

//请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的

                                                //  1  0  0 通道

                                                //  1  1  1 通道 

unsigned char ad0832read(bit SGL,bit ODD)

{

        unsigned char i=0,value=0,value1=0;                

                SCL=0;

                DO=1;

                CS=0;                //开始

                SCL=1;                //第一个上升沿        

                SCL=0;

                DO=SGL;

                SCL=1;          //第二个上升沿

                SCL=0;

                DO=ODD;

                SCL=1;            //第三个上升沿

推荐阅读

史海拾趣

Hitron公司的发展小趣事

机顶盒,全称为数字视频变换盒,是连接电视机与外部信号源的重要设备,具有高度的专业性和广泛的科普意义。作为信息家电的一员,机顶盒不仅实现了数模转换,让用户能够在模拟电视上观看数字电视节目,还通过接入互联网,极大地丰富了电视节目的选择,提升了观看体验。

从广义上讲,机顶盒涵盖了从模拟频道增补器到现代的数字卫星机顶盒(DVB-S)、数字地面机顶盒(DVB-T)、有线电视数字机顶盒(DVB-C)以及IPTV机顶盒等多种类型。这些机顶盒不仅接收来自有线电缆、卫星天线、宽带网络及地面广播的信号,还提供了电子节目指南、网页浏览等增值服务,使电视机成为了一个能够与用户进行互动的智能终端。

在技术层面,机顶盒的工作原理可概括为接收、解码和显示三个步骤。它首先通过内置的调谐器接收数字电视信号,随后由内部的解码器将信号转换成电视可识别的视频和音频流,最终通过电视机呈现给用户。随着技术的不断进步,机顶盒已能支持高清、甚至4K超高清视频播放,为用户带来更为细腻的画面和震撼的音效。

未来,机顶盒市场将继续保持稳定增长态势,技术创新与智能化将成为重要的发展方向。高清化、超高清化、人工智能及云计算等技术的应用,将使机顶盒不仅限于基本的电视信号接收与解码功能,而是向智能化、多功能化方向迈进,为用户提供更加便捷、智能的生活体验。

Ememory Technology Inc公司的发展小趣事

除了自主研发外,eMemory还积极寻求与外部合作伙伴的联合研发。在2016年,eMemory与马来西亚的半导体晶圆代工厂Silterra联合宣布,基于Silterra 0.18微米CMOS制程技术的一次性可编程(OTP)存储器已经通过了验证。这一合作不仅证明了eMemory技术的先进性和可靠性,还为双方带来了新的市场机遇。

General Semiconductor ( Vishay )公司的发展小趣事

1962年,物理学家Felix Zandman博士在美国宾夕法尼亚州创立了Vishay公司,起初专注于研发和生产Bulk Metal箔电阻。这一电阻技术由Zandman博士发明,具有极高的精确性和稳定性,远超当时市场上的同类产品。公司以此为基础,逐步建立了自己在电子元件领域的地位。这一初期的成功为Vishay后续的快速发展奠定了坚实的基础。

Amveco Toroidal Power Products公司的发展小趣事

Amveco Toroidal Power Products公司成立于XXXX年,初始阶段主要专注于环形变压器的研发与生产。创始人凭借对环形变压器技术的深入了解和市场需求的敏锐洞察,带领团队克服了初创期的种种困难,成功开发出了具有高效能、低噪音特点的环形变压器产品,并赢得了客户的初步认可。随着市场口碑的逐渐积累,公司的业务规模开始稳步扩大。

Artesyn Embedded Technologies公司的发展小趣事

Artesyn Embedded Technologies自1981年成立以来,一直致力于电源产品的研发与创新。在20世纪90年代,公司推出了一款具有突破性的精密电源产品,该产品以其高效能、低能耗的特点迅速在市场中获得了认可。这一成功不仅使公司获得了更多的市场份额,也为后续产品的研发奠定了坚实的基础。

Auris公司的发展小趣事

在不断追求技术创新的道路上,Auris公司并未止步。近年来,该公司正在积极研发柔性机器人技术,这种技术有望在治疗喉咙、肺和肠胃疾病方面发挥重要作用。柔性机器人的研发不仅展示了Auris在技术创新方面的持续努力,也为其在未来的医疗市场中抢占先机提供了有力支持。

这五个故事展示了Auris公司在电子行业中的发展历程,从创始人的科技愿景到技术突破获得认可,再到与强生的合作以及柔性机器人的研发,每一步都体现了Auris对于技术创新和市场拓展的不懈追求。这些事实性的故事不仅展现了Auris公司的成长轨迹,也反映了电子行业中技术创新和市场竞争的激烈态势。

问答坊 | AI 解惑

安防监控

深圳市鑫达莱科技有限公司网络工程部是由在台湾著名的CCTV 厂商杰士安(JSA-CCTV)电子股份和鑫达莱公司注资支持下而成立的智能化系统集成公司, 是一家专业提供视频监控系统、防盗报警系统、停车场系统、网络工程等智能化系统集成为一体的高科技企业 ...…

查看全部问答>

会跳舞的机械电子时钟Segmentus Clock,太酷了

这是由Art Lebedev Studio设计的一款看似简直但并不简略的机械时钟Segmentus Clock,钟体的表面为一层半透明材料,用户可以透过这层半透明材料看到里面时钟的运作,它的显示模式和电子时钟的显示雷同,但是当它每分每秒走动的时候连接数字的每一个 ...…

查看全部问答>

UCF文件中时序约束的语法

约束UCF文件,从Constrains Editor直接输入是最方便、最直接的添加约束的方法了。我总结了以下几种常用的语法: 2 \\- i: T  u/ Q! k2 u\" T2 v* r; H\" M$ `\" A6 Q7 s4 x1)周期约束 ; n, M$ i6 B! t: {约束是一个基本时序和综合约束, ...…

查看全部问答>

有没有准备去参加嵌入式培训的?(上海)

http://www.farsight.com.cn/ 有个嵌入式培训,4个月。在上海 10.19日开班。我现在准备去 因为合伙报名有优惠5%的优惠,所以问一下有没有同去。绝对不是帮做广告!!因为我确实准备去打算。 如果有去的,就联系一下,一起去报名。QQ346212241. ...…

查看全部问答>

WinCE中List控件问题,急!

环境:WinCE 4.2 EVC开发 Dialog对话框,其中用了一个List Control控件 设置为了表格形式, 但是在设置字体时,无法正常完成,具体表现如下:         CFont ft;         LOGFONT lf;   &nbs ...…

查看全部问答>

在标准英文版的模拟器中,在右下角为何不见选择软键盘输入法的按钮,如何才能让它出现?

开发环境evc4.0+SP4  STANDARDSDK_500_Emulator(标准英文版的模拟器),       在标准英文版的模拟器中,在右下角为何不见选择软键盘输入法的按钮,如何才能让它出现? …

查看全部问答>

str912跑ucosii浮点异常

定义一个浮点数,有时候输出居然是0.000000大家碰到过这个问题吗?…

查看全部问答>

heartbeat

请问DP83848数据手册中提到了heartbeat,我是新手,不知该如何理解。请大家指教!…

查看全部问答>

电子变压器设计手册

本帖最后由 paulhyde 于 2014-9-15 03:27 编辑 很好的变压器学习资料哦,不容错过,希望大家能互相学习!  …

查看全部问答>

【召集】launchpad大学堂,每三天一主题——中断和定时器

【召集】launchpad大学堂,每三天一主题2011年10月28日为了促进大家更好的利用launchpad,我们版块从今天起,每三天召集分享一个主题。今天的主题是——【中断和定时器】对于每天的主题分享,斑斑当天给予奖励,发放芯币!大学堂结束的时候根据分享 ...…

查看全部问答>