On a découvert dans le dernier numéro de Make un article de Thomas Burg et Johannes Gottwald consacré à la splash photography. Cette technique, apparemment très prisée par les publicitaires, consiste à prendre en photo un objet qui tombe dans un liquide. En général, le résultat est particulièrement spectaculaire. Évidement, ça nous a donné très envie d'essayer...
Thomas Burg et Johannes Gottwald ont utilisé une approche plutôt mécanique: ils ont construit un système contrôlé par un Arduino pour lâcher automatiquement l'objet, puis déclencher l'appareil photo au bout d'un délai bien précis. On a opté pour une méthode plus pragmatique: une barrière lumineuse placée au dessus d'un aquarium
La barrière lumineuse
L'idée est de fabriquer une simple barrière lumineuse à l'aide de quelques LED et photo-transistors infrarouges. On a utilisé des HIR333-A, de Everlight Electronics et des BPW17N de Vishay Telefunken qu'on a tout simplement connectés a un Yocto-Knob. En effet, le Yocto-Knob est capable de mesurer le changement de résistance des photo-transistors lorsqu'ils sont plus ou moins éclairés par une lumière infrarouge. Pour alimenter les LED on a utilisé le 5V du module en intercalant une petite résistance de 200Ω.
câblage des diodes et photo-transistors IR
On a placé les diodes et les photo-transistors IR dans deux barres de plastique noir percées de trous régulièrement espacés. Puis on a sommairement fixé ces barres sur le haut de notre aquarium, ainsi à chaque fois que quelque chose entre, ou sort, de l'aquarium il peut être détecté.
Des LED et photo-transistors IR sont placés dans des barres en plastique...
...installées face à face sur le haut de l'aquarium
Pour déclencher la photo on a utilisé un simple Yocto-Relay sur la prise télécommande de l'appareil. C'est une technique qu'on a employé à de nombreuses reprises.
La partie logicielle
Pour changer, on a écrit le soft de contrôle en Delphi. C'est l'affaire de quelques minutes. La seule astuce consiste à utiliser les entrées du Yocto-Knob en mode callback pour être aussi réactif que possible. La première chose à faire consiste initialiser l'API à l'aide de registerHub.
begin
writeln(errmsg);
halt;
end;
Puis on cherche le relais qui commande l'appareil photo, il se trouve qu'on lui a donné le nom logique "shutter", ce qui permet de le retrouver facilement
if not(relay.isonline()) then
begin
writeln('No Relay found');
halt;
end;
Ensuite on énumère toutes les entrées AnButton. Il s'agit des entrées auxquelles sont connectés les photo-transistors. Pour chacune de ces entrées on affecte un callback detect qui est une procédure qui sera automatiquement appelée à chaque fois qu'une valeur lue sur une des entrées du Yocto-Knob change une variation significative.
while (button<>nil) do
begin
button.registerValueCallBack(detect);
button:=button.nextAnButton();
end;
Ensuite, il ne reste plus qu'à attendre dans une boucle sans fin que le callback fasse sont travail.
while true do
Ysleep(100,errmsg);
Le code du callback consiste à déclencher le relais de l'appareil photo si la valeur lue est plus grande qu'un certain seuil et que la dernière photos a été prise il y a plus de 2.5 secondes. On a rempli l'aquarium à moitié, et il se trouve que le temps nécessaire pour parcourir le trajet entre le haut de l'aquarium l'eau correspond plus ou moins au temps nécessaire pour détecter l'objet et prendre la photo, on déclenche donc le relais dès qu'on a détecté l'objet. Au besoin on aurait pu introduire un petit retard en utilisant relay.delayedPulse au lieu de relay.pulse.
begin
if (strToint(value)>500) and (yGetTickcount()-lastevent>2500) then
begin
relay.pulse(250);
lastevent:=yGetTickcount();
end;
end;
C'est tout, vous pouvez télécharger le programme complet ici.
Avant de commencer, il est préférable de calibrer les entrées du Yocto-Knob. Cela peut être fait très facilement à l'aide du VirtualHub: il suffit de mettre les entrées en mode calibration et promener devant les capteurs un des objets qu'on compte photographier. Ainsi chacune des entrées mémorisera l’intervalle [min..max] de valeurs observées pendant la calibration et donnera ensuite des valeurs normalisées par rapport à cet intervalle, optimisant ainsi la sensibilité du système.
Ne pas oublier de calibrer les entrées du Yocto-Knob.
Et ça marche?
Ca marche même plutôt pas mal. En jouant sur la hauteur à laquelle on lâche l'objet on peut obtenir des résultats assez différents mais toujours raisonnablement reproductibles. Un des gros intérêt de cette méthode est que la mise en place avant chaque photo est réduite à sa plus simple expression: on lâche l'objet au dessus de l'aquarium, la photo est prise automatiquement et on peut alors récupérer l'objet au fond de l'eau et recommencer aussitôt.
Conclusion
La splash photography est une activité assez amusante, relativement facile d'accès, en tout cas avec des modules Yoctopuce. Ceci dit, on a noté quelques pièges à éviter pour ne pas perdre trop de temps:
- Faites la mise au point manuellement et désactivez l'autofocus, sinon l'appareil photo sera trop lent.
- Pour obtenir des photo nettes il vous faudra une grande vitesse d'obturation et beaucoup de lumière, plutôt qu'un flash qui risque de se refléter dans l'aquarium utilisez plutôt un projecteur, si possible à LED. Un projecteur halogène émet beaucoup d'infrarouges parasites qui rendent la détection plus difficile.
- Si l'appareil se met à prendre des photos en boucle, vérifiez s'il n'y a pas une goutte d'eau qui serait venue se mettre devant une LED ou un capteur
- Pensez à enlever régulièrement les petite bulles qui se forment progressivement sur les parois de l'aquarium, rien de tel pour gâcher une belle photo.
- Lorsqu'ils tombent dans l'eau, certains objets peuvent envoyer des projections à une distance ahurissante, ne posez pas l'ordinateur de contrôle trop près :-)