Automatic Watering System for Home Green Plant Based on Arduino Microcontroller
An automatic watering system for green plants is designed by using Arduino single chip microcomputer. It mainly includes main control module, LCD display module, key control module, humidity detection module, water pump module and WI-FI module, which makes the whole system join the Internet of Things to realize full automation. The system can judge the status of the growing environment of green plants through the detection of soil temperature and humidity, that is, water shortage or dehumidification. And the user can manually adjust the threshold range of soil moisture, LCD display screen displays the current soil temperature and humidity information. When the soil moisture is lower than the set threshold, the pump is started to pump water, and when the threshold after watering is within the set humidity range, the watering is stopped. The addition of the WI-FI module tries to connect the whole system with the Internet of Things, which is convenient for users to monitor and operate on the mobile phone.
Arduino Microcontroller
随着生活水平的提高,许多居民为了美化环境、净化空气,喜欢在家中阳台上种植一些花草。但现代人们的生活节奏愈加愈快,工作越来越繁忙,经常会忘记按时给家中的绿植浇水,但植物是离不开水的。当人们出差或有事不在家时,植物的供水就会中断,植物将会面临干枯。经调查发现花草生长的问题80%以上由绿植浇灌问题引起,不容易养的花卉会因为浇水问题而长势不好或更严重的出现枯萎甚至凋亡。
虽然目前国内外市场上存在一些自动浇水系统,但大部分自动供水灌溉系统采用虹吸方式,即这种模式只能保证不会出现干旱现象,但无法根据绿植的实际需要进行适时适量地供水。同时市面上的其他自动浇水系统需要有水龙头在外面提供的前提下才可以使用,但大部分家庭中的花草绿植一般都种植在阳台上,而在无人情况下在阳台使用水龙头十分不安全也并不方便。除此之外其他电子平台在售的智能花盆虽然种类繁多,但其中大部分都是通过花盆套叠方式实现“自动吸水”式浇水,这种方式不能根据绿植实际需求进行适时适量地浇水,实际上也仅止步于能够在规定的时间内向绿植进行补水,这两种方式基本一致,但都不能按照绿植的实际需求来进行补水灌溉。
针对上述问题,该论文研究设计了一款基于Arduino单片机
该系统分为:主控模块、电源模块、LCD显示模块、按键调控模块、湿度检测模块、水泵模块。主控模块顾名思义就是对整个系统进行控制,其负责接收和发送整个系统的命令。太阳能电源模块主要是为整个系统提供电能,并且为水泵模块提供电能来让电机实现抽水功能。LCD显示模块用来显示当前土壤湿度以及在进行阈值设定时更直观的看到设定的阈值数。湿度检测模块就是检测当前土壤中的水分含量并以电信号的形式展现出来。总体来说,该系统以单片机为控制中心,利用土壤湿度传感器对绿植土壤湿度进行检测,依靠湿度传感器检测的数据与系统预设的湿度阈值
其框架图见
开发版原理图见
图2. 开发版原理图
本系统中运用了经济实惠、适应性极强、兼容广泛的Arduino UNO控制器
湿度传感器
本系统配备LCD1602液晶显示模块,它是利用液晶的物理特性,通过电压对其显示区域进行控制,从而显示字符和简单图形,允许用户实时查看时间、植物名称、用户预先设定好的参数、湿度数据以及产品的运行状态,具备有灌溉或待机模式。用户可以通过可视化的测试数据随时了解花盆的状态,同时也可以及时调整阈值数据。
该系统使用继电器作为水泵系统的开关,通过电流控制衔铁和触电簧片,实现电路的开合,通过对电机的控制实现向花盆供水。可以将此系统视为使用低电压来控制高压的“断路器”。水泵系统中有电磁继电器,它主要由线圈、衔铁、铁芯和触电簧片组成,当电流流过线圈时,由于电压产生电磁效应并产生磁力,衔铁由于磁力接触电路,形成闭路,电机M启动,水泵工作开始抽水,否则衔铁将始终与电路断开,无法形成闭路,没有电流,不会产生磁力,水泵就不会运转。
系统中的报警系统主要是通过音响完成的。当湿度传感器检测到湿度小于用户所设阈值,水泵开始抽水,水泵结束抽水时均有报警。另外,用户修改参数,设置相关功能时也会通过音响模块播报。音响系统可根据用户个人喜好通过移动端设置是否播报,播报音量以及具体播报内容。
系统所用的ESP系列WIFI模块可以实现将该系统接入互联网,同时也可精准上传花盆内各种数据。用户可通过连接APP来对植物生长环境及生长状况进行远程监控,同时用户还可以从手机上远程控制浇水、照明等参数。当出现异常情况时系统会自动传达指令为用户在软件上提醒,便于用户更及时接受和检测一切信息。
按键调控模块是一种利用按键的操控模块
电源模块主要选择太阳能电源模块给系统供电,利用太阳能模块转化太阳能为电能给各个元件供电,以及给水泵供电来实现各个模块的正常工作。同时配备有一块电池白天太阳能模板供电的同时给电池充电,夜晚没有太阳能由电池供电,来保证系统不会断电。
安装Arduino IDE开发环境,并下载所需的库,如WIFI库、TFT库。连接Arduino IDE控制板,并编程烧如代码,完成硬件与软件的集成。借助Arduino嵌入式平台的WIFI模块,该系统采集的温湿度等各类数据可实时同步到用户的移动端App,方便用户对植物进行实时监控。同时当设备上线后,APP页面会及时更新采集的数据,包括温湿度含氧量等状态,用户可通过点击相应控件实现远程控制。同时,系统加入的音响模块可对各类情况进行播报或执行用户其他指令。
本系统软件结构由多个程序部分组成,不同部分拥有不同功能。关于程序流程,首先通过初始化启动显示界面,在用户端选择植物种类,系统开始监测土壤湿度,并为其在数据库里选择合适湿度数据阈值,通过数据处理判断是否为其浇水,如无需浇水则系统继续实时监测土壤湿度,若需浇水则通过蓝牙音响进行提醒,并开启水泵,之后持续监测土壤湿度并判断是否浇花结束,利用音响提醒并进行播报。
程序流程图如
湿度检测器实时检测绿植的土壤湿度,并将湿度值传输给Arduino主控板。
① Arduino主控板根据湿度传感器的读数,判断是否需要开启水泵浇水。
② 如果土壤湿度低于设定阈值,则Arduino主控板通过控制水泵开启,将适量的水注入绿植的土壤中,从而实现自动浇水的功能。
③ 同时,ESP系列WIFI模块可以将设备连接到互联网,用户可以通过手机等终端设备,实现远程控制和监测设备的状态和数据。
④ 如果设备发生故障或者出现异常情况,用户可以通过维护和优化来保持设备的正常运行状态。
开机启动,读取土壤温湿度等传感器的数值,LCD显示器显示对应数值,主控模板根据设定阈值判断是否开启水泵进行浇水。接入WiFi后系统将各种数据传入手机端APP,通过本自动浇水系统,用户可以实现对家庭绿植的智能管理,减轻了用户的日常工作量,同时也可以保证植物的健康生长。
该研究是专为家庭绿植的自动浇水而设计的,传感器选择和功能设计都是针对绿植生长所需的水分和养分。相对于一般的自动浇水系统,本项目的专一针对性更加突出,可以更好地满足绿植的需求,从而提高生长质量。
该设计集成了温湿度检测器等传感器,可以实时监测绿植的生长环境,对土壤温湿度等参数进行实时测量并传输给主控板,通过显示屏显示,可以方便用户随时观测数据,及时了解绿植的生长状态和环境变化,从而采取措施保障绿植的健康成长。
该设计采用了一些经济实惠的传感器和元器件,如Arduino主控板和水泵,以及便宜但性能很好的ESP系列WiFi模块,成本相对较低,对于一般家庭用户而言,可以更好地满足他们的需求。
该设计加入了物联网使其实现对家庭绿植的全自动化控制,大大减轻了用户的负担,同时用户还可通过远程控制来监测设备的状态和数据,实现智能化的管理和维护,提高了生活的品质。同时,智能化的设计可以根据不同绿植的生长环境需求进行精准养护,不仅利于绿植的生长,还符合节能环保的理念。
5) 发展前景:
国内外小型自动浇水系统研发较少,该研究弥补了市场的空白,具有巨大发展前景。
该研究基于Arduino单片机原理成功研发了自动浇水系统,该系统结合移动端APP,实现了对温湿度、酸碱度、光照等关键参数的实时监测与智能语音控制,展现了高度的实用性和创新性。通过湿度检测器监测土壤湿度与单片机控制系统实现对不同部位的土壤湿度监测和自动浇水,更有利于植物的生长。且此绿植自动浇水系统制造成本低廉,适合小型工厂及日常生活使用,并且操作简便实用。系统所用器件兼具体积小、成本低、精度高的特点,显著提升了用户体验并降低了成本投入。
此外互联网的发展可谓十分迅捷,各个行业几乎都能与互联网相结合来创造新价值,当然家庭绿植自动浇水方面也不例外。通过线上精准观测加之帮人们自动浇水、适量浇水观测生长环境、手机端远程操控等功能的扶持,功能齐全,为人们种养绿植提供了便利。通过互联网的宣传,可吸引一些人去尝试并使用本系统,从而带来潜在的消费市场。另外,目前市场上的各种自动浇水系统也都只是单纯的浇水,并没有如此丰富的功能,我们的产品同时填补了市场的空白。展望未来,我们将持续优化系统性能,拓展更多功能,以满足用户日益增长的需求,推动物联网技术在智能家居领域的深入应用。
华北理工大学大学生创新创业训练计划项目(Y2023161);华北理工大学教育教学改革研究与实践项目(T-ZJ2218)。
(注:由于lcd和WIFI模块程序过于庞大不便演示,故在此只展示自动浇水主程序)
#include
#include “LiquidCrystal_I2C.h”
#include "QhDHT11.h"
#define DHT11_PIN A1
#define MOTOR_INA2 5
#define LED_RED_PIN 7
#define LOW_TH 30
#define HIGH_TH (LOW_TH+5)
int pump_sta = 0; //0代表水泵已经关闭1代表水泵已经开启
LiquidCrystal_I2C lcd (0x27, 16, 2);
QhDHT11 qhDHT;
int wetPin = A0;
long int wetValue = 0;
void setup (){
Serial.begin (9600); c
lcd.init (); // initialize the lcd
lcd.backlight ();
lcd.setCursor (2,0); // go to start of 2nd line
lcd.print (“Hello, world!”);
lcd.setCursor (4,1); // go to start of 2nd line
pumpInit ();
pinMode (LED_RED_PIN, OUTPUT);
digitalWrite (LED_RED_PIN, LOW);
Serial.println (“Hello, QHEBOT”);
}
void loop (){
getSensor (); //得到传感器数据
pump_judge (); //对数据进行判别,看是否需要打开水泵
update_lcd1602 (); //更新1602液晶数据
delay (500);
}
void pump judge (){
if (wetValue > HIGH_TH){
closePump ();
}else if (wetValue < LOW_TH){
openPump ();
}
}
void getSensor(){
wetValue = analogRead (wetPin);
wetValue *= 100;
wetValue = wetValue/1023;
qhDHT.getTHValue (DHT11_PIN);
Serial.print (wetValue);
Serial.print (“,t”);
Serial.print (qhDHT.humidity, 1);
Serial.print (“,t”);
Serial.println (qhDHT.temperature, 1);
}
void update_lcd1602(){
lcd.setCursor (1, 0);
lcd.print (“TH”);
lcd.print (LOW_TH);
lcd.print (“P”);
if (pump_sta == 1){
lcd.print (“ON ”);
}else{
lcd.print (“OFF ”);
}
lcd.setCursor (0, 1);
lcd.print (“T”);
if (qhDHT.temperature <= 99){
lcd.print (qhDHT.temperature, 0);
}else{lcd.print(99, 0);}
lcd.print (“H”);
if (qhDHT.humidity <= 99){
lcd.print (qhDHT.humidity, 0);
}else{
lcd.print (99, 0);
}
lcd.print(“W”);
lcd.print(wetValue);
lcd.print (“ ”);
}
void pumpInit(){
pinMode (MOTOR_INA1, OUTPUT);
pinMode (MOTOR_INA2, OUTPUT);
analogWrite (MOTOR_INA1, 0);
analogWrite (MOTOR_INA2, 0);
}
void openPump (){
pump_sta = 1;
analogWrite (MOTOR_INA1, 255);
analogWrite (MOTOR_INA2, 0);
digitalWrite (LED_RED_PIN, HIGH);
}
void closePump (){
pump_sta = 0;
analogWrite (MOTOR_INA1, 0);
analogWrite (MOTOR_INA2 , 0);
digitalWrite (LED_RED_PIN, LOW);
}