Hey! Sie scheinen aus United States zu kommen, möchten Sie auf die Englisch Webseite wechseln?
Switch to Englisch site
Skip to main content

Bau eines Steuergeräts für den „Good Air Canary“

Dieser Blogbeitrag hilft als Unterstützung für den Good Air Kanarienvogel. Nachdem Sie das gelesen haben, gehen Sie zurück zu Jude's Blogbeitrag um Ihren eigenen Vogel fertigzustellen.

Schritt 1: Arduino MCU

Das Arduino Nano 33 IoT Board ist der Kern der Hardware. Es hat ein SAMD21 Cortex®-M0+ 32bit ARM MCU mit 256 KB Flashspeicher und ein u-blox NINA-W102 WLAN-Modul.
Über das mit dem WLAN verbundene Board wird ein MQTT Client zum Datenempfang vom DesignSpark Environmental Sensor Development Kit (ESDK) ausgeführt, JSON-Nachrichten verarbeitet und ein Servo gesteuert, um den Kanarienvogel über einen ausgeklügelten Mechanismus in Bewegung zu setzen. Der Servo wird durch eine PWM-Steuerplatine angetrieben. Das Audiosignal wird von einer dedizierten Audioplatine mit integriertem Verstärker und verbundenem Lautsprecher bereitgestellt.

Schritt 2: Prototypen Schaltung

Die Schaltung kann komponentenweise konstruiert und getestet werden, sodass bei jedem Schritt sicher alles funktioniert. Achten Sie einfach auf die Spannungspegel! Hauptkomponenten:
Warnung: Das Arduino Nano GPIO wird bei 3,3 V betrieben. Manche Komponenten der Schaltung benötigen 5 V. Das Arduino GPIO wird bei Anschluss an 5 V beschädigt!

Adafruit 16-Channel 12-bit PWM Servotreiber

Diese Platine wird über den 3,3 V Pin am Arduino mit Spannung versorgt. Der Servo wird getrennt davon mit 5 V (V+) vom linearen Regler versorgt. Die Verbindung erfolgt über eine Zweidraht-Schnittstelle mithilfe einer Treiberbibliothek des Herstellers. Irgendwann war klar, dass der Kanarienvogel doch nicht zwei Servos brauchte. Die Platine wurde aber nicht geändert, weil Hardware und Programmierung so einfacher sind.

TowerPro SG90 Analoger Servo Motor

Für den Flügelmechanismus des Kanarienvogels

Adafruit Audio 2MB FX Sound Board with Amp

Zum Abspielen von 44,1 kHz 16 Bit Soundclips im OGG-Format, die im USB-Massenspeichermodus vorab auf das Gerät geladen werden. Mit einer seriellen Schnittstelle von 9600 baud, die mit einer Treiberbibliothek von Arduino gesteuert wird.

4 Ohm / 3W Stereo Enclosed Speaker

Gekauft im 2-teiligen Satz, weil Stereo von der Soundkarte unterstützt wird. Es wurde aber beschlossen, nur einen Lautsprecher zu verbauen, um das Gerät kompakt zu halten.

Hinweis: Zu verwenden sind Lautsprecher mit einer Impedanz von 4–8 Ohm und mind. 10 cm Anschlusskabel.

L7805 powers linear regulator and capacitors

Verbaut wurde eine unabhängige 5 V Spannungsversorgung für Arduino (via VIN), Audio-Board und Servo. Der USB-Anschluss am Arduino tut es für die Schaltung vielleicht auch, je nachdem wie viel Kraft der Servomotor braucht; aber er kann an der Obergrenze sicher mit dem Arduino verwendet werden.

2.9 inch E-ink display von Waveshare

Gefragt war ein modernes Display, um alle empfangenen Messungen vom ESDK-Sensor anzuzeigen. Die Programmierung des Displays war knifflig. Es gab Probleme mit unterschiedlichen Hardwareversionen, trotz identischer Teilenummer. Die Codebibliotheken haben sich bei Entwicklung wohl auch geändert, also wurde die funktionierende Version in GitHub aufgenommen.

Hinweis: Der Code für das E-Ink-Display und die Bibliotheksversion funktionieren nur für das 2,9-Zoll Schwarz-Weiß-Display von Waveshare, das mit V2 gekennzeichnet ist.

Auf der Abbildung ist die prototypische Schaltung im Test mit dem ESDK zu sehen. Der ESDK ist zwischen Bildschirm und Tastatur, die Kanarien-Schaltung rechts davon. Auf dem Bildschirm wird die JSON-Nachricht angezeigt, die vom ESDK-Anschluss empfangen wurde.

Schritt 3: Arduino Skizze

Das Arduino IDE wurde mit dem Arduino IDE programmiert und geflasht. Der gesamte Quellcode ist auf GitHub von DesignSpark verfügbar:

GitHub Repo

ZIP-Datei herunterladen oder Repository klonen (erhältlich für Windows, MAC, Linux oder Raspberry Pi).
Mehrere verschiedene Bibliotheken sind auf dem IDE mit dem Library Manager zu installieren, bevor sich der kompilierte Code auf das Arduino hochladen lässt.

  • Arduino WiFiNINA library
  • Adafruit Soundboard library
  • Adafruit PWM Servo Driver Library
  • ArduinoJson - not Arduino_JSON which didn’t handle the large JSON payload well
  • PubSubClient

Die WLAN-Verbindung des Arduino erfordert eine Änderung folgender Zeilen in der Datei „arduino_secrets.h“, die in einem der IDE-Register angezeigt werden sollte.

Die definierten Befehle ändern, damit sie zum jeweiligen WLAN-SSID und Kennwort passen (mit Hochkommas):

 

#define SECRET_SSID "YOURSSID"

#define SECRET_PASS "YOURPASSWORD"

Je nach Netzwerk muss der standardmäßige Hostname des ESDK geändert werden. Hier die CanaryController.ino. Zeichenfolge von „airquality“ zur IP-Adresse des ESDK im verwendeten Netzwerk ändern. Zu finden ist dies bei der Anmeldung als Administrator beim Router und per Anzeige der verbundenen Geräte.

// ESDK server name or IP address

//const char broker[] = "192.168.0.75";

const char broker[] = "airquality";

Hier können Sie einstellen, wie oft der Kanarienvogel den CO2-Pegel kontrolliert. Die Häufigkeit ist zu Testzwecken auf 20 Sek. festgelegt. Verlängern lässt sich dies im betreffenden Befehl in Millisekunden:

// Interval between audio / physical warings - change if it's

// nagging you too often

unsigned long DELAY_TIME = 20000; // 20 seconds

Nach diesen Änderungen kann der kompilierte Code auf das Arduino hochgeladen und die Angaben zur Fehlerbeseitigung auf dem seriellen Monitor geöffnet werden.

Beim Systemstart werden die Credits angezeigt, Servo und Soundkarte initialisiert und ein Gähnen wiedergegeben. Es wird versucht das Arduino mit den Netzwerk zu verbinden, danach erfolgt die Anmeldung beim ESDK-MQTT-Server, wo die erste Nachricht abgewartet wird. Auf dem Bildschirm werden jetzt die Messungen des ESDK-Sensors angezeigt.

Der Kanarienvogel kontrolliert regelmäßig die Daten zum CO2-Pegel und führt je nach aktuellem Stand einen seiner Vorgänge aus.

Wenn Sie den Kanarienvogel ignorieren, regt er sich immer mehr auf, bis er umkippt. Hüten Sie sich davor, weil es schlecht für die Gesundheit ist und Sie das Arduino zurücksetzen müssen, was übrigens Absicht ist.

Schritt 4: MQTT

Ist eine Linux-Box oder ein Raspberry Pi vorhanden, lässt sich die Nutzlast der MQTT-Nachrichten vom ESDK durch eine Anmeldung beim MQTT-Server anzeigen.

Dafür muss das Paket der Mosquitto-Clients installiert sein:

 

sudo apt install mosquitto-clients

 

ESDK-Service über folgenden Befehl abonnieren:

mosquitto_sub -F '%I:%t:%p' -h airquality -t airquality/#

Das JSON-Nutzlast-Update sollte alle 5 Sek. angezeigt werden, ähnlich wie unten:

Schritt 5: Servo Optimierung

Kein Servo ist wie der andere, d. h. die Parameter müssen mitunter optimiert werden, um zum eigenen Servo zu passen. Vorgehen: folgende definierte Befehle in der Datei ESDKCanary.h ändern. Die Datei sollte als IDE-Register angezeigt werden:

#define WINGS_DOWN 495
#define WINGS_UP 445
#define PASS_OUT_POS 225
#define DEAD_POS 150

Einstellungen geringfügig ändern und Code erneut kompilieren, bis die Bewegungen des Vogels passen und der Servo keine ratternden Geräusche mehr macht.

Schritt 6: Sound Effekte

Die MP4-Datei mit den Soundeffekten wurde an einem Windows-PC aufgenommen. Die Aufnahmen wurden dann auf einer Linuxbox oder Raspberry Pi mit FFMPEG nach OGG-VORBIS konvertiert (andere Konverter verfügbar).

Das FFMPEG-Paket muss installiert sein:

 

sudo apt install ffmpeg

Dieser Befehl wird im Terminal verwendet, um das Format des „Gähn“-Clips von MP4 nach OGG-VORBIS zu konvertieren, gemäß Namenskonvention der Soundkarte:

ffmpeg -i yawn.m4a T00.ogg

Von der Karte können bis zu 9 verschiedene Dateien wiedergeben werden, deren Namen einer bestimmten Konvention entsprechen müssen. Die erste Datei heißt T00.ogg, die zweite T01.ogg usw.

Verbinden Sie das EPROM der Soundkarte vor der Installation per USB-Kabel mit dem PC und kopieren Sie die Dateien mit einem Datei-Manager oder Terminal, um die OGG-Soundclips darauf zu flashen.

Sie können eigene Soundeffekte oder die vorhandene in Monty-Python-Manier aufzeichnen – toben Sie sich kreativ aus!

Kleine 4 Ohm / 3 W Lautsprecher an kurzem Kabel.

Schritt 7: Troubleshooting

Auf dem seriellen Monitor des Arduino IDE werden Hinweise bei Problemen mit der Firmware angezeigt. Die Fehlerbeseitigung wird durch viele serielle Ausgaben unterstützt. Vorgehen zur Anzeige aller Ausgaben des ausgeführten Codes: im Setup-Abschnitt Auskommentierung beim „While“-Schleifen-Befehl nach Beginn der seriellen Schnittstelle aufheben. Nun sollten hilfreiche Fehlermeldungen zu sehen sein, um das Problem zu identifizieren.

 Serial.begin(115200);
 while (!Serial) {
  ; // wait for serial port to connect
 }

Arduino nicht mit dem Netzwerk verbunden


Hostname „Airquality“ zur IP-Adresse des ESDK ändern und Code erneut flashen.
Kanarienvogel-Bildschirm zeigt dauernd die Credits an


Ist das ESDK mit demselben Netzwerk verbunden? Können Sie die MQTT-Nachrichten mit der Methode aus Schritt 4 abonnieren?
Kanarienvogel bewegt sich nicht richtig


Servoparameter prüfen (siehe Schritt 5). Parameter müssen zum Servo passen.
Soundkarte macht „Popp“, aber Soundclips werden nicht wiedergeben


Einstellung der Baudrate auf 9600 im Setup-Abschnitt der CanaryController.ino überprüfen.

E-Ink-Display ist leer

Überprüfen, ob die V2-Version des 2,9 Zoll Displays von Waveshare vorhanden ist.

MQTT-Nachrichten werden nicht verarbeitet

Sicherstellen, das genug Platz ist, um das JSON-Dokument in der MQTT-Rückruffunktion zu speichern.

 

// ESDK sends a large JSON payload

// - ensure you have enough memory allocated

StaticJsonDocument<384> doc;

 

Nach Lektüre dieses Artikels zur Unterstützung des „Good Air Canary“ von Jude Pullen kann das Projekt mithilfe von Judes Artikel fertiggestellt werden.

I'm an engineer and Linux advocate with probably more SBCs than a Chandrayaan-3 moon lander
DesignSpark Electrical Logolinkedin