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