一·设计思路:
随着社会的进步,人们的生活质量越来越高。在家里养养盆花可以陶冶情操,丰富生活。同时盆花可以通过光合作用吸收二氧化碳,净化室内空气,在有花木的地方空气中阴离子聚集较多,所以空气也特别清新,而且许多花木还可以吸收空气中的有害气体,因此,养盆花如今被许多人喜爱。但盆花浇水量是否能做到适时适量,是养花成败的关键。但是,在生活中人们总是会有无暇顾及的时候,比如工作太忙,或者出差、旅游等。花草生长问题80%以上是由花儿浇灌问题引起的;好不容易种植几个月的花草,因为浇水不及时,长势不好,用来美化环境的花草几乎成了“鸡肋”;不种植吧,家里没有绿色衬托,感觉没有生机;保留吧,花草长得不够旺盛,还影响家庭装饰效果。虽然市场上有卖盆花自动浇水器,但价格十分昂贵,并且大多只能设定一个定时浇水的时间,很难做到给盆花自动适时适量浇水。夜有较经济的盆花缺水报警器,可以提醒人们及时的给盆花浇水。可是这种报警器只能报警,浇水还需要人们亲自动手。当家里无人时,即使报警也无人浇水,就起不到应有的作用了。因此,我想设计一种集盆花土壤湿度检测,自动浇水以及蓄水箱自动供水于一体的盆花自动浇水系统。让人们无暇顾及时也能得到及时的浇灌。此产品在此背景下设计而出。
二·工作原理:
主要组成部分由AT系列的AT89C51单片机、模数转换器ADC0832,yl-69土壤湿度传感器和LCD1602液晶显示屏组成。yl-69将采集到的湿度样本作为输入信号传送到ADC0832。在单片机工作需要采集数据时,发出指令启动模数转换器。此次自动浇灌系统设计要达到的目标就是通过在单片机程序内设定浇灌湿度值,当采集的湿度样本低于设定湿度值时,开始浇水,高于湿度值,则报警器工作,发出信号,停止浇水。
上回FastBond2阶段1的文档中,展示了使用Scheme-it绘制的原理图,介绍了检测土壤湿度的基本原理,也说明了项目中所使用到的活动规定厂家的芯片。
想了解阶段1的具体内容可以通过链接跳转:FastBond阶段1一 基于51单片机控制的自动浇花设备
三·原理框图:
流程图设计都是由Scheme-it网页绘制的,简洁明了,绘制元器件,原理图都挺简单的。
连接如下:https://www.digikey.cn/schemeit/project/基于51单片机的智能浇花设施-bd013b560168465981922031f9753434
原理框图如下:
使用Scheme-it设计的原理图导出到KiCad后,有一些地方并不匹配,比如网络标签并不识别等,因此需要继续更改加以完善。经过完善的原理图如下,与阶段1中的原理框图并没有什么改动。
原理图如下:
电源采用DC5V的电压供电,通过自锁开关来控制电源的开与断。
原理图如下:
抽水电机采用的是5V直流供电的直流电机
原理图如下:
模数转换及yl-69土壤湿度传感器:
声光报警电路:
之后绘制PCB,打板,项目前期就算胜利了。
PCB图如下:
四·成品调试
首先是成品组装好的样子
其次就是yl-69土壤湿度检测模块,因为设计的时候没有想到外接的问题,导致模块的线比抽水电机的线要长一些,这就给防水增加了难度。
这次使用的是DC5V的直流抽水泵,连接图如下:
五·程序
引脚定义
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口定义
sbit dianji = P1^6; //电机IO定义
sbit rs=P1^0; //1602数据/命令选择引脚 H:数据 L:命令
sbit rw=P1^1; //1602读写引脚 H:数据寄存器 L:指令寄存器
sbit e =P1^2; //1602使能引脚 下降沿触发
延时消抖
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<120;j++);
}
报警电路
void clock_h_l()
{
static uchar value,value1;
if(shidu <= s_low)
{
value ++;
if(value >= 2)
{
value = 10;
beep = ~beep; //蜂鸣器报警
dianji = 0; //打开电机
}
}else
beep = 1; //关闭蜂鸣器
if(shidu >= s_high)
{
value1 ++;
if(value1 >= 2)
{
value1 = 10;
beep = 1; //关闭蜂鸣器
dianji = 1; //关机电机
}
}else
value1 = 0;
}
主函数
void main()
{
init_1602(); //1602液晶初始化
time_init(); //初始化定时器
while(1)
{
key(); //独立按键程序
if(key_can < 10)
{
key_with(); //按键按下要执行的程序
}
if(flag_300ms == 1)
{
flag_300ms = 0;
clock_h_l(); //报警函数
if(beep == 1)
{
shidu = Adc0832(0); //读出湿度
shidu = 99 - shidu * 99 / 255;
}
if(menu_1 == 0)
{
write_sfm2(1,9,shidu); //显示湿度等级
}
}
delay_1ms(1);
}
}
六·总结
很感谢硬禾学堂举办的FastBond2-How 2 Make电子设计活动,让我有机会通过这个活动使用一些未曾尝试过的芯片来做一些不大但很有意义的制作。这之中虽然遇到了很多难题,比如ADC模数转换芯片坏掉了,LCD1602显示屏不显示等一系列问题。但跨过之后尽是收获。项目之中所做的成品确实很粗糙,稳定性实用性还有所改进空间,我将继续完善,在我家花园中用起来,更好监测我养的花。