夏季,您的花园或后院需要经常浇水,尤其是在澳大利亚。为了确保它定期发生,我决定设计这样一个浇水系统。
该项目最多由四个阀门组成,最多可以控制 3 个洒水器或其他类型的浇水装置。它使用一个额外的阀门来更好地抵抗阀门故障,并且如果您决定使用水流量传感器,它还会执行泄漏检查。
这三个浇水装置最多可以浇灌您花园的 3 个不同区域。它们被称为区域 1、区域 2 和区域 3,您可以分别配置它们的持续时间(以分钟为单位)以及每天开始浇水的时间。
有两个按钮和一个彩色 LED 来控制/显示设备的状态。红色按钮用于显示和切换模式以及立即关闭浇水。黑色按钮开始浇水,如果它已经在运行,则切换到下一个区域。
当您在空闲模式下按下红色按钮时,它将首先在彩色 LED 上显示当前模式,然后在模式之间切换,如下所示:
如果您和客人坐在后院却忘记关掉它怎么办?出于这个原因,我添加了一个警告激活浇水装置。
当开始浇水时,会发生以下情况:
在此期间任何时候按红色按钮,浇水将立即停止,直到下一次预定的浇水才开始。如果按下黑色按钮,它将切换到下一个区域。
为了安装这个项目的草图,你显然需要在你的 PC 上安装 Arduino IDE。组装部分中的草图和一些测试草图也需要在 Arduino IDE 中安装下面列出的库。
推荐的安装方法如下(适用于除 DS3232RTC 之外的所有设备)。
所需库:
电气部分主要由Arduino Uno、DS3231 RTC、MOSFET4板、彩色LED板和两个按钮组成。
如果您对 Arduino 有经验,请跳过以下章节并根据上图进行组装。
将手表电池放在 DS3231 RTC 板上并按照概览图所示进行连接。连接如下:
将以下草图上传到 Arduino Uno 以检查 RTC 芯片是否连接正确。
#include // http://github.com/JChristensen/DS3232RTC
#include // https://github.com/GreyGnome/EnableInterrupt
#define SLEEP_MODE SLEEP_MODE_IDLE
#include // https://github.com/PRosenb/DeepSleepScheduler
#define RTC_INT_PIN 8
boolean alarmReceived = false;
void setup() {
Serial.begin(9600);
Serial.println(F("Startup ------------"));
initRtc();
setSyncProvider(RTC.get);
if (timeStatus() != timeSet) {
Serial.println(F("RTC not found"));
} else {
Serial.println(F("RTC found"));
Serial.println(F("Testing interrupt connection.."));
time_t rtcTime = now();
unsigned int hours = hour(rtcTime);
unsigned int minutes = minute(rtcTime);
unsigned int seconds = second(rtcTime);
// trigger alarm in 5 seconds
seconds += 5;
if (seconds >= 60) {
seconds -= 60;
minutes++;
}
if (minutes >= 60) {
minutes -= 60;
hours++;
}
if (hours >= 24) {
hours -= 24;
}
Serial.print(F("Trigger alarm at RTC time "));
Serial.print(hours);
Serial.print(F(":"));
Serial.print(minutes);
Serial.print(F(":"));
Serial.println(seconds);
RTC.setAlarm(ALM1_MATCH_MINUTES, seconds, minutes, hours, 0);
scheduler.scheduleDelayed(checkIfReceived, 10000);
}
}
void loop() {
scheduler.execute();
}
inline void initRtc() {
RTC.alarmInterrupt(ALARM_1, true);
RTC.alarmInterrupt(ALARM_2, false);
// reset alarms if active
RTC.alarm(ALARM_1);
RTC.alarm(ALARM_2);
delay(1000);
pinMode(RTC_INT_PIN, INPUT_PULLUP);
enableInterrupt(RTC_INT_PIN, isrRtc, FALLING);
}
void checkIfReceived() {
if (!alarmReceived) {
Serial.println(F("Alarm not received, interrupt wire seams not okay."));
}
}
void isrRtc() {
scheduler.schedule(rtcScheduled);
}
void rtcScheduled() {
alarmReceived = true;
Serial.println(F("Interrupt received, wire looks fine."));
if (RTC.alarm(ALARM_1)) {
Serial.println(F("Alarm received, connection of RTC looks fine."));
} else {
Serial.println(F("Alarm not received, something looks wrong with the RTC."));
}
}
在 Arduino IDE 中单击菜单工具->串行监视器并检查输出。
该项目中使用的 RGB 彩色 LED 板本身包含限流电阻(见上图)。请确保您使用的那个也是这种情况,以防止损坏。如果没有,则需要放置单独的电阻器。
有不同的 RGB 颜色 LED。我在这个项目中使用的那个有一个标有“GND”的 PIN。如果您使用一个带有标记为 + 的 PIN,则需要相应地调整测试草图和生产草图(参见 Constants.h 中的 COLOR_LED_INVERTED)。
如概览图所示连接彩色 LED。连接如下:
将以下草图上传到 Arduino Uno 以检查彩色 LED 是否连接正确。
#define MODE_COLOR_GREEN_PIN A0
#define MODE_COLOR_RED_PIN A1
#define MODE_COLOR_BLUE_PIN A2
void setup() {
Serial.begin(9600);
pinMode(MODE_COLOR_GREEN_PIN, OUTPUT);
digitalWrite(MODE_COLOR_GREEN_PIN, LOW);
pinMode(MODE_COLOR_RED_PIN, OUTPUT);
digitalWrite(MODE_COLOR_RED_PIN, LOW);
pinMode(MODE_COLOR_BLUE_PIN, OUTPUT);
digitalWrite(MODE_COLOR_BLUE_PIN, LOW);
}
void loop() {
Serial.println(F("green"));
digitalWrite(MODE_COLOR_GREEN_PIN, HIGH);
delay(1000);
digitalWrite(MODE_COLOR_GREEN_PIN, LOW);
Serial.println(F("red"));
digitalWrite(MODE_COLOR_RED_PIN, HIGH);
delay(1000);
digitalWrite(MODE_COLOR_RED_PIN, LOW);
Serial.println(F("blue"));
digitalWrite(MODE_COLOR_BLUE_PIN, HIGH);
delay(1000);
digitalWrite(MODE_COLOR_BLUE_PIN, LOW);
}
在 Arduino IDE 中单击菜单工具->串行监视器并观察 LED 的颜色是否与控制台上打印的颜色匹配。
该项目中使用的MOSFET4板包含 4 个 IRF540 MOSFET,包括通过 Arduino PIN 控制它们的所有必要部件。您还可以使用其他带有单个 IRF540 的 MOSFET 或电路板。
如概览图所示连接 MOSFET4 板。引脚 S 是左侧引脚,引脚“-”是输入连接器中的右侧引脚,如上所示(MOSFET4 输入)。中间的 PIN 是 + 我们在这个项目中不需要的。连接如下。
将以下草图上传到 Arduino Uno 以检查 MOSFET4 板是否连接正确。
#define VALVE1_PIN 4
#define VALVE2_PIN 5
#define VALVE3_PIN 6
#define VALVE4_PIN 7
void setup() {
Serial.begin(9600);
pinMode(VALVE1_PIN, OUTPUT);
pinMode(VALVE2_PIN, OUTPUT);
pinMode(VALVE3_PIN, OUTPUT);
pinMode(VALVE4_PIN, OUTPUT);
}
void loop() {
Serial.println(F("Valve 1"));
digitalWrite(VALVE1_PIN, HIGH);
delay(1000);
digitalWrite(VALVE1_PIN, LOW);
Serial.println(F("Valve 2"));
digitalWrite(VALVE2_PIN, HIGH);
delay(1000);
digitalWrite(VALVE2_PIN, LOW);
Serial.println(F("Valve 3"));
digitalWrite(VALVE3_PIN, HIGH);
delay(1000);
digitalWrite(VALVE3_PIN, LOW);
Serial.println(F("Valve 4"));
digitalWrite(VALVE4_PIN, HIGH);
delay(1000);
digitalWrite(VALVE4_PIN, LOW);
}
您应该看到 MOSFET4 板上的 4 个 LED 一个接一个地亮起。
如概览图所示连接黑色和红色按钮。连接如下:
将以下草图上传到 Arduino Uno 以检查按钮是否正确连接。
#include // https://github.com/GreyGnome/EnableInterrupt
#define START_AUTOMATIC_PIN 10
#define MODE_PIN 11
void setup() {
Serial.begin(9600);
pinMode(START_AUTOMATIC_PIN, INPUT_PULLUP);
enableInterrupt(START_AUTOMATIC_PIN, isrStartAutomatic, FALLING);
pinMode(MODE_PIN, INPUT_PULLUP);
enableInterrupt(MODE_PIN, isrMode, FALLING);
}
void loop() {
// empty
}
void isrStartAutomatic() {
// only done in test, do not println in interrupt in production sketch
Serial.println(F("black button"));
}
void isrMode() {
// only done in test, do not println in interrupt in production sketch
Serial.println(F("red button"));
}
在 Arduino IDE 中,单击 Menu Tools->Serial Monitor 并观察在单击相应按钮时是否在控制台上看到“黑色按钮”和“红色按钮”。
最后连接水流传感器插头和 12V 电源,但不要连接橙色线。
该项目的机械部分由连接器、水流传感器、阀门和出口组成。建议将所有部件连接到至少第一个带有螺纹而不是快速连接器的阀门。这意味着它的机械组装方式如下。
顺序如下:
连接阀门/水流量传感器:
将电气部件安装在适当的盒子中。我推荐一个正面透明的,这样可以看到内部和彩色 LED。
请仔细检查盒子是否防水。我使用了一个以防水形式出售的盒子,但实际上并非如此。正如你所想象的,系统开始表现得很奇怪,所以我在前面放了一个塑料箔,以更好地保护它免受雨淋。
电气和机械组装完成后,您可以对其进行整体测试。
首先移除概览图像上的橙色连接,以便您可以使用 Arduino Uno 的 USB 电缆。使用 USB 时,不要通过其 Vin 为 Arduino Uno 供电,这很重要,否则 PC 的 USB 端口可能会出现问题。
配置
第一次测试
完成设置
下面你可以一些简短的视频来解释如何操作浇水系统。
第一个视频展示了如何查看浇水系统处于哪种模式。在此视频中,它以绿色亮起,表示“模式开启”。
第二个视频演示了如何在“模式开启”、“模式关闭一次”和“模式关闭”三种模式之间切换。
以下视频展示了如何手动开始浇水、在三个区域之间切换并再次关闭浇水。请注意,LED 最后以绿色亮起,表示系统当前处于“模式开启”状态。
..这就是你的邻居的样子;-)。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !