Aller au contenu


Telson

Inscrit(e) (le) 05 juil. 2011
Déconnecté Dernière activité févr. 02 2022 05:08
-----

#75055 [Défis] Comment commander la vitesse d'un servomoteur avec Arduino ?

Posté par Telson - 13 octobre 2016 - 10:35

Alors, je vois deux solutions pour résoudre ce problème.

 

Première solution : utiliser une carte qui permet de gérer la vitesse et l'accélération des servomoteurs. Très pratique dans la mesure car cela libère énormément de temps au programme pour faire autres choses.

 

Oui je sais c'est radical mais c'est vraiment très simple et très efficace....

 

Deuxième solution : gérer la totalité du déplacement des servomoteurs à partir du programme arduino.

 

Hypothèses : sur la base énoncée par @Path

 

On se met dans l'hypothèse à vide ou avec une charge inférieur à son max, et sans butée sur l'amplitude 0 à 180° et la commande en vitesse vise à augmenter/réduire la vitesse max. On va donc supposer que le servomoteur n'est pas gêné, qu'il fonctionne bien, qu'il est bien à la position commandée.

 

Secteur angulaire à parcourir : 180°.

Vitesse maxi : 180° en 10 secondes, soit 18°/s, soit 1°/56ms.

 

Ma solution au défi ...

 

3 phases :

  • 1 phase d’accélération, de 0° à 10 °. Si accélération il y a, alors la vitesse angulaire augmente
  • 1 phase à vitesse max, de 11° à 170° . Vitesse angulaire constante
  • 1 phase de décélération, de 171° à 180°. Si décélération il y a, alors la vitesse angulaire diminue

Pour augmenter/diminuer la vitesse angulaire, soit entre deux pas nous modifions le temps (la base de temps d'incrémentation) , soit sur la même base de temps d'incrémentation nous modifions l'amplitude d'un pas.

 

Souhaitant éliminer l'utilisation de la fonction delay() dans LOOP et utiliser la fonction millis() via le TIMER INTERRUPT, j'opte pour la modification de la base de temps d'incrémentation à chaque pas de 1°.

 

La fréquence du timer interrupt : TIMER0, est de 976.5625 Hz soit disons 1KHz ce qui nous donne une interruption toutes les 1ms.......

 

Admettons que le servomoteur a une vitesse de 18°/s (c’est énorme, oui mais c’est pour l’exemple ce qui donne 10 secondes pour 180° !!), soit 1°/56ms, je décide de définir la durée de mes phases ainsi :

 

  • phase d’accélération, de 0° à 10 ° = 850 ms. Le premier pas aura une durée de 112 ms, le deuxième 106 ms, ….le dernier 58
  • phase à vitesse max, de 11° à 169° = 8960 ms. Durée du pas 56 ms
  • phase de décélération, de 170° à 180°= 890 ms. Le premier pas aura une durée de 62 ms, le deuxième 68 ms, ….le dernier 116 ms

 

Soit un cylce en 10700 ms.

 

Dans le code arduino :

base_temps = 112; // initialisation de la base de temps
lastUpdate = millis(); // récupération du temps écoulé
num_pas = 1 ;// initialisation du pas
 
if((currentMillis - lastUpdate) >= base_temps) //si base_temps est atteinte 
{
if (num_pas <= 10)  //
{
base_temps = base_temps – 6; // accélération
}
else if (num_pas >= 170) 
{
base_temps = base_temps + 6; //décélération
}
else
{
base_temps = 56;
      if (num_pas >= 169)
      {
       base_temps = base_temps + 6 //petit subterfuge pour avoir le premier pas de la phase de décélération = 62 ms !!
      }
}
servo.write(num_pas); //exécution du pas
num_pas ++ ; //incrémentation du pas
}

Attention, lorsque  le servomoteur fera la course de 180° à 0° il faudra penser à initialiser base_temps = 116 et num_pas = 180.

 

Enfin, pour ce qui est d’utiliser le timer interrupt voir lien suivant :

 

https://learn.adafru...o-part-2/timers




#74340 HumaOne

Posté par Telson - 28 septembre 2016 - 03:44

Je savais par avance que je me lançais dans quelque chose de compliqué et de long....Je suis un peu impatient d'en découdre maintenant......




#73945 Robot bipède pour la Toulouse Robot Race 2016

Posté par Telson - 19 septembre 2016 - 10:22

Très bon début en tout cas....Bonne continuation...Nous avons tous des moments difficiles dans nos développements et ce n'est qu'en les solutionnant que la joie est à son apogée....




#73893 Capteur de distance Laser VL53L0X

Posté par Telson - 18 septembre 2016 - 11:03

J'ai l'impression que le servomoteur enferme la créativité, ........ Il faut chercher une alternative... 

 

Hum je trouve cette remarque très intéressante..........tu pourrais préciser ..........




#73758 Print Quality Troubleshooting

Posté par Telson - 14 septembre 2016 - 03:59

C'est bon ça...Il faudra que je prenne le temps de lire.....

 

Merci....

 

Ce serait peut être pas mal de faire un tuto/lexique sur les termes utilisés pour les imprimantes 3D

 

Et un tuto sur le thème de ton lien ou le traduire (clogged = bouché)....




#73262 Bras robotique

Posté par Telson - 31 août 2016 - 01:49

Créer ses propres pièces avec une imprimante 3D demande beaucoup de temps de conception et beaucoup de temps en impression......Sans compter sur les erreurs de conception : fragilité des pièces conçues, quelques oublies pour passer les clés de serrage, passage de câbles, etc.....Bref ce n'est pas aussi simple ......

 

Après tout dépend de ce que tu aimes faire, soit uniquement la programmation et tu achètes toutes les pièces pour monter ton robot, la conception de ta structure et tu développes tes propres pièces (dessin 3D, impression, montage, ....), l'électronique et tu fais tes propres cartes !!! Aie !!! ou un mélange des genres.......

 

En tant que débutant j'ai opté pour l'achat d'une imprimante 3D, la conception des pièces pour une structure perso et reste la programmation........C'est beaucoup, beaucoup de compétences à acquérir mes ce n'est pas impossible loin de là.....Je le fais et je n'avais aucune connaissance avant mais il faut aimer lire......

 

 

Ensuite le choix de l'imprimante et bien là aussi il faut aimer lire....sur la dagoma tu trouveras un topic sur le sujet d'Oracid et prend aussi le temps de lire le forum de la marque ensuite moi j'ai acheté une sunhokey Prusa I3 et ce malgré des avis contraires que l'ont peut lire sur certains sites....Bien faire attention à la date de parution des articles.....Moi j'en suis très content....

 

Quels sont tes compétences en dessin 3D, impression, conception, quel est ton budget, quel est le temps que tu peux consacrer à ta machine....Autant de paramètre à prendre en compte....

 

Pour la cinématique inverse :

 

http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoMecatroniqueBrasLong5ServosPrehensionBalleTrackingBallxy




#72161 Glenn Robot Humanoide

Posté par Telson - 12 juillet 2016 - 08:00

Rhooooo lui hé !!!

 

:whistle2:




#71699 sunhokey prusa I3 auto bed leveling

Posté par Telson - 01 juillet 2016 - 10:03

Bonjour à tous,

 

J'ai rédigé une petite procédure pour mettre en place un système d'auto bed leveling sur une sunhokey prusa I3.

 

Je vous propose donc le document à lire et j'attends vos commentaires pour amélioration.

 

Toutes les remarques seront les bienvenues.

 

Merci par avance.

 

Edité par Jan : pdf mis en ligne sur cette page : http://www.robot-maker.com/forum/tutorials/article/103-auto-bed-leveling-sunhokey-prusa-i3-s508/

 

++




#71472 cablâge endstop

Posté par Telson - 27 juin 2016 - 10:55

Bonjour,
 
j’essaie de mettre en place un système auto bed leveling et ce dernier, pour des raisons de place, ne me permet pas d'utiliser mon endstop Z min.
 
Donc je comptais utiliser un interrupteurs (NO/NC/COM).
 
endstop9.png
 
Mais le monter ainsi me laisse un doute .....
 
Une résistance de rappel est nécessaire entre les bornes de source, signal et le retour à la masse sinon il y a des risques de griller l’électronique avec un court-circuit.

Une résistance de rappel est déjà intégré dans le micro-contrôleur et il est possible de l’activer par le firmware.

 

Il est nécessaire de choisir cette option pour connecter un interrupteur mécanique directement entre le signal et le retour à la masse.

 

Voici, ci-dessous un extrait du fichier Configuration.h de mon imprimante.......

//===========================================================================
//=============================Mechanical Settings===========================
//===========================================================================

// Uncomment the following line to enable CoreXY kinematics
// #define COREXY

// coarse Endstop Settings
#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors

#ifndef ENDSTOPPULLUPS
  // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
  // #define ENDSTOPPULLUP_XMAX
  // #define ENDSTOPPULLUP_YMAX
  // #define ENDSTOPPULLUP_ZMAX
  // #define ENDSTOPPULLUP_XMIN
  // #define ENDSTOPPULLUP_YMIN
  // #define ENDSTOPPULLUP_ZMIN
#endif

#ifdef ENDSTOPPULLUPS
  #define ENDSTOPPULLUP_XMAX
  #define ENDSTOPPULLUP_YMAX
  #define ENDSTOPPULLUP_ZMAX
  #define ENDSTOPPULLUP_XMIN
  #define ENDSTOPPULLUP_YMIN
  #define ENDSTOPPULLUP_ZMIN
#endif

 

 

Est ce que je peux connecter mon interrupteur directement à ma carte.

 

Faut t'il absolument que j'utilise les 3 fils et si non alors je conserve NC ou NO ......

 

Merci par avance..........

 

++




#47927 Pitié, ne mettez pas la charrue avant les boeufs !

Posté par Telson - 20 août 2012 - 09:58

Bonjour,

Étant débutant en la matière et me sentant concerné par cette conversation, je me permets de vous apporter mon point de vue sur la question.

Qaund j'ai commencé la "robotique" je me suis retrouvé face à un gros dilemme!!! Plein d'idée mais aucune connaissance en électronique, en carte, interface. Donc mon premier reflex fût de regarder ce qu'il existait sur le marché................Après cette première phase (bcp de lecture quand même), j'avais encore plus de question qu'au départ!! Argh!!

Bref, je me dis pour éclaircir mon horizon je vais poser 2-3 questions à des personnes ayant les compétences pour y répondre........Déjà là, nous avons donc des questions certes très basiques........

Mon horizon éclairci et en partie grâce à vous messieurs, j'en profite d'ailleurs pour vous remercier, je me décide de commander du matériel.....Mais quoi.......des interfaces toutes faites, faire mes propres cartes....AIEAIEAIE!!!!

Achetez du matos tout fait. alors que je ne savais pas si j'allais réussir à faire quelque chose, achetez des composant pour réaliser mes montages, Pouaaaaaaaaa et le réglage de tout ça...BOBO la tête............

Prenons un exemple très simple........ pour la gestion des moteurs CC, rien de plus simple me direz vous. .......je décide de développer moi même cette interface et me lance donc dans la recherche des info pour sa réalisation.............RE BOBO la tête..............Compte tenu des quantités énormes d'informations que nous retrouvons sur le web, de la quantité énorme des commentaires stipulant que le montage cafouille (et oui parce que en plus il faut lire tous les commentaires).........ma recherche fût très longue....Mais cela fonctionne........Victoire!! Pourtant un bon tuto disponible m'aurais tout de suite éviter de poser des questions simplistes.


Bref, tout ce blabla pour vous dire quoi alors finalement!!?? Et bien quand vous êtes amateur et que vous trouvez un site dans lequel il semblerait que des personnes puissent répondre à vos questions vous demandez de l'aide parce que un forum c'est fait pour que les plus compétents aident les moins compétant.

Il est vrais cependant que la première démarche avant de poser la question est de faire des recherches sur ce même forum (ou ailleurs) pour savoir si la réponse existe déjà et c'est la que le bas blesse........Beaucoup ne prennent pas le temps de faire une recherche et ça nous ne pourrons jamais rien y faire et parfois, quand nous effectuons une recherche les réponses sont tellement nombreuses ainsi que les commentaires qu'il est souvent difficile de retrouver le fil de la conversation.


Bien alors comment faire pour éviter que le premier débutant nous inonde de question trop simple. Et bien je ne pense pas qu'il existe de miracle :

1) Proposer un certains nombres de liens dans lesquels nous allons retrouver les informations de base (exemple sur le forum Arduino : Le Guide Arduino).

2) proposer des tutos : http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ATELIERS

3) .......des modos pour aiguiller......


Attention , je ne dis pas que ce sont les solutions miracles, mais alors pas du tout.

Mais en tant que débutant nous avons toujours besoin au début d'être vraiment bien aiguillé puis avec le temps nous pouvons enlever les p'tites roues arrière de notre tricycle pour filer comme des grands.

Cordialement.


#46742 [hack] souris à boule ps/2 comme odometre

Posté par Telson - 19 juillet 2012 - 10:28

En ce qui concerne la lecture de la trame ou disons de la sortie de la souris rien de plus simple en fait il faut utiliser cette librairie, à placer bien sûr dans le répertoire des librairies du programme Arduino :

http://arduino.cc/pl...entLib/Ps2mouse

Dans le fichier zip vous trouverez un exemple (ps2_mouse) et comme indiqué dans le fichier source, connecté la sortie DATA sur la broche numérique 5 et la sortie CLOCK sur la broche numérique 6.
/* Pin 5 is the mouse data pin, pin 6 is the clock pin
Feel free to use whatever pins are convenient.*/

vous pouvez utiliser d'autres broches numériques si vous le souhaitez en modifiant cette ligne dans le programme :

PS2 mouse(6, 5);


Voici le résultat :

1000 X=0 Y=0
101000 X=0 Y=-1
101000 X=0 Y=-3
101000 X=0 Y=-4
101000 X=0 Y=-5
101000 X=0 Y=-7
101000 X=0 Y=-9
101000 X=0 Y=-5
101000 X=0 Y=-1
1000 X=0 Y=0
1000 X=0 Y=0
1000 X=0 Y=1
1000 X=0 Y=1
1000 X=0 Y=2
1000 X=0 Y=2
1000 X=0 Y=4
1000 X=0 Y=3
1000 X=0 Y=3
1000 X=0 Y=2
1000 X=0 Y=1
1000 X=0 Y=0
1000 X=0 Y=0
11000 X=-2 Y=0
11000 X=-1 Y=0
11000 X=-2 Y=0
11000 X=-3 Y=0
11000 X=-2 Y=0
11000 X=-2 Y=0
11000 X=-3 Y=0
1000 X=0 Y=0
1000 X=0 Y=0
1000 X=1 Y=0
1000 X=3 Y=0
1000 X=4 Y=0
1000 X=3 Y=0
1000 X=3 Y=0
1000 X=4 Y=0
1000 X=4 Y=0
1000 X=2 Y=0
1000 X=1 Y=0
1000 X=0 Y=0
1000 X=0 Y=0

Petite astuce si vous ne souhaitez effectuer l'affichage des données que si il existe un déplacement :
  if ((mx!=0) || (my!=0))
  {
  Serial.print(mstat, BIN);
  Serial.print("\tX=");
  Serial.print(mx, DEC);
  Serial.print("\tY=");
  Serial.print(my, DEC);
  Serial.println();
  }
Spécialement que du bonheur............


#46692 [hack] souris à boule ps/2 comme odometre

Posté par Telson - 18 juillet 2012 - 12:45

Bonjour,

Alors pour certains je ne leur apprendrai rien mais voici le principe de fonctionnement d'une souris à boule composé de deux roues codeuses et de deux boutons, c'est un modèle IBM avec câble PS/2. J'ai fait deux images qu'il faut superposer pour voir l'emplacement des différents composants....

Image IPB


Les fourches optiques sont composées (chacune ) d'une Led IR et de deux capteurs. Celles-ci, fournissent les signaux en quadrature analyser par le CI EMB54802AP qui délivre sur sa sortie DATA un signal composée de 3 Byte.

Ces 3 Byte sont espacés d'environ 350 µs ; les trames ainsi constituées durent alors 3,6 ms et sont espacées d'au moins 6,4 ms. Ainsi, la souris pourra envoyer jusqu'à 100 trames par seconde.





Image IPB



Le premier Byte de la trame fournit les informations suivantes :

L : Bouton Gauche (actif à 1)

R : Bouton Droit (actif à 1)



XS : Direction du déplacement horizontal (1 pour Gauche)

YS : Direction du déplacement horizontal (1 pour Bas)



XV : Débordement suivant X

YV : Débordement suivant Y

Les 2 Byte suivants transportent la valeur du déplacement :

X[7..0] : Déplacement Horizontal (Entier relatif, positif à droite)

Y[7..0] : Déplacement Horizontal (Entier relatif, positif en bas)


C'est relativement bref comme information mais je pense que le nécessaire est présent.


Source : http://www.rennes.su.../souris_ps2.htm