Page 1 sur 1

Projet KAPduino : servo PAN

MessagePosté: Dim 04 Octobre 2009, 10:54
de fxix
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 ?

Re: Projet KAPduino : servo PAN

MessagePosté: Dim 04 Octobre 2009, 12:08
de Deltakap
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)

Re: Projet KAPduino : servo PAN

MessagePosté: Jeu 08 Octobre 2009, 22:08
de fxix
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);
}

Re: Projet KAPduino : servo PAN

MessagePosté: Jeu 08 Octobre 2009, 22:46
de Deltakap
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 ;)

Re: Projet KAPduino : servo PAN

MessagePosté: Ven 09 Octobre 2009, 8:22
de fxix
Deltakap a écrit:Tu n'as plus qu'à changer les comments ;)

c'est pas faux :roll:

Re: Projet KAPduino : servo PAN

MessagePosté: Ven 09 Octobre 2009, 8:46
de fxix
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

Re: Projet KAPduino : servo PAN

MessagePosté: Ven 09 Octobre 2009, 19:30
de Deltakap
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 ?

Re: Projet KAPduino : servo PAN

MessagePosté: Dim 11 Octobre 2009, 14:38
de fxix
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 ?

Re: Projet KAPduino : servo PAN

MessagePosté: Dim 11 Octobre 2009, 15:52
de Deltakap
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)

Re: Projet KAPduino : servo PAN

MessagePosté: Dim 11 Octobre 2009, 17:25
de fxix
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.

Re: Projet KAPduino : servo PAN

MessagePosté: Mer 14 Octobre 2009, 17:59
de michel22
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

Re: Projet KAPduino : servo PAN

MessagePosté: Mer 14 Octobre 2009, 19:00
de Deltakap
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)

Re: Projet KAPduino : servo PAN

MessagePosté: Mer 14 Octobre 2009, 19:41
de fred88
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

Re: Projet KAPduino : servo PAN

MessagePosté: Mer 14 Octobre 2009, 20:26
de michel22
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