Benutzer-Werkzeuge

Webseiten-Werkzeuge


arduino:wasserstandsanzeiger

Arduino Wasserstandsanzeiger

Nachdem meine im letzten Jahr gebastelten analogen Wasserstandsanzeiger nicht lange funktioniert haben und ich von der Fehlersuche bei meinem Hexagon V2 noch ein Arduino Due übrig habe, gehe ich die Angelegenheit in diesem Jahr mikroprozessorgesteuert an.

Um den Wasserstand zu messen werden zwei analoge Sensoren verwendet, die ich bei Ebay erstanden habe. Der Arduino Due hat 12 analoge Eingänge, theoretisch ließen sich also zehn weitere Sensoren anschließen. Die Ausgabe erfolgt auf ein LC-Display.

Code

Das Programm zeigt beim Start die Versionsnummer an. Anschließend werden zwei analoge Eingänge ausgelesen und jeweils in eine Variable geschrieben. Die Werte werden an die serielle Schnittstelle ausgegeben. Auf dem LCD-Display wird der Wasserstand in Worten angezeigt (high, good, low). Abhängig vom Wasserstand wird die Farbe der Hintergrundbeleuchtung des Displays verändert.

Was noch zu erledigen wäre:

  • Die Interpretation der Messwerte an den analogen Eingängen muss noch an die Sensoren angepasst werden. (Die sind aber noch unterwegs.)
  • Das LCD flackert jetzt einmal pro Sekunde. Das sieht nicht schön aus. Die Anzeige müsste eigentlich nur gelöscht werden, wenn sie sich geändert hat.
// include the library code:
#include <Wire.h>
#include <Adafruit_RGBLCDShield.h>
#include <utility/Adafruit_MCP23017.h>

Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();

// These #defines make it easy to set the backlight color
#define RED 0x1
#define YELLOW 0x3
#define GREEN 0x2
#define TEAL 0x6
#define BLUE 0x4
#define VIOLET 0x5
#define WHITE 0x7

// Defines the input pins
int analogPin1 = 3;     
int val1 = 0;           // variable to store the value read
int analogPin2 = 4;     
int val2 = 0;           // variable to store the value read


void setup() {
  Serial.begin(9600);                 // Debugging output
  lcd.begin(16, 2);                   // set up the LCD's number of columns and rows
  lcd.setCursor(0, 0);
  lcd.print("WaterLevelMeter");       // prints the progam name to the LCD
  lcd.setCursor(0, 1);
  lcd.print("V 0.1 alpha");     // prints the version number to the LCD
  lcd.setBacklight(WHITE);            // set up the LCD's display color
  delay(1000);                        // 1 Sek Pause
}


void loop() {
  lcd.clear();
  val1 = analogRead(analogPin1);    // read the input pin
  val2 = analogRead(analogPin2);    // read the input pin

  Serial.println("Level 1");       // debug value
  Serial.println(val1);             // debug value
  lcd.setCursor(0, 0);
  lcd.print("Level 1: ");
    if(val1 < 100)
      lcd.print("high");
    if(val1 < 300)
      lcd.print("good");
    else{
      lcd.print("low");
  }  

  Serial.println("Level 2");       // debug value
  Serial.println(val2);             // debug value
  lcd.setCursor(0, 1);
  lcd.print("Level 2: ");
    if(val2 < 100)
      lcd.print("high");
    if(val2 < 300)
      lcd.print("good");
    else{
      lcd.print("low");
  }

  if(val1 < 100 || val2 < 100)
    lcd.setBacklight(GREEN);
  if(val1 < 300 || val2 < 300)
    lcd.setBacklight(YELLOW);
  if(val1 > 301 || val2 > 301)
    lcd.setBacklight(RED);
  
  delay(1000);                    // 1 Sek Pause
  }
  

Tags: #Arduino

arduino/wasserstandsanzeiger.txt · Zuletzt geändert: 18.05.2023 12:15 von 127.0.0.1