Controle axe panoramique par codeur incremental

Les radios commandes, déclencheurs divers et variés. Les circuits électroniques et autres bidouillages.

Controle axe panoramique par codeur incremental

Messagede Alonzo BISTROT le Jeu 01 Septembre 2011, 21:05

Bonsoir,

Voici une méthode pour contrôler par un module Arduino le déplacement angulaire de l'axe panoramique d'une nacelle motorisé par un servo modifié (Sans Butée).

La nécessite d'un contrôle strict de l'angle pan est venu de la volonté de convertir ma nacelle en tourelle de prise de vue panoramique montée à l'extrémité d'une perche (Ouf ! c'était limite hors-sujet !). A terme la tourelle pourrait être pilotée par une manette de OUI avec retour sur un casque vidéo, un menu de configuration par incrustation de type OSD (comme sur la télé) et/ou un écran local de type téléphone NOKIA 3310. Bref, de quoi m'occuper les dix prochaines années.

Image
Img A.1 - Tourelle convertie en mode "Photo panoramique"

A) LA MECANIQUE

Image
Img A.2 - Nacelle équipée du codeur incrémental (Vue générale)

Image
Img A.3 - Implantation du connecteur optique incrémental (détail)

Le capteur est un codeur optique incrémental à fourche récupéré sur une vielle imprimante et le disque optique d'une antique souris mécanique à boule. Le disque est monté à l'extrémité de l'axe de sortie du servo. Le capteur est installé sur un support taillé dans un tube carré d'alu qui repose sur une cale en bois d'arbre. La cale est poncée pour permettre l'ajustement mécanique d’altitude du capteur et du disque. L'ensemble est collé sur le servo des que les réglages définitifs sont trouvés (ajustement de la hauteur et de l'axe de détection).

A+
Dernière édition par Alonzo BISTROT le Dim 04 Septembre 2011, 8:55, édité 1 fois.
Alonzo BRISTROT
Avatar de l’utilisateur
Alonzo BISTROT
Plus de 400 messages
 
Messages: 461
Inscription: Lun 20 Octobre 2008, 21:47
Localisation: AU SUD (de la ligne SNCF)

Re: Controle axe panoramique par codeur incremental

Messagede Alonzo BISTROT le Dim 04 Septembre 2011, 8:32

B) L'ELECTRONIQUE

Un codeur optique à fourche regroupe 2 composants opto-electronique (une diode LED et un photo-transistor) dans un même boitier miniature.

Chacun des éléments opto-est implanté dans une branche de la fourche.

La led émet un flux lumineux en permanence. Sa lumière est "focalisée" par une micro-fente en direction du photo-transistor. La reception du flux lumineux par le transistor se traduit par la génération d'un courant électrique proportionnel à la quantité de reçue. Pour les utiliser de manière simple avec un ARDUINO, le signal de sortie est connecté sur une entrée analogique. D'autres modèles intègrent un "trigger". L'état de leurs sorties est binaire (Y a lumière, Y pas lumière) quelque soit le niveau du flux lumineux réceptionné. Sur une carte ARDUINO, leurs raccordements se fait sur une entrée numérique classique.

Généralement les fourches du boitier sont gravées du symbole du composant qu'elles intègrent. Cette indication est primordiale pour permettre le câblage électrique du composant. Surtout lorsqu'il s'agit de matériel de récupération.

Pour éviter les fausses détections (reflets du soleil) il est préférable de monter la fourche pour que le photo-transistor regarde vers le bas.

Image
Img B.1 - La gravure de signalisation des composants est visible sur les fourches

Image
Img B.2 - Raccordements électriques du cable sur le circuit imprimé.

Image
Img B.3 - Schéma

La led est alimentée en +5V par l’intermédiaire d'une résistance de limitation de 330 ohms (R1).

Le collecteur du photo-transistor T1 est connecté directement au +5V. L'émetteur est reliée à une entrée numérique du module Arduino par l'intermédiare du cable de liaison. Pour éliminer les états logiques indéterminés, le signal de sortie est "tiré au 0V" par une résistance de 10K (R2).

Les deux résistances sont implantées sur le mini circuit imprimé qui supporte le photo-transistor. Le raccordement vers le module Arduino est réalisé par un cordon électrique et une prise femelle à 3 broches alignées de type RC (+5V au centre).

Avant de le cabler sur l'Arduino, le montage est validé en effectuant un test de bon fonctionnement.
1) Alimenter le montage (+5V et GND). S'assurer de l'absence de fumée et d'odeur de plastique brulé.
2) Mesurer la tension d'alimentation (+5V) et la tension aux bormes de la résistance R1. La différence doit être d'environ 1,2V. +5V aux bornes de R1 signifie que la diode est court-circuit. Un défaut de tension signifie que la diode n'est pas alimentée. La diode emet dans l'infra-rouge (IR), n'espérez pas apercevoir son illumination.
3) Mesurer la tension de sortie en bout de cable (voltmetre entre GND et signal ) en occultant le signal lumineux entre les fourches avec une pointe de tournevis par exemple. La tension doit etre de 0V OU +5V, en fonction de la presence d'un objet (opaque aux IR) entre les fourches.

Si tout est correct, vous pouvez passer à la partie informatique

(A suivre)
Alonzo BRISTROT
Avatar de l’utilisateur
Alonzo BISTROT
Plus de 400 messages
 
Messages: 461
Inscription: Lun 20 Octobre 2008, 21:47
Localisation: AU SUD (de la ligne SNCF)

Re: Controle axe panoramique par codeur incremental

Messagede Alonzo BISTROT le Mar 13 Septembre 2011, 21:28

3) L'INFORMATIQUE

3.1 La commande d'un servo par la manière traditionnelle


La commande d'un servo traditionnel non modifié s'effectue (entre autre) par la commande "servo" !

en voici un exemple

Code: Tout sélectionner

//************************************************************************************
//
// Tourelle automatique de prise de vues panoramiques
//
//  L'axe TILT balaye la totalité de sa course (180°) en aller/retour, par pas de 1°
//  avec une pause de 1s à chaques extrémités.
//
//-----------------------------------------------------------------------------------
// Matériel utilisé :
//
//   - Module DFRduino NANO (ATmega 328)
//   - Carte "Roboduino Nano Expansion"
//   - Servo non modifie type Futaba
//
//   L'ensemble est alimenté par la prise USB de programmation.
//   Le jumper "PWR_sel" est positionné entre les pins 'Vcc' et '+5V'
//
//************************************************************************************

#include <Servo.h>

// Déclarations des variables globales
//====================================

Servo servo_tilt;  // creation d'un objet 'servo' affecté à l'axe TILT
int pos_tilt = 0;  // position courante du servo tilt (domaine d'excursion : 0..180°)




// =====================================
// Procedure d'initialisation
// =====================================
void setup()
{
  servo_tilt.attach(9);  // Le servo de l'axe tilt est connecté à la sortie 'PWM9' de la carte d'expansion
}




// =====================================
// Boucle principale
// =====================================
void loop()
{
  // Déplacement continu du servo entre 0 et 180 degrees (Sens ALLER)
  // par pas de 1 degree
  for(pos_tilt = 0; pos_tilt < 180; pos_tilt += 1)   
  {                                   
    servo_tilt.write(pos_tilt);      // Demande au servo d'atteindre la nouvelle position courante (pos_tilt)
    delay(20);                       // Attente de 20ms pour laisser le servo atteindre sa position
  }

  delay(1000);                       // Temporisation de 1s en bout de course
 
  // Déplacement continu du servo entre 180 et 0 degrees (Sens RETOUR)
  // par pas de 1 degree
  for(pos_tilt = 180; pos_tilt>=1; pos_tilt-=1)     //
  {                               
    servo_tilt.write(pos_tilt);     // Demande au servo d'atteindre la nouvelle position courante (pos_tilt)
    delay(20);                      // Attente de 20ms pour laisser le servo atteindre sa position 
  }
  delay(1000);                      // Temporisation de 1s en bout de course
}
Alonzo BRISTROT
Avatar de l’utilisateur
Alonzo BISTROT
Plus de 400 messages
 
Messages: 461
Inscription: Lun 20 Octobre 2008, 21:47
Localisation: AU SUD (de la ligne SNCF)

Re: Controle axe panoramique par codeur incremental

Messagede Alonzo BISTROT le Mar 13 Septembre 2011, 21:30

3.2 La commande directe d'un servo modifié (potentiomètre coupé)

(a venir)
Dernière édition par Alonzo BISTROT le Mar 13 Septembre 2011, 21:34, édité 1 fois.
Alonzo BRISTROT
Avatar de l’utilisateur
Alonzo BISTROT
Plus de 400 messages
 
Messages: 461
Inscription: Lun 20 Octobre 2008, 21:47
Localisation: AU SUD (de la ligne SNCF)

Re: Controle axe panoramique par codeur incremental

Messagede Alonzo BISTROT le Mar 13 Septembre 2011, 21:32

3.3 La commande d'un servo modifié contrôlé en position par un codeur incrémental

(A suivre)
Alonzo BRISTROT
Avatar de l’utilisateur
Alonzo BISTROT
Plus de 400 messages
 
Messages: 461
Inscription: Lun 20 Octobre 2008, 21:47
Localisation: AU SUD (de la ligne SNCF)


Retourner vers L'électronique embarquée et au sol

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 25 invités

cron