Projekt 2 -„Schlaue Uhr“ mit Neopixel-Display

Um die Arduino Umgebung kennen zu lernen bietet sich ein kleines Projekt mit unterschiedlichen Sensoren und einer großen Anzeige zur Darstellung der „Messwerte“ an.

Steuerung ESP32 D1 R32 Gehirn des Ganzen
Bosch Temperatursensor I2C BMP-180 Temperatur und Luftdruck
Air Quality Monitor CCS-811 eCO2(ppm) und VOC
Realtime-Clock DS1302 Zeit und Datum
Moisture Sensor Capacitive Soil Moisture Sensor v1.2 Qualitative Bodenfeuchte

Hardware

Steuerung: ESP32-UNO IOT

Das ESP32-D1 R32 Board ist ideal für kleine Spielereien. Neben dem klassischen, dem UNO Format nachempfundenen, Design ist besonders erfreulich, dass nicht bei jedem Hochladen eines Sketches eine Taste gedrückt werden muss.

Zwei negative Punkte sind aufgefallen: Es werden nicht sehr viele GPIOs nach außen geführt und die Beschriftung ist sehr ausbaufähig.

Realtime Clock

Eine Uhr braucht natürlich zunächst einmal die Zeit. Dazu wird hier ein DS1302 eingesetzt.

Mehr dazu: Real Time Clock DS1302

Im Nachhinein würde ich eher zu einer I2C Lösung raten, z.B. DS 1307

Air Quality Sensor CCS811

In Zeiten von Corona ist die Lüften in gemeinsam genutzten Büros besonders wichtig. Mit Hilfe eines Air Quality Sensors kann abgeschätzt werden, wann es Zeit zu Lüften ist

Mehr zu diesem Sensor: CCS-811 Luftqualität

Temperatur und Luftdruck BMP-180

Mehr zu diesem Sensor: BMP-180 Temperatur und Luftdruck

Beide I2C-Sensoren werden mit dem I2C Bus verbunden

Bodenfeuchte

Messung der Bodenfeuchte in der Zimmerpflanze

Wann muss die Palme wieder gegossen werden? Wenn schon ein Sensorträger installiert wird, kann er auch die Bodenfeuchtigkeit der Zimmerpalme messen. Dazu kommt ein kapazitiver Feuchtigkeitssensor zum Einsatz:

Hier mehr dazu: Capacitive Soil Moisture Sensor v1.2

Das Signal wird so skaliert, dass Werte von 0-100% angezeigt werden. Dieser Wert ist mehr qualitativ zu sehen, trotzdem kann mit etwas Erfahrung gut abgeschätzt werden, dass bei etwa „80“ die Pflanze gegossen werden muss.

  //Bodenfeuchte
  double summe = 0;
  for (int i=0; i<1000;i++){
    int sensorValue = analogRead(39);
    summe=summe+ sensorValue;
    delay(1);
  }
  summe=summe/1000.0;
  summe=summe/40.95;
  summe=100-summe;
  Serial.print("Palme: ");
  Serial.println(summe);

Neopixel Matrixdisplay

NeoPixel Matrix Display 8×32

Neopixel lassen sich relativ einfach ansteuern.

Hier mehr dazu: https://krischanforscht.de/neopixel/

Es gibt passende Bibliotheken und gute Beispielsketches. Allerdings zeigt sich, dass das Timing der Busleitung sehr kritisch ist und einige Bibliotheken nicht mit jedem Controller zusammenarbeiten. Die Standardbibliotheken von Adafruit verursachten bei meiner Kombination aus ESP32 und NeoPixel-Display einige Pixel, die fehlerhaft leuchteten. Ich habe mich dann für die Bibliotheken von FastLED entschieden. Funktionier einwandfrei.

#include <FastLED.h>
#include <FastLED_NeoMatrix.h>

Die Verdrahtung ist sehr einfach. Ggf. noch einen 150 Ohm Wiederstand in die Datenleitung und einen großen Elko parallel schalten. Brauchte ich aber nicht, läuft bei mir auch so.

Gerätebau

Der Gerätebau wird sehr einfach gehalten. Zwei Siebdruckplatten werden mit Leim und Dübeln an einer Kante aufeinander befestigt. Von Vorne seiht das sehr edel aus. Mit einer Lochsäge werden Ausbrüche für die Kabel angefertigt. Das Matrixdisplay wird mit Klebepads aufgeklebt. Ebenso werden die Platinen mit Klebepads befestigt.

Die Schaltung wird auf einer Lochrasterplatine ausgeführt. Für I2C wird ein Bussystem aufgebaut.

Software

Das Sketch findet ihr unter:

https://github.com/KrischanForscht/Projekt2-NeoPixel-Uhr

Links und Quellen

QuelleThema
https://learn.adafruit.com/adafruit-ccs811-air-quality-sensor/arduino-wiring-testCSS-811 Air Quality Sensor
https://github.com/FastLED/FastLEDFastLED Library

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.