bonjour,
j'ouvre ce topic qui fait suite à long topic dans lequel je cherchais un moteur de fort couple
http://forum.arduino.cc/index.php?topic=172747.0
je me suis donc fixé sur un moteur d'éssuie glace 12V.
j'ai donc fait un prototype avec le shield pololu VNH5019
je le controle avec un potentiomètre, qui commande le sens et la vitesse. Nickel
Maintenant j'aimerai vraiment pouvoir l'utiliser comme un servo moteur : si je tourne mon potentiomètre de 20° que le bras tourne de 20° etc..
j'ai mis un autre potentiomètre sur l'axe du bras, et j'ai éssayé avec le principe décrit dans le tuto de vassi974, ça marche. Mais pas très souple. je suis obligé de choisir une vitesse de base. A vitesse lente ça marche bien, mais c'est lent. et rapide ça suit pas il va trop vite ...
Je pense que ça doit être faisable : j'ai le moteur le feedback et le potentiomètre, j'y suis presque!
auriez vous une idée?
en gros arriver à faire le boulot de la librairie servo.h et de l'électronique embarquée dans un servo
#include "DualVNH5019MotorShield.h"
DualVNH5019MotorShield md;
int hyseteris =10; // 1 donne des resultats tres precis et stoppe déjà les tremblement moteur
int step1; // variables pour la lecture de la valeur analogique
int step2;
int val; //variables mises à l'échelle des valeurs des potentiomètres
int val2;
void setup()
{
Serial.begin (9600); //initialize serial communications
md.init(); //initiates default pololu shield pins
}
void loop()
{
step1 = analogRead(A5); // lis la valeur du pot de l'arbre
step2 = analogRead(A4); // lis la valeur du potentiometre entre 0 et 1023 du pot telecommande
val = map(step1, 310, 710, 1, 280); //l'arbre ne tourne que entre 310 à 710
val2 = map(step2, 1, 1023, 1, 280); // convertis en 0° a 280°
if (val2 < (val - hyseteris)) {
md.setM1Speed(300);
delay (1);
}
else if (val2 > (val + hyseteris)) {
md.setM1Speed(-300);
}
else { md.setM1Speed(0);}
}
bonjour,
as tu essayé en mettant des Serial.print pour voir les valeurs retournées?
ton delay (1); doit faire sauter des comparaisons
if (val2 < (val - hyseteris)) {
md.setM1Speed(300);
delay (1);
}
else if (val2 > (val + hyseteris)) {
md.setM1Speed(-300);
}
C'est un peu brutal.
La vitesse ne doit pas être une constante, elle devrait être adaptée en fonction de la valeur de l'écart.
Il faut tenir compte de la valeur courante de l'erreur, de ses valeurs passées et de sa variation. C'est le principe des asservissements PID (Proportionnel, Integral, Derivée). Il existe des librairies PID pour l'Arduino
Bonjour,
il faudrait que tu gère la vitesse en fonction de la distance que tu as à parcourir, plus la distance est grande, plus tu augmente la vitesse.
tu calcule la course à parcourir = abs ((val2 - (val - hyseteris))), tu détermine une vitesse mini et maxi en fonction de tes courses mini et maxi,
ça devrait rouler.
vince3838:
il faudrait que tu gères la vitesse en fonction de la distance que tu as à parcourir, plus la distance est grande, plus tu augmentes la vitesse.
Ce n'est pas suffisant, son système est assez lourd, il faut tenir compte de son inertie. C'est pour cela que le PID est intéressant. Au démarrage même si la distance n'est pas importante tu peux avoir un peu de pêche pour vaincre l'inertie et dès que l'équipement est en branle la vitesse s'adapte. Et pareil au freinage la force d'inertie oblige à prévoir un vrai freinage actif.
oui tu as raison, c'est juste un peu plus délicat à mettre en place, je proposais une étape intermédiaire 
oui le pid ... je vais me pencher dessus merci!
mais ça a pas l'air d'être de la tarte! 
helios86:
bonjour,
j'ouvre ce topic qui fait suite à long topic dans lequel je cherchais un moteur de fort couple
recherche moteur très fort couple - Français - Arduino Forum
je me suis donc fixé sur un moteur d'éssuie glace 12V.
j'ai donc fait un prototype avec le shield pololu VNH5019
https://www.youtube.com/watch?v=7E3LbBwuN4Q
je le controle avec un potentiomètre, qui commande le sens et la vitesse. Nickel
Maintenant j'aimerai vraiment pouvoir l'utiliser comme un servo moteur : si je tourne mon potentiomètre de 20° que le bras tourne de 20° etc..
j'ai mis un autre potentiomètre sur l'axe du bras, et j'ai éssayé avec le principe décrit dans le tuto de vassi974, ça marche. Mais pas très souple. je suis obligé de choisir une vitesse de base. A vitesse lente ça marche bien, mais c'est lent. et rapide ça suit pas il va trop vite ...
Je pense que ça doit être faisable : j'ai le moteur le feedback et le potentiomètre, j'y suis presque!
auriez vous une idée?
bonsoir
comme expliqué par mes petits camarades
, il va falloir en passer par une gestion PID
à voir si un des facteurs de la boucle de regulation (I ou D ) ne peut pas etre statistiquement déterminé stabilisé (temps de calcul)
Et il ne faudra pas oublier de mettre 2 ou 3 sécurités en place. Parce que pendant la mise au point si la machine s'emballe ou se met à osciller elle peut quand même être dangereuse.
fdufnews:
Et il ne faudra pas oublier de mettre 2 ou 3 sécurités en place. Parce que pendant la mise au point si la machine s'emballe ou se met à osciller elle peut quand même être dangereuse.
bonsoir fdufnews
[HUM] 
action/reaction
dérivée élastique là 8)
plus de bras, plus de chocolat ---->[] 