====== 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