Aus Raspberry Pi Geek 04/2022

Mit dem ESP32 eine digitale Kreuzwasserwaage bauen (Seite 2)

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.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 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