Benutzer-Werkzeuge

Webseiten-Werkzeuge


bewaesserungsautomat:programmversion_0.1_alpha

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
bewaesserungsautomat:programmversion_0.1_alpha [27.05.2016 13:17] Frickelpietbewaesserungsautomat:programmversion_0.1_alpha [18.05.2023 12:15] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
-====== Programmversion 0.1 alpha ====== +====== Bewässerungsautomat Programmversion 0.1 alpha ====== 
-Das Programm habe ich für meinen [[[[arduino:bewaesserungsautomat|Arduino Bewässerungsautomat]] geschrieben. Das Programm lässt sich kompilieren, wurde aber nicht getestet. Gegenüber der Programmversion 0.2 alpha werden normale LEDs angesteuert. (Bei [[Programmversion 0.2 alpha]] habe ich Neopixel eingebunden.) Das Programm bindet außerdem ein LCD ein. +<box 100% round red|**Achtung!**>Es liegt eine neuere Programmversion vor: [[bewaesserungsautomat:programmversion_0.2_alpha|Bewässerungsautomat Programmversion 0.2 alpha]]</box>
  
 +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. 
 +
 +<code>
 +// 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
 +}
 +</code>
 Tags: #Arduino #Bewässerungsautomat #Code Tags: #Arduino #Bewässerungsautomat #Code
bewaesserungsautomat/programmversion_0.1_alpha.1464347835.txt.gz · Zuletzt geändert: 18.05.2023 09:06 (Externe Bearbeitung)