自学传感器之自动浇花系统
设备:1、Arduino UNO R3 1个
1.2、Shield 传感器扩展板V5.0 1个(可选)
2、土壤湿度传感器 1个
3、继电器 1个
4、微型潜水泵 1个
5、杜邦线 若干
土壤湿度传感器输出值在 5V时,空气中AO读取的值最大 1023 ,最小值 0
线路连接请看配图
注:继电器 COM 与 UNO板 GND电源端子用线连接,COM,NO,NC是继电器的触点,是用来控制别的东西的
/**
* Copyright(C), 2018-2038, KenRobot.com
* FileName: 浇花项目.ino
* Author: 啃萝卜
* Create: 2018/08/23
* Modify: 2018/08/23
*/
int relay_0 = 11;
int soilHumidity_0 = A1;
void setup() {
pinMode(relay_0, OUTPUT);
Serial.begin(9600);
pinMode(soilHumidity_0, INPUT);
}
void loop() {
if (analogRead(soilHumidity_0) >= 700) {
digitalWrite(relay_0, LOW);
Serial.println(analogRead(soilHumidity_0));
delay(2000);
} else {
digitalWrite(relay_0, HIGH);
Serial.println("主人,我不渴啦!");
Serial.println(analogRead(soilHumidity_0));
delay(2000);
}
}
还有就是你这逻辑有问题啊!
analogRead(soilHumidity_0) >= 700)
湿度大于700,电机旋转,这不是浇花啊,这是抽水啊!应该是小于才行!:P
不推荐直接使用这种泥土传感器到实际使用环境,之前用了3个月发现腐蚀了 createskyblue 发表于 2018-8-23 14:22
不推荐直接使用这种泥土传感器到实际使用环境,之前用了3个月发现腐蚀了
可以尝试 新款 电容式 防腐蚀的土壤传感器,我用的这款是旧版。 void setup() {
pinMode(relay_0, OUTPUT);
Serial.begin(9600);
pinMode(soilHumidity_0, INPUT);
我问一下,pinMode(soilHumidity_0, INPUT);这行代码,不太明白。你这个湿度检测脚应该是接到了模拟输入A1上的。模拟还需要定义INPUT吗?只有数字脚才能这样定义吧,模拟脚的数字直接调用函数读就可以了!有空请回复一下!:) 本帖最后由 mogui 于 2018-8-25 08:45 编辑
宇之枫海云 发表于 2018-8-24 11:19
void setup() {
pinMode(relay_0, OUTPUT);
Serial.begin(9600);
开发工具我用的是啃萝卜,有可能是我在测试时用的数字针脚导致的,改天我具体研究下 本帖最后由 mogui 于 2018-8-25 08:46 编辑
宇之枫海云 发表于 2018-8-24 14:48
还有就是你这逻辑有问题啊!
analogRead(soilHumidity_0) >= 700)
湿度大于700,电机旋转,这不是浇花啊, ...
我的设想是水泵放在水盆中,当土壤湿度小于30%左右(干旱值大于等于700)时,水泵抽水通过软管放入花盆中进行浇花。 土壤湿度值,湿度百分比,干旱百分比
1023,0%,100%
700,31%,69%
512,50%,50%
0,100%,0%
这是我的理解,不知可有更好的方法 :victory::handshake嗯!我照抄了你的代码,发现大于的话,没有动作!改成小于后就完全正常了!再次感谢! 宇之枫海云 发表于 2018-8-27 10:22
嗯!我照抄了你的代码,发现大于的话,没有动作!改成小于后就完全正常了!再次感谢! ...
你用的是 DO 还是 AO ?我试了一下,DO的是需要修改,AO的不用。我用的是 AO口。
页:
[1]
2