====== Bewässerungsautomat Programmversion 0.1 alpha ======
Es liegt eine neuere Programmversion vor: [[bewaesserungsautomat:programmversion_0.2_alpha|Bewässerungsautomat Programmversion 0.2 alpha]]
Das Programm habe ich für meinen [[[[arduino:bewaesserungsautomat|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
#include
#include
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