TUTO CHDK /ARDUINO pour contrôle DU zoom et du déclenchement d un s95



Documents pareils
ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Bien commencer avec un LaunchPad MSP430G et un Breadboard

Tuto pour connecter une source RVB RGB à un moniteur Commodore / Amiga

Configuration de la Borne Interactive

MODE D EMPLOI Boitier de programmation SKY

Comment se connecter au dossier partagé?

1 sur 5 10/06/14 13:10

SECURIT GSM Version 2

MultiPlayer Lecteur Audio et vidéo MODE D'EMPLOI

LCD COLOR MONITOR (English French Translation)

Windows 7, Configuration

Alors pour vous simplifiez la vie, voici un petit tuto sur le logiciel de sauvegarde (gratuit) SyncBack.

Projet d auto-construction d un chauffe-eau solaire au pays des Cigales

Prototypage électronique

Trousse de sécurité d'alarme - NVR

Utilisation du visualiseur Avermedia

GUIDE D INSTALLATION RAPIDE DEXH264

Guide utilisateur. Parrot MKi9100. Français. Parrot MKi9100 Guide utilisateur 1

fullprotect inside EOLE SPEie RS E-SPEie V-0.6A-RS 1.0 revision Protection environnement Datasheet édition française

TP Vidéo surveillance Bac pro SEN CCTV. Lycée de L Aa 1

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Changer le disque dur interne sur une Playstation 3

Education Delivery Intelligent Tool

La conformité de la déclaration peut être consultée sur le site web: ou à l'adresse suivante :

Organigramme / Algorigramme Dossier élève 1 SI

Solar Scintillation Monitor Manuel utilisateur

HAM06WS SYSTÈME D ALARME SANS FIL

ENREGISTREUR DE TEMPERATURE

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

ESPACE MULTIMEDIA DU CANTON DE ROCHESERVIERE

Initiation à l informatique. Module 7 : Le courrier électronique ( , mail)

Carte Relais GSM (Manuel Utilisateur)

Fournir un guide visuel des différentes étapes nécessaires à l utilisation d une imprimante µdelta.

METTRE A NIVEAU VOTRE ORDINATEUR

Tutoriel pour remplacement écran noir et blanc par un écran couleur

Adobe Photoshop. Bonnes pratiques pour une utilisation professionelle CHAPITRE 7

Création d'un questionnaire (sondage)

PRECAUTIONS DESCRIPTION DU PRODUIT

Manuel d'utilisation Version abrégée

Comment récupérer toutes vos données perdues ou effacées gratuitement!

Notice de montage, d utilisation et de maintenance

Upgrade du Huawei U8230 : Android 2.1 et rom custom

Fiche Pratique. MAJ le 10/04/2013

COURS WINDEV NUMERO 3

LPP SAINT JOSEPH BELFORT MODE OPERATOIRE ACTIVINSPIRE. Bonne utilisation à toutes et tous! UTILISATION DES TBI LE LOGICIEL ACTIVINSPIRE

Guide des fonctions avancées de mywishtv

Table des matières. Pour commencer... 1

Foire aux questions sur l application Bell Télé

Projet Robot Centaure

Créer des étiquettes avec les adresses d'un tableau Calc

Dossier table tactile - 11/04/2010

Dossier technique. Présentation du bus DMX et Utilisation des options EL13 / EL14 ERM AUTOMATISMES INDUSTRIELS 1 LE PROTOCOLE DMX 2

Guide de paramétrage des contrôleurs Goldenmotor

La maison connectée grâce au courant porteur en ligne (CPL)

TTD-03.2 Tourniquet tripode électromécanique à socle Installation intérieure

Presse Plieuse Synchronisée. Gamme PSN SPECIFICATIONS TECHNIQUES PRESSE PLIEUSE. Gamme PSN

Suivant les windows, le signal pour indiquer l imprimante par défaut est un petit rond noir ou vers avec un V à l intérieur.

SYSTÈMES DE COMMANDE. The Art of Mobility

Notice de fonctionnement DVR H Méthode de Visionnage ESEENET

Récupération de fichiers effacés avec Recuva 1/ 5

Petit guide pratique de dépannage du système d alerte centralisée (modèles de 1980 à 1988)

Guide de montage du PRisme. version 1.2.2

Live box et Nas Synology

Manuel d utilisation Alarme Auto na-2018 Attention :

GUIDE UTILISATEUR SYSTEMES CCTV

POSTE INFORMATIQUE. Mr DUJARDIN a acheté du matériel informatique sur une boutique en ligne afin de se monter un PC. N'y

Circuit comportant plusieurs boucles

Wi-Fi Remote. Manuel de l utilisateur

AUTOPORTE III Notice de pose

RE BL. C o n v e r t i s s e u r I n f r a r o u g e B l u e t o o t h. Manuel utilisateur

Tutorial et Guide TeamViewer

MODE D EMPLOI LOGICIEL DE PILOTAGE CROIX SMART 5.0

FAIRE UN PAIEMENT TIPI

COMMUNICATION PC/MINITEL


KeePass - Mise en œuvre et utilisation

Comment créer votre propre lampes LED

Boîtier pour disque dur externe 3,5" (8,89cm) USB 2.0

COMMENT FAIRE? Comment bien se servir de WinHIIP? Expérimenter grâce aux guides imprimés!

Système de vidéoconférence avec périphériques

AMC 120 Amplificateur casque

MODE D EMPLOI HAA51 DETECTEUR PASSIF D INTRUSION A INFRAROUGE INTRODUCTION

Transmetteur Wifi Heden NOTICE D UTILISATION

ESPACE MULTIMEDIA DU CANTON DE ROCHESERVIERE

Enregistreur de Température pour PC DALLAS 1820

TP N 5 EDF, compteur

Assistant d e tablissement de Tableaux

CONSTRUCTION D UN CHAUFFE EAU SOLAIRE

Initiation à la programmation en Python

USER GUIDE. Interface Web

LS 162e. Profitez-en! WiFi Car DVR

Portier Vidéo Surveillance

NOTICE D UTILISATION

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

TRUECRYPT SUR CLEF USB ( Par Sébastien Maisse 09/12/2007 )

MANUEL D UTILISATION POUR APPAREILS ANDROID

Boîtier TV F200 Retransmetteur de chaînes à distance

Guide d Utilisation :

Tutoriel d'introduction à TOR. v 1.0

CHAQUE SYSTÈME À AFFRANCHIR EST UNIQUE

Transcription:

TUTO CHDK /ARDUINO pour contrôle DU zoom et du déclenchement d un s95 Slt à tous!!! Photographe et passionné par la technique, je ne pouvais pas passer à côté de la photographie aérienne Je me suis donc acheté un petit f450 avec une petite nacelle et une gopro Mais plus adaptée à la vidéo j en ai vite vu les limites J ai donc recherché un bon compact qui puisse être soulevé par mon quadriptére avec une bonne qualité d image, et me suis arrêté sur le petit s95. Voulant aller plus loin et pouvoir déclencher, zoomer via la radiocommande et aillant déjà utilisé le hack chdk pour les appareils Canon, je me lance dans l aventure J ai passé des heures sur différents forums Et maintenant, tout fonctionne. Je vais essayer de regrouper ici un maximum d infos en reprenant tout depuis le début : Ce que je veux : Déclencher (interrupteur) et Zoomer/dezoomer (potentiomètre) depuis ma radiocommande (futaba T8FG)

1-Je configure la voie 6 de ma radio sur un l interrupteur nommé HS (mais il marche) Qu'est ce qui sort de mon récepteur? Je branche mon oscilloscope sur la voie 6 de mon récepteur pour voir ce qu il se passe : Cable servo Futaba:

interrupteur à 0 oscilo à 5 milliseconde: Interrupteur à 0 oscilo à 500 microseconde: Je mesure une largeur d impulsion de 1.1ms inter à 0.

interrupteur à 1 et oscilo à 5 milliseconde: interrupteur à 1 oscilo à 500 microseconde: Je mesure une largeur d impulsion de 1.9ms inter à 1.

Je me branche maintenant sur la voie 8 de mon récepteur correspondant au potentiomètre (RD) de ma radio, et là, même comportement : 0% : 1.0 ms 50% : 1.5 ms 100% : 1.9 ms Tout va pour le mieux dans le meilleur des mondes Je vais donc mesurer ces impulsions avec une carte arduino et renvoyer l'info sur le port USB de mons95 qui sera interprétée par le hach CHDK MAIS NON, ces impulsions ne sont pas suffisamment précises. Pour mesurer ces impulsions, le plus simple est d'utiliser une carte (avec microcontroleur), j'ai choisi l'arduino

L'Arduino c'est QUOI? La carte arduino c'est koi... : Imaginons que l'on puisse dire à sa machine à laver : (sorties arduino) - Tu mets 3 litres d'eau - tu tournes le tambour 3 fois à droite puis 1 fois à gauche - tu chauffes à 60 - tu lâches de l'adoucissant dans 15 min Mais on peut aussi poser des questions : (entrées arduino) - combien de kg dans le tambour? - Quelle est la température extérieure? - WHO s on first? C est donc une sorte de petit ordinateur qui tient sur une petite carte électronique. Cette carte comporte des entrées, des sorties et un cerveau qui permet de faire des calculs très rapidement. Et avec ça on peut faire multitudes d application. Restons sur l exemple Machine à laver : mini machine à laver v0.01 contrôlée par carte arduino. Les entrées : - Mesure du poids du linge (capteur de poids, balance) E3 - Choix du programme (interrupteurs/programmateur)e2 - Mesure du niveau d eau (capteur de niveau/ Pressostat)E5 - Mesure de la température (thermomètre)e4 - Mesure de vitesse de rotation (tachymètre)e1 Les sorties : - Bloquer la porte (électroaimant)s3 - Remplissage de la machine (électrovanne)s2 - Chauffage de l eau (résistance)s1 - Rotation du tambour (moteur)s5 - Vidanger la machine (pompe)s4

Ce que va faire la carte le cerveau, le microcontrôleur de l arduino (suivant le programme choisi par interrupteur sur notre machine à laver) : - Bloquer la porte (sortie) - Prendre l information (entrée) poids du linge donnée par la balance. - Prendre l information (entrée) choix du programme donnée par l interrupteur rotatif. - Calculer suivant le programme choisi et le poids du linge la quantité d eau nécessaire dans le tambour (microcontrôleur) - Ouvrir l électrovanne (sortie) d arrivée d eau. - Surveiller le niveau d eau avec le capteur de niveau (entrée) - Doser la lessive/adoucissant suivant le poids grâce à une pompe (sortie) - Mettre en route le moteur (sortie) - Alimenter la pompe de vidange (sortie) pour évacuer l eau. - Calculer la vitesse maximale pour l essorage que pourra supporter la machine suivant le poids du linge mouillé (microcontrôleur) - Mettre en route le moteur (sortie) - Arrêter la machine après un temps X Et comment lui dire tout ça à notre petite carte? En lui balançant dans son petit port usb ce qu elle doit faire : 1 Mets à 1 la sortie S3 = Alimente l électroaimant pour bloquer la porte 2 Prends l information «poids» qui est sur l entrée E3 = Pèse le linge 3 Prends l information «Mode» sur l entrée E2 = Regarde le programme choisi 4 Si le «poids» est plus petit que 1.5 kg alors «remplissage eau» = 5 litres Si le «poids» est plus grand que 3 kg alors «remplissage eau» = 8 Litres Si le «poids» est plus grand que 4.5 kg alors «remplissage eau» = 12 Litres 5 Si Le «mode» est 1 alors «temps de lavage» = 30 min Si Le «mode» est 2 alors «temps de lavage» = 60 min 6 Mets la sortie S2 à 1 = Ouvre l électrovanne est laisse passer l eau. 7 Surveille L entrée E5 = Regarde le niveau de l eau Si E5 est égal ou supérieur à la valeur «remplissage d eau» de la ligne 4 alors mets la sortie S2 à 0 = ferme l électrovanne = coupe l arrivée d eau Sinon retourne à la ligne 7 8 Mets la sortie s5 à 1 = alimente le moteur = fait tourner le tambour 9 Fais une pause de «temps de lavage» définit ligne 5 10 Mets la sortie s5 à 0 = coupe le moteur 11 Mets à 0 la sortie S3 = coupe l électroaimant pour débloquer la porte

Mais cette carte ne parle pas comme nous et comprends plutôt ça : //Exemple machine à laver arduino //3.5 kg de linge et programme 2 choisi //défini les positions sur la carte des entrées ou des sorties int electroaimant = 1; // l'électroaimant est sur la broche 1 int moteur = 2;// le moteur est sur la broche 2 int electrovanne = 3; // l'électrovanne est sur la broche 3 int poids = 4;// la mesure du poids est sur la broche 4 int niveau_eau = 5;// le niveau d'eau est sur la broche 5 int mode = 6; // l'interrupteur mode est sur la broche 6 // Initialisation des differentes variables int val_poids=0; int remplissage_eau=3; int temps_de_lavage=0; int niv_eau=0; int val_mode=1; void setup() { // definition si entrées ou sorties pinmode(electroaimant, OUTPUT); // La broche électroaimant (1) est une sortie pinmode(poids, INPUT); // La broche poids (2) est une entrée pinmode(mode, INPUT); // La broche mode (3) est une entrée pinmode(electrovanne, OUTPUT); // La broche électrovanne (4) est une sortie pinmode(niveau_eau, INPUT); // La broche niveau_eau (5) est une entrée pinmode(moteur, OUTPUT); // La broche moteur (6) est une sortie //Programme principal void loop(){ digitalwrite(electroaimant, HIGH); // ferme la porte val_poids = digitalread(poids); // relève le poids val_mode = digitalread(mode); // relève le mode choisi // défini la quantité d'eau nécessaire suivant le poids if (val_poids > 1.5) {remplissage_eau = 5;; // si poids est plus grand que 1.5 alors la variable "remplissage_eau=5" if (val_poids > 3) {remplissage_eau = 8 ; ; // si poids est plus grand que 3 alors la variable "remplissage_eau=8" if (val_poids > 4.5) {remplissage_eau = 12 ;// si poids est plus grand que 4.5 alors la variable "remplissage_eau=12" //Défini le temps que doit tourner la machine suivant le mode de lavage choisi if (mode = 1) { temps_de_lavage=30;; // si le mode choisi est égal à 1 alors la variable "temps_de_lavage=30" if (mode = 2) {temps_de_lavage=60; ; // si le mode choisi est égal à 2 alors la variable "temps_de_lavage=60" // Rempli le tambour de la bonne quantité d'eau while (digitalread(niveau_eau) < remplissage_eau){// Tant que le niveau d'eau est plus petit que la variable remplissage_eau (8L dans notre exemple) digitalwrite(electrovanne, HIGH); ; //Alors ouvre l'électrovanne et rempli le tambour digitalwrite(electrovanne, LOW);// Ferme l'électrovanne //Fait tourner le tambour pendant le temps correspondant au mode de lavage choisi digitalwrite(moteur, HIGH);// Alimente le moteur delay (temps_de_lavage*60000); // pendant 60 min dans notre exemple "delay (1000)=1s" digitalwrite(moteur, LOW); // Coupe le moteur digitalwrite(electroaimant, LOW); // Ouvre le loquet de la porte // Et là vous prenez 8 litres d'eau sur vos godasses vu qu'il n'y a pas de gestion de vidange... En savoir plus sur cette petite carte : http://www.arduino.cc/fr/ Mais nous ne sommes pas sur le forum de Darty

Revenons à notre projet pour notre drone. Ce que la carte Arduino doit faire : Mesurer la taille des impulsions sur les voies 6 et 8 du récepteur de ma radiocommande et renvoyer une commande de zoom ou de déclenchement à mon appareil photo. Mesurer la taille des impulsions : Par bonheur une instruction existe et ne sert qu à ça c est Tatatin :PulseIn ( http://arduino.cc/fr/main/pulsein ) En gros, cette instruction mesure la taille d une impulsion à partir d un front montant ou descendant. // Test de l'instruction PulseIn sur une voie de récepteur de radiocommande // Le fil Data de la voie8 est connecté sur l'entrée/sortie 2 de l'arduino // potentiomètre (RD) de ma radio à 50%(milieu) int mesure_voie8; //déclaration de la variable void setup() { pinmode(2, INPUT); // La broche 2 de l'arduino est une entrée Serial.begin(9600); //initialise le port série de l'arduino afin d'envoyer des info via son port usb void loop() { mesure_voie8 = pulsein(2, HIGH); //mesure la taille des impulsions entrant dans la broche 2 à partir de leur front montant Serial.println(mesure_voie8); // Ecrit cette valeur sur le moniteur série du logiciel arduino delay (500); // Faits une pause d'une 1/2 seconde Et voiloux le résultat : Comme nous pouvons le voir nous sommes loin d une grande précision

Donc pour le zoom, et le déclenchement l idée est d envoyer à l appareil photo des informations représentatives de la position du potentiomètre ou de l interrupteur (donc de différentes longueurs d'impulsions reçues par le récepteur) et que cet appareil photo l interprète comme une des positions du zoom ou un ordre de déclenchement grâce au chdk. Au niveau câblage c'est simple: Le CHDK c'est QUOI? Je vais vous épargner le contrôle d un fer à repasser via chdk Qu est-ce qu un appareil photo : Un boitier avec des boutons, des lentilles, de l électronique (avec un microcontrôleur comme pour notre carte arduino) et un programme qui gère le tout (comme pour notre carte arduino). Mais dans un appareil photographique numérique, ce programme est inconnu et n est surtout pas modifiable!!! Et ba Si!!!

Des ptis gars ont réussi à entrer dans les compact canon et y insérer un programmes alternatifs (chdk) pour modifier/améliorer/ajouter des fonctions et surtout, c est ce qui nous intéresse ici, pouvoir réaliser des petits programmes (scipt) pour faire différentes actions à la suite des autres (commande de l autofocus, de l exposition, du zoom, des boutons etc.) Ex : Tu zoom à 0, tu fais un autofocus tu exposes à -1, tu shoot, tu exposes à 0, tu shoot, tu exposes à +1, tu shoot, tu zoom à 5 etc. Je ne vais pas développer ici son installation sur votre appareil, mais vous renvoie vers le site officiel : http://chdk.wikia.com/wiki/chdk En french : http://chdk.wikia.com/wiki/french/chdk_en_bref Et pour notre application, à quoi le chdk va servir? A interpréter une information venant de la carte arduino et de changer le niveau de zoom ou à déclencher en conséquent. Et comment parler à notre petit appareil canon? Depuis quelque temps, une nouvelle possibilité s offre à nous pour communiquer avec l appareil photo en passant directement par le port usb(11) de celui-ci. Dans le script cette fonction est : «get_usb_power» Cette fonction surveille le port USB (usb+ et -) et mesure la taille d une impulsion appliquer sur celui-ci à partir de son front montant un peu comme la mesure de la carte arduino) Plus d'infos ici : http://chdk.wikia.com/wiki/usb_remote

Pour activer le mode télécommande allez dans le menu chdk : Scripting parameters. Remote parameters. Et cocher enable remote.

Pour tester un petit programme simple qui va prendre une photo et mesurer le temps qu'un câble usb/mini usb est branché d'un coté sur votre pc et de l'autre sur votre appareil. a=0 do rem mets dans la variable "a" le temps pendant lequel le port usb est alimenté a=get_usb_power rem A partir du moment ou "a" est > 0 until a>0 rem prends une photo shoot rem affiche la taille sur l'écran de l'appareil photo print "taille=", a Pour tester la précision de du chdk sur la mesure d impulsion je réalise un ptit programme pour l arduino qui envoie en boucle sur le port USB de mon appareil une impulsion de 200ms toute les secondes. Citer void setup() { pinmode(5, OUTPUT); Serial.begin(9600); void loop() { digitalwrite(5,high); delay(200); digitalwrite(5,low); Et un programme CHDK qui mesure et affiche l impulsion reçue. a=0 :debut a=0 do a=get_usb_power until a>0 print "taille=", a goto "debut" Et voilà le résultat :

Pour une même valeur envoyée de 200ms on peut avoir un résultat de 14,15 ou 16... Bonjour la précision... Il va donc falloir ruser... Je me souviens de mes vieux cours d électronique Bit de start et bit de Stop En fait on envoie une impulsion d une certaine taille (ex :200ms/bit de Start ) pour dire à l appareil photo que le message que l on envoie commence, l appareil photo prend les informations (ici on va compter des impulsions de 50ms) et pour dire que le message est fini on envoie un bit de Stop (une impulsion de 120ms) En gros l appareil surveille la présence d une impulsion de 200ms (bit de Start) dès qu elle est détectée il compte le nombre d impulsions de 50ms envoyées et s arrête de compter seulement s il détecte une impulsion de 120ms (bit de Stop) Et le nombre d impulsion compté correspondra au niveau de zoom ou à un ordre de déclenchement. Programmes Voici donc la partie programme arduino qui envoie un bit de start, un nombre d'impulsion correspondant à la valeur du potentiomètre ou de l interrupteur de déclenchement et enfin un bit de stop : //2013-daniel wambach - www.macrogoutte.com - tarrinos@free.fr // commande du zoom et du déclenchement d'un appareil photo (canon s95) via chdk int mesure_voie6; // voie pour la mesure du zoom int mesure_voie8; // voie pour le déclenchement de l'appareil photo int niveau_zoom; // initialisation de la variable "niveau_zoom" int exniveau_zoom; // initialisation de la variable "exniveau_zoom" int i; // initialisation de la variable "i" int t; // initialisation de la variable "t" void setup() { // choix des entrée d2 et d3 de l'arduino pinmode(2, INPUT); // La broche 2 de l'arduino est une entrée ( surveille voie 8 ) pinmode(3, INPUT); // La broche 3 de l'arduino est une entrée( surveille voie 6 ) pinmode(5, OUTPUT); // La broche 5 de l'arduino est une sortie( vers appareil photo ) Serial.begin(9600); // Communique avec le port série à une vitesse de 9600

void loop() { debut: // mesure l'interrupteur dédié au déclenchement sur ma radiocommande mesure_voie8 = pulsein(2, HIGH); // Mesure la taille de l'impulsion sur la voie 8 if (mesure_voie8>1500){ // Si la taille de cette impulsion est supérieur à 1500 alors : digitalwrite(5,high); // commence une impulsion sur la broche 5 (front montant) delay(300); // Pendant 300 ms digitalwrite(5,low); // arrête cette impulsion (front descendant) delay (100); // faits une pause de 100 ms // mesure le potentiomètre dédié au zoom sur ma radiocommande delay (500); mesure_voie6 = pulsein(3, HIGH);// Mesure la taille de l'impulsion sur la voie 6 delay (10); Serial.print("mesure_voie6="); // Ecris sur le port série "mesure_voie6=" Serial.println(mesure_voie6); // Ecris sur le port série la valeur mesurée sur la voie 6 // Donne le niveau de zoom suivant les largeurs des impulsions mesurées sur le récepteur voie 6 // J'ai affiné ces chiffres en testant différentes positions de mon potentiomètre cranté // Mais en gros si on à 1ms pour un zoom à 10(téléobjectif) et 2ms pour un zoom à 0(grand angle) // 2ms-1ms = 1ms; 1ms/10 = 100 micro/sec // donc sans affiner : zoom1=1900; zoom2=1800; zoom3=1700 etc. // Mais à vous de mieux régler... Pour moi ça donne: if (mesure_voie6<1936) niveau_zoom=1; // Si la valeur mesurée sur la voie 6 est supérieure à 1936 alors zoom=1 if (mesure_voie6<1863) niveau_zoom=2; // Si la valeur mesurée sur la voie 6 est supérieure à 1863alors zoom=2 if (mesure_voie6<1765) niveau_zoom=3; // Si la valeur mesurée sur la voie 6 est supérieure à 1765 alors zoom=3 if (mesure_voie6<1681) niveau_zoom=4; // Si la valeur mesurée sur la voie 6 est supérieure à 1681 alors zoom=4 if (mesure_voie6<1602) niveau_zoom=5; // Si la valeur mesurée sur la voie 6 est supérieure à 1602 alors zoom=5 if (mesure_voie6<1518) niveau_zoom=6; // Si la valeur mesurée sur la voie 6 est supérieure à 1518 alors zoom=6 if (mesure_voie6<1443) niveau_zoom=7; // Si la valeur mesurée sur la voie 6 est supérieure à 1443 alors zoom=7 if (mesure_voie6<1359) niveau_zoom=8; // Si la valeur mesurée sur la voie 6 est supérieure à 1359 alors zoom=8 if (mesure_voie6<1274) niveau_zoom=9; // Si la valeur mesurée sur la voie 6 est supérieure à 1274 alors zoom=9 if (mesure_voie6<1191) niveau_zoom=10;// Si la valeur mesurée sur la voie 6 est supérieure à 1191 alors zoom=10 Serial.print("niveau_zoom");// Ecris sur le port série "niveau_zoom=" Serial.println(niveau_zoom);// Ecris sur le port série la valeur de "niveau_zoom" if (exniveau_zoom==niveau_zoom) { goto debut; // si il n'y a pas de changement, retourne au début du script exniveau_zoom = niveau_zoom; // bit de start pour dire à l'appareil photo qu'il peut commencer à compter le nombre d'impulsion correspondant au niveau de zoom digitalwrite(5,high); // Mets la broche 5 à 1 (commence l'impulsion(front montant)) delay(200); // Pendant 200ms "bit de start" digitalwrite(5,low); // Mets la broche 5 à 0 (arrête l'impulsion(front descendant)) delay (100); // une pause de 100ms // Envoie un nombre d'impulsion correspondant au niveau du zoom i=0; while (i<niveau_zoom){ // Tant que le nombre d'impulsion n'est pas envoyé recommence i=i+1; digitalwrite(5,high);// commence une impulsion sur la broche 5 (front montant) delay(50);// Pendant 50 ms digitalwrite(5,low);// arréte cette impulsion (front descendant) delay (100); // une pause de 100ms // bit de stop pour dire à l'appareil photo qu'il peut arrêter de compter digitalwrite(5,high); // commence une impulsion sur la broche 5 (front montant) delay(120); //// Pendant 120ms "bit de stop" digitalwrite(5,low); //arrête cette impulsion (front descendant) delay (100);// une pause de 100ms

Regardons ce qui sort maintenant de l'arduino sur la sortie d5 : Pour le potentiomètre à 0 : Et pour le potentiomètre à mi-course : Et ba moi je dis : Bravo arduino

Passons au script chdk qui devra interprété ce signal: rem déclaration des variables rem a pour la mesure d'une impulsion a=0 rem d pour le compteur d impulsion d=0 rem prends une photo (ça me sert à voir si le script est bien lancé) shoot rem fait une pause d'une seconde sleep 1000 rem sous-programme début :debut rem si y a une impulsion alors mesure la do a=get_usb_power until a>0 rem si la l'impulsion mesurée est plus grande que 24 alors va à la ligne (sous-programme) shoot du script if a>24 then goto"shoot" rem si l'impulsion mesurée est plus grande que 15 alors va à la ligne (sous-programme) compte du script if a>15 then goto "compte" rem sinon retourne à la ligne début du programme goto "debut" rem sous-programme compte :compte rem si il y a une impulsion alors mesure la do a=get_usb_power until a>0 rem si la valeur mesurée est comprise entre 8 et 15 (bit de stop) va au sous programme zoom if a>8 and a<15 then goto"zoom" rem compteur d'impulsion=compteur d'impulsion + 1 d=d+1 rem retourne au sous-programme compte goto "compte" rem sous-programme zoom :zoom rem affiche sur l['écran de l'appareil photo (d) le niveau du zoom correspondant au nombre d'impulsion mesurée -1 print"zoom=", d-1 rem demande à l'appareil photo de faire un zoom à d-1 set_zoom d-1 rem rem et les variables à 0 a=0 d=0 rem retourne à la ligne debut goto "debut" rem sous-programme shoot :shoot rem demande à l'appareil photo de faire une photo shoot rem retourne à la ligne debut goto "debut"

Le connecteur USB11 Canon (saloperie de connecteur) Je décline toute responsabilité en cas d'incident, d'accident, de dommages, ou de préjudice physique ou moral, causés sur une tierce personne, un animal, ou sur du matériel. Ça s est dit Ne scotchez jamais de hamster sur votre drone Pour faire fonctionner ce montage, un simple câble mini USB fonctionne. Pour une très grande partie des câbles USB standard on coupe le câble au niveau de la grosse prise USB, on dénude, le fil rouge c est le (+) et le fil noir c est le (-) On branche le (+) sur la sortie 5 de l arduino, le (-) sur la masse de l arduino et les impulsions envoyées par l arduino seront facilement interprétées par le programme chdk de l appareil photo. OUI MAIS. La Vidéo? C est bien de commander le zoom et le déclenchement via notre radiocommande, mais avec un retour vidéo c est encore mieux! La prise usb11 n existe pas encore, oui c est dur à entendre Mais il existe des prises normalement pour mobile HTC compatible : Comme vous pouvez le constater, ce n est pas bien gros Si vous n êtes pas habitué à souder, laisser tomber Il faut en premier lieux enlever l entourage métallique de cette petite prise HTC (sinon ça ne rentre pas dans le Canon), pour ma part j ai utilisé ma dremelle, ensuite pas de café, pas de musique trop violente et avec un bon fer à souder muni de sa panne la plus fine on soude des fils fins suivant ce schéma :

J ai fait quelques vols avec ce connecteur, mais il tient mal, il gigote, ça ne fait vraiment pas sérieux J ai donc acheté par la suite : http://www.kapshop.com/p281/cr-camera-11-pin-usb+a/v-combo-cable-for-canon/product_info.html Que j ai renforcé, et là, c est nickel! Voilà, je pense avoir tout dit et donné une bonne première approche des mondes arduino et chdk. Le programme est encore lent et il arrive de temps en temps que le zoom ne soit pas celui demandé, mais pour une application photographique où j ai le temps, c est pour moi 100% fonctionnel. Bien sûr, rien n est fermé, je suis loin d être un bon programmeur, je suis juste un bidouilleur. Alors si vous arrivez à arranger mon code pour régler les lenteurs et petits problèmes, je ferai évoluer les versions des 2 programmes. De plus les informations envoyées par l arduino servent dans mon exemple à commander le zoom, mais rien n empêche de commander tout autre chose avec le chdk (exposition, vitesse, couleur etc.) On peut vraiment agir sur toutes les fonctions de l appareil photo. Si une partie du tuto n est pas assez détaillée, si vous rencontrez des problèmes, si vous trouvez des erreurs n hésitez pas à me le dire en message perso. Voilà, depuis des années je parcours le web pour des infos sur de l électronique, de la programmation, de la bidouille en tout genre. J espère par ce tuto payer une partie de ma dette A vous. Dan, J allais oublier la vidéo : http://www.youtube.com/watch?v=qel3csyweie