Récemment, nous avons bricolé une cabine photographique pour une fête de famille et on s'est dit que ça pourrait intéressé d'autres personnes. Nous allons donc voir comment monter une cabine photographique à l'aide d'un Raspberry Pi, d'une imprimante photo Canon Selphi, de deux lampes et d'un Yocto-PowerRelay-V3.
Nous ne sommes pas partis d'une feuille blanche. Le projet TouchSelfie, qui est à la base un article de Make Magazine, documente étape par étape comment construire une cabine photographique à l'aide d'un Raspberry Pi, du module caméra et d'une imprimante photo.
Toutefois, pour notre cabine photographique nous avions besoin d'ajouter deux grosses lampes pour éclairer le sujet pendant la prise de vue. Nous avons donc ajouté deux lampes à LED qui sont contrôlées par l'application en utilisant un Yocto-PowerRelay-V3. Ces deux lampes sont éteintes par défaut et ne sont allumées que lors de la prise de vue.
Construction
La cabine photographique est composée des éléments suivants:
- Un Raspberry Pi 4
- Un écran tactile Raspberry Pi
- Un module caméra HQ Raspberry
- Une imprimante Canon Selphy CP900
- Un Yocto-PowerRelay-V3
- Deux lampes à LED
Les auteurs de l'article et les développeurs ont fait un excellent travail de documentation. Chaque étape est bien documentée et il y a même des vidéos Youtube sur le sujet. Nous n'allons donc pas nous attarder sur la mise en place et la construction de la cabine photographique de base. Nous allons voir ce qu'il faut faire pour ajouter la possibilité de contrôler l'éclairage.
Voilà notre cabine photographique assemblée
Le câblage est très simple, nous avons simplement branché le Yocto-PowerRelay-V3 sur un port USB du Raspberry Pi 4. L'alimentation 220V des lampes est branchée sur la sortie B du Yocto-PowerRelay-V3.
Le tout est glissé dans une boîte de dérivation qui est fixée à l'arrière de la cabine photographique.
Le Yocto-PowerRelay-V3 permet de contrôler l'alimentation des lampes
Quand le Yocto-PowerRelay-V3 est au repos (état A) les lampes sont éteintes, quand le relai est activé (état B) les lampes sont allumées.
Modifier l'application
L'application d'origine est écrite en Python et est donc facilement modifiable. En regardant le code, on voit que les modifications à faire sont toutes dans le fichier user_interface.py.
Pour pouvoir utiliser notre librairie de programmation, il faut commencer par l'installer à l'aide de PyPI et de la commande suivante:
Dans le fichier source il faut commencer par ajouter les import pour les classes YAPI et YRelay que nous allons utiliser plus bas.
from yoctopuce.yocto_api import *
from yoctopuce.yocto_relay import *
...
Il faut ensuite initialiser la librairie à l'aide de la méthode YAPI.RegisterHub au début de l'application.
...
log.info("Yoctopuce lib : " + YAPI.GetAPIVersion())
errmsg = YRefParam()
if YAPI.RegisterHub("usb", errmsg) != YAPI.SUCCESS:
log.critical("Unable to access USB port: "+errmsg.value)
sys.exit()
Enfin, la méthode snap() de l'objet UserInterface ne prend pas immédiatement la photo, mais elle affiche un compte à rebours à l'écran, puis prend la photo. Il faut donc commuter le relai au début du compte à rebours jusqu'à la prise de vue.
Le code est le suivant:
YAPI.UpdateDeviceList(errmsg)
yrelay = YRelay.FirstRelay()
if yrelay is not None:
nb_sec = (2 + config.countdown1)
yrelay.pulse(nb_sec * 1000)
L'appel à la méthode YAPI.UpdateDeviceList n'est pas indispensable, mais il permet de détecter si un Yocto-PowerRelay-V3 est branché après le démarrage de l'application. Ce n'est pas la méthode la plus efficace de traiter ce problème, mais c'est celle qui nécessite le moins de changement dans le code de l'application. Grâce à cet appel, il n'est pas nécessaire de redémarrer l'application si l'on a oublié de brancher le relai.
Ensuite, on regarde s'il y a un Yocto-PowerRelay-V3 présent à l'aide de la méthode FirstRelay. Si c'est le cas, on appelle la méthode pulse avec la durée du compte à rebours plus 2 secondes. Notez qu'il est plus simple et plus sûr d'utiliser la méthode pulse que d'allumer les lumières au début de la fonction et de les éteindre après la prise de vue. En effet, la méthode pulse garantit que les lumières seront éteintes après X secondes, de cette manière même si le programme plante au moment de la prise de vue, par exemple s'il n'y a plus d'espace disque, les lumières ne resteront pas allumées.
Nous avons fait quelques autres petites modifications au programme pour customiser l'interface, mais ces modifications ne sont pas liées aux modules Yoctopuce, donc nous ne les détaillerons pas dans cet article.
Le code source de l'application est disponible sur GitHub:
https://github.com/yoctopuce-examples/TouchSelfie-extended
La cabine photographique en action
Conclusion
Comme nous venons de le voir, il est relativement facile d'adapter un projet pour y intégrer nos modules. Dans le cas de cette cabine photographique, le gros du travail avait déjà été fait par les développeurs @laurentalacoque et @wyolum. Les modifications ne nous ont pris qu'une petite heure.