帮我写一段arduino控制水泵自动浇水的代码,需要根据土壤湿度传感器的输入判断是否自动启动水泵,加入手动和自动两种控制模式
时间: 2023-06-24 22:06:52 浏览: 209
使用Arduino进行智能灌溉
好的,以下是一个基本的Arduino控制水泵自动浇水的代码示例,它包括手动和自动两种控制模式,并根据土壤湿度传感器的输入判断是否自动启动水泵:
```
// 引入所需库
#include <LiquidCrystal.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// 定义土壤湿度传感器引脚
#define soilMoisturePin A0
// 定义温湿度传感器引脚
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// 定义水泵控制引脚
#define pumpPin 10
// 定义LCD引脚
LiquidCrystal lcd(12, 11, 5, 4, 3, 1);
// 定义一根数据线连接的温度传感器引脚
#define ONE_WIRE_BUS 6
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// 定义水泵状态和控制模式
bool pumpOn = false;
bool autoMode = true;
// 定义手动模式下水泵开关控制函数
void manualControl() {
if (digitalRead(pumpPin) == LOW) {
digitalWrite(pumpPin, HIGH);
pumpOn = true;
} else {
digitalWrite(pumpPin, LOW);
pumpOn = false;
}
}
void setup() {
// 初始化LCD
lcd.begin(16, 2);
lcd.print("Auto Mode: ON");
lcd.setCursor(0, 1);
lcd.print("Soil Moisture:");
// 初始化温湿度传感器
dht.begin();
// 初始化温度传感器
sensors.begin();
// 初始化水泵控制引脚
pinMode(pumpPin, OUTPUT);
// 初始化手动控制按钮引脚
pinMode(7, INPUT_PULLUP);
}
void loop() {
// 读取土壤湿度传感器值
int soilMoisture = analogRead(soilMoisturePin);
// 读取温湿度传感器值
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// 读取温度传感器值
sensors.requestTemperatures();
float temperatureC = sensors.getTempCByIndex(0);
// 判断是否手动控制
if (digitalRead(7) == LOW) {
autoMode = false;
manualControl();
lcd.setCursor(0, 0);
lcd.print("Manual Mode: ");
lcd.setCursor(0, 1);
if (pumpOn) {
lcd.print("Pump: ON ");
} else {
lcd.print("Pump: OFF");
}
} else {
autoMode = true;
// 判断是否需要浇水
if (soilMoisture < 500) {
digitalWrite(pumpPin, HIGH);
pumpOn = true;
} else {
digitalWrite(pumpPin, LOW);
pumpOn = false;
}
lcd.setCursor(0, 0);
lcd.print("Auto Mode: ON ");
lcd.setCursor(0, 1);
lcd.print("Soil Moisture:");
lcd.print(soilMoisture);
lcd.print(" ");
}
// 输出温湿度传感器值
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.print(temperatureC);
lcd.print("C");
lcd.setCursor(9, 0);
lcd.print("Humidity:");
lcd.print(humidity);
lcd.print("%");
// 延时1秒后重新循环
delay(1000);
}
```
这个代码使用了一个土壤湿度传感器、一个温湿度传感器、一根数据线连接的温度传感器和一个水泵。它通过手动控制按钮和自动控制来控制水泵的开关,当土壤湿度低于500时,自动模式下会启动水泵进行浇水。在LCD显示屏上,它会显示当前的温度、湿度、土壤湿度和水泵状态。
阅读全文