le potentiomètre te donnera une valeur sur 10 bits comprise entre 0 et 1023 ... Si tu veux atteindre une vitesse max de 10000 il te fuadra multiplier le résultat de analogRead par 10 ! Et par 20 si tu veux atteindre 20000.

premier programme Arduino moteur Nema
#21
Posté 29 septembre 2018 - 10:18
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#22
Posté 30 septembre 2018 - 07:12
Bonjour,
Voici le code que j'ai testé en essayant de trouver les informations sur le web :
#include <AccelStepper.h> #define INTERUPTEURPIN 10 #define ANALOGPIN A0 int val = 0; // variable de type int pour stocker la valeur de la mesure AccelStepper stepper(1, 4, 7); void setup() { pinMode(INTERUPTEURPIN,INPUT); stepper.setMaxSpeed(10000); } void loop() { // lire la valeur de la tension analogique présente sur la broche val = analogRead(ANALOGPIN); // multiplier la valeur de l'entrée analogique par 10 val *=10 ; if( digitalRead(INTERUPTEURPIN) ) stepper.setSpeed(val); else stepper.setSpeed(0); stepper.runSpeed(); }
Ca fonctionne, mais j'ai quelques questions tout de même :
- la première est, est-ce que le code est correct ? ça fonctionne mais ce n'est peut-être pas la façon idéale de procéder ?
- peut-on jouer sur l'incrément à donner par le potentiomètre pour modifier la vitesse ? (j'ai l'impression dès fois de tourner la vis "dans le vide" pour trouver le moment où la vitesse commence à changer)
- si je mets un facteur x50 ou x 100, j'observe à un moment donné un changement de sens de rotation du moteur ?
- il me semble, je m'en suis aperçu par hasard, que le potentiomètre 6 broches à une position intermédaire qui permet d'avoir une vitesse moindre, est-ce exact et est-ce de moitié (ou autre) ?
Merci pour votre retour, bon dimance.
#23
Posté 30 septembre 2018 - 09:56
Petite précision à mon message de ce matin, je souhaiterais savoir surtout ceci :
- la première est, est-ce que le code est correct ? ça fonctionne mais ce n'est peut-être pas la façon idéale de procéder ?
- il me semble, je m'en suis aperçu par hasard, que le potentiomètre 6 broches à une position intermédaire qui permet d'avoir une vitesse moindre, est-ce exact et est-ce de moitié (ou autre) ?
pour le reste je pourrai voir plus tard
Bonne journée
#24
Posté 30 septembre 2018 - 05:03
Photo et vidéo ?
Quel potentiomètre 6 broches ?
Ensuite ce que tu observes est normal. Ton "erreur" c'est juste peut être que tu ne maîtrises pas la taille de ta variable.
Je te suggère de lire cet article : Savoir adapter la taille de ses variables en C.
Cette fois ci je te laisse te débrouiller un peu pour que tu expliques:
+> Pourquoi le moteur change de sens à un moment? =)
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#25
Posté 30 septembre 2018 - 08:44

Je n'ai pas la réponse pour le code là, je cale. Est-ce que vous pourriez valider au moins celui-ci ? Là je pense que je serai au bout de mon projet pour démarrer. Il me restera à plancher. Je n'hésiterai pas à revenir quand le projet sera à peaufiner.
Pour le potentiomètre, c'est erreur de ma part, je parlais en fait de l'interrupteur 6 broches.
En parlant de potentiomètre et d'interrupteur, je rebondis sur un aspect, j'ai pris des versions "mini". Est-ce que des versions plus grande taille existent tout en permettant d'utiliser la breadbord sans soudure ?
Bonne soirée.
#26
Posté 30 septembre 2018 - 10:19
Bonsoir,
pas de souci, va bien falloir que je m'y mette ^^
Je n'ai pas la réponse pour le code là, je cale. Est-ce que vous pourriez valider au moins celui-ci ?
Si le système fonctionne comme tu as envie que cela fonctionne alors c'est bon! Si ça ne fonctionne pas comme tu veux alors décrit le comportement qui ne te va pas.
Par contre as tu lu mon tuto sur la taille des variables ? C'est un indice pour améliorer ton code / comprendre ce qui se passe.
Hésite pas à écrire les valeurs et à faire les calculs * 10 , * 50 etc... si ça peut t'aider =)
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#27
Posté 04 octobre 2018 - 06:06
Bonjour,
D'accord, je lirai le tuto à tête reposée, et je reviendrai sur le post si besoin.
J'ai une question sur le matériel que j'utilisé : 1 ; 2
Ce sont des éléments miniatures. Existeraient-ils en plus gros pour les gros mais toujours pour breadboard et sans soudure ?
Bonne soirée.
#28
Posté 05 octobre 2018 - 12:30
Oui il existe des un peu plus gros. Par contre si tu veux rester sur breadboard et sans soudure ça limite un petit peu les choix. ( mais il y en a )
Juste une petite question, tu as besoin d'un interrupteur 2 positions ? ( Qui reste dans la position sans que tu y touche )
Ou bien un bouton poussoir de conviendrait ? ( Il faut rester appuyer dessus pour que le contact se maintienne )
On peut aussi modifier ton code pour que utiliser un bouton poussoir et qu'à chaque fois que tu appuis dessus ça change d'état.
(Il y a plus de choix différents pour les boutons poussoirs que pour les interrupteurs ... )
Idem pour le potentiomètre du veux un potentiomètre rotatif ou bien un " slider " ça pourrait t'intéresser ? =)
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#30
Posté 05 octobre 2018 - 11:17
#include <AccelStepper.h> #define INTERUPTEURPIN 10 #define ANALOGPIN A0 int val = 0; // variable de type int pour stocker la valeur de la mesure bool run = 0; AccelStepper stepper(1, 4, 7); void setup() { pinMode(INTERUPTEURPIN,INPUT); stepper.setMaxSpeed(10000); } void loop() { // lire la valeur de la tension analogique présente sur la broche val = analogRead(ANALOGPIN); // multiplier la valeur de l'entrée analogique par 10 val *=10 ; if( digitalRead(INTERUPTEURPIN) ) { run = !run; // Si on appuis sur le bouton on change run : on met run à 1 si il valait 0 sinon on le met à 0 si il valait 1 } if( run ) stepper.setSpeed(val); else stepper.setSpeed(0); stepper.runSpeed(); }
Voilà le code pour avec un bouton poussoir =)
- Forthman aime ceci
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#32
Posté 06 octobre 2018 - 02:20
Le joystick peut faire office de boutons poussoirs et donne aussi 2 axes de potentiomètres.
On a ce joystick en boutique.
Par contre il faudra que tu modifie légèrement le code pour que ça fasse avant arrière.
val = (analogRead(ANALOGPIN)-neutre) * gain;
Par contre il faut bien choisir la valeur du gain que tu veux et le type de "val" pour éviter le débordement de la variable =)
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#33
Posté 06 octobre 2018 - 03:27
j'ai bossé un peu depuis notre échange sur le premier code
alors voilà où j'en suis :
#include <AccelStepper.h> #define INTERUPTEURPIN 10 #define ANALOGPIN A0 int val=0 ; AccelStepper stepper(1, 4, 7); // TB6600 OFF OFF ON ON ON OFF void setup() { Serial.begin(115200); //Initialisation de la communication avec la console pinMode(INTERUPTEURPIN,INPUT); stepper.setMaxSpeed(10000); } void loop() { val = analogRead(ANALOGPIN); val *=10 ; Serial.print("Valeur lue : "); Serial.println(val); // affiche la valeur du potentiomètre delay(1000); // affiche 1 fois par seconde if( digitalRead(INTERUPTEURPIN) ) stepper.setSpeed(val) ; else stepper.setSpeed(0); stepper.runSpeed(); }
si j'ai compris un peu le principe (je fais peut-être un peu trop simple car je ne m'y connais pas) : on fait une conversion entre la tension donnée par le potentiomètre (entre 0 et 1023 en analogique) vers une valeur en pas par seconde à fournir à la fonction setSpeed() ?
j'ai lancé le code ci-dessus, en effet, quand on fait x10, x100, x200 ... je vois bien dans le moniteur série ma valeur qui change proportionnellement au fois X
au bout d'un moment, le chiffre affiché passe au négatif, j'imagine que ce doit être une histoire de tension inversée, du coup, le moteur tourne dans l'autre sens
par contre, j'ai un gros souci avec ce code ... c'est que le moteur ne tourne pas et même si je fait tourner la vis du potentiomètre
pourriez-vous me donner un coup de main ?
Merci.
#34
Posté 06 octobre 2018 - 03:41
Oui en effet tu obtiens du négatif ! C'est ce qui explique ton moteur qui tourne dans l'autre sens. Mais pourquoi donc ? ^^
As tu lu mon tuto sur les taille de variable ? =) Si oui tu dois avoir la réponse . C'est pas pour rien que dans mon dernier message j'ai précisé " Bien choisir le type de variable pour éviter le débordement ..."
Ensuite le problème dans ton code c'est le " delay" =) Si tu l'enlèves ça marchera =)
Par contre il faut mettre en place une autre astuce pour afficher ton texte toute les 1 seconde
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#35
Posté 06 octobre 2018 - 04:46
je dirais que si on change le sens du courant, ça fait tourner le moteur dans le sens inverse ?
pour le tuto, je l'ai lu, lu, et relu, mais je dois avouer que ça ne me fait pas avancer, je n'ai pas de notions dans ce domaine
j'ai cependant testé int8_t et int16_t avec différent val *=X pour comparer à int dans les même conditions, je vois bien que ça change la régulation faite par le potentiomètre et les valeurs affichées par le moniteur, de là à faire le lien entre ces variables et la façon dont le potentiomètre va réguler la vitesse ou la vitesse du moteur ...
je poursuis mes recherches
bonne soirée
#36
Posté 06 octobre 2018 - 05:07
En fait ce qu'il faut comprendre c'est que :
analogRead retourne une valeur comprise entre 0 et 1023 sur 10 bis.
Un uint8 peut contenir une valeur comprise entre 0 et 255.
Si tu mets 256 ça déborde et ça revient à 0. si tu mets 257 ça donne 1 ... et ainsi de suite.
Un int8_t ça donne entre -128 et 127.
Si tu met 128 dans la variable ça déborde et ça devient -128
Si tu mets 129 dans la variable ça déborde et ça devient -127 ...
Un int c'est entre -32768 et 32767 ...
Donc si tu fais 1023 * 40 par exemple ... tu vas déborder d'un int ...
Par contre pour éviter le débordement tu peux utiliser des int32_t =) qui sont plus grands
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#37
Posté 06 octobre 2018 - 05:44
d'accord, je vois à peu près, en faisant quelques exemples, je finirai par voir pour affiner seul ma régulation
mais mon souci c'est de faire le lien entre ces valeurs de bits et la façon dont le potentiomètre va réguler la vitesse ou la vitesse du moteur : en gros, là pour l'instant, quand je tourne le potentiomètre, bien que les valeurs dans le moniteur évolue quand je touche à la vis, soit la vitesse ne bouge pas beaucoup ou alors je le perçois pas, ou soit sur un très court tour de vis le moteur change de sens
je ne vois donc pas comment configurer la "finesse" (ou l'incrément ?) de la régulation du potentiomètre pour obtenir une amplitude importantes de vitesses et que ça se fasse sur peut-être 1/2 tour de vis max (peut-être que je ne suis pas clair, je peux reformuler si besoin)
#38
Posté 06 octobre 2018 - 09:07
Pense à essayer en changeant le " stepper.setMaxSpeed(10000); "
Essaye avec une valeur 10 fois plus grande par exemple
Par ce que si tu met *20 ou + même et même si tu change int en int16 qui te permet d'avoir une variable qui dépasse le 32 000, si tu dit au robot de tourner au max à 10 000 si tu envois 32000 il tournera toujours à 10 000 jusqu'à ce que tu déborde en négatif.
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#39
Posté 07 octobre 2018 - 09:15
Bonjour,
Je commence à presque un peu voir les histoires de 0 à 1023 et le principe de les multiplier pour obtenir une nombre de pas suffisants pour le moteur.
Néanmoins, ce que je ne comprends pas, c'est que si je fais ce programme (prog1) :
#include <AccelStepper.h> #define INTERUPTEURPIN 10 AccelStepper stepper(1, 4, 7); // TB6600 OFF OFF ON ON ON OFF void setup() { pinMode(INTERUPTEURPIN,INPUT); stepper.setMaxSpeed(10000); stepper.setAcceleration(3000); } void loop() { if( digitalRead(INTERUPTEURPIN) ) stepper.setSpeed(3000); else stepper.setSpeed(0); stepper.runSpeed(); }
mon moteur tourne beaucoup plus vite que celui-ci (prog2) :
#include <AccelStepper.h> #define INTERUPTEURPIN 10 #define ANALOGPIN A0 int val=0 ;//variable pour récupérer la valeur de tension du potentiomètre. On l'initialise à 0. AccelStepper stepper(1, 4, 7); // TB6600 OFF OFF ON ON ON OFF void setup() { Serial.begin(115200); //Initialisation de la communication avec la console pinMode(INTERUPTEURPIN,INPUT); stepper.setMaxSpeed(10000); stepper.setAcceleration(3000); } void loop() { val = analogRead(ANALOGPIN); //lit la valeur de la tension, la numérise et la stocke dans val val *=100 ; Serial.print("Valeur lue : "); Serial.println(val); // affiche la valeur du potentiomètre delay(0); // fixe un délai d'attente if( digitalRead(INTERUPTEURPIN) ) stepper.setSpeed(analogRead(val)) ; else stepper.setSpeed(0); stepper.runSpeed(); }
alors que la valeur lue dans le moniteur donne "8000" pour Prog2.
Sinon j'ai aussi essayé ceci (Prog3) :
#include <AccelStepper.h> #define INTERUPTEURPIN 10 #define ANALOGPIN A0 int val=0 ;//variable pour récupérer la valeur de tension du potentiomètre. On l'initialise à 0. AccelStepper stepper(1, 4, 7); // TB6600 OFF OFF ON ON ON OFF void setup() { Serial.begin(115200); //Initialisation de la communication avec la console pinMode(INTERUPTEURPIN,INPUT); stepper.setMaxSpeed(10000); stepper.setAcceleration(3000); } void loop() { val = analogRead(ANALOGPIN); //lit la valeur de la tension, la numérise et la stocke dans val int valInter=map(val,0,1023,-5,5); //fonction de mappage Serial.print("Valeur lue : "); Serial.println(valInter); // affiche la valeur du potentiomètre delay(0); // fixe un délai d'attente if( digitalRead(INTERUPTEURPIN) ) stepper.setSpeed(analogRead(valInter)) ; else stepper.setSpeed(0); stepper.runSpeed(); }
mais j'ai obtenu le même résultat que Prog2 (tourne moins vite au max que Prog1), par contre j'ai l'impression qu'en utilisant le "mappage" (je ne sais pas ce que c'est) j'ai cru voir des amplitudes de vitesses données le potentiomètre visibles lorsque le moteur tourne.
Toujours partant pour un petit coup de main .
Bonne journée
#40
Posté 07 octobre 2018 - 12:31
pour info, mon dernier code avec toujours un moteur qui plafonne à basse vitesse :
#include <AccelStepper.h> #define INTERUPTEURPIN 10 #define ANALOGPIN A0 int val=0 ; int valInter=0 ; AccelStepper stepper(1, 4, 7); // TB6600 OFF OFF ON ON ON OFF void setup() { Serial.begin(115200); //Initialisation de la communication avec la console pinMode(INTERUPTEURPIN,INPUT); stepper.setMaxSpeed(10000); stepper.setAcceleration(3000); } void loop() { val = analogRead(ANALOGPIN); valInter = map(val,0,1023,0,3000); Serial.print("Valeur lue : "); Serial.println(valInter); // affiche la valeur du potentiomètre delay(0); // affiche 1 fois par seconde if( digitalRead(INTERUPTEURPIN) ) stepper.setSpeed(valInter) ; else stepper.setSpeed(0); stepper.runSpeed(); }
Répondre à ce sujet

0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users