
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

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 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
Quelle | Thema |
https://learn.adafruit.com/adafruit-ccs811-air-quality-sensor/arduino-wiring-test | CSS-811 Air Quality Sensor |
https://github.com/FastLED/FastLED | FastLED Library |