Benutzer-Werkzeuge

Webseiten-Werkzeuge


bewaesserungsautomat:programmversion_0.2_alpha

Bewässerungsautomat Programmversion 0.2 alpha

Achtung!

Es liegt eine neuere Programmversion vor: Bewässerungsautomat Programmversion 0.3 alpha

Gegenüber Programmversion 0.1 alpha wurden insbesondere zwei Änderungen vorgenommen:

  • Es wird kein LCD verwendet.
  • Es werden Neopixel anstatt LEDs verwendet.

Anmerkungen:

  • Das Programm lässt sich kompilieren, wurde aber noch nicht getestet.
  • Der Analog-Pin A0 ist nur dem Prinzip nach eingebunden. Die Messwerte werden sicherlich nicht zwischen 0 und 100 liegen.

Hilfreicher Link für die vorgenommenen Änderungen:

Was noch zu tun ist:

  • Der DHT22 könnte eingebunden werden. Der Sensor misst die Temperatur und Luftfeuchte. Daraus ließe sich der Taupunkt berechnen. Dieser Wert wäre interessant, weil Kondenswasser im Gehäuse gefährlich wäre.
  • Damit die Neopixel blinken oder pulsieren können, müsste das Programm ohne den delay-Befehl auskommen.
  • Der Wasserstandssensor für den Vorratstank muss noch „richtig“ eingebunden werden.
  • Die Helligkeit der Neopixel soll vom Umgebungslicht abhängig sein.
  • Bluetooth
// Unterschiede zu Programmversion 0.1:
//   - kein LCD
//   - Neopixel anstatt LEDs

// include the library code:
#include <Adafruit_NeoPixel.h>

// Definiert die Pins für die NeoPixels
int neoPin1 = 12;            // Neopixel an Blumenkastenensor 1
int neoPin2 = 11;            // Neopixel an Blumenkastenensor 2
int neoPin3 = 10;            // Neopixel an Blumenkastenensor 3
int neoPin4 = 9;             // Neopixel an Blumenkastenensor 4
int neoPin5 = 8;             // Neopixelring am Wasserstandssensor im Vorratsbehälter
int neoPin6 = 7;             // Neopixelring im Gehäusedeckel

// Definiert die NeoPixels
Adafruit_NeoPixel neopix1 = Adafruit_NeoPixel(1, neoPin1, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel neopix2 = Adafruit_NeoPixel(1, neoPin2, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel neopix3 = Adafruit_NeoPixel(1, neoPin3, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel neopix4 = Adafruit_NeoPixel(1, neoPin4, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel neopix5 = Adafruit_NeoPixel(12, neoPin5, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel neopix6 = Adafruit_NeoPixel(24, neoPin6, NEO_RGBW + NEO_KHZ800);

// 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 = A0;

// 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 NeoPixel-Pins
  pinMode(neoPin1, OUTPUT);
  pinMode(neoPin2, OUTPUT);
  pinMode(neoPin3, OUTPUT);
  pinMode(neoPin4, OUTPUT);
  pinMode(neoPin5, OUTPUT);
  pinMode(neoPin6, 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);

  // Initialisiere den Wasserstandsanzeiger 
  pinMode(level, INPUT);

  // Initialisiere alle NeoPixels
  neopix1.begin();
  neopix1.show(); // Initialize all pixels to 'off'
  neopix2.begin();
  neopix2.show(); // Initialize all pixels to 'off'
  neopix3.begin();
  neopix3.show(); // Initialize all pixels to 'off'
  neopix4.begin();
  neopix4.show(); // Initialize all pixels to 'off'
  neopix5.begin();
  neopix5.show(); // Initialize all pixels to 'off'
  neopix6.begin();
  neopix6.show(); // Initialize all pixels to 'off'
  
  // Debugging output
  Serial.begin(9600);
 
}

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 und dem Analog-Pin an die serielle Schnittstelle
  Serial.println(hall1);
  Serial.println(hall2);
  Serial.println(hall3);
  Serial.println(hall4);
  Serial.println(level);

  // 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);


  // Ansteuerung der NeoPixels in den Blumenkastensensoren
  if(hall1 = LOW) neopix1.setPixelColor(0, 0, 127, 0, 127); //grün-weiß, wenn Wasserstand ok
  if(hall1 = HIGH) neopix1.setPixelColor(0, 255, 0, 0, 0);  //rot, wenn Wasserstand niedrig
  neopix1.show();
  
  if(hall2 = LOW) neopix2.setPixelColor(0, 0, 127, 0, 127); //grün-weiß, wenn Wasserstand ok
  if(hall2 = HIGH) neopix2.setPixelColor(0, 255, 0, 0, 0);  //rot, wenn Wasserstand niedrig
  neopix2.show();
  
  if(hall3 = LOW) neopix3.setPixelColor(0, 0, 127, 0, 127); //grün-weiß, wenn Wasserstand ok
  if(hall3 = HIGH) neopix3.setPixelColor(0, 255, 0, 0, 0);  //rot, wenn Wasserstand niedrig
  neopix3.show();
  
  if(hall4 = LOW) neopix4.setPixelColor(0, 0, 127, 0, 127); //grün-weiß, wenn Wasserstand ok
  if(hall4 = HIGH) neopix4.setPixelColor(0, 255, 0, 0, 0);  //rot, wenn Wasserstand niedrig
  neopix4.show();


  //Ansteuerung des NeoPixel-Rings im Wasserstandssensor für den Vorratsbehälter

  neopix5.setPixelColor(0, 0, 0, 0, 127);
  neopix5.setPixelColor(11, 0, 0, 0, 127);
 
    if (level >= 90) {
      neopix5.setPixelColor(10, 0, 127, 0, 0);
    } else if (level < 90) {
      neopix5.setPixelColor(10, 0, 0, 0, 0);
    }
    
    if (level >= 80) {
      neopix5.setPixelColor(9, 0, 127, 0, 0);
    } else if (level < 80) {
      neopix5.setPixelColor(9, 0, 0, 0, 0);
    }
    
    if (level >= 70) {
      neopix5.setPixelColor(8, 0, 127, 0, 0);
    } else if (level < 70) {
      neopix5.setPixelColor(8, 0, 0, 0, 0);
    }
    
    if (level >= 60) {
      neopix5.setPixelColor(7, 0, 127, 0, 0);
    } else if (level < 60) {
      neopix5.setPixelColor(7, 0, 0, 0, 0);
    }
    
    if (level >= 50) {
      neopix5.setPixelColor(6, 64, 64, 0, 0);
    } else if (level < 50) {
      neopix5.setPixelColor(6, 0, 0, 0, 0);
    }
    
    if (level >= 40) {
      neopix5.setPixelColor(5, 64, 64, 0, 0);
    } else if (level < 40) {
      neopix5.setPixelColor(5, 0, 0, 0, 0);
    }
    
    if (level >= 30) {
      neopix5.setPixelColor(4, 64, 64, 0, 0);
    } else if (level < 30) {
      neopix5.setPixelColor(4, 0, 0, 0, 0);
    }
    
    if (level >= 20) {
      neopix5.setPixelColor(3, 127, 0, 0, 0);
    } else if (level < 20) {
      neopix5.setPixelColor(3, 0, 0, 0, 0);
    }
    
    if (level >= 10) {
      neopix5.setPixelColor(2, 127, 0, 0, 0);
    } else if (level <10) {
      neopix5.setPixelColor(2, 0, 0, 0, 0);
    }
    
    neopix5.show();
    
    
  delay(1000);                    // 1 Sek Pause
}

Tags: #Arduino #Bewässerungsautomat #Code

bewaesserungsautomat/programmversion_0.2_alpha.txt · Zuletzt geändert: 18.05.2023 12:15 von 127.0.0.1