Achtung!
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