J'ai un moteur pas a pas a contrôler avec seulement deux boutons sur lesquels j'appuie, un pour augmenter et l'autre pour diminuer la vitesse d'un moteur diésel. En relachant les boutons, le moteur pas a pas reste fixe. Ce moteur pas a pas fonctionne sur 6 volts mais il fonctionne bien sur 5 volts aussi.
Ce moteur pas a pas est sur une petite transmission qui fait monter ou abaisser un levier. Lorsqu'il est en position basse, il arrête le moteur diésel et lorsqu'il est en position haute, le moteur diésel tournes plus vite.
Je voudrais utiliser un Arduino NANO (copie) avec un contrôleur Velleman VMA409 qui a comme chip un L298N. Le moteur pas a pas a 4 fils seulement.
J'aurai besoin de pouvoir régler la vitesse du moteur pas a pas mais un coup la bonne vitesse trouvée, elle ne changera plus.
De plus, quand on abaissera la vitesse du moteur diésel, il deviens shut-off et le moteur diésel s'arrêtera. Par la suite, on met la clé sur OFF
J'aimerai aussi que lorsque je mettrai le circuit sous tension (clé a ON), que le moteur pas a pas puisse tourner un certains nombres de steps dans une direction (vers le haut pour permettre au moteur de pouvoir démarrer). Par la suite, on pourras abaisser ou augmenter la vitesse du moteur diésel a l'aide des deux boutons.
J'ai cherché sur le net pour trouver mais rien de similaire.
Quelqu'un pourrais m'aider et me diriger vers les bonnes sources car ce que j'ai vu de ce qui ressemble le plus a mon circuit recherché, était avec un Arduino UNO ?
La carte nano est la carte UNO en format plus petit c'est la même chose.
Pour la commande du moteur pas à pas le mieux est de commencer à apprendre à le gérer avec les "Tutos dEskimon" dont tu trouvera un lien d'accès en lisant les messages épinglés.
Une fois ceci fait tu verra que ce sera plus clair dans ta tête et tes questions seront plus précises que maintenant.
Conseils :
ne pas partir directement sur le programme définitif mais faire des petits programme pour tester une chose nouvelle à la fois .
écrire en français ce que tu veux faire étape par étape et tu constatera que le squelette du programme final se dessine naturellement. Je ne suis pas programmeur de métier mais j'ai partagé un bureau avec un chef de groupe programmeurs de métier et j'ai été impressionné du nombre de documents écrit avant d'écrire la première ligne de programme.
J'ai réussi a faire fonctionner mon moteur pas a pas. Pour ce qui est du L298N, c'est la seule pièce que j'ai en ce moment mais au moins mon moteur fonctionne. Je continu les essais et vous reviens.
Merci pour vos réponses.
#include <Stepper.h>
const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
// for your motor
// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
void setup() {
// set the speed at 60 rpm:
myStepper.setSpeed(10);
// initialize the serial port:
Serial.begin(9600);
}
void loop() {
// step one revolution in one direction:
Serial.println("clockwise");
myStepper.step(stepsPerRevolution);
delay(500);
// step one revolution in the other direction:
Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution);
delay(500);
}
Tout ce que j'ai trouvé jusqu'a présent est contrôlé par un potentiomètre et le déplacement est limité, je ne parviens pas a avoir le plein déplacement du levier.
Je vous avoue que je ne connais pas trop le contrôle d'un moteur pas a pas.
J'aimerai simplement pouvoir faire déplacer mon levier à l'aide de deux interrupteurs.
Bonjour. Voici le code que j'ai fait et ça fonctionne très bien.
Il ne me reste qu'a faire monter le levier d'un certain nombres de step lors de la mise sous tension du module
#include <Stepper.h>
// pour un moteur de 200 pas par tour et brancher sur les broches 7,8,9,10
Stepper moteur(200, 7, 8, 9, 10);
void setup()
{
moteur.setSpeed(100); // 100 tours par minute
pinMode(11,INPUT); // Bouton Up
pinMode(12,INPUT); // Bouton Dow
pinMode(6,OUTPUT); //enable/disable output
}
void loop()
{
if (digitalRead(11)==HIGH){ //on augmente la vitesse du moteur diésel
moteur.step(1);
digitalWrite(6,HIGH);
delay(1);
}
if (digitalRead(11)==LOW && (digitalRead(12)==LOW)) { //on désactive les sorties moteurs
digitalWrite(6,LOW);
delay(1);
}
if (digitalRead(12)==HIGH){ //on diminue la vitesse du moteur diésel jusqu'a l'arrêt complet si désiré
digitalWrite(6,HIGH);
moteur.step(-1);
delay(1);
}
}
pinMode(11,INPUT); // Bouton Up
pinMode(12,INPUT); // Bouton Dow
if (digitalRead(11)==HIGH){ //on augmente la vitesse du moteur diésel
Si tu as mis des résistances de pulldown, c'est OK, sinon les entrées vont se comporter de manière aléatoire.
if (digitalRead(11)==HIGH){ //on augmente la vitesse du moteur diésel
moteur.step(1);
digitalWrite(6,HIGH);
delay(1);
}
Il me semble que digitalWrite(6,HIGH) devrait être avant moteur.step(1) ?
Il va falloir opérer à tâtons, jusqu'à trouver les bonnes valeurs pour les pas, mais ce n'est pas infaisable.
Je comprends que fournir les caractéristiques du moteur soit difficile ;D
Merci pour avoir trouvé l'erreur dans mon programme, c'est corrigé
Et oui j'ai mis des résistances pull down sur les trois entrées.
J'ai fini par trouver les caractéristiques du moteur, y'a juste la tension et le degrés par pas.C'est 6 volts et 0,04 degrés par step. Ne m'y connaissant pas trop, je divise 360 degrés par 0.04? donc ça ferai 9000 pas pour faire une rotation complète si je comprend bien. J'ai mis 200 pas par tour et si j'augmente, le moteur deviens faible mais plus rapide. Comment se fait vraiment le calcul pour avoir la pleine puissance sur le levier ?
Désolé pour le manque de détails. Je pense tout mettre mais il en manque quand même
Jacques3012:
De plus, quand on abaissera la vitesse du moteur diésel, il deviens shut-off et le moteur diésel s'arrêtera. Par la suite, on met la clé sur OFF
J'aimerai aussi que lorsque je mettrai le circuit sous tension (clé a ON), que le moteur pas a pas puisse tourner un certains nombres de steps dans une direction (vers le haut pour permettre au moteur de pouvoir démarrer). Par la suite, on pourras abaisser ou augmenter la vitesse du moteur diésel a l'aide des deux boutons.
Pour remplir ces fonctions, il manque certainement un contact qui permette à minima de connaître une position de référence du moteur pas-à-pas ou de l'organe qui est actionné par le moteur. Sinon ça va vite faire n'importe quoi.
Un nombre de 9000 pas me paraît énorme.
Le nombre de pas par tour n'intervient pas dans l'opération de rotation d'un pas.
Il est pris en compte seulement dans le calcul du délai entre pas, donc sert uniquement lorsque l'on effectue une rotation de N pas.
Si le sketch avec deux boutons fonctionne il devrait être assez facile de faire tourner le moteur d'un pas, N fois, afin de mesurer l'angle.
fdufnews:
Pour remplir ces fonctions, il manque certainement un contact qui permette à minima de connaître une position de référence du moteur pas-à-pas ou de l'organe qui est actionné par le moteur. Sinon ça va vite faire n'importe quoi.
Bonjour. Je laisserai faire cette fonction. Quand le gars veut éteindre le moteur il n'a pas le choix d'abaisser la vitesse jusqu'au shut Off, ensuite il fermera le circuit. En voulant redémarrer, il mettra le circuit sous tension et il n'aura qu'a maintenir l'interrupteur qui fait monter la vitesse une ou deux secondes et démarrer ensuite le moteur.
Pour ce qui est de la rotation par step, c'est bien 0,04 degrés comme indiqué sur la photo.
#include <Stepper.h>
// pour un moteur de 200 pas par tour et brancher sur les broches 7,8,9,10
Stepper moteur(200, 7, 8, 9, 10);
void setup()
{
moteur.setSpeed(30); // tours par minutes
pinMode(11,INPUT); // Bouton Up
pinMode(12,INPUT); // Bouton Dow
pinMode(6,OUTPUT); //enable/disable output
}
void loop()
{
if (digitalRead(11)==HIGH){ //on augmente la vitesse du moteur diésel
digitalWrite(6,HIGH);
moteur.step(1);
delay(1);
}
if (digitalRead(11)==LOW && (digitalRead(12)==LOW)) { //on désactive les sorties moteurs
digitalWrite(6,LOW);
delay(1);
}
if (digitalRead(12)==HIGH){ //on diminue la vitesse du moteur diésel jusqu'a l'arrêt complet si désiré
digitalWrite(6,HIGH);
moteur.step(-1);
delay(1);
}
}
Pour le moteur c'est 0,04 mais pas pour le levier car il y a une transmission entre le levier et le moteur. Je ne connais pas ce ratio par contre. Avec ce code, c'est celle qui me donnes le plus de force sur le levier.