Deux circuits électroniques de capture d'image : le PolaroHeat (2)


Le PolaroHeat se base sur la plateforme de prototypage open source Raspberry Pi (dans sa version Zero) de la fondation éponyme, qui possède de nombreux atouts. Il s'agit d'un ordinateur monocarte très documenté par une importante communauté d'utilisateurs et qui bénéficie d'un large écosystème d'extensions matérielles dédiées. Il possède en outre un grand nombre d'interfaces d'entrée et de sortie (USB, ports série, ports GPIO…) et il est capable d’exécuter un système d'exploitation complet. Enfin, sa petite taille et son coût modique en font un candidat intéressant pour les projets embarqués qui nécessitent du calcul logiciel dépassant les capacités d'un microcontrôleur. Dans le tutoriel proposé par Adafruit, le Raspberry Pi est accompagné d'un module de caméra 5 Mégapixels (développé par la fondation) qui constitue le dispositif optique et d'une imprimante thermique comme périphérique de sortie. Le montage est complété par un bouton de déclenchement, un bouton d'extinction du système et une LED d'état du système reliés aux ports GPIO du Raspberry Pi Zero. Le système d'exploitation dédié RaspberryPiOS Lite et le serveur d'impression CUPS sont installés sur l'ordinateur. Les fichiers supplémentaires nécessaires au traitement logiciel sont téléchargés depuis le dépôt en ligne d'Adafruit.
Le principe de fonctionnement est le suivant. Le script camera.sh lancé au démarrage du système surveille l'état du déclencheur et, lors de l'appui, commande la capture d'une image aux dimensions du papier thermique par la caméra (commande raspistill). La capture est ensuite envoyée au serveur d'impression CUPS via la commande lp, qui cache en fait une routine complexe. À la réception de cette commande, CUPS se charge de transformer l'image en langage interprétable par l'imprimante en s'appuyant sur le filtre ou pilote rastertozj.c. On passe ainsi d'un fichier image encodé au format JPEG, soit une matrice de quantités de lumière et de couleurs codées sous forme numérique, à un flux de données brutes formaté selon le langage de description de page ESC/P2. CUPS livre enfin les données à l'imprimante et exécute la séquence d'impression décrite dans le fichier rastertozj.c : initialisation et chargement des caractéristiques de l'imprimante (contenues dans le fichier de description ZJ-58.ppd), exécution de l'impression, arrêt et réinitialisation du matériel.

Ce prototype de “Polaroid numérique” est fonctionnel, mais contrairement à son modèle argentique qui permettait d'ajuster les paramètres optiques aux conditions lumineuses, il ne permet aucun réglage esthétique, ni à la prise de vue, ni à l'impression. Deux améliorations ont donc été apportées au code d'origine. La première (et la plus importante) introduit la possibilité de régler les paramètres de chauffe de l'imprimante thermique. En effet, la tête d'impression de ce type d'imprimantes est constituée de minuscules résistances (points d'impression) qui convertissent l'énergie électrique reçue en chaleur. Le papier thermique contient des agents chimiques qui y sont sensibles et s'assombrissent plus ou moins au passage sous la tête d'impression. Ici, l'imprimante est utilisée sous une tension de 5 volts au lieu des 9 volts recommandés, avec comme conséquence une moindre quantité de chaleur émise par les résistances et donc un faible contraste à l'impression. L'ajout d'une commande qui modifie les paramètres de chauffe3 dans la séquence d'impression permet d'augmenter le temps de chauffe des résistances, et donc le contraste, au détriment du temps d'impression. La seconde modification du code concerne la commande raspistill responsable de la prise de vue et qui accepte de nombreuses options. Il est ainsi possible de paramétrer finement les réglages de la prise de vue (contraste, exposition…), voire même d'appliquer des effets artistiques (croquis, négatif…).
L'intégration dans un boîtier de Polaroid original s'est avérée
particulièrement ardue. Comme le note l'auteur du blog Mixtela.com,
le Polaroid ne contient aucune vis, les différents éléments originaux
étant fixés par emboîtement les uns aux autres. Toutes les pièces
intérieures ont donc été retirées et remplacées par le nouveau circuit, hormis le viseur qui a été
conservé tel quel, ainsi que l'objectif qui a été fixé à la colle. Par
manque de place, l'accumulateur 5V a été déporté dans une pochette fixée
sous le boîtier4. Ce subterfuge permet néanmoins de changer
d'alimentation USB simplement et de garder un œil sur le témoin de
charge, le Raspberry Pi Zero supportant mal les extinctions brutales.
L'apparence extérieure a été préservée autant que possible ; seules deux
vis ont été ajoutées pour servir d'axe pour le rouleau de papier
thermique. L'absence d'élément de compensation de la friction et la faible puissance du moteur miniature ont par ailleurs tendance à entraver le déroulement fluide du papier, avec pour conséquence des défauts visuels d'impression. L'obtention d'un rendu correct et régulier a été de ce point de vue particulièrement difficile. Enfin, comme pour la quasi totalité des projets présentés sur le blog, les différents éléments du circuit (cartes, modules...) ont été fixés de manière à pouvoir être retirés et réutilisés plus tard. Cette démarche permet de relativiser le coût élevé du projet (environ 130€) et d'envisager la récupération des éléments pour de futurs montages.

Le PolaroHeat mobilise de nombreux concepts et savoirs-faire liées à l'informatique et à l'image numérique, notamment :
- la théorie de l'image numérique et les différences avec l'image analogique;
- l'installation d'un système d'exploitation libre et sa configuration en ligne de commande;
- le principe de fonctionnement et les possibilités offertes par les ordinateurs monocartes par l'exploration de l'écosystème Raspberry Pi;
- le fonctionnement de l'impression numérique.
Matériel
Ressources
- https://learn.adafruit.com/instant-camera-using-raspberry-pi-and-thermal-printer
- https://mitxela.com/projects/thermal_paper_polaroid
- https://www.raspberrypi.org/documentation/raspbian/applications/camera.md
- https://www.raspberrypi.org/documentation/hardware/camera
- https://www.gotronic.fr/pj2-34686-ov5647-1411.pdf
- https://fr.wikipedia.org/wiki/Common_Unix_Printing_System
- https://www.cups.org/documentation.html
- https://fr.wikipedia.org/wiki/Langage_de_description_de_page
- https://fr.wikipedia.org/wiki/PostScript_Printer_Description
- https://lwp.interglacial.com/appf_01.htm
- https://cdn-shop.adafruit.com/datasheets/A2-user+manual.pdf
- https://scruss.com/blog/2015/07/12/thermal-printer-driver-for-cups-linux-and-raspberry-pi-zj-58
Fichiers
Notes
1 On peut en voir l'utilisation faite par Alfred Seiland dans la série de documentaires “L'héritage de Rome” diffusée surt Arte en 2018 (non éditée). Le photographe teste l'exposition à l'aide d'un tirage Polaroid avant de prendre une photographie définitive à la chambre.
2 Voir l'article Wikipedia en anglais. Les commandes de ce langage sont constituées d'une suite de caractères codés sous forme numérique selon la norme ASCII. La mémoire de l'imprimante contient une table de correspondance de caractères qui lui permet d'interpréter les commandes.
3 Le fonctionnement de la commande est détaillé dans le wiki du projet.
4 En fait, le choix a été fait de réutiliser l'accumulateur de l'ESPion pour limiter l'achat et l'utilisation de multiples batteries Li-ion pour des objets qui ne servent qu'occasionnellement.
5 Le Raspberry Pi Zero utilisé dans ce projet, vendu aux alentours de 5€, est souvent en rupture de stock et nécessite un adaptateur µUSB/Ethernet relativement cher s'il est acheté exprès. Il a donc été remplacé par sa version WH, plus chère, mais qui dispose du Wifi.