projets:telecommande_apn:accueil
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
telecommande_apn:accueil [2013/04/17 09:22] – créée vlamoine | projets:telecommande_apn:accueil [2022/09/04 21:50] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 5: | Ligne 5: | ||
Ce projet a été initié par Victor Lamoine | Ce projet a été initié par Victor Lamoine | ||
- | |||
- | ==== Introduction ==== | ||
==== Objectif ==== | ==== Objectif ==== | ||
- | La description | + | Nous allons créer une télécommande pour appareil photo contrôlée par un Arduino. Cette télécommande permettra |
+ | |||
+ | Ce tutoriel a été rédigé pour un Panasonic Lumix FZ200, il devrait marcher exactement pareil pour tout appareil photo dont la prise //remote shutter// est un jack à 4 contacts. | ||
==== Matériel ==== | ==== Matériel ==== | ||
- | * Matériel | + | * Un ordinateur |
- | * Matériel | + | * Un Panasonic Lumix FZ200 |
+ | * Une télécommande compatible FZ200 : [[http:// | ||
+ | * Un Arduino (peu importe lequel) | ||
+ | * 2 optocoupleurs 4N35 | ||
+ | * Un fer à souder | ||
+ | * Breadboard, fils, 2 résistances et 2 LEDs | ||
==== Précautions ==== | ==== Précautions ==== | ||
- | * Précaution | + | * Attention avec votre appareil photo... Je ne suis évidement pas responsable de dégâts sur votre matériel ! |
- | * Précaution 2 | + | |
+ | ==== Description générale ==== | ||
+ | Lorsque l'on appui sur le bouton de la télécommande un contact (interrupteur) se ferme et un jeu de résistance permet de déterminer si on est en //focus// ou // | ||
+ | |||
+ | On va donc détourner une télécommande (en la gardant utilisable manuellement) pour la commander avec un Arduino. Pour remplacer l' | ||
+ | |||
+ | === Optocoupleur === | ||
+ | Un optocoupleur est composé d'une diode et d'un photo-transistor. | ||
+ | |||
+ | C'est un interrupteur électronique qui laisse passer le courant quand il reçoit de la lumière, l' | ||
+ | Lorsqu' | ||
+ | |||
+ | Nous utiliserons un 4N35, on trouve très facilement [[http:// | ||
+ | |||
+ | ==== Modification de la télécommande ==== | ||
+ | |||
+ | J'ai ouvert la télécommande : | ||
+ | |||
+ | {{ projets: | ||
+ | |||
+ | {{ projets: | ||
+ | |||
+ | J'ai enlevé le petit jack pour faire de la place pour les fils : | ||
+ | |||
+ | {{ projets: | ||
+ | |||
+ | On soude 3 fils sur l’interrupteur : c'est un interrupteur deux positions, à mis-course c'est le //focus//, en fin de course c'est le // | ||
+ | |||
+ | {{ projets: | ||
+ | |||
+ | On referme la boite (les couleurs des fils ne correspondent pas avec la photo précédente car j'ai changé entre temps). J'ai utilisé un connecteur arraché d'un vieux PC : c'est pour ça que c'est marqué POWER LED dessus. | ||
+ | |||
+ | {{ projets: | ||
+ | |||
+ | C'est fini pour la télécommande; | ||
+ | |||
+ | Chez moi : | ||
+ | Vert et bleu : Mise au point | ||
+ | Vert et noir : Photo | ||
+ | |||
+ | |||
+ | ==== Réalisation du montage Arduino ==== | ||
+ | |||
+ | Réaliser le montage suivant : | ||
+ | {{ projets: | ||
+ | |||
+ | Ce qui donne : | ||
+ | {{ projets: | ||
+ | |||
+ | {{ projets: | ||
+ | |||
+ | On utilise les pins 2 et 3 pour commander les optocoupleurs. | ||
+ | |||
+ | |||
+ | === Programmation de l' | ||
+ | |||
+ | Nous allons maintenant programmer l' | ||
+ | |||
+ | |||
+ | |||
+ | int time=100; // 100 millisecondes | ||
+ | int incomingByte = 0; | ||
+ | const int opto_focus = 2; // Optocoupleur | ||
+ | const int opto_shoot = 3; // Optocoupleur | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | Serial.begin(9600); | ||
+ | pinMode(opto_focus, | ||
+ | pinMode(opto_shoot, | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | if (Serial.available() > 0) // Si on reçois des données alors... | ||
+ | { | ||
+ | incomingByte = Serial.read(); | ||
+ | |||
+ | switch (incomingByte) // Suivant ce que le message contient | ||
+ | { | ||
+ | case ' | ||
+ | digitalWrite(opto_focus, | ||
+ | delay(300); | ||
+ | digitalWrite(opto_focus, | ||
+ | break; | ||
+ | |||
+ | case ' | ||
+ | digitalWrite(opto_shoot, | ||
+ | delay(time); | ||
+ | digitalWrite(opto_shoot, | ||
+ | delay(1); | ||
+ | break; | ||
+ | |||
+ | default: | ||
+ | time = incomingByte*100; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | Compiler le programme et transférez le sur l' | ||
+ | |||
+ | Envoyez le message ' | ||
+ | |||
+ | ==== Programme Qt ==== | ||
+ | On va dans cette partition créer un programme Qt pour prendre faire la mise au point, prendre des photos et régler le temps de rafale. | ||
+ | |||
+ | Installer Qt et Qt creator : | ||
+ | sudo apt-get install -y qtcreator | ||
+ | |||
+ | Télécharger et installer QextSerialPort (lire le README c'est pas compliqué !) | ||
+ | [[http:// | ||
+ | |||
+ | Démarrer un projet Qt Creator (Application : Qt Gui Application) | ||
+ | |||
+ | usb_fz.pro | ||
+ | QT += core gui | ||
+ | |||
+ | greaterThan(QT_MAJOR_VERSION, | ||
+ | |||
+ | TARGET = USB_fz | ||
+ | TEMPLATE = app | ||
+ | |||
+ | CONFIG += extserialport | ||
+ | |||
+ | SOURCES += main.cpp\ | ||
+ | usb_fz.cpp | ||
+ | |||
+ | HEADERS | ||
+ | |||
+ | FORMS | ||
+ | |||
+ | usb_fz.h | ||
+ | #ifndef USB_fz_H | ||
+ | #define USB_fz_H | ||
+ | |||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | namespace Ui { | ||
+ | class USB_fz; | ||
+ | } | ||
+ | |||
+ | class USB_fz : public QMainWindow | ||
+ | { | ||
+ | Q_OBJECT | ||
+ | |||
+ | public: | ||
+ | explicit USB_fz(QWidget | ||
+ | void init_port(); | ||
+ | ~USB_fz(); | ||
+ | |||
+ | public slots: | ||
+ | void transmitFocus(void); | ||
+ | void transmitShoot(void); | ||
+ | void transmitCmd(int cmd); | ||
+ | |||
+ | private: | ||
+ | Ui::USB_fz *ui; | ||
+ | QextSerialPort *port; | ||
+ | }; | ||
+ | |||
+ | #endif // USB_fz_H | ||
- | ==== Schéma général ==== | + | usb_fz.cpp |
+ | #include " | ||
+ | #include " | ||
+ | |||
+ | USB_fz:: | ||
+ | QMainWindow(parent), | ||
+ | ui(new Ui:: | ||
+ | { | ||
+ | init_port(); | ||
+ | ui-> | ||
+ | connect(ui-> | ||
+ | connect(ui-> | ||
+ | connect(ui-> | ||
+ | transmitCmd(1); | ||
+ | } | ||
+ | |||
+ | USB_fz:: | ||
+ | { | ||
+ | delete ui; | ||
+ | } | ||
+ | |||
+ | void USB_fz:: | ||
+ | { | ||
+ | QString dev_port | ||
+ | port = new QextSerialPort(dev_port); | ||
+ | // "ls /dev | grep USB" Permet de donner la liste des périphériques USB | ||
+ | |||
+ | | ||
+ | if(!port-> | ||
+ | { | ||
+ | QMessageBox:: | ||
+ | } | ||
+ | |||
+ | // On parametre la liaison : | ||
+ | port-> | ||
+ | port-> | ||
+ | port-> | ||
+ | port-> | ||
+ | port-> | ||
+ | } | ||
+ | |||
+ | void USB_fz:: | ||
+ | { | ||
+ | QByteArray byte; // Byte a envoyer | ||
+ | byte.clear(); | ||
+ | byte.append(' | ||
+ | |||
+ | if(port != NULL){ // On vérifie que le port existe toujours | ||
+ | port-> | ||
+ | qDebug() << "Value sent: f"; | ||
+ | port-> | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void USB_fz:: | ||
+ | { | ||
+ | QByteArray byte; | ||
+ | |||
+ | byte.clear(); | ||
+ | byte.append(' | ||
+ | |||
+ | if(port != NULL){ | ||
+ | port-> | ||
+ | qDebug() << "Value sent: s"; | ||
+ | port-> | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void USB_fz:: | ||
+ | { | ||
+ | ui-> | ||
+ | QByteArray byte; | ||
+ | |||
+ | byte.clear(); | ||
+ | byte.append(cmd); | ||
+ | |||
+ | if(port != NULL){ | ||
+ | port-> | ||
+ | qDebug() << "Value sent:" << cmd; | ||
+ | port-> | ||
+ | } | ||
+ | } | ||
+ | usb_fz.ui | ||
+ | <?xml version=" | ||
+ | <ui version=" | ||
+ | < | ||
+ | <widget class=" | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | <widget class=" | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
- | [[http:// | + | Compiler le programme en cliquant sur la flèche verte en bas à gauche. Le programme se lance, si l' |
+ | {{ projets: |
projets/telecommande_apn/accueil.1366190555.txt.gz · Dernière modification : 2022/09/04 21:49 (modification externe)