Arduino et servomoteur à rotation continu

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

Arduino et servomoteur à rotation continu

Messagede Guill le Sam 14 Décembre 2019, 17:12

Bonjour,

Je souhaiterais commencer une nouvelle nacelle autoKAP programmable avec le système ARDUINO.
J'ai passé quelques heures à glaner les informations sur internet mais je ne trouve rien sur la programmation de servomoteur à rotation continu de la marque Parallax.

Quelqu'un maitrise-t-il le sujet?
Guill
Plus de 100 messages
 
Messages: 215
Inscription: Lun 22 Mai 2017, 7:32
Localisation: Bécherel

Re: Arduino et servomoteur à rotation continu

Messagede Phil78 le Sam 14 Décembre 2019, 22:17

Guill a écrit:Quelqu'un maitrise-t-il le sujet?
Bonjour Guillaume, pas moi en tous les cas...
Donc, sous toutes réserves, je propose un début de réponse...!
Avec un arduino, on peut piloter "facilement" un servo standard, en utilisant la librairie de commande adhoc. en revanche il est difficile de piloter un servo standard transformé en servo à rotation continue, car il aperdu sa capacité à "transmettre" sa position, il sait juste tourner à D ou G +/- vite mais il n'est plus possible de lui dire tourne de 45° à Dte (stop puis reviens).
Pour cela (et à travers un arduino) il faut passer par un servo modifié 360+ avec transmission de la position par un fil supplémentaire comme celui du lien ci-dessous.

Celui-la a alors la capacité de tourner en continu... ou de de parcourir un angle précis suivant la programmation.

J'avais regardé cela, il y a qqs années, et voilà ce que j'en ai retenu... sous toutes réserves!!

https://www.adafruit.com/product/3614
https://www.arduino.cc/en/Reference/Servo
Philippe
Phil78
Plus de 1000 messages
 
Messages: 1163
Inscription: Mer 31 Octobre 2007, 21:17
Localisation: Voisins-Le-Bretonneux (78)

Re: Arduino et servomoteur à rotation continu

Messagede Guill le Dim 15 Décembre 2019, 8:53

Merci Philippe d'ouvrir le débat, il y a quelque temps Etienne avait posté ce lien https://youtu.be/wAvMnoiuRfU. J'aimerais arriver à ce résultat.

Guillaume.
Guill
Plus de 100 messages
 
Messages: 215
Inscription: Lun 22 Mai 2017, 7:32
Localisation: Bécherel

Re: Arduino et servomoteur à rotation continu

Messagede Phil78 le Dim 15 Décembre 2019, 11:36

Je complète après une petite recherche au cas où tu ne serais pas passer par là...

Il y a une petite discussion là
https://forum.arduino.cc/index.php?topic=597825.0
avec un lien vers cette doc qui pourrait être utile...
https://www.mouser.fr/pdfdocs/900-00360-Feedback-360-HS-Servo-v12.pdf

C'est un sujet qui pourrait m'intéresser également... pour ma future retraite (enfin si... :mrgreen:, mais ça c'est un autre sujet!)

Par ailleurs, il me semble avoir lu qu'il est préférable d'alimenter les servos par une alim séparée (tout en reliant les 2 masses), car l'alim par arduino d'un servo est très limite.
Bon, je vais suivre ce fil aussi, pour constituer mon dossier... cf. suprra :wink:
Philippe
Phil78
Plus de 1000 messages
 
Messages: 1163
Inscription: Mer 31 Octobre 2007, 21:17
Localisation: Voisins-Le-Bretonneux (78)

Re: Arduino et servomoteur à rotation continu

Messagede mich2e le Dim 15 Décembre 2019, 11:47

Salut Guillaume, et tous,
comme indiqué par Philippe, arduino sait piloter aussi un servo continu mais il faut trouver alors la position correcte du point "mort".
si j'essaie de résumer ce que j'ai compris de mes apprentissages:

il faut utiliser la bibliothèque qui va bien - en général un truc du genre #include <Servo.h> - et qui te permet en fonction de ton arduino de passer une commande sous la forme .
panservo.writeMicroseconds(position);
ou panservo a été défini comme servo sur un pin donné et position la position (en millisecondes !) que tu veux donner au servo . (1500 étant de mémoire la position centrale pour un servo bien calé)
avec un servo modifié, il va falloir trouver la position qui correspond à aucun mouvement. (cette idéale valeur de 1500) En général par tâtonnement.
la commande panservo.writeMicroseconds(repos); permattra alors de mettre le servo au repos = ne tourne pas.
dès lors la commande panservo.writeMicroseconds(repos+n); ou (repos-n) pourra te le faire tourner dans un sens ou dans l'autre.
....mais il faut après la commande le faire revenir à l'arret en renvoyant une commande
panservo.writeMicroseconds(repos);
sinon il continue à tourner.
suis je clair ?
Si intéret j'ai essayé d'extraire de mon script de test actuel la partie commande. cela donne un truc du genre: (à adapter pour remettre une action de type autokap dans ta routine de loop.)
Tu pourras y voir que la position repos correspondant à CE servo est 1487. malgre cela le servo tourne légèrement plus vite dans un sens que dans l'autre....mais heureusement, on s'en fout un peu !
Code: Tout sélectionner
#include <WiFiClient.h>

#include <Servo.h> 
Servo panservo;  // create servo object to control a pan servo
Servo tiltservo;  // create servo object to control a tilt servo

// valeurs servo en ms et duree
int repos = 1487; // valeur neutre par defaut
int stock = 1500 - repos; // ecart par rapport à 1500 qui sera stocke eeprom

int tilt = 1550; //  tilt légère plongée


void setup() {
  Serial.begin(115200);
  if(!panservo.attached() )panservo.attach(D4); // attaches the servo on pin 4 to the servo object
          panservo.writeMicroseconds(repos);
  tiltservo.attach(D3); // attaches the servo on pin D3 to the servo object
  tiltservo.writeMicroseconds(tilt); // environ 0° horizontal // signal de fin de setup
  delay(1000);
  tiltservo.writeMicroseconds(tilt - 250); // env 40° haut
  delay(250);
  tiltservo.writeMicroseconds(tilt); // environ 0° horizontal
  delay(400);
  Serial.println("fin setup ...");// fin setup
  delay(100);
  }


  void loop() {   
}

void rotating_RC() { // rotation de la nacelle
  int droite = repos +15; // mouvement pour le pan mouvements inverses ??
  int gauche = repos -15;
   
  if(!panservo.attached())   panservo.attach(D4); // attaches the servo on pin 4 to the servo object
  if (!tiltservo.attached())tiltservo.attach(D3); 
 
          Serial.println ("   gauche") ;
          panservo.writeMicroseconds(gauche);
          delay(250);
          panservo.writeMicroseconds(repos);
          Serial.print("valeur  stop = " );
          Serial.println(repos); 
     
                Serial.print (" gauche + ") ;
                panservo.writeMicroseconds(gauche-10);
                delay(600);
                panservo.writeMicroseconds(repos);
                break;
      }
     delai = millis();
    }


J'avais quelque part un script pour tatonner la valeur de repos. dis moi si tu veux que je recherche.
Deltakap avait mème je crois introduit un "calage" automatique...mais c'était au dessus de mes aptitudes ;-)
Avatar de l’utilisateur
mich2e
Plus de 400 messages
 
Messages: 807
Inscription: Sam 12 Avril 2008, 14:49
Localisation: Proche de Caen (14)

Re: Arduino et servomoteur à rotation continu

Messagede Guill le Dim 15 Décembre 2019, 16:22

Phil78 a écrit:Je complète après une petite recherche au cas où tu ne serais pas passer par là...


Super les gars, je suis impressionné par votre implication. Trouver les infos n'est pas évident, surtout quand on n'y comprend rien. J'ai oublié une info importante le servo parallaxe que je possède est le modèle suivanthttps://www.parallax.com/sites/d ... n-v2.2.pdf. Il y a 3 sorties sur mon servo alors que sur ton modèle Philippe il y en a 4 je pense.

Merci aussi Michel comme je te l'expliquais dans notre dernière conversation, je cherche un maximum d'informations afin de faire mes testes pendant les vacances de noël.

mich2e a écrit: (1500 étant de mémoire la position centrale pour un servo bien calé)


Je crois avoir trouvé une vidéo qui reprendre tes explicationshttps://youtu.be/uZ8AeGai6gM. J'ai encore besoin de recherche pour comprendre le truc, désolé d'avance pour les geeks qui doivent me trouver lourd :mrgreen:

Guillaume
Guill
Plus de 100 messages
 
Messages: 215
Inscription: Lun 22 Mai 2017, 7:32
Localisation: Bécherel

Re: Arduino et servomoteur à rotation continu

Messagede Phil78 le Dim 15 Décembre 2019, 16:55

Guill a écrit:J'ai encore besoin de recherche pour comprendre le truc, désolé d'avance pour les geeks qui doivent me trouver lourd

mode second degré:
Ca aurait été super pour toi mais ça m'aurait presque emm... si tu avais tout pigé du premier coup, en apercevant le pdf :twisted: :twisted:
Ben non, tu crois qu'on fait comment, nous aussi... on essaye de comprendre un monde et un langage dans lequel nous ne sommes pas tombés quand on était petit!! on rame un peu, beaucoup... mais comme on rame tous dans le même sens on avance plus vite :wink: C'est ce que j'apprécie sur ce forum depuis le début.
Je nous trouve même pas trop mauvais à coudre, bricoler, imprimer 3D, concevoir, souder, programmer, photographier, hacker, voler et j'en passe. On a un petit coté déKAPthlonien, en qq sorte.

Guill a écrit:suivanthttps://www.parallax.com/sites/d ... n-v2.2.pdf
tu as été un peu trop gourmand sur ces 2 derniers coups et tu en as mis un peu trop dans les URL, ça déborde et on ne peut pas activer les liens.

A suivre...
Philippe
Phil78
Plus de 1000 messages
 
Messages: 1163
Inscription: Mer 31 Octobre 2007, 21:17
Localisation: Voisins-Le-Bretonneux (78)

Re: Arduino et servomoteur à rotation continu

Messagede mich2e le Dim 15 Décembre 2019, 17:43

Trouver les infos n'est pas évident, surtout quand on n'y comprend rien.

Non tu vas voir, le pire c'est quand tu pensais avoir compris !!! Et j'admire la patience de ceux qui ont pu m'aider à avancer, sans jamais n'oser me demander si j'avais vraiment compris.

Par ailleurs, il me semble avoir lu qu'il est préférable d'alimenter les servos par une alim séparée (tout en reliant les 2 masses), car l'alim par arduino d'un servo est très limite.

Philippe tu as raison, les problèmes d'alim sont en train de me faire virer chèvre dans mes tests d'hiver sur mon proto de nacelle wifi.
comme en plus je suis têtu comme une mule, je continue à chercher la solution pour n'avoir tout de même qu'une alim, car je tente par tout moyen d'éviter de rajouter moults alim là haut. c'est quand meme pas pour soulever des piles qu'on fait du kap non mais !
Si mon prochain test s'avère concluant, je ferai un petit update sur la démarche d'ensemble, car sous cette réserve d'alim, je pense avoir fait des progrès significatifs. J'ai pu faire ma première séance de kap à environ 150 m sans problème avec dans les mains juste une petite tablette pour avoir ensemble la commande nacelle par arduino, et le controle apn par l'application "remote" standard du fabricant. (plus, pour etre honnete un petit répéteur posé dans le sac ;-))
Avatar de l’utilisateur
mich2e
Plus de 400 messages
 
Messages: 807
Inscription: Sam 12 Avril 2008, 14:49
Localisation: Proche de Caen (14)

Re: Arduino et servomoteur à rotation continu

Messagede Deltakap le Dim 15 Décembre 2019, 18:29

Salut Guillaume, Philippe, Michel, et tous ;)

Guill a écrit:il y a quelque temps Etienne avait posté ce lien https://youtu.be/wAvMnoiuRfU. J'aimerais arriver à ce résultat..

Le servo (https://www.parallax.com/product/900-00360) utilisé dans cette vidéo est particulier puisqu'il a un fil supplémentaire qui retourne sa position (via un capteur à effet Hall, d'après la doc).

Ton servo (https://www.parallax.com/sites/default/ ... n-v2.2.pdf) ne peut pas fonctionner comme dans la vidéo... puisque qu'il n'a pas de retour de position :(

Voici un lien qui me parait intéressant pour mieux voir comment fonctionne un servo: https://eskimon.fr/tuto-arduino-602-un- ... ervomoteur
Il explique le fonctionnement d'un servo classique et d'un servo 360° (Et le pourquoi des 1500 microsecondes à l'arrêt)

Avec ton servo, il est impossible de lui donner directement l'instruction "tourne de x degrés", il faut tricher.
La combine est de trouver les valeurs à envoyer au servo pour qu'il s'arrete et/ou tourne à la "bonne" vitesse.
Avec ces valeurs, il sera ensuite possible de créer un script qui fera à peu près "tourne de x degrés".
En fait, on va calibrer la vitesse de rotation du servo, et connaissant cette vitesse, on pourra le faire tourner de x degrés... en y secondes ;)


Le dernier script du dernier lien est une bonne base pour commencer. (Je l'ai modifié un peu pour arrêter le servo en tapant la lettre "a").

Les étapes:
Il faut déjà calibrer le "stop" du servo:
Ton servo doit avoir un potentiomètre pour régler l'arrêt (The servo has a potentiometer access port, right above the place where the cable attaches to the case. )
Le script suivant va donc d'abord envoyer un signal de 1500 microsecondes au servo. Il faut alors régler le potentiomètre de façon que le servo s’arrête complètement de tourner.

Ensuite, l'appui sur la touche "p" va augmenter la valeur "temps" par 10 microsecondes (la touche "m" peut la réduire de 10). Le servo va tourner dans un sens et de plus en plus vite en appuyant encore sur la touche "P".
Sur l'écran du PC, la console va afficher la valeur de "temps" utilisée. Quand la vitesse de rotation est ok (1 tour en 10 secondes par exemple), il suffit de relever la valeur à l'écran.
Si elle est de 1460 (c'est un exemple), alors la valeur 1500+(1500-1460) devrait faire tourner le servo à la même vitesse dans l'autre sens.
PS: l'appui sur la touche "a" doit arrêter le servo.

Après cette phase de calibration, tu dois avoir 3 valeurs (l'arrêt à "1500", la rotation à la vitesse voulue dans un sens (genre "1460") et dans l'autre sens (genre "1540")
Après?... Bin, Il faudra un autre script pour piloter vraiment la nacelle ;)

Code: Tout sélectionner
#include <Servo.h> // On oublie pas d'ajouter la bibliothèque !

int arret = 1500; // censée être à mi-chemin entre 1000 et 2000, un bon point de départ
int temps = arret;
int ecart = 10;

Servo monServo;

void setup()
{
    Serial.begin(115200);
    Serial.println("Réglage servo 360");

    monServo.attach(2);
    // on démarre à une valeur censé être la moitié de
    // l'excursion totale de l'angle réalisé par le servomoteur
    monServo.writeMicroseconds(arret);
}

void loop()
{
    // des données sur la liaison série ? (lorsque l'on appuie sur 'a' ou 'd')
    if(Serial.available())
    {
        char commande = Serial.read(); // on lit

        // on modifie la consigne si c'est un caractère qui nous intéresse
      if(commande == 'a')
         temps = arret;
      else if(commande == 'p')
                        temps += ecart ;  // ajout de 10µs au temps HAUT
                else if(commande == 'm')
                        temps -= ecart ;  // retrait de 10µs au temps HAUT

        // on modifie la consigne du servo
        monServo.writeMicroseconds(temps);

        // et on fait un retour sur la console pour savoir où on est rendu
        Serial.println(temps, DEC);
    }
}
Avatar de l’utilisateur
Deltakap
Plus de 1000 messages
 
Messages: 1432
Inscription: Lun 22 Septembre 2008, 11:35
Localisation: Du coté de Granville

Re: Arduino et servomoteur à rotation continu

Messagede mich2e le Dim 15 Décembre 2019, 19:27

je l'avais bien dit: c'est encore plus agaçant quand tu pensais avoir compris ;-)
Vive l'arduino...

Au fait Guillaume tu veux commander quoi comme appareil ? formulé autrement, ton arduino doit il aussi commander l'appareil ou vises tu une synchronisation aléatoire entre le mouvement de la nacelle et le déclenchement de l'appareil (par exemple avec un intervallomètre intégré).
Avatar de l’utilisateur
mich2e
Plus de 400 messages
 
Messages: 807
Inscription: Sam 12 Avril 2008, 14:49
Localisation: Proche de Caen (14)

Re: Arduino et servomoteur à rotation continu

Messagede Guill le Dim 15 Décembre 2019, 21:27

Super ton explication Gilbert, J'ai compris dans les grandes lignes. Je vais pouvoir expérimenter cette première partie.

Pour répondre à ta question Michel, la deuxième partie consistera à synchroniser le tilt et le Pan pour enfin actionner le S110 avec la fonction REMOTE.
Quand je serais arrivé là je vous paye le Champagne :wink:

Je vous souhaite une bonne semaine.
Guill
Plus de 100 messages
 
Messages: 215
Inscription: Lun 22 Mai 2017, 7:32
Localisation: Bécherel

Re: Arduino et servomoteur à rotation continu

Messagede Hygrekaile le Lun 16 Décembre 2019, 9:41

Guill a écrit:Quand je serais arrivé là je vous paye le Champagne :wink:

Aux 774 membres sont inscrits sur le forum et qui lisent ce sujet? :mrgreen: :mrgreen:
Avatar de l’utilisateur
Hygrekaile
Plus de 1000 messages
 
Messages: 1821
Inscription: Jeu 02 Août 2007, 17:34
Localisation: Eure + Seine et Marne

Re: Arduino et servomoteur à rotation continu

Messagede Tchoun.mb le Lun 16 Décembre 2019, 19:36

Bonjour,
Effectivement le parallax dont je parlais dans un autre sujet est particulier car il est continu ET pilotable de manière angulaire ;)

Sinon, pour faire des tests, il y a moyen de rendre un service standard continu en ouvrant, en cassant la butée est en sortant le potentiomètre, mais c’est beaucoup de bidouillage pour pas grand chose, sauf pour découvrir comment ça marche :)
Avatar de l’utilisateur
Tchoun.mb
Plus de 50 messages
 
Messages: 75
Inscription: Ven 24 Août 2018, 21:47
Localisation: Ecaussinnes, Belgique

Re: Arduino et servomoteur à rotation continu

Messagede Guill le Mer 18 Décembre 2019, 20:37

Hygrekaile a écrit:Aux 774 membres sont inscrits sur le forum et qui lisent ce sujet? :mrgreen: :mrgreen:


J'ai bien dit quand je serais arrivé à cette étape... :mrgreen: de plus il faudra venir en Bretagne.

Sinon rien à voir Yves j'ai commencé un nichoir à chouette hulotte façon "ébénisterie" peux-tu m'envoyé ton adresse en MP STP .
Guill
Plus de 100 messages
 
Messages: 215
Inscription: Lun 22 Mai 2017, 7:32
Localisation: Bécherel

Re: Arduino et servomoteur à rotation continu

Messagede Phil78 le Mer 18 Décembre 2019, 21:06

Guill a écrit:J'ai bien dit quand je serais arrivé à cette étape... de plus il faudra venir en Bretagne.


EMMANUELLLL, je crois qu'il y a une "chouette" proposition de WE aerophoto pour le printemps prochain, si j'ai tout bien compris le dernier message de Guillaume.... avec accès privilégié au parc du chateau de Caradeuc!! :twisted:
Philippe
Phil78
Plus de 1000 messages
 
Messages: 1163
Inscription: Mer 31 Octobre 2007, 21:17
Localisation: Voisins-Le-Bretonneux (78)

Re: Arduino et servomoteur à rotation continu

Messagede Emmanuel le Jeu 19 Décembre 2019, 1:18

Ah, ça peut être intéressant pour resortir les CV avec les beaux jours.

(Je suis complètement largué à vous lire mais je trouve ce "fablab" en ligne époustouflant...
Emmanuel, Administrateur des forums francophones de la photographie aérienne par cerf-volant : http://photocerfvolant.free.fr/phpBB2/ - Et "toujours..." mon projet "au long cours..."
Avatar de l’utilisateur
Emmanuel
Site Admin
 
Messages: 8651
Inscription: Dim 21 Novembre 2004, 3:23
Localisation: Saint Jean Les Deux Jumeaux (Seine et Marne) 77


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

Qui est en ligne

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