Profil-Führungswalzen


Google-Suche auf MEINE-SCHALTUNG.de :





Dauerkalender


Wasserstandmessung
(AD-Wandler, Arduino)


Das Modul für die Wasserstanderkennung, das in dieser Schaltung mitwirkt, besteht aus mehreren Leiterbahnen und einer auf einem Transistor basierenden Verstärkerschaltung. Beim Eintauchen ins Wasser verändert sich der Widerstand der Leiterbahnen. Die Veränderung des Gesamtwiderstandes des Moduls hängt von dem aktuellen Wasserniveau ab. Am Ausgang des Moduls erhalten wir dann ein analoges Signal, das den aktuellen Wasserpegel widerspiegelt.
Das Signal könnte man direkt an einen analogen Eingang des Arduino anschließen. In dem Programm würde dann die endgültige Auswertung des Signals erfolgen. In diesem Fall kommt noch ein Modul ins Spiel. Der Ausgang des Wassermoduls wird an einen AD-Wandler angeschlossen. Der Wandler (ADS1115) liefert als Ergebnis eine Zahl zwischen 0 und 32767. Dieser Wert wird über I2C-Bus ausgelesen.

Wasserstandsensor

Der Analog-Digital-Wandler ADS1115 verfügt über vier analoge Eingänge. Somit wäre es möglich, über das Modul vier Sensoren, die analoge Signale liefern, auszuwerten. Darüber hinaus kann man auf dem Modul vier unterschiedliche I2C-Bus-Adressen einstellen. Das erhöht die Anzahl der Sensoren, die auf diesem Wege auswertbar wären, noch weiter.

ADS1115

ADS1115


Um die Ergebnisse der Messungen anzeigen zu können, wird die Schaltung mit einem LCD-Display ergänzt (16x2). Das Display kommuniziert mit Arduino über zwei Leitungen. Das ist dank des Display-Treibers FC-113 möglich. Der Treiber kann an das Display angelötet werden.

LCD-Display 16x2

LCD-Display 16x2

LCD-Display 16x2 Interface

LCD-Treiber (I2C-Schnittstelle) FC-113

LCD 16x2


Arduino Nano

Arduino Nano

Arduino

Außer den vier Hauptkomponenten, dem Wasserstandsensor, AD-Wandler, LCD mit dem Treiber und Arduino, enthält die Schaltung keine weiteren Bestandteile. Sie kann schnell aufgebaut und getestet werden. Bei Verwendung anderer Komponenten ist darauf zu achten, dass die Spannungen angepasst sind. Hier können alle Teile der Schaltung mit 5 V problemlos arbeiten.

Schaltplan

Schaltplan

Schaltplan

Testschaltung

Testschaltung

Testschaltung

Bevor man mit Programmierung beginnt, muss man sich den I2C-Bus etwa genauer anschauen. In der Schaltung treten zwei Komponenten, die an den Bus angeschlossen sind, auf. Das sind das Display und der AD-Wandler. Damit der Mikrocontroller erkennen kann, mit welchem Schaltungsteilnehmer er gerade kommuniziert, müssen diese eindeutig gekennzeichnet werden. Dies geschieht mithilfe der Adressierung. Jeder Bus-Teilnehmer bekommt eigene Adresse. So können alle an Bus angeschlossenen Komponenten eindeutig identifiziert werden. Im Auslieferungszustand sind die busfähigen Geräte bereits vordefiniert. Tauch bei zwei Komponenten die gleiche Bus-Adresse auf, muss mindestens eine Adresse geändert werden. In diesem Fall haben wir zwei unterschiedliche Adressen. Die Displayadresse lautet 0x27, die vom Wandler 0x48. Damit sind hier keine weiteren Aktionen erforderlich.

In dem Programm müssen die von dem Sensor gelieferten Signale in den Wasserstand (gemessen in mm) umgewandelt werden. Die Schwierigkeit bei der Aufgabe besteht darin, dass die Abhängigkeiten nicht linear verlaufen. Zusätzlich muss an dieser Stelle erwähnt werden, dass es sich bei dem hier angewandten Wasserstandsensor keinesfalls um einen hochqualitativen Präzisionssensor handelt. So muss man eventuelle Erwartungen an exakte Ergebnisse runterschrauben. Praktische Messungen ergaben folgende Kurve, die das Verhältnis der Messwerte zu dem Wasserspiegel veranschaulicht:

Wasserpegel Diagramm

Wasserpegel Diagramm

Da hohe Genauigkeit in dem Versuch nicht gefragt ist, wird anhand dieses Diagramms eine Wertetabelle, die näherungsweise jedem Wasserpegel (+/- 1 mm) einen Messwert zuordnet, erstellt. Diese Tabelle dient dann der Ermittlung des aktuellen Wasserpegels. Ein anderer Weg wäre, für die oben erstellte Kurve eine feste Formel zu ermitteln.
Die Werte werden dann in Programm in einer Liste untergebracht.

Sensor im Wasserbehälter

Sensor im Wasserbehälter

Das Programm

In dem Programm werden zwei Bibliotheken benötigt. Sie müssen vorinstalliert werden, damit das Programm funktioniert. Die Bibliothek „LiquidCrystal_I2C.h“ erledigt die Aufgaben, die im Zusammenhang mit dem Display anfallen. Mit „Adafruit_ADS1015.h“ wird Kontakt mit dem ADS115-Wandler aufgenommen.
Die empirisch ermittelten Werte sind in der Variable „Diagramm_Wert“ gespeichert. Einmal pro Sekunde wird der Wert des Sensors abgefragt und mit diesen Werten verglichen.

// *******************************************************************************
// Wasserstand-Messung
// mit Wassersensor und AD-Wandler ADS1115
// Arduino Nano, IDE 1.8.13
// *******************************************************************************

#include <Wire.h>
#include <Adafruit_ADS1015.h>                              // ADS1015/1115 Bibliothek
Adafruit_ADS1115 ads;                                      // Adresse 0x48
int16_t adc0;

#include <LiquidCrystal_I2C.h>                             // Display Bibliothek 
LiquidCrystal_I2C lcd(0x27,16,2);                          // Display 16x2, Adresse 0x27

int Diagramm_Wert [41] = {2000, 4500, 5900, 6500, 6900,    // Diagramm Werte
                          7200, 7400, 7600, 7750, 7900,
                          8000, 8100, 8200, 8300, 8400,
                          8500, 8600, 8670, 8750, 8830,
                          8900, 8970, 9030, 9100, 9180,
                          9250, 9310, 9360, 9410, 9450,
                          9500, 9550, 9600, 9640, 9690,
                          9800, 9740, 9810, 9840, 9850,
                          9860 };

void setup() {
    lcd.init();                                            // Display initialisieren 
    lcd.backlight();                                       // Hintergrundbeleuchtung
    ads.begin();
}


void loop() {
    lcd.clear();
    lcd.setCursor(2, 0);                                  // Start Anzeige
    lcd.print("Wasserstand");
    adc0 = ads.readADC_SingleEnded(0);                    // Sensor auslesen

    String Text = "zu niedrig";
    for (int i=0; i<40; i++) {
        if (adc0 >= Diagramm_Wert [i] ) {
            Text = "  " + String(i+1) + " mm";
        }
    }
    if (adc0 >= Diagramm_Wert [40] ) {
        Text =" zu hoch";
    }   
    lcd.setCursor(2, 1);                                  // IST - Anzeige
    lcd.print(Text);
    delay(1000);
}
// ***************************************************************************************     


Kurzvideo

Kurzvideo: Wasserstand-Messung


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz