Aus Raspberry Pi Geek 10/2019

Grundwasserpegel mithilfe des Luftdrucks ermitteln (Seite 3)

Sehen wir uns aber nun das entsprechende Programm aus Listing 2 etwas genauer an. Wie jedes C-Programm importiert es zuerst alle nötigen Bibliotheken. Danach definiert es einige globale Variablen für den Webserver, den Sensor und die minimale Tiefe. Die Variable c dient dazu, die LED blinken zu lassen. Bei jedem Durchlauf von loop() erhöht sich der Zähler um eins. Bei einem ungeraden Wert von c leuchtet die LED, andernfalls erlischt sie.

Die Funktion handleRoot() generiert die HTML-Seite für den Webserver alle zwei Sekunden neu, damit Sie immer aktuelle Messwerte sehen. Die Sensorabfrage erfolgt 30-mal, das Programm ermittelt aus den Messungen den Durchschnitt. Das bügelt Ausreißer bei den Messungen aus.

Die Funktion setup() nimmt einmalige Initialisierungsschritte vor. Sie initialisiert den BMP180, startet den Hotspot und fährt den Webserver mit der Adresse des Hotspots hoch. Um sich leicht von außen mit ihm zu verbinden, enthält der Hotspot auch einen DHCP-Server. Das WLAN des Sensors arbeitet ohne Passwort. Um im Fehlerfall zu wissen, wo es klemmt, gibt die serielle Konsole des ESP8266 einige Statusinformationen aus.

Die kontinuierlich ausgeführte loop()-Funktion fragt den Sensor ab und speichert den Minimalwert in der Variablen minAltitude. Um das Programm in den ESP8266 zu laden, gehen Sie wie beim Testprogramm vor.

Listing 2

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
ESP8266WebServer server(80);
Adafruit_BMP085 bmp;
double minAltitude = 9999;
int c=0;
void handleRoot() {
  double total;
  int i;
  String html="<HTML><HEAD><meta http-equiv='refresh' content='2' /></HEAD>";
  html=html+"<BODY><CENTER><BR><FONT size=9>Meter &uuml;ber Meeresspiegel:<BR>";
  total=total+bmp.readAltitude();
  for(i=1;i<30;i++){
    total=total+bmp.readAltitude();delay(50);
  }
  total=total/30;
  html=html+total;
  html=html+"<BR>";
  html=html+"Minimaler Messwert:<BR>";
  html=html+minAltitude;
  html=html+"</FONT></CENTER></BODY></HTML>";
  server.send(200, "text/html", html);
}
void setup() {
  delay(1000);
  Serial.begin(115200);
  Serial.println();
  if (!bmp.begin()) { Serial.println("Could not connect to Sensor!"); }
  pinMode(14, OUTPUT);
  WiFi.softAP("Sensor");
  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
  server.on("/", handleRoot);
  server.begin();
  Serial.println("HTTP server started");
}
void loop() {
  server.handleClient();
  double total = 0;
  int i;
  total=total+bmp.readAltitude();
  for(i=1;i<30;i++) {
    total=total+bmp.readAltitude(); delay(50);
  }
  total=total/30;
  if (c&1) { digitalWrite(14, HIGH); } else { digitalWrite(14, LOW); }
  c++;
  if (total < minAltitude) { minAltitude = total ; }
}

Feldtest

Nach dem Programmieren des Sensors beginnen Sie direkt mit den Messungen. Suchen Sie mit Ihrem Smartphone ein Netzwerk mit dem Namen Sensor und verbinden Sie sich damit. Wenn Sie nun ein Browserfenster öffnen und die IP-Adresse des Gateways eingeben, sehen Sie die Webseite des Sensors mit den Messwerten (Abbildung 6). Das Gateway verwendet in der Grundeinstellung die IP-Adresse 192.168.4.1. Lassen Sie den Sensor nun in einem kleinen wasserdichten Behälter an einem stabilen Faden in den Brunnen hinab. Anhand der blinkenden LED wissen Sie, dass der Sensor noch arbeitet.

Abbildung 6: Der eingebaute Webserver erlaubt einen permanenten Zugriff auf die ermittelten Daten des Sensors via WLAN.

Abbildung 6: Der eingebaute Webserver erlaubt einen permanenten Zugriff auf die ermittelten Daten des Sensors via WLAN.

Nach dem Erreichen des Grundwasserspiegels steht der Faden weniger unter Spannung. Um auf Nummer sicher zu gehen, sollten Sie den Sensor etwa 30 Sekunden in dieser Position belassen, dann ziehen Sie ihn wieder hoch. Wenn Sie nun den minimalen Messwert von dem Wert an der Oberfläche abziehen, kennen Sie die Differenz von der Oberfläche bis zum Grundwasserspiegel. Jetzt lässt sich die Tauchpumpe optimal im Brunnen positionieren.

Fazit

Die Auflösung des BMP180 beträgt maximal 17 Zentimeter, was für unser Projekt noch ausreicht. Eine Kontrollmessung per Seil ergab, dass der Sensor nur um wenige Zentimeter danebenlag. Benötigen Sie eine höhere Genauigkeit, greifen Sie zum Sensor BMP280, dessen Präzision sich im Millimeterbereich ansiedelt.

Der hier vorgestellte BMP180 eignet sich aber nicht nur für das Ermitteln des Grundwasserspiegels: Er lässt sich auch verwenden, um die Höhe von Häusern oder Bergen zu messen. Ihnen fallen sicherlich noch mehr interessante Anwendungsfälle ein. 

Der Autor

Martin Mohr entwickelte schon früh eine Vorliebe für alles, was blinkt. Eine Ausbildung zum Elektroniker verstärkte das noch. Nach einem Informatikstudium entwickelte er überwiegend Java-Applikationen. Mit dem Raspberry Pi erwachte die alte Liebe zur Elektronik wieder.

Glossar

DN100

Normrohr nach EN10220. Das DN steht für Diamétre Nominal, bei DN100 handelt es sich um ein 4-Zoll-Rohr mit einem Außendurchmesser von 114,3 Millimeter.

Plunscher

Gerät zum Vertiefen eines Brunnenschachts über den Grundwasserspiegel hinaus.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 7 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben