Projet : ĂlĂšve ton Blob
Ma chĂšre et tendre est enseignante de SVT. Elle a donc inscrit son collĂšge pour participer Ă une expĂ©rience Ă©ducative proposĂ©e par le CNES basĂ©es sur l’Ă©tude du comportement du Physarum Polycephalum (alias le Blob) en collaboration avec la mission Alpha de Thomas Pesquet.
Il s’agit de comparer le comportement du Blob sur Terre dans les conditions de pesanteur terrestre avec son comportement en microgravitĂ© dans l’ISS.
Pour Ă©tudier le comportement, des photos de son Ă©volution doivent ĂȘtre prises suivant les diffĂ©rents protocoles proposĂ©s.
Le Blob ne supportant pas la lumiĂšre, il doit ĂȘtre placĂ© dans un endroit sombre. Il faut donc Ă©clairer la scĂšne aux moments idoines lors des prises de photos.
Pour prendre les photos, plusieurs possibilitĂ©s Ă©taient offertes aux enseignants, notamment Ă base de tablette et d’appli Android. Mais ayant un Rasperry Pi 3 et la Pi Camera Ă la maison qui ne servent pas, j’ai proposĂ© de rĂ©aliser un montage plus original et fait maison. Ce montage comprend :
- l’utilisation du Raspberry Pi munie de la Pi Camera, dâune LED et dâun script Bash pour la prise de photos Ă intervalles rĂ©gulier.
- la mise en place dâun serveur web (Apache) pour la consultation des photos prises et vĂ©rifier lâĂ©tat du Blob sans ouvrir la boite pendant la durĂ©e de lâexpĂ©rience.
- l’utilisation de ffmpeg pour la rĂ©alisation dâun timelapse Ă partir des photos.
Pré-requis :
- 1 Raspberry Pi 3 ou 4 : lien
- 1 Raspberry Pi Camera v2 (ou v1) : lien
- 1 Relais type Mosfet : lien ou lien
- 1 LED (1W) : lien
- Jumper cables (femelle-femelle, male-femelle, male-male) : lien
Montage :
La complexitĂ© du montage rĂ©side dans le fait quâil nâest pas possible d’alimenter directement la LED Ă partir d’une broche GPIO. Le courant de sortie est trop faible : 20-30mA.
Il faut donc utiliser un relais (un transistor Mosfet), pilotĂ© depuis une broche GPIO, pour jouer le rĂŽle d’interrupteur. On pourra alors utiliser la broche +5V ou +3.3V, qui elles, permettent un courant bien supĂ©rieur.
Le choix de la LED sâest portĂ© sur une LED de 1W avec une tension VF comprise entre 3.2-3.6V. En utilisant la broche power 3.3V du Raspberry Pi, il nây pas besoin de rĂ©sistance pour limiter le courant.
Apparté électronique :
Par sécurité, il serait conseillé de mettre une résistance devant la LED (15ohm suffisent). Mais sans résistance, le montage réalisé avec les composants présentés en prérequis fonctionne sans accroc sur de longues périodes.
Avec l’alimentation 3.3V on obtient un courant de 240mA environ, soit un flux lumineux idĂ©al pour Ă©clairer le Blob.
Pour le montage, il faut connecter la broche +3.3V du Raspberry Pi sur l’entrĂ©e + du Mosfet, ainsi que le GND sur le GND du Raspberry Pi. Puis enfin, connecter lâOut sur l’anode de la LED.
Installation :
Nous partons du principe que Raspbian est installé sur le Raspberry Pi (voir ce tutoriel)
|
|
Test :
On regarde si la Pi Camera fonctionne bien :
|
|
â Il faut rĂ©gler la focale de la camĂ©ra pour avoir une bonne nettetĂ© Ă faible distance (lien).
On contrĂŽle les pins GPIO
|
|
â Petit script Bash que j’ai Ă©crit pour vĂ©rifier rapidement que lâallumage et lâextinction de la LED fonctionne.
Usage
DĂ©marrer le timelapse :
|
|
Les sources sont sur mon dépot Github
Explication :
La fonction timelapse() permet de prendre les photos à intervalle régulier sur une période de temps.
La variable sample_period permet de dĂ©finir lâintervalle de temps entre 2 photos. Il est exprimĂ© en seconde.
La variable nb_picture permet de définir le nombre de photos qui seront prises.
DurĂ©e de lâexpĂ©rience = sample_period x nb_pictures
Si lâon souhaite que lâexpĂ©rience dure 24h (soit 86400 secondes) avec un intervalle de 10 minutes entre chaque prise (600 secondes) alors nb_pictures = 86400 / 600 = 144 photos
La fonction take_picture() prend les photos en utilisant lâutilitaire raspistill prĂ©sent de base sur la distribution.
Chaque photo est nommée suivant le pattern suivant : timelapse_YY-mm-dd_HH:MM:SS.jpg.
Cela permet de faire apparaĂźtre lâhorodatage directement dans le nom de photo, ce qui plus commode Ă utiliser et Ă visualiser que de rechercher ces informations dans les propriĂ©tĂ©s du fichier.
Il y a deux fonctions dâencodage pour crĂ©er la vidĂ©o de timelapse Ă partir des photos prises :
- encoding_1() utilise mencoder (basé sur ffmpeg) et produit un timelapse de moyenne résolution avec poids faible et un traitement rapide pour le processeur du Pi.
- encoding_2() utilise directement ffmpeg et produit un timelapse avec une rĂ©solution HD (1080p). Le traitement de lâencodage est plus long (compter 5 minutes pour 144 photos Ă 15fps) pour poids dâenviron 150Mo.
encoding_2() se veut lossless, lĂ oĂč encoding_1() se veut rapide et lĂ©ger.
Les 2 fonctions peuvent sâutiliser en fonction des besoins, il suffit de changer le code en dĂ©commentant la ligne avec la fonction voulue et en commentant lâautre.
|
|
Les vidĂ©os produites sont Ă 15fps mais ce paramĂštre peut ĂȘtre modifiĂ© au niveau des fonctions encoding_1() et encoding_2().
A 15fps, 6 jours de capture produisent une vidĂ©o dâune durĂ©e dâenviron 1 minute.
Les autres fonctions sont des fonctions utilitaires. LâintĂ©rĂȘt de les dĂ©crire ici nâest pas pertinent.
A noter que le script se lance avec les droits superuser (sudo). Ceci est lié aux fonctions manipulant les pins GPIO.
Il semble exister des possibilitĂ©s pour manipuler les pins GPIO en tant que user normal mais la mise en Ćuvre est loin dâĂȘtre simple et ne semble pas parfaitement fonctionnelle. (lien)
Comme timelapse.sh est lancé sur une période assez longue (24h à une semaine suivant les protocoles expérimentaux), il est important de ne pas lier le processus au terminal qui le lance.
Pour cela il faut utiliser lâexĂ©cutable nohup.
|
|
Cette commande a le dĂ©faut de ne pas faire apparaĂźtre le prompt de sudo demandant le mot de passe de lâutilisateur.
Afin de palier à cela, la mécanique suivante est employée :
|
|
Le mot de passe de lâutilisateur ayant Ă©tĂ© demandĂ© pour la commande sudo su, il ne le sera normalement pas pour la commande sudo nohup ./timelapse.sh (comportement que lâon retrouve sur les distro type Debian/Ubuntu notamment).
Dernier point : un fichier de log timelapse.log sâalimente dans le rĂ©pertoire oĂč sont stockĂ©es les photos. Il permet de suivre lâĂ©volution des prises de vue et dĂ©tecter si un souci est survenu (notamment lâarrĂȘt du script pour une raison X).
Aperçu :