自动浇花器
应网友之要求,同时也按他的意图做的浇灌器,因有其它功能未添加,不算完工,他的核心诉求是用一个单片机来给他家里的多种宝贝植物按需供水(好像很精贵的植物的样子),未能最后完工,所以暂不把程序贴出来。同时希望同学们把生活中的痛点告诉楼主。也许楼主能做。而且楼主保证做好第一个发给你。当然你也可以到我网店任挑一个你喜欢的。
土壤探测器:4只
继电器:4连-5v10A
auduino 快速焊接扩展板: 一只
水泵:12V-4只(视频里没连,现手头没水泵) 连线部分:数字IO的D3,D5,D7,D9分别连继电器IN1,IN2,IN3,IN4,继电器的VCC和GND连Arduino的vcc和gnd。每只土壤传感器的信号口分别连arduino的A0,A1,A2,A3.
每只土壤传感器的vcc和gnd分别连arduino 的Vcc和GND。
顺便说一下,我没有8连继电器只好用了4连的,这种arduino板有6个analog口,应该可以连6个土壤湿度探头。我会再找一个两联继电器,这样把它凑够六个。
更新了,连了6个土壤探测器,也就是应该连6个水泵。我手边目前就两个,还有一个测试时候发现是坏的。控制板换成maga板的话,理论上可以连16个土壤探头。但没有实际测试过。
先声明,源码写的太久找不到了。于是现写了一个,arduino测试通过,没有在连接硬件调试。因为手头也缺乏多个土壤探测头。
四个土壤探头接arduino A0-A3口 int soilPin1 = A0;
int soilPin2 = A1;
int soilPin3 = A2;
int soilPin4 = A3;
继电器接arduino D7-D10口
int pump1=7; //pump1 at pin 7
int pump2=8; //pump2 at pin 8
int pump3=9; //pump1 at pin 9
int pump4=10; //pump2 at pin 10
关于土壤探头,它的模拟值是0-1023,我设置的临界值是900,这个可以调整的。是aruduino程序里调整参数。小于900需要防水。大于900不需要水。一个是通过调整探头的电位器,把灯调亮。

- //this code is written by gada888 in 26-12-2021
- int soilPin1 = A0;
- int soilPin2 = A1;
- int soilPin3 = A2;
- int soilPin4 = A3;
-
- int soilReading1;
- int soilReading2;
- int soilReading3;
- int soilReading4;
-
- int pump1=7; //pump1 at pin 7
- int pump2=8; //pump2 at pin 8
- int pump3=9; //pump1 at pin 9
- int pump4=10; //pump2 at pin 10
-
- int tempo=2000; //watering time of 2 seconds
- int ledboard=13; //on board led at pin 13
-
- void setup()
- {
- Serial.begin(9600);
- pinMode(pump1,OUTPUT); //pump1 output
- pinMode(pump2,OUTPUT); //pump2 output
- pinMode(pump3,OUTPUT); //pump3 output
- pinMode(pump4,OUTPUT); //pump4 output
- pinMode(ledboard,OUTPUT); //on board led output
- digitalWrite(ledboard,LOW); //turn off Arduino led
- }
-
- void loop()
- {
- soilReading1 = analogRead(soilPin1);
- soilReading2 = analogRead(soilPin2);
- soilReading3 = analogRead(soilPin3);
- soilReading4 = analogRead(soilPin4);
- Serial.print("Analog output: ");
- //Serial.println(readSensor());
-
- if (soilReading1 < 900) {
- Serial.println("pump1 needs water");
- digitalWrite(pump1,HIGH); //turn on pump1
- delay(tempo); //wait some time
- digitalWrite(pump1,LOW); //turn off pump1
- } else if (soilReading2 < 900) {
- Serial.println("pump2 needs water");
- digitalWrite(pump2,HIGH); //turn on pump2
- delay(tempo); //wait some time
- digitalWrite(pump2,LOW); //turn off pump2
- } else if (soilReading3 < 900) {
- Serial.println("pump3 needs water");
- digitalWrite(pump3,HIGH); //turn on pump1
- delay(tempo); //wait some time
- digitalWrite(pump3,LOW); //turn off pump1
- } else if (soilReading4 < 900) {
- Serial.println("pump4 needs water");
- digitalWrite(pump4,HIGH); //turn on pump2
- delay(tempo); //wait some time
- digitalWrite(pump4,LOW); //turn off pump2
- }
- }
复制代码
|