KE3044 Keyes DIY 电子自动浇水系统 花卉自动灌溉套件

 

1.简介

阳台上,美丽的鲜花,让人赏心悦目,翠绿的多肉植物周围似乎充满了新鲜空气。

但是有时却不太想打理,或者没时间打理这些盆栽。最终漂亮的花朵和多肉植物在你这般照料下,变成了金黄色的枯草。

为了拯救你的盆栽,我们推出了一款简单实用的自动浇花装置,装置配有4个土壤湿度传感器和水泵,意味着它能同时帮你照料4个盆栽,还配备了个显示屏,能让你清楚的知道盆栽土壤的湿度值。

2.总接线图

D:\桌面文件\PS图\PS\KE3044 浇花系统\图片3.png图片3

水管接到水泵上:

母对母的杜邦线接到水泵的正极也就是红色线,再与主板的5V排针连接。

代码编写教程

实验一:控制继电器和水泵

(1)实验说明:

继电器就是个电动开关,水泵是动力装置。通过继电器开关来控制水泵是否抽水。

(2 规格参数:

水泵

继电器

工作电压:

2.5V~6V

工作电压

DC5V

配对的水管内径

6mm

通过最大电流

10A(AC)  5A(DC)

当电压为5V时

水管离水泵的高度不能高于105cm

通过最大开关电压

250VAC  30VDC

   

触发信号

高电平触发

(3)实验代码:

#define IN1 3

#define IN2 5

#define IN3 6

#define IN4 9

void setup() {

pinMode(IN1, OUTPUT);

pinMode(IN2, OUTPUT);

pinMode(IN3, OUTPUT);

pinMode(IN4, OUTPUT);

}

void loop() {

digitalWrite(IN1, HIGH);//打开水泵1

digitalWrite(IN2, HIGH);//打开水泵2

digitalWrite(IN3, HIGH);//打开水泵3

digitalWrite(IN4, HIGH);//打开水泵4

delay(3000); //延时3S

digitalWrite(IN4, LOW);//关闭水泵1

digitalWrite(IN3, LOW);//关闭水泵2

digitalWrite(IN2, LOW);//关闭水泵3

digitalWrite(IN1, LOW);//关闭水泵4

delay(1000); //延时1S

}

(4)实验现象:

烧录代码之后,可以看到4个继电器同时打开,水泵开始抽水,3秒后停止。

实验二 读取土壤传感器检测数值

(1)实验说明:

土壤湿度传感器就是用来检测土壤湿度值的,也就是通过检测到的值可以判断盆栽是否缺水;读取4个土壤湿度传感器,并且在arduino IDE的串口监视器中打印出来。

  1. 规格参数

控制芯片:TLC555

通信接口:输出模拟值

额定电压:3.3 ~ 5.5 VDC

输出电压:0 ~ 3.0 VDC

工作电流:<5mA

工作温度范围:1°C ~ 50°C

(3)实验代码:

#define soilPin1 A0 //定义土壤传感器引脚

#define soilPin2 A1

#define soilPin3 A2

#define soilPin4 A3

void setup() {

Serial.begin(9600);

pinMode(soilPin1, INPUT); //设置引脚输出

pinMode(soilPin2, INPUT);

pinMode(soilPin3, INPUT);

pinMode(soilPin4, INPUT);

}

void loop() {

int val1 = analogRead(soilPin1);

int val2 = analogRead(soilPin2);

int val3 = analogRead(soilPin3);

int val4 = analogRead(soilPin4);

Serial.print(“SoilSensor 1 = “); //串口打印土壤湿度值

Serial.print(val1);

Serial.print(” “);

Serial.print(“SoilSensor 2 = “);

Serial.print(val2);

Serial.print(” “);

Serial.print(“SoilSensor 3 = “);

Serial.print(val3);

Serial.print(” “);

Serial.print(“SoilSensor 4 = “);

Serial.println(val4);

}

(4)实验现象:

烧录好代码,打开arduino IDE的串口监视器,可以看到打印出4个土壤湿度传感器检测到的值,用手触摸土壤湿度传感器的探测部分,可以看到对应的值变小,这是因为人的手皮肤上有水分,也就意味着土壤越湿测到的值越小。

实验三 简单自动浇花装置

(1)实验介绍:

既然学会了控制水泵和读取土壤湿度传感器的值,那就可以通过判断土壤湿度传感器检测到的值来开关继电器,实现简单的自动浇花装置。

(2)实验代码:

#define soilPin1 A0 //定义土壤传感器引脚

#define soilPin2 A1

#define soilPin3 A2

#define soilPin4 A3

#define IN1 3 //定义继电器引脚

#define IN2 5

#define IN3 6

#define IN4 9

void setup() {

Serial.begin(9600);

pinMode(soilPin1, INPUT); //设置引脚为输入

pinMode(soilPin2, INPUT);

pinMode(soilPin3, INPUT);

pinMode(soilPin4, INPUT);

pinMode(IN1, OUTPUT); //设置引脚为输出

pinMode(IN2, OUTPUT);

pinMode(IN3, OUTPUT);

pinMode(IN4, OUTPUT);

}

void loop() {

int val1 = analogRead(soilPin1);

int val2 = analogRead(soilPin2);

int val3 = analogRead(soilPin3);

int val4 = analogRead(soilPin4);

Serial.print(“SoilSensor 1 = “); //串口打印湿度数值

Serial.print(val1);

Serial.print(” “);

Serial.print(“SoilSensor 2 = “);

Serial.print(val2);

Serial.print(” “);

Serial.print(“SoilSensor 3 = “);

Serial.print(val3);

Serial.print(” “);

Serial.print(“SoilSensor 4 = “);

Serial.println(val4);

if(val1 < 420){ //当土壤传感器检测到湿度值大于420时打开水泵

digitalWrite(IN1, HIGH);

}else{

digitalWrite(IN1, LOW);

}

if(val2 < 420){

digitalWrite(IN2, HIGH);

}else{

digitalWrite(IN2, LOW);

}

if(val3 < 420){

digitalWrite(IN3, HIGH);

}else{

digitalWrite(IN3, LOW);

}

if(val4 < 420){

digitalWrite(IN4, HIGH);

}else{

digitalWrite(IN4, LOW);

}

}

(3)实验现象:

为了方便做实验,我们还是先用手触摸土壤湿度传感器来替代盆栽缺水的情况。烧录代码后,用手触摸土壤湿度传感器,对应的继电器打开,水泵抽水,放开手后,继电器关闭,水泵停止抽水。

实验四 控制LCD1602显示屏

(1)简介

这是一个可以显示2行,每行16个字符的液晶屏模块。液晶屏显示蓝底白字,自带I2C通信模块,使用时只需连接单片机I2C通信接口,大大节约了单片机资源。I2C通信模块上带有1个电位器,可用于调节显示屏背光,通信地址默认为0x27。

(2)实验代码:

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2); //LCD的IIC通信地址是0x27,2行显示16个字符

void setup()

{

lcd.init(); // 初始化LCD

lcd.init();

// 将信息打印到LCD上

lcd.backlight();

lcd.setCursor(5,0);

lcd.print(“keyes”);

lcd.setCursor(2,1);

lcd.print(“Hello, world!”);

}

void loop()

{

}

(3)实验现象:

可以看到LCD1602显示屏第一行显示:keyes ;第二行显示: Hello World! 。

实验五 LCD1602显示土壤传感器检测到的值

(1)实验说明

土壤湿度传感器检测到的值,可以通过打开arduino IDE串口监视器查看,但是需要使用数据线连接电脑,很不方便。所以我们添加了个LCD1602显示屏,可以在显示屏上看土壤湿度传感器检测到的值。

(2)规格参数

工作电压:DC 5V

接口:间距为2.54mm排针接口

通讯方式:I2C通讯

I2C通信地址: 0x27

(3)实验代码:

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2); //LCD的IIC通信地址是0x27,2行显示16个字符

#define soilPin1 A0

#define soilPin2 A1

#define soilPin3 A2

#define soilPin4 A3

void setup()

{

lcd.init(); // 初始化LCD

lcd.init();

// Print a message to the LCD.

lcd.backlight();

}

void loop()

{

int val1 = analogRead(soilPin1);

int val2 = analogRead(soilPin2);

int val3 = analogRead(soilPin3);

int val4 = analogRead(soilPin4);

// 将信息打印到LCD上

lcd.setCursor(0,0);

lcd.print(“S1:”);

lcd.setCursor(3,0);

lcd.print(val1);

lcd.setCursor(7,0);

lcd.print(” “);

lcd.setCursor(9,0);

lcd.print(“S2:”);

lcd.setCursor(12,0);

lcd.print(val2);

lcd.setCursor(0,1);

lcd.print(“S3:”);

lcd.setCursor(3,1);

lcd.print(val3);

lcd.setCursor(7,1);

lcd.print(” “);

lcd.setCursor(9,1);

lcd.print(“S4:”);

lcd.setCursor(12,1);

lcd.print(val4);

delay(100);

}

(4)实验现象:

S1代表土壤湿度传感器1,以此类推,可以看到LCD1602显示屏显示出4个传感器检测到的值,用手触摸传感器,可以看到显示屏上显示的值在改变。

实验六 自动浇花装置

(1)实验代码:

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2); // LCD的通信地址的0x27,2行显示16个字符

#define soilPin1 A0 //定义土壤传感器引脚

#define soilPin2 A1

#define soilPin3 A2

#define soilPin4 A3

#define IN1 3 //定义水泵引脚

#define IN2 5

#define IN3 6

#define IN4 9

int count, count_flag;

void setup()

{

lcd.init(); // 初始化lcd

lcd.init();

//LCD清屏

lcd.backlight();

}

void loop()

{

pinMode(IN1, OUTPUT);

pinMode(IN2, OUTPUT); //设置引脚为输出

pinMode(IN3, OUTPUT);

pinMode(IN4, OUTPUT);

int val1 = analogRead(soilPin1);

int val2 = analogRead(soilPin2);

int val3 = analogRead(soilPin3);

int val4 = analogRead(soilPin4);

 

//LCD上打印数值

lcd.setCursor(0,0);

lcd.print(“S1:”);

lcd.setCursor(3,0);

lcd.print(val1);

lcd.setCursor(7,0);

lcd.print(” “);

lcd.setCursor(9,0);

lcd.print(“S2:”);

lcd.setCursor(12,0);

lcd.print(val2);

lcd.setCursor(0,1);

lcd.print(“S3:”);

lcd.setCursor(3,1);

lcd.print(val3);

lcd.setCursor(7,1);

lcd.print(” “);

lcd.setCursor(9,1);

lcd.print(“S4:”);

lcd.setCursor(12,1);

lcd.print(val4);

delay(200);

count = count + 1;

if(count >= 50) //10秒钟后,关闭lCD1602背光

{

count = 50;

lcd.noBacklight();

}

if(val1 > 550){ //当土壤的湿度大于550时水泵开始抽水(实际的土壤湿度越大数值越小,数值小于550就停止抽水)

lcd.backlight();

count = 0;

digitalWrite(IN1, HIGH); //打开水泵 1

delay(3000); //延时3S

digitalWrite(IN1, LOW); //关闭水泵1

delay(5000); //延时5S

}else{

digitalWrite(IN1, LOW);

}

if(val2 > 550){

lcd.backlight();

count = 0;

digitalWrite(IN2, HIGH);

delay(3000);

digitalWrite(IN2, LOW);

delay(5000);

}else{

digitalWrite(IN2, LOW);

}

if(val3 > 550){

lcd.backlight();

count = 0;

digitalWrite(IN3, HIGH);

delay(3000);

digitalWrite(IN3, LOW);

delay(5000);

}else{

digitalWrite(IN3, LOW);

}

if(val4 > 550){

lcd.backlight();

count = 0;

digitalWrite(IN4, HIGH);

delay(3000);

digitalWrite(IN4, LOW);

delay(5000);

}else{

digitalWrite(IN4, LOW);

}

}

(2)实验现象:

上传好程序,接上DC端供电,四个土壤湿度传感器分别插到4个盆栽土壤里,对应的控制的水泵水管也放到盆栽里,可以看到LCD1602显示屏显示出盆栽的土壤湿度值。如果盆栽不缺水,10秒后LCD1602显示屏的背景灯会关闭,达到省电作用。如果有盆栽缺水了,LCD1602显示屏背景灯会亮起,对应盆栽的继电器打开水泵抽水到盆栽,3秒后继电器关闭,水泵停止抽水,等待5秒给水渗透时间,然后土壤湿度传感器再继续检测。(因土壤传感器的检测原理是:湿度越大数值越小,所以当土壤的湿度大于550时水泵开始抽水,数值小于550就停止抽水)

相关资料下载链接

Arduino C教程链接:https://pan.baidu.com/s/1AwhJonZ-wSfFrJSXyPpalQ
提取码:keye

Mixly图形化编程链接:https://pan.baidu.com/s/1opzlvPQ3u2X5HwDyF7IpbA
提取码:keye