Die Kommandos innerhalb der If-Anweisung ab Zeile 27 aktualisieren das Display. Hier gilt es zu beachten, dass das Programm neue Anzeigen immer nur zu den bereits vorhandenen hinzufügt. Das bedeutet, dass sich das Display nach einiger Zeit nicht mehr ablesen lässt, weil alles vollgeschrieben ist. Die Idee, das komplette Display vor jedem Schreiben zu löschen, erweist sich aber auch nicht als der Weisheit letzter Schluss, weil das ein nerviges Flackern hervorruft.
Die Lösung liegt darin, gezielt jene Bereiche zu bearbeiten, die sich ändern. So löscht das Kommando tft.fillRect(0,142,160,30,ST77XX_BLACK) in Zeile 39 nur jene Stelle, an der die Messwerte erscheinen. Teile, die konstant bleiben, wie etwa die Überschrift, überschreibt das Programm. Ansonsten fällt der Code in diesem Bereich selbsterklärend aus. Im Zweifel ziehen Sie die Dokumentation der Bibliothek [6] zurate.
Am Ende der loop()-Funktion ab Zeile 40 kopiert das Programm die Werte der Variablen x und y in xold und yold. Anschließend folgt ein delay(), das den Ablauf verzögert, bevor das Programm den nächsten Schleifendurchlauf beginnt. Ein Youtube-Video [11] zeigt, wie das Programm live arbeitet.
Listing 2
wasserwaage.ino
#include "Wire.h"
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#include <MPU6050_light.h>
#define TFT_CS 17
#define TFT_RST 14
#define TFT_DC 2
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
MPU6050 mpu(Wire);
void setup(void) {
Wire.begin();
mpu.begin();
mpu.calcOffsets();
tft.initR(INITR_BLACKTAB);
tft.fillScreen(ST77XX_BLACK);
}
int x, y, xold, yold;
void loop() {
mpu.update();
x=floor(mpu.getAngleX());
y=floor(mpu.getAngleY());
if ((x!=xold) or (y!=yold)) {
tft.setTextSize(1, 3);
tft.setCursor(20, 0);
tft.setTextColor(ST77XX_BLUE);
tft.print("2D-Wasserwaage");
tft.fillCircle(64-x, 80+y, 12, ST77XX_BLACK);
tft.fillCircle(64-x, 80+y, 5, ST77XX_YELLOW);
tft.drawCircle(64, 80, 7, ST77XX_RED);
tft.drawCircle(64, 80, 27, ST77XX_RED);
tft.drawCircle(64, 80, 47, ST77XX_RED);
tft.drawLine(64, 30, 64, 130, ST77XX_RED);
tft.drawLine(14, 80, 114, 80, ST77XX_RED);
tft.fillRect(0, 142, 160, 30, ST77XX_BLACK);
tft.setTextSize(2);
tft.setTextColor(ST77XX_GREEN);
tft.setCursor(0, 142);
tft.print("x=");
tft.println(x);
tft.setCursor(64, 142);
tft.print("y=");
tft.println(y);
}
xold=x;
yold=y;
delay(50);
}
Fazit
Dieser Artikel zeigt, wie Sie mit einfachen Mitteln eine digitale Kreuzwasserwaage aufbauen. Alles in allem gibt es noch viele Möglichkeiten, die Genauigkeit des Sensors zu erhöhen. Ein Gehäuse aus dem 3D-Drucker, das die Technik beherbergt, würde die Stabilität des Aufbaus erheblich erhöhen.
Das recht einfach gehaltene Beispielprogramm ermöglicht es problemlos, einiges mehr an Genauigkeit und Funktionalität zu implementieren. Die Kombination aus ESP32 und dem Display erlaubt den Aufbau vieler weiterer interessanter Projekte. Insgesamt ein schönes Projekt, bei dem sich einiges lernen lässt. Bleibt mir nur noch, Ihnen viel Spaß beim Aufbauen Ihrer persönlichen Wasserwaage zu wünschen. (tle)
Der Autor
Martin Mohr erlebte die komplette Entwicklung der modernen Computertechnik live mit. Nach dem Studium entwickelte er überwiegend Java-Applikationen. Mit dem RasPi erwachte seine alte Liebe zur Elektronik wieder.
Infos
- MPU6050-Modul: https://www.az-delivery.de/products/gy-521-6-achsen-gyroskop-und-beschleunigungssensor
- Datenblatt MPU6090: https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf
- NodeMCU ESP32 DevBoard: https://www.az-delivery.de/products/esp-32-dev-kit-c-v4
- ESP32-Basics: Martin Mohr, “Schneller Einstieg”, RPG 02/2022, S. 56, https://www.raspi-geek.de/47058
- 1,8-Zoll-TFT-Farbdisplay: https://www.az-delivery.de/collections/displays/products/1-8-zoll-spi-tft-display
- Adafruit GFX Library: https://learn.adafruit.com/adafruit-gfx-graphics-library
- Adafruit GFX Library (Quellen): https://github.com/adafruit/Adafruit-GFX-Library
- TFT LCD Library: https://www.arduino.cc/en/Reference/TFTLibrary
- Adafruit ST7735 Library: https://github.com/adafruit/Adafruit-ST7735-Library
- Adafruit GFX Library: https://github.com/adafruit/Adafruit-GFX-Library
- Wasserwaage in Aktion: https://youtu.be/ib4KpretMa8:





