ESPion : une caméra autonome pour nichoir

L'intégration d'une caméra dans un nichoir pour petits passereaux, qui est le projet à l'origine de l'ESPion, impose plusieurs contraintes importantes. Contrainte d'espace d'abord : le circuit électronique et la caméra doivent tenir dans un nichoir d'environ 14x14x25cm, sans gêner l'entrée des oiseaux. En outre, la caméra doit être fixée à une distance suffisante du fond du nichoir pour avoir un cadre d'image assez large et pouvoir faire le point. La deuxième contrainte concerne l'alimentation électrique : le nichoir étant fixé à l'extérieur, dans un arbre et à bonne hauteur (2 à 2,5 mètres), le circuit ne doit pas dépendre d'une prise secteur et doit pouvoir fonctionner sur accumulateur. Le circuit électronique doit également être protégé des contraintes environnementales liées à son utilisation extérieure : la conception doit garantir l'étanchéité à l'eau et à la poussière et le maintien d'une température de fonctionnement acceptable. Autre conséquence de ce contexte d'utilisation, un raccordement au réseau internet pour récupérer le flux vidéo de la caméra n'est pas possible sans le déploiement d'une infrastructure importante ; la caméra doit dans ce cas disposer d'un stockage de données local et/ou d'une connectivité sans fil. Enfin, la caméra fonctionnant dans la quasi-obscurité du nichoir, elle doit pouvoir capter suffisamment d'informations pour que le projet présente un intérêt, ce qui implique qu'elle puisse capturer des images infrarouges et disposer d'un éclairage du même type (un éclairage en lumière visible étant exclu pour ne pas déranger les oiseaux). Si plusieurs solutions commerciales clé-en-main existent (à des prix prohibitifs), aucune d'entre elles ne répond à toutes les contraintes énumérées plus haut. L'objectif est donc de proposer une solution dans un budget contenu, moyennant quelques concessions.

ESPion - vue extérieure

La fonction de calcul a été confiée à un microcontrôleur ESP32-CAM. D'un point de vue technique, « (l)es microcontrôleurs se caractérisent par un plus haut degré d'intégration, une plus faible consommation électrique, une vitesse de fonctionnement plus faible (de quelques mégahertz jusqu'à plus d'un gigahertz) et un coût réduit par rapport aux microprocesseurs polyvalents utilisés dans les ordinateurs personnels. » Les microcontrôleurs sont en général spécialisés dans la réalisation d'une tâche spécifique, comme l'ESP32, qui intègre un processeur de signal numérique « optimisé pour exécuter des applications de traitement numérique du signal » (1). Il est en outre capable de gérer de nombreuses entrées et sorties, ce qui lui permet d'intégrer dans sa configuration ESP32-CAM un module de caméra OV2640 2 mégapixels à courte focale et un lecteur de carte µSD. Ce microcontrôleur permet ainsi de capturer un flux d'images, de l'enregistrer localement ou de le diffuser en direct en Wifi. Ces caractéristiques en font le meilleur candidat pour le projet.

L'ESP32-CAM possède néanmoins plusieurs inconvénients. Ses capacités de calcul limitées nécessitent d'abord d'optimiser le programme de streaming fourni en exemple. Celui-ci gère l'encodage du flux vidéo, génère le serveur web qui permet d'accéder au flux depuis un navigateur et propose plusieurs autres fonctionnalités, comme la reconnaissance faciale et diverses options de compatibilité. Yves Pelletier a ainsi réalisé une version minimaliste de ce programme (simplification de l'interface web, retrait de la fonction de reconnaissance faciale, retrait des options de compatibilité) qui permet de passer de « 1400 lignes de code réparties en 4 fichiers » à un seul fichier de 225 lignes. L'interface de paramétrage de la caméra (exposition, luminosité, contraste...) disparaissant dans l'opération, ces options sont rendues accessible via quelques lignes de code rajoutées au programme simplifié. Ensuite, l'ESP32-CAM possède une antenne Wifi intégrée d'une portée insuffisante, qui dans le cadre de ce projet doit être remplacée par une antenne externe, au prix d'un peu de travail de soudure (2). La résolution du signal vidéo peut également être limitée dans le programme du microcontrôleur en fonction de la qualité de la réception du Wifi. Enfin, l'opération la plus délicate consiste à retirer la colle qui immobilise la bague de mise au point du module de caméra OV2640, puis à retirer le filtre infrarouge logé derrière (3). Ces interventions au scalpel peuvent s'avérer destructives si elles sont mal réalisées, mais elles permettent d'une part de gagner en netteté (mise au point), et d'autre part de parer à l'absence de lumière visible dans le nichoir. Sans son filtre infrarouge, et grâce à l'ajout d'une LED infrarouge au circuit (voir le schéma ci-dessous), la caméra peut dès lors capturer des images dans le spectre invisible, en « fausses couleurs », sans déranger les occupants (4).

ESPion - schéma

Une fois résolues les contraintes de taille, de coût, de capture et de récupération du flux vidéo, reste à dimensionner l'alimentation électrique. L'ESP32-CAM fonctionnant ici de manière autonome, le choix s'est porté sur un accumulateur de secours 5V USB (autrement appelé powerbank). Ce type de produits possède en général un bon rapport encombrement/capacité/prix, et son interface USB permet de l'employer à d'autres fins en dehors de la période d'utilisation du nichoir. La capacité de l'accumulateur a été déterminée par l'autonomie souhaitée de la caméra, qui devait correspondre à peu près à la période allant de la nidification d'un couple à l'envol des jeunes. Pour les mésanges et les moineaux, on peut ainsi compter 2 semaines d'incubation, 3 semaines de présence au nid avant l'envol, auxquelles on peut ajouter 2 semaines de nidification en amont, soit un total de 7 semaines. Afin de disposer d'une telle autonomie, l'ESP32-CAM a été pourvu d'un dispositif d'allumage/extinction via un relais radiocommandé (acheté sous forme de module prêt à l'emploi). Ainsi, seul le relais est alimenté en permanence (5mA en veille) et la caméra n'est allumée que lorsqu'on la regarde, c'est-à-dire lorsque le nichoir est manifestement occupé. Grâce à ce système et un accumulateur de 10000mAh, le circuit a pu effectivement fonctionner pendant 7 semaines.

L'accumulateur, le relais radiocommandé et l'antenne Wifi externe ont été placés dans un boîtier IP65 accolé au nichoir afin de ne pas l'encombrer, de protéger ces éléments contre les intempéries et de récupérer l'accumulateur sans déranger le nid si nécessaire. Seuls le module de caméra et la LED infrarouge ont été fixés sous le toit du nichoir, dans un boîtier de récupération en plastique transparent, à l'abri de l'humidité. L'accumulateur a été installé mi-mars afin de lui épargner les températures trop froides qui auraient entamé son autonomie.

ESPion - capture vidéo

A l'arrivée, on obtient un dispositif dont l'efficacité est certes modeste (fonctionnement intermittent, résolution faible, latence possible, qualité visuelle), mais qui est très peu intrusif, peu coûteux par rapport aux solutions existantes, plutôt robuste, économe en énergie et très autonome. Sa réalisation, qui peut s'avérer délicate, présente plusieurs intérêts :

Parmi les améliorations possibles, l'ajout d'un port USB externe pour la recharge de l'accumulateur pourrait se révéler très utile pour ne pas avoir à ouvrir le boîtier. Les réglages de l'image et le calibrage de la puissance de la LED infrarouge pourraient en outre être optimisés.

Fichiers

Notes

1. Il s'agit du Tensilica Xtensa LX6, prédécesseur du LX7 décrit sur la page dédiée du constructeur.

2. Cette opération est décrite ci-dessous. À noter que certains modules sont livrés déjà prêts pour l'utilisation d'une antenne externe.

3. Idem. L'opération est entièrement décrite (en anglais) et illustrée sur le blog Mark's Bench.

4. Attention, à haute intensité ou sur une longue durée, la lumière infrarouge peut provoquer des dommages à l’œil, tout comme la lumière visible. Bien qu'elle soit de faible puissance, il convient donc de limiter autant que possible la quantité de lumière émise par la LED en ajustant la valeur de la résistance placée en série. Par ailleurs, l'ESP32-CAM et équipé d'une LED blanche intégrée qui a été désactivée dans le programme (cf. le code source).


Instructions

Toutes les commandes doivent être exécutées en tant que superutilisateur. Le code indiqué entre chevrons < > est à remplacer par la valeur correspondante. Le code suivant un double slash / / est un commentaire.

N.B. : la plupart des informations proviennent du blog Electronique en amateur.

Matériel

Coût de revient estimé : 96,32€. Le coût est calculé à partir des catalogues RS Components (composants), Gotronic (modules), Aliexpress (modules), Boulanger (batterie) et LPO (nichoir). Les prix relevés sont ceux des composants à l'unité ou vendus en petites quantités.

Ressources

Principe de fonctionnement

A la mise sous tension de l'ESP32-CAM, le programme compilé espion.ino s'exécute. Ce programme permet à l'ESP32-CAM de fonctionner comme un serveur de streaming : il génère un flux vidéo (capture et encodage des images) sur le port 81, ainsi qu'un serveur web, accessible sur le port 80, et une page web qui sert d'interface (minimaliste) pour afficher le flux vidéo. Il gère en outre la connexion au réseau wifi spécifié. Il est alors possible d'accéder au flux vidéo de l'ESP32-CAM depuis un navigateur (client) connecté au même réseau en tapant son adresse IP.

Préparation matérielle

Utilisation de l'antenne externe

Instructions tirées du blog Mark's bench

Afin d'utiliser l'antenne wifi externe, il convient de vérifier que la résistance située à proximité du connecteur de l'antenne est soudée dans la bonne position (voir schéma ci-dessous). Si ce n'est pas le cas, il faut utiliser l'antenne interne ou dessouder puis ressouder la résistance dans la position souhaitée. L'opération est très délicate, aussi il est préférable de tester la qualité de la transmission wifi avec l'antenne intégrée avant de se lancer dans le dessoudage. En cas de problème, Mark propose un plan de secours sur son blog.

Utilisation d'une antenne externe

Suppression du filtre infrarouge de la caméra

Instructions tirées du blog Mark's bench

Connexion en mode programmation

L'ESP32-CAM est d'abord connecté en mode programmation avant d'être connecté en mode autonome dans le montage final. Connecter l'ESP32-CAM et le convertisseur USB-série comme sur le schéma ci-contre. Le port I/O 0 est relié à la masse pendant la phase de programmation du module (mode flash de la mémoire du microcontrôleur). Cette liaison est retirée ensuite. Connecter le convertisseur à l'ordinateur via le port USB puis appuyer sur le bouton Reset de l'ESP32-CAM. Après chaque téléversement d'un programme sur le module, appuyer sur le bouton Reset pour prendre en compte les changements. Le convertisseur USB-TTL n'est utilisé que pour la programmation, il est retiré dans le montage final.

Programmation de l'ESP32-CAM

Préparation logicielle

Installer l'environnement de programmation Arduino IDE.

Solution 1 : utiliser le programme d'exemple

Le programme d'exemple CameraWebServer est particulièrement volumineux et complexe dans sa construction. Il est conseillé d'adopter la solution 2 (voir plus bas).

Pour fonctionner, le script CameraWebServer fait appel au langage Python et à certaines de ses bibliothèques, notamment pyserial. Au cas où ils ne seraient pas installés sur l'ordinateur, ouvrir un terminal et taper :

// Solution 1 :
apt update
apt install python3
apt install python-pip
pip install pyserial

// Solution 2 (non testée) :
apt update
apt install python3
apt install python-serial

Solution 2 : utiliser le programme simplifié

Afin de clarifier le code, simplifier l'interface web et éliminer les fonctions inutiles pour le projet (reconnaissance faciale, ajustement des paramètres d'image, paramètres pour d'autres cartes), le programme de l'ESPion ne se base pas sur le programme d'exemple mais sur le code proposé par Yves Pelletier. Grâce à ses modifications, on passe de "1400 lignes de code réparties en 4 fichiers" à un seul fichier de 225 lignes.

const char* ssid = "nom_reseau_wifi" // ligne 15
const char* password = "mot_de_passe_wifi" // ligne 16

N.B. : la plupart des navigateurs se connectent automatiquement via https. Si c'est le cas, il faut retirer le "s" pour forcer la connexion non sécurisée à un appareil du réseau local, ou paramétrer une exception de sécurité (selon le navigateur).

Paramètres de la caméra

Suite à la simplification du programme, l'interface graphique qui permettait l'ajustement des paramètres d'image (contraste, luminosité, exposition…) a été supprimée. Sans son filtre infrarouge, le rendu visuel de la caméra n'est pas satisfaisant en l'état. Les lignes suivantes, tirées du programme d'exemple, ont été ajoutées (ligne 193) pour permettre de corriger l'image si nécessaire :

// Paramètres de correction de l'image
  sensor_t * s = esp_camera_sensor_get();
  s->set_brightness(s, -2); // -2 > x < 2
  s->set_contrast(s, 2); // -2 > x < 2
  s->set_saturation(s, -2); // -2 > x < 2
  s->set_denoise(s, 0); // // Débruitage. Valeur : 0 ou 1
  s->set_special_effect(s, 2); // Effet "Greyscale"
  s->set_ae_level(s, 0); // Correction de l'exposition. Valeur : -2 > x < 2
  s->set_bpc(s, 0); // ? Valeur : 0 ou 1
  s->set_wpc(s, 1); // Correction des tâches ? Valeur : 0 ou 1
  s->set_raw_gma(s, 1); // Correction gamma. Valeur : 0 ou 1
  s->set_lenc(s, 1); // Correction optique. Valeur : 0 ou 1
  s->set_hmirror(s, 0); // Miroir horizontal. Valeur : 0 ou 1
  s->set_vflip(s, 0); /// Miroir horizontal. Valeur : 0 ou 1

D'autre part, l'allumage de la LED infrarouge (port GPIO 16) est contrôlé par le programme espion.ino (ligne 229). La LED blanche intégrée au microcontrôleur est également désactivée dans le code (ligne 234).

Paramétrage du Récepteur RF

N.B. : la procédure d'appairage des émetteur/récepteur fonctionne pour le module référencé sur la page du projet sur le blog. Il devrait fonctionner pour tous les modules de même conception, mais ce n'est pas garanti. Dans le doute, il est préférable de suivre la procédure du constructeur ou du revendeur.

L'émetteur et le récepteur radio qui commandent le relais doivent être appairés selon la procédure suivante (seul le mode verrouillage a été testé) :

Montage final et intégration

Cf. schéma final. Une LED infrarouge et sa résistance sont branchés sur le port GPIO 16 de l'ESP32-CAM. Le relais est placé entre l'ESP32-CAM et l'alimentation (bien étudier le schéma). Le reste du montage ne présente pas de problème particulier.