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