bewaesserungsautomat:programmversion_0.1_alpha
Bewässerungsautomat Programmversion 0.1 alpha
Achtung!
Es liegt eine neuere Programmversion vor: Bewässerungsautomat Programmversion 0.2 alpha
Das Programm habe ich für meinen Arduino Bewässerungsautomat geschrieben. Das Programm lässt sich kompilieren, wurde aber nicht getestet. So ungefähr sollte es jedoch funktionieren.
Es liegt mittlerweile die Programmversion 0.2 alpha vor.
// include the library code:
#include <Wire.h>
#include <Adafruit_RGBLCDShield.h>
#include <utility/Adafruit_MCP23017.h>
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();
// Definiert die Farben des LCD
#define RED 0x1
#define YELLOW 0x3
#define GREEN 0x2
#define TEAL 0x6
#define BLUE 0x4
#define VIOLET 0x5
#define WHITE 0x7
// Definiert die Pins für Status-LEDs
int ledPin1 = 8; // LED an Sensor 1
int ledPin2 = 9; // LED an Sensor 2
int ledPin3 = 10; // LED an Sensor 3
int ledPin4 = 11; // LED an Sensor 4
int ledPin5 = 12; // LED an Sensor 5 (Wasserstand Vorratsbehälter)
// Definiert die Pins für die Hall-Sensoren
int hallPin1 = 31; // Hall-Sensor 1
int hallPin2 = 33; // Hall-Sensor 2
int hallPin3 = 35; // Hall-Sensor 3
int hallPin4 = 37; // Hall-Sensor 4
// Definiert den Pin für den Level-Sensor im Vorratsbehälter
int levelPin = 0;
// Definiert die Pins für die Pumpenrelais
int relPin1 = 30; // Pumpe 1
int relPin2 = 32; // Pumpe 2
int relPin3 = 34; // Pumpe 3
int relPin4 = 36; // Pumpe 4
// Definiert die Variablen
int hall1 = 0;
int hall2 = 0;
int hall3 = 0;
int hall4 = 0;
int level = 0;
void setup() {
// Initialisiere die LED-Pins als output
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
// Initialisiere die Hall-Pins als Input. Außerdem werden die internen Pullup-Widerstände aktiviert.
// Liegt an dem Hall-Sensor ein Magnetfeld an, ist der Input LOW, ansonsten ist der Input HIGH.
pinMode(hallPin1, INPUT_PULLUP);
pinMode(hallPin2, INPUT_PULLUP);
pinMode(hallPin3, INPUT_PULLUP);
pinMode(hallPin4, INPUT_PULLUP);
// Initialisiere die Relais-Pins
pinMode(relPin1, OUTPUT);
pinMode(relPin2, OUTPUT);
pinMode(relPin3, OUTPUT);
pinMode(relPin4, OUTPUT);
// Initialisiert den Wasserstandsanzeiger
// Debugging output
Serial.begin(9600);
// Einrichten des LCD und Anzeige der Versionsnummer
lcd.begin(16, 2);
lcd.setBacklight(WHITE); // Stellt die Farbe der Hintergrundbeleuchtung ein
lcd.setCursor(0, 0);
lcd.print("Autowasser"); // Zeigt den Programmname an
lcd.setCursor(0, 1);
lcd.print("V 0.1 alpha"); // Zeigt eine Versionsnummer an
delay(1000);
}
void loop() {
// Auslesen der digitalen Eingänge
hall1 = digitalRead(hallPin1);
hall2 = digitalRead(hallPin2);
hall3 = digitalRead(hallPin3);
hall4 = digitalRead(hallPin4);
level = analogRead(levelPin);
// Ausgabe der Eingangssignale an den Hall-Pins an die serielle Schnittstelle
Serial.println(hall1);
Serial.println(hall2);
Serial.println(hall3);
Serial.println(hall4);
Serial.println(level);
// Anzeige des Wasserstands im Vorratsbehälter auf dem LCD
// Die angegebenen Messwerte sind Platzhalter. Die richtigen Werte müssen noch empirisch ermittelt werden.
lcd.setCursor(0, 0);
lcd.print("Wasserstand");
lcd.setCursor(0, 1);
if(level < 100) lcd.print("100%");
if(level < 90) lcd.print("90%");
if(level < 80) lcd.print("80%");
if(level < 70) lcd.print("7%");
if(level < 60) lcd.print("60%");
if(level < 50) lcd.print("50%");
if(level < 40) lcd.print("40%");
if(level < 30) lcd.print("30%");
if(level < 20) lcd.print("20%");
else{lcd.print("10%");}
// Ändert die Hintergrundbeleuchtung des LCD
if(level < 50) lcd.setBacklight(RED);
if(level < 90) lcd.setBacklight(YELLOW);
else{lcd.setBacklight(GREEN);}
// Ansteuerung der Pumpen.
// Ist der Wasserstand niedrig, liegt kein Magnetfeld am Hall-Sensor an (Input = LOW).
// Die entsprechende Pumpe wird aktiviert, bis der Soll-Wasserstand erreicht ist (Input = HIGH),
// - sofern keine andere Pumpe läuft und
// - sofern Wasser im Vorratsbehälter ist.
if(hall1 = LOW && level > 5 && digitalRead(relPin2) == HIGH && digitalRead(relPin3) == HIGH && digitalRead(relPin4) == HIGH) digitalWrite(relPin1, LOW);
if(hall1 = HIGH) digitalWrite(relPin1, HIGH);
if(hall2 = LOW && level > 5 && digitalRead(relPin1) == HIGH && digitalRead(relPin3) == HIGH && digitalRead(relPin4) == HIGH) digitalWrite(relPin2, LOW);
if(hall2 = HIGH) digitalWrite(relPin2, HIGH);
if(hall3 = LOW && level > 5 && digitalRead(relPin1) == HIGH && digitalRead(relPin2) == HIGH && digitalRead(relPin4) == HIGH) digitalWrite(relPin3, LOW);
if(hall3 = HIGH) digitalWrite(relPin3, HIGH);
if(hall4 = LOW && level > 5 && digitalRead(relPin1) == HIGH && digitalRead(relPin2) == HIGH && digitalRead(relPin3) == HIGH) digitalWrite(relPin4, LOW);
if(hall4 = HIGH) digitalWrite(relPin4, HIGH);
delay(1000); // 1 Sek Pause
}
Tags: #Arduino #Bewässerungsautomat #Code
bewaesserungsautomat/programmversion_0.1_alpha.txt · Zuletzt geändert: 18.05.2023 12:15 von 127.0.0.1