Projet KAPduino : servo PAN

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

Projet KAPduino : servo PAN

Messagede fxix le Dim 04 Octobre 2009, 10:54

Suite de l'expérimentation.
Après le déclenchement de la prise de vue par USB je me penche naturellement sur le problème du servo de PAN.

J'ai suivi les pas de Deltakap pour trouver le neutre de mon servo Hitec HS-85MG modifié 360.
Pour moi cette valeur est de 1521.

voici un petit bout de code.
Le servo tourne lentement dans un sens, s'arrete 2 secondes, tourne dans l'autre sens puis s'arrete de nouveau 2 s :

Code: Tout sélectionner
#include <Servo.h>

#define PAN_PIN  8
#define PAN_IDLE  1521 //us

Servo pan_servo;

int idle_value;

void setup() {
  idle_value = PAN_IDLE;
  pan_servo.attach(8, 1350, 1650);
  pan_servo.write(idle_value);  //immobilise le servo à l'initialisation
}

void loop() {
   
  pan_servo.write(91);
  delay(2000);
  pan_servo.write(idle_value);
  delay(2000);
  pan_servo.write(93);
  delay(2000); 
  pan_servo.write(idle_value);
  delay(2000);
}


Surprise n° 1 :
le neutre semble être à la valeur 92 au lieu de 90

Est ce que ceci est dû au réglage du potentiomètre ?

Si j'ai bien tout compris je devrais avoir :
- 90 : neutre
- 91 : rotation très lente (sens horaire)
- 180 : rotation vitesse maxi (sens horaire)
- 89 : rotation très lente (sens anti-horaire)
- 0 : rotation vitesse maxi (sens anti-horaire)

Surprise n°2 :
le servo ne tourne pas à la même vitesse dans les 2 sens.
En 2 secondes il fait plus de chemin dans un sens que dans l'autre.

Quelqu'un a t il eu un pb similaire ? des éléments de réponses ?
Fabien XIX
aéro-photographe... mais plus assez à mon goût
f19.fr
Avatar de l’utilisateur
fxix
Plus de 1000 messages
 
Messages: 1038
Inscription: Dim 13 Avril 2008, 9:00
Localisation: presque à Tours

Re: Projet KAPduino : servo PAN

Messagede Deltakap le Dim 04 Octobre 2009, 12:08

Effectivement, le réglage du potar pourrait te donner une valeur plus proche de 1500us (et donc de 90°).... mais ça ne sert à rien puisque tu as déterminé que le neutre était à 1521us pour ton réglage actuel ;)
Par contre, tu perds énormement de précision en utilisant les valeurs en degrés pour le commander: pour le pan, il vaut mieux conserver une commande en microsecondes.
Le mieux est à mon avis de déterminer la valeur en us qui ajoutée ou retranchée du PAN_IDLE va faire tourner le servo dans un sens ou dans l'autre à la bonne vitesse (PAN_SPEED dans l'exemple de code ci-dessous) :

Code: Tout sélectionner
#include <Servo.h>

#define PAN_PIN  8
#define PAN_IDLE  1521 //us
#define PAN_SPEED   10 //us


Servo pan_servo;


void setup() {
}

void loop() { 
   //le pan tourne vers la gauche 2 secondes
   pan_left();
   delay(2000);
   //le pan s'arrête 2 secondes (le servo est en "roue libre")
   pan_stop();
   delay(2000);
 
   //le pan tourne vers la droite 2 secondes
   pan_right();
   delay(2000);
   //le pan s'arrête 2 secondes (le servo est en "roue libre")
     pan_stop();
     delay(2000);
}

pan_left(){
   pan_servo.attach(PAN_PIN, 1350, 1650);
   pan_servo.write(PAN_IDLE - PAN_SPEED);
}

pan_right(){
   pan_servo.attach(PAN_PIN, 1350, 1650);
   pan_servo.write(PAN_IDLE + PAN_SPEED);
}

pan_stop(){
             // Le servo n'est plus commandé et passe en "roue libre"
   pan_servo.detach();
}


Si en utilisant les microsecondes à la place des degrés (meilleur précision) le servo tourne toujours plus vite dans un sens que dans l'autre, c'est que le PAN_IDLE n'est pas à la bonne valeur (il y a une certaine plage de valeurs où le moteur semble arrété)... et si vraiment, ça veut pas, il est possible pourquoi pas de définir une vitesse vers la gauche et une autre vers la droite ;)
Dans ce bout de code, j'attache le servo quand j'ai besoin de le faire tourner et je le détache pour l'arrêter... l'intérêt, c'est que le servo est définitivement arrêté par la fonction pan_stop()... tu peux laisser la nacelle allumée plusieurs jours, le pan ne bougera pas du tout (ce qui n'est pas le cas en lui donnant un pan_servo.write(PAN_IDLE); Autre intéret, c'est que le moteur est en "roue libre" et on peut tourner le pan à la main sans forcer dessus.

Rien à voir, mais le 85MG, tu l'utilises avec des pignons externes ou en prise directe ? (c'est pour savoir si il y a moyen de faire passer une vis de 3mm au travers de son pignon de sortie)
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Projet KAPduino : servo PAN

Messagede fxix le Jeu 08 Octobre 2009, 22:08

ayé, j'ai prit le temps de tester.
Le pb se confirme.. le servo tourne un peu plus dans un sens que dans l'autre.
Avec ta technique de "détachement" du servo à chaque manœuvre mon servo fait des a coup à chaque fois. je crois avoir lu qu'une résistance bien placée corrigerait le problème.
en attendant je reste sur une config classique.

mon code de gestion du Pan devient donc :
Code: Tout sélectionner
#include <Servo.h>

#define PAN_PIN  8
#define PAN_IDLE  1522 //us
#define PAN_SPEED   50 //us


Servo pan_servo;


void setup() {
  pan_servo.attach(PAN_PIN, 1350, 1650);
}

void loop() {
   //le pan tourne vers la gauche 2 secondes
   pan_left();
   delay(2000);
   //le pan s'arrête 2 secondes (le servo est en "roue libre")
   pan_stop();
   delay(2000);

   //le pan tourne vers la droite 2 secondes
   pan_left();
   delay(2000);
   //le pan s'arrête 2 secondes (le servo est en "roue libre")
     pan_stop();
     delay(2000);
}

void pan_left(){

   pan_servo.write(PAN_IDLE - PAN_SPEED);
}

void pan_right(){
   pan_servo.write(PAN_IDLE + PAN_SPEED);
}

void pan_stop(){
             // Le servo n'est plus commandé et passe en "roue libre"
   pan_servo.write(PAN_IDLE);
}
Fabien XIX
aéro-photographe... mais plus assez à mon goût
f19.fr
Avatar de l’utilisateur
fxix
Plus de 1000 messages
 
Messages: 1038
Inscription: Dim 13 Avril 2008, 9:00
Localisation: presque à Tours

Re: Projet KAPduino : servo PAN

Messagede Deltakap le Jeu 08 Octobre 2009, 22:46

fxix a écrit:Le pb se confirme.. le servo tourne un peu plus dans un sens que dans l'autre.

C'est vrai que pour une config autokap pure, ça n'a pas une grande importance puisqu'on ne fait tourner le pan que dans un sens. J'avais fait ça pour pouvoir ajouter plus tard la télécommande... mais il doit y avoir moyen de toute façon de trouver une procédure de réglage plus précise.
Par contre, ça confirme un peu plus que sans aucun retour d'information sur la position, il sera très difficile de faire de l'autokap sur 120 ou 180° :?

fxix a écrit:Avec ta technique de "détachement" du servo à chaque manœuvre mon servo fait des a coup à chaque fois. je crois avoir lu qu'une résistance bien placée corrigerait le problème.

Ce problème est assez bizarre... je ne l'ai pas du tout sur le servo de pan, mais j'ai (j'avais) des à-coups sur le servo de tilt au démarrage de l'arduino (mais pas pendant le "détachement", et supprimé effectivement en mettant une résistance de 5.6k entre la sortie de l'arduino et la masse)

fxix a écrit:en attendant je reste sur une config classique.

Tu n'as plus qu'à changer les comments ;)
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Projet KAPduino : servo PAN

Messagede fxix le Ven 09 Octobre 2009, 8:22

Deltakap a écrit:Tu n'as plus qu'à changer les comments ;)

c'est pas faux :roll:
Fabien XIX
aéro-photographe... mais plus assez à mon goût
f19.fr
Avatar de l’utilisateur
fxix
Plus de 1000 messages
 
Messages: 1038
Inscription: Dim 13 Avril 2008, 9:00
Localisation: presque à Tours

Re: Projet KAPduino : servo PAN

Messagede fxix le Ven 09 Octobre 2009, 8:46

voici donc le code utilisé (avec maj des commentaires :wink: ) pour la rotation de la nacelle et le déclenchement de la prise de vue.
Code: Tout sélectionner
//Déclenchement apn avec Gentled + rotation PAN

#include <Servo.h>

#define APN_PIN 9 //le fil jaune du Gentled est relié sur cette sortie de l'Arduino

#define PAN_PIN 8 //le fil jaune du servo de PAN est relié sur cette sortie de l'Arduino
#define PAN_IDLE  1522 //valeur d'arret pour le servo PAN FUTABA S3003
#define PAN_SPEED   50 //vitesse de rotation du servo

Servo apn;  // create servo object to control a servo
Servo pan_servo;  // create servo object to control a servo
                 
void setup()
{
  apn.attach(APN_PIN); // affectation à la broche de l'ARDUINO
  apn.write(90);       // mise au neutre du "servo de declenchement"
  pan_servo.attach(PAN_PIN, 1350, 1650);  // affectation à la broche de l'ARDUINO
}

void loop()
{
  //le pan tourne vers la gauche 2 secondes
  pan_left();
  delay(2000);
 
  //le pan s'arrête 1 seconde
  pan_stop();
  delay(1000);
 
  //prend une photo
  photo();
  delay(3000);
}

//************ --- FONCTIONS --- ******************
void photo()  //declenchement
{
  apn.write(180);// simule la manette poussée à fond
  delay(200); //déclenchement actionné pendant 200ms
  apn.write(90); // simule la manette remise au repos     
}

void pan_left(){
  pan_servo.write(PAN_IDLE - PAN_SPEED);
}

void pan_stop(){
  // Le servo s'arrete
  pan_servo.write(PAN_IDLE);
}

Prochaine étape : inclure le Tilt
Fabien XIX
aéro-photographe... mais plus assez à mon goût
f19.fr
Avatar de l’utilisateur
fxix
Plus de 1000 messages
 
Messages: 1038
Inscription: Dim 13 Avril 2008, 9:00
Localisation: presque à Tours

Re: Projet KAPduino : servo PAN

Messagede Deltakap le Ven 09 Octobre 2009, 19:30

fxix a écrit:Le pb se confirme.. le servo tourne un peu plus dans un sens que dans l'autre.

J'ai peut-être trouvé d'où ça vient ;)
si tu remplaces
pan_servo.attach(PAN_PIN, 1350, 1650); // affectation à la broche de l'ARDUINO
par
pan_servo.attach(PAN_PIN); // affectation à la broche de l'ARDUINO
est-ce que ça le fait toujours ?
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Projet KAPduino : servo PAN

Messagede fxix le Dim 11 Octobre 2009, 14:38

pas de changement notable.
Autre surprise du jour : la valeur d'immobilisation a changé :
J'ai fait des tests avec un Futaba s3003 et maintenant quand je reprend mon Hitec la valeur est passée de 1521 à 1541 sans que je touche au matériel. je suis surpris :? d'où cela peut il venir ?
Fabien XIX
aéro-photographe... mais plus assez à mon goût
f19.fr
Avatar de l’utilisateur
fxix
Plus de 1000 messages
 
Messages: 1038
Inscription: Dim 13 Avril 2008, 9:00
Localisation: presque à Tours

Re: Projet KAPduino : servo PAN

Messagede Deltakap le Dim 11 Octobre 2009, 15:52

fxix a écrit:quand je reprend mon Hitec la valeur est passée de 1521 à 1541 sans que je touche au matériel. je suis surpris :? d'où cela peut il venir ?

Peut-être du passage de
pan_servo.attach(PAN_PIN, 1350, 1650); // affectation à la broche de l'ARDUINO
à
pan_servo.attach(PAN_PIN); // affectation à la broche de l'ARDUINO
?

Dans "pan_servo.attach(PAN_PIN, 1350, 1650);", les 2 valeurs ajoutées à l'attachement créent une nouvelle échelle (avec une nouvelle valeur centrale... c'est l'écart de 21 par rapport à 1500 d'abord, puis l'écart presque identique de 20 entre 1541 et 1521 qui me font penser à ça)

Si tu as toujours pan_servo.attach(PAN_PIN, 1350, 1650); dans ton sketch ... bin, ça se complique... parce que à part le potar qui aurait bougé (mais il n'y a pas de raison)
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Projet KAPduino : servo PAN

Messagede fxix le Dim 11 Octobre 2009, 17:25

effectivement il y avait pan_servo.attach(PAN_PIN); au lieu de pan_servo.attach(PAN_PIN, 1350, 1650); mais la correction n'a rien changé.
Cependant le pb est anecdotique puisque je ne me sers pour le moment pas encore de ce servo :roll:

Merci en tout cas pour toutes ces explications.
Fabien XIX
aéro-photographe... mais plus assez à mon goût
f19.fr
Avatar de l’utilisateur
fxix
Plus de 1000 messages
 
Messages: 1038
Inscription: Dim 13 Avril 2008, 9:00
Localisation: presque à Tours

Re: Projet KAPduino : servo PAN

Messagede michel22 le Mer 14 Octobre 2009, 17:59

j'ai une question naïve d'un débutant avec l'arduino.

pour mon servo de pan, je pensais utiliser un servo non modifié, donc capable d'un quart de tour.
ensuite une démultiplication appropriée qui permette un tour complet de la nacelle.

ensuite dans le programme, un tour dans un sens, un tour dans l'autre etc...

ça me semble trop simple pour être efficace.

Michel
Avatar de l’utilisateur
michel22
Plus de 1000 messages
 
Messages: 1030
Inscription: Jeu 07 Juillet 2005, 18:08
Localisation: saint Brieuc

Re: Projet KAPduino : servo PAN

Messagede Deltakap le Mer 14 Octobre 2009, 19:00

michel22 a écrit:pour mon servo de pan, je pensais utiliser un servo non modifié, donc capable d'un quart de tour.
ensuite une démultiplication appropriée qui permette un tour complet de la nacelle.

Mécaniquement, c'est tout à fait possible (c'est ce que j'avais fait sur la première version de ma nacelle, le problème c'est qu'il faut ralentir le servo, sinon c'est plutôt violent quand on touche à la manette... j'avais fait ça en rajoutant des résistances sur le potar de ma télécommande "classique")

michel22 a écrit:ensuite dans le programme, un tour dans un sens, un tour dans l'autre etc...

Ca serait un peu différent de ce qui a été décrit dans ce fil: on ne parle plus de "vitesse", créée par un décalage autour de la valeur d'arrêt du servo, mais il faut simplement donner au servo la position où il doit aller (comme pour le tilt)

michel22 a écrit:ça me semble trop simple pour être efficace.

A priori, absolument aucun problème ;)
Faut juste écrire une routine pour ralentir le servo (sans doute simplement en le faisant aller d'une position à l'autre en passant par chaque valeur en degré et un delai entre chaque pas)
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Projet KAPduino : servo PAN

Messagede fred88 le Mer 14 Octobre 2009, 19:41

Faut juste écrire une routine pour ralentir le servo (sans doute simplement en le faisant aller d'une position à l'autre en passant par chaque valeur en degré et un delai entre chaque pas)


une routine comme celle que j'avais fait pour mon servo de tilt va parfaitement dans ce cas.
comme le dis deltakap , un deplacement en pas par pas incluant une tempo qui determine le temps pour parcourir la distance.

jette un oeil du coté de ce que j'avait posté.

le lien vers le code en esperant que cela t'aideras : http://photocerfvolant.free.fr/phpBB2/viewtopic.php?f=6&t=1781
rokkaku 1m90,rokkaku 3.00m ,buster 4, ozone frenzy, appareil nikon coolpix L5, et nikon s200
Avatar de l’utilisateur
fred88
Plus de 100 messages
 
Messages: 318
Inscription: Lun 06 Juin 2005, 20:46
Localisation: saint dié(88)

Re: Projet KAPduino : servo PAN

Messagede michel22 le Mer 14 Octobre 2009, 20:26

je vais relire les posts pour la programmation de l'engin, j'ai confiance...

un des avantages que je vois à mon bricolage est de connaitre l'orientation de la nacelle, de pouvoir limiter au besoin la région photographiée. à voir

Michel
Avatar de l’utilisateur
michel22
Plus de 1000 messages
 
Messages: 1030
Inscription: Jeu 07 Juillet 2005, 18:08
Localisation: saint Brieuc


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

Qui est en ligne

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