Hé! Vous semblez être en United States, souhaitez-vous utiliser notre site English ?
Switch to English site
Skip to main content

Construction d'un contrôleur pour The Good Air Canary

Cet article prend en charge le « Good Air Canary » de Jude Pullen, une fois que vous aurez terminé ici, veuillez retourner à l'article de Jude pour compléter votre projet Canary.

Étape 1 : Arduino MCU

Au centre du matériel se trouve la carte Arduino Nano 33 IdO. Elle comporte un MCU ARM SAMD21 Cortex®-M0+ 32 bits avec une mémoire flash de 256 Ko et un module Wifi u-blox NINA-W102.

La carte se connecte à Wifi, exécute un client MQTT qui reçoit les données du capteur à partir du kit de développement de capteurs environnementaux (ESDK) de DesignSpark, traite les messages JSON et contrôle un servo pour actionner le canari par le biais d'un mécanisme mécanique astucieux. Le servo est piloté par une carte de commande PWM et un son de haute qualité est fourni par une carte audio dédiée avec un amplificateur intégré et une seule enceinte.

Étape 2 : Circuit prototype

Le circuit peut être construit et testé par étapes pour s'assurer que chaque composant fonctionne avant d'ajouter le suivant. Faites simplement attention aux niveaux de tension. Voici les principaux composants :

Avertissement : Le GPIO Arduino Nano fonctionne à 3,3V et le circuit utilise également 5V pour certains composants - faites attention à ne pas connecter 5V au GPIO de l'Arduino ou vous risquez de l'endommager !

Adafruit 16-Canaux 12-bit PWM Servo Driver

Cette carte fonctionne à 3,3V (VCC) alimentée par la broche de 3,3V de l'Arduino. Le servo a une alimentation séparée de 5V (V+) à partir du régulateur linéaire. La communication se fait via une interface I2C en utilisant une bibliothèque de pilotes du fabricant. Au départ, nous pensions que nous aurions besoin de plus d'un servo pour le canari, mais cela n'a pas été le cas. Nous avons laissé la carte dans la conception car elle simplifie le matériel et la programmation.

Servo moteur analogique TowerPro SG90

Il actionne le mécanisme de l'aile du canari

Carte son Adafruit Audio 2MB FX avec amplificateur

Lit les enregistrements de clips sonores au format OGG 44,1KHz 16 bits qui sont préchargés sur le dispositif en mode de mémoire de masse USB. Il utilise une interface série fonctionnant à 9600 bauds contrôlée par l'Arduino en utilisant une bibliothèque de pilotes fournie par le fabricant.

Enceinte stéréo 4 Ohm / 3W

Nous avons acheté un ensemble de deux enceintes car la table d'harmonie supporte la stéréo mais il a été décidé de n'utiliser qu'une seule enceinte pour un design compact.

Remarque : Utilisez des enceintes d'une impédance de 4 à 8 Ohms et maintenez la longueur du câble à moins de 10 cm.

Régulateur linéaire de puissance L7805 et condensateurs

Nous avons construit une alimentation indépendante de 5V pour alimenter l'Arduino (via VIN) et pour la carte audio et le servo. Vous pouvez vous en sortir en utilisant le connecteur USB de l'Arduino pour alimenter le circuit, en fonction des besoins en énergie de votre servo, mais cela sera à la limite supérieure de sécurité pour l'Arduino.

Écran E-ink de 2,9 pouces de Waveshare

Nous voulions un affichage contemporain pour montrer toutes les lectures de capteurs reçues de l'ESDK. L'écran était difficile à programmer et nous avons eu des problèmes avec les versions matérielles qui étaient différentes, même si elles avaient le même numéro de pièce. Les bibliothèques de code semblent également changer au cours du développement, nous avons donc inclus la version de travail dans notre GitHub pour le projet.

Remarque : La version du code et de la bibliothèque de l'écran E-ink ne fonctionne que pour les écrans Waveshare 2,9 pouces noir et blanc marqués V2.

Voici une image du circuit prototype testé avec l'ESDK - vous pouvez voir l'ESDK entre l'écran et le clavier et le circuit canari à droite. L'écran montre les messages JSON reçus de l'ESDK dans le terminal.

Étape 3 : Croquis de l’Arduino

La programmation et le flashage ont été effectués à l'aide de l'IDE Arduino. Le code source complet est disponible sur le GitHub de DesignSpark :

Repo GitHub

Téléchargez le fichier zip ou clonez le repo sur votre Windows / Mac / Linux ou Raspberry Pi.

Vous devrez installer un certain nombre de bibliothèques différentes dans l'IDE en utilisant le gestionnaire de bibliothèques avant de pouvoir compiler et télécharger le code sur l'Arduino :

  • Bibliothèque Arduino WiFiNINA
  • Bibliothèque Soundboard d'Adafruit
  • Bibliothèque Adafruit PWM Servo Driver
  • ArduinoJson - et non Arduino_JSON qui ne gérait pas bien la grande charge utile JSON.
  • PubSubClient

Pour connecter l'Arduino à votre Wifi, il faudra modifier les lignes suivantes dans le fichier arduino_secrets.h qui devrait apparaître dans l'un des onglets de l'IDE.

Modifiez les déclarations définies pour qu'elles correspondent à votre propre SSID et mot de passe Wifi (avec des guillemets) :

#define SECRET_SSID "YOURSSID"

#define SECRET_PASS "YOURPASSWORD"

En fonction de votre réseau, vous devrez peut-être modifier le nom d'hôte par défaut de l'ESDK. Ceci se trouve dans CanaryController.ino. Changez la chaîne de caractères de « airquality » en adresse IP de l'ESDK sur votre réseau. Vous pouvez la trouver en vous connectant à votre routeur en tant qu'administrateur et en regardant les périphériques connectés.

// ESDK server name or IP address

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

const char broker[] = "airquality";

Vous pouvez modifier la fréquence à laquelle le canari vérifie les niveaux de CO2. Pour les tests, nous l'avons fixée à toutes les 20 secondes, mais vous pouvez étendre cette fréquence en mettant à jour l'instruction « define », en milli-secondes :

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

// nagging you too often

unsigned long DELAY_TIME = 20000; // 20 seconds

Une fois tous ces changements effectués, vous devriez pouvoir compiler et télécharger le code sur votre Arduino, puis ouvrir le moniteur série pour voir les informations de débogage.

Lorsque le système démarre, il affiche l'écran du générique, initialise le servo et la table d'harmonie, puis joue un clip sonore « yawn » (bâillement). L'Arduino essaie ensuite de se connecter au réseau et, s'il y parvient, s'abonne au serveur MQTT de l'ESDK, où il attend que les premiers messages apparaissent. À ce moment-là, l'écran commence à afficher les relevés des capteurs de l'ESDK.

Périodiquement, le canari évalue les données relatives au niveau de CO2 reçues et effectue l'une de ses actions en fonction du niveau actuel.

Si vous ignorez le canari, il s'agitera de plus en plus jusqu'à ce qu'il s'effondre. Ne laissez pas cela se produire car c'est mauvais pour votre santé et vous devrez réinitialiser l'Arduino, ce qui est intentionnel !

Étape 4 : MQTT

Si vous disposez d'une boîte Linux ou d'un Raspberry Pi, vous pouvez visualiser les messages MQTT provenant de l'ESDK en vous abonnant à son serveur MQTT.

Assurez-vous que le paquet mosquitto-clients est installé :

sudo apt install mosquitto-clients

Abonnez-vous au service ESDK en utilisant la commande suivante :

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

Vous devriez voir la mise à jour de la charge utile JSON toutes les 5 secondes, similaire à la sortie ci-dessous :

Étape 5 : Réglage des servos

Chaque servo se comporte légèrement différemment, vous devrez donc ajuster les paramètres en fonction de votre servo. Faites-le en ajustant les déclarations définies suivantes dans le fichier ESDKCanary.h qui devrait apparaître comme un des onglets dans votre IDE :

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

Modifiez un peu les paramètres et recompilez votre code jusqu'à ce que le mouvement du canari soit correct et que votre servo n'émette pas de vibrations.

Étape 6 : Effets sonores

Nos fichiers d'effets sonores ont été enregistrés sur un PC Windows au format M4A. Ils ont été convertis au format Ogg Vorbis sur une machine Linux ou un Raspberry Pi en utilisant ffmpeg (d'autres convertisseurs sont disponibles).

Assurez-vous que le paquetage ffmpeg est installé :

sudo apt install ffmpeg

Cette commande, utilisée dans le Terminal convertit le clip « yawn » au format M4A au format Ogg Vorbis en utilisant la convention de nommage requise par la carte son :

ffmpeg -i yawn.m4a T00.ogg

La carte peut lire jusqu'à 9 fichiers différents, qui doivent avoir une convention de nommage spécifique. Le premier fichier s'appelle T00.ogg, le deuxième T01.ogg, etc.

Avant d'installer la carte dans le circuit, flashez les clips sonores Ogg sur l'EPROM de la carte son en la reliant à votre PC avec un câble USB et en copiant les fichiers à l'aide d'un gestionnaire de fichiers ou d'un terminal.

Vous pouvez enregistrer vos propres effets sonores ou utiliser ceux qui sont fournis dans une voix off Pytonesque - laissez libre cours à votre créativité !

Petite enceinte de 4 Ohm / 3 W fixée sur un câble court.

Étape 7 : Dépannage

Le moniteur série de l'IDE Arduino est votre ami pour trouver ce qui se passe avec votre micrologiciel. Nous avons inclus beaucoup de sorties série pour aider au débogage. Si vous avez des problèmes, décommentez la boucle « while » après le début de l'interface série dans la section de configuration pour voir toute la sortie du code en cours d'exécution. Vous devriez voir des messages d'erreur utiles qui vous aideront à trouver les problèmes.

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

L'Arduino ne se connecte pas au réseau

Remplacez le nom d'hôte « airquality » par l'adresse IP de l'ESDK et relancez le code.

L'écran du canari continue d'afficher l'écran des crédits

Vérifiez que l'ESDK est sur le même réseau si vous en avez plusieurs et que vous pouvez vous abonner à ses messages MQTT en utilisant la méthode de l'étape 4.

Le canari ne se déplace pas correctement

Vérifiez que les paramètres du servo sont adaptés à votre servo, comme indiqué à l'étape 5.

La table d'harmonie émet un bruit sec mais les clips sonores ne sont pas lus.

Vérifiez que vous l'avez configuré pour utiliser un débit de 9600 bauds dans la section de configuration de CanaryController.ino.

L'écran E-Ink est vide

Vérifiez que vous avez la version V2 de l'écran Waveshare 2,9 pouces.

Les messages MQTT ne sont pas traités

Vérifiez que vous avez suffisamment de mémoire allouée pour contenir le document JSON dans la fonction de rappel MQTT.

// ESDK sends a large JSON payload

// - ensure you have enough memory allocated

StaticJsonDocument<384> doc;

 

Cet article prend en charge le « Good Air Canary » de Jude Pullen, une fois que vous aurez terminé ici, veuillez retourner à l'article de Jude pour compléter votre projet Canary.

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