Bonjour,
Cela faisait un moment que je souhaitais réaliser un boitier de commande pour réaliser des photos haute vitesse par déclenchement d’un flash ou de l’appareil photo.
Par le flash avec obturateur de l’appareil ouvert et dans le noir d’un pièce afin d’avoir des vitesses très rapides par le flash et ainsi de figer l’objet.
Il existe des solutions toutes faites mais qui soit ne réponde pas à tous mes besoins, soit sont trop onéreuses ou alors utilise un smartphone. Et puis, le DIY, c’est sympa surtout quand on navigue dans les autres univers de passions et que le résultat est à la hauteur de ce que l’on espérait. Je voulais donc tester le micro-controlleur Arduino.
Le cahier des charges :
– Déclencher un flash ou un appareil photo (en l’occurrence, ici, un boitier Nikon avec une prise 10 broches) avec possibilité de mise au point avant le déclenchement.
– Pouvoir gérer plusieurs types de capteurs sans faire de programmation ultérieure
– Faire de la détection sur :
- un son ou bruit
- une barrière infrarouge
- un contact à fermeture
- un déclenchement manuel.
Le matériel :
– des capteurs (IR, Sonore, …)
– un micro-controlleur type Arduino (acheté chez …) ,son shield (pas obligatoire) et deux « relais » (un seul si l’on ne veut pas l’autofocus avant le déclenchement). En fait, les relais ne sont pas assez rapides pour le flash. En exemple, celui que j’ai regardé avait un délai de latence de 10 ms. Une éternité dans l’univers de la photo haute vitesse.
J’ai donc cherché un peu et ai trouvé des solutions à base d’arduino qui utilisait des triacs ou des opto-isolateurs. La, on parle de 100 Micro-secondes, soit 100 fois plus rapide.
– un boitier (pour faire home made mais joli quand même) avec un Reset, un bouton poussoir pour déclenchement manuel, un boitier pour piles (mais on peut l’alimenter en direct) et un bouton Marche/Arrêt
– un cordon jack 2.5 – 10 broches Nikon (trouvé sur ebay)
– un cordon Pc sync flash mâle-mâle (peut être remplacé par un cordon jack) (trouvé sur ebay)
– un sabot flash avec entrée sync flash et/ou jack
– deux prises usb A pour déporter l’émetteur et récepteur infra-rouge
– un encodeur rotatif pour le choix de l’entrée
– quelques leds et résistances
Coût de l’ensemble environ 80 €
On peut y ajouter un écran LCD (env. 10€), mais je suis parti sur des voyants à LED.
La réalisation par étapes :
Etape 1 : Faire un plan pour positionner les éléments, avoir la liste des fournitures requises, de l’implantation des divers éléments et ainsi se donner une bonne idée de la réalisation finale.
« Brouillons »
Etape 2 : Commander le matériel et/ou récupérer dans son stock.
Il y’a pas mal de choses que l’on peut soit récupérer sur du vieux matériel ou alors faire des variantes sur le types de prises utilisées. Par exemple pour le flash, on peut se contenter d’un banal cordon mono jack 3.5 et d’une fiche femelle mono à souder. Ou alors, pour l’ infra-rouge, on peut récupérer des ports PS/2 clavier et souris ainsi que les câbles. Cela permet de différencier plus facilement l’émetteur du récepteur.
Moi, je suis partis sur de la récupération et du neuf.
Etape 3 : Le câblage
Réaliser sans boitier pour bien tester tous les éléments et les actions qui en découlent, le bon fonctionnement de l’ensemble. C’est ballot de tout monter et devoir déjà démonter si une petite erreur s’est glissée.
Pour faire les tests, je me suis servi de la base shield Grove 1.3
C’est pratique car il n’y a pas de soudures à faire.
Donc :
– D2 = Voyant de fonctionnement et déclenchement
– D3 = Emetteur Infrarouge
– D4 = Bouton Marche/Arrêt (ne coupe pas le micro-controlleur mais permet de faire des manips sans tout débrancher
– D5 = Relais 1 pour commande flash et AF (opto-coupleur)
– D6 = Relais 2 pour commande appareil photo en déclenchement
– D7 = Bouton poussoir ou contact tactile pour commande manuelle
– D8 = Encodeur pour choix de l’entrée
– A0 = Capteur sonore
– A1 = Potentiomètre pour réglage de la sensibilité de la détection sonore
– A2 = Entrée pour détection son sur jack 3.5
– A3 = Récepteur Infrarouge
Etape 4 : La programmation
Pas le plus dur, pas le plus simple non plus, cela dépend de ses propres compétences. Il est assez aisé de trouver sur @ ce que nous avons besoin pour la réalisation. Ensuite, il y a quelques forums avec des gens sympas qui aide pas mal.
Voici le code pour les tests (n’étant pas un expert en programmation, j’ai fait avec les moyens du bord, à savoir ma maigre connaissance du langage, mais cela fonctionne.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 #include <IRremote.h>IRsend irsend; // déclaration de l'objet émetteur (pin D3)int dclport=0;int niveaudefini = 0;int niveauacquis = 0;int attente = 0;//encodeurint val;int encoder0PinA = 8;int encoder0PinB = 9;int encoder0Pos = -1;int encoder0PinALast = LOW;int n = LOW;void setup(){pinMode(2, OUTPUT); // voyant de fonctionnementpinMode(3, OUTPUT); // capteur emetteur IRpinMode(5, OUTPUT); // optocoupleurpinMode(6, OUTPUT); // relaispinMode(7, INPUT); // bouton poussoirpinMode (encoder0PinA,INPUT); //8pinMode (encoder0PinB,INPUT); //9pinMode(10, OUTPUT); // voyant choix1pinMode(11, OUTPUT); // voyant choix2pinMode(12, OUTPUT); // voyant choix3pinMode(13, OUTPUT); // voyant choix4pinMode(A0, INPUT); // capteur sonorepinMode(A1, INPUT); // potentiometre pour sensibilitee détection sonorepinMode(A3, INPUT); // capteur recepteur IRirsend.enableIROut(38); // crée une sortie modulée à 38KHz sur la pin 3Serial.begin(9600); //. pour les tests, affichage des détections ou non}void loop(){if (digitalRead(4)==HIGH){digitalWrite(2, HIGH);int sensorsoundvalue = analogRead(A0);niveauacquis = map(sensorsoundvalue,0,1023,0,125);int sensorrotaryvalue = analogRead(A1);niveaudefini = map(sensorrotaryvalue,0,1023,0,255); // Division du sensorrotaryvalue (max 1024) pour plus grande plage détectionirsend.mark(3); // envoi du signal pour une durée illimitéeboolean mesure1 = digitalRead(A3); // première mesuredelay(5); // délaiboolean mesure2 = digitalRead(A3); // seconde mesureboolean etat = mesure1 * mesure2; // comparaisonint chgtetat = 0; // pour limiter a un seul affichagen = digitalRead(encoder0PinA);if ((encoder0PinALast == LOW) && (n == HIGH)) {if (digitalRead(encoder0PinB) == LOW) {encoder0Pos--;chgtetat = 1;}else {encoder0Pos++;chgtetat = 1;}Serial.print ("Selection ");Serial.print (encoder0Pos);}encoder0PinALast = n;switch (encoder0Pos) // Affichage du sensor qui a été activé et déclenchement relais.{case 0:if (attente == 10){Serial.println("En attente selection du capteur");digitalWrite(2, LOW);Coupuresvoyants();attente == 0;}else{attente = attente+1;}delay(100);// delai entre deux boucles pour une meilleure stabilitébreak;case 1: // Capteur Sonoreif (chgtetat == 1){Serial.println(" Capteur Sonore");Coupuresvoyants();digitalWrite(10, HIGH);chgtetat = 0;}if (niveauacquis>niveaudefini){Declenchement();Serial.print("Declenchement par capteur sonore niveau regle : ");Serial.print("niveau acquis :");Serial.print(niveauacquis);Serial.print(" niveau regle :");Serial.println(niveaudefini);chgtetat = 1;}break;case 2: // Bouton Poussoirif (chgtetat == 1){Serial.println(" Capteur Bouton Poussoir");Coupuresvoyants();digitalWrite(11, HIGH);chgtetat = 0;}if (digitalRead(7)==HIGH){Declenchement();Serial.println("Declenchement par bouton poussoir");chgtetat = 1;}break;case 3: // Capteur IRif (chgtetat == 1){Serial.println(" Capteur Faisceau IR");Coupuresvoyants();digitalWrite(12, HIGH);chgtetat = 0;}if (etat == HIGH) // si les deux lectures voient une coupure{Declenchement();Serial.println("Declenchement par coupure faisceau IR");chgtetat = 1;}break;case 4: // Capteur Auxilliaireif (chgtetat == 1){Serial.println(" Entree Auxilliaire");Coupuresvoyants();digitalWrite(13, HIGH);chgtetat = 0;}if (analogRead(A6) == HIGH){Declenchement();Serial.println("Declenchement par entree auxilliaire");chgtetat = 1;}break;}}else{Serial.println("En Arret");digitalWrite(2, LOW);Coupuresvoyants();}}void Declenchement(){digitalWrite(6, HIGH); // déclenchement Optocoupleur - Flash et/ou AF boitierdelay(100); // temporisation pour AutofocusdigitalWrite(5, HIGH); // déclenchement relais pour obturateurdigitalWrite(2, LOW); // voyant de fonctionnementdelay(500); // délaidigitalWrite(6, LOW); // fin optocoupleurdigitalWrite(5, LOW); // fin relais obturateurdelay(900);}void Coupuresvoyants(){digitalWrite(10, LOW);digitalWrite(11, LOW);digitalWrite(12, LOW);digitalWrite(13, LOW);}
Etape 5 : Les tests
La on teste tous les capteurs, un par un avec l’appareil et/ou le flash.
Comme je suis parti d’un modèle avec double relais pour gérer l’autofocus et le déclenchement du boitier Nikon, je teste d’une part l’autofocus et ensuite le déclenchement avec un délai (réglable).
Pour une utilisation sans autofocus, n’ayant mis qu’un seul poussoir, il faut débrayer l’autofocus de l’appareil. Le bouton poussoir ne gére donc que le déclenchement de l’appareil et/ou le déclenchement du flash.
Etape 6 : Le montage final.