Vitesse tres lente pour mon futur moteur

Bonjour,

Voila, je vous explique ce que je souhaiterai réaliser (mon projet quoi…). Pour des initiés comme vous, je pense que cela ne doit pas être un soucis, et même voir tout bête car le projet ne comporte qu'une seule demande à un moteur et qu'il la répète en boucle indéfiniment… pour la stopper, bas je débranche :stuck_out_tongue:

Le projet :
Demander à un moteur pas à pas, via un arduino, d'effectuer un tour complet et de le répéter indéfiniment (aucun stop entre chaque tour). La cadence que je souhaiterai imposer au moteur est de 1 tour en 3 minutes 20 secondes

Le matériel que je vais avoir pour ce projet :

  • 1 arduino UNO
  • 1 module interface de commande de moteur a base de L298N
  • 1 moteur P.A.P. 1.8° (donc 200 pas / tour)

N'y connaissant strictement rien dans ce domaine (débutant que je suis, je n'y avais jamais encore mis les pieds dans ce domaine….), j'ai donc commencé par faire un petit tour (moi, pas le moteur :smiley: ) sur le net où l'on trouve des millions de post à ce sujet. En faite, à force de lire, de lire, et de relire…. je m'y pomme !!!

Donc voilà, mon raisonnement. Est-il correct ?

Mon raisonnement :

  1. Mon moteur doit faire 1 tour en 3 minutes et 20 secondes.
  2. Mon moteur fait 1,8° à chaque pas, donc pour faire un tour, il doit faire 200 pas.
  3. petit calcul vite fait :
    a. 1 tour = 200 pas
    b. 1 tour = 3 minutes et 20 secondes
    c. Donc le nombre de pas que le moteur doit faire en 1 minute doit être égal à (petite règle de 3):
    • 3 minutes 20 sec. = 3,3333 minutes = 200 pas
    • 1 minute = X pas
    • X pas = 200*1 minute / 3,3333 minutes
    • X pas = 60
    d. Donc, la vitesse de mon moteur doit être fixée à 60 pas par minute

De là, pour l'arduino, je procède comme suit :

1 – Je déclare le nombre de pas pour 1 tour du moteur ainsi que la connectique de sortie sur l'arduino :

#include <Stepper.h>
Stepper moteur (200, 2, 3, 4, 5); // J'initialise le nbre de pas du moteur et les broches références de connexion sur l'arduino)
moteur.setSpeed(60); // Je fixe la vitesse du moteur à 60 pas par minutes

2 – La création de ma boucle :
void loop()
{
moteur.step(nbrepas360); // Effectue un tour complet dans un sens.
}

Suis-je dans le vrai où complètement à coté de la plaque ?

Merci pour votre aide :wink:

hello
voir l'exemple de la librairie "stepper.h"

il porte le doux nom de "one step at a time"
avec une tempo de 1 seconde entre chaque pas

ou un appel à une fonction géré avec millis()

OK et merci pour ta réponse.

Par contre dans l'exemple trouvé (https://www.arduino.cc/en/Tutorial/StepperOneStepAtATime), j'ai tout de meme quelques interrogations…

Voici l'exemple :

/*
Stepper Motor Control - one step at a time

This program drives a unipolar or bipolar stepper motor.
The motor is attached to digital pins 8 - 11 of the Arduino.

The motor will step one step at a time, very slowly. You can use this to
test that you've got the four wires of your stepper wired to the correct
pins. If wired correctly, all steps should be in the same direction.

Use this also to count the number of steps per revolution of your motor,
if you don't know it. Then plug that number into the oneRevolution
example to see if you got it right.

Created 30 Nov. 2009
by Tom Igoe

*/

#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);

int stepCount = 0; // number of steps the motor has taken

void setup() {
// initialize the serial port:
Serial.begin(9600);
}

void loop() {
// step one step:
myStepper.step(1);
Serial.print("steps:");
Serial.println(stepCount);
stepCount++;
delay(500);
}

Mes points d'interrogation :

1 - A la ligne : "Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);"

Pour "stepsPerRevolution", il faut le laisser tel qu'ecrit (et il va automatique prendre la valeur mentionnée en " const int stepsPerRevolution =" , ou alors il faut le remplacer par 200 (ce qui est le cas pour moi )?

2 – A la ligne : " int stepCount = 0;"

Cette ligne indique le nombre de pas que le moteur aura déjà effectué lorqu'on mettra le systeme en route ? C'est celà ?

3 – Quel est l'utilité de la section " void setup()" si je ne gère rien par un port série (une fois le programme compilé, l'arduino gérera le moteur seul, sans aucune connexion à un ordinateur) ?
Est-il réellement nécessaire de le mettre dans le programme ?
Il en est de meme avec toutes les lignes faisant appel au "serial" dans la section " void loop()"
"Serial.print("steps:");"
"Serial.println(stepCount);"
C'est ligne sont-elles necessaires ?

4 – Si je comprends (c'est pas sur…) :
"myStepper.step(1);" indique le nombre de pas à faire (ici 1 pas)
" stepCount++;" à qui cela sert ? A indiquer de faire le nombre de pas indiqué dans la ligne au-dessus ?
" delay(500);" indique de faire une pause de 500ms entre chaque pas (pour mon cas, il faudrait donc que je mette 1000 au lieu de 500 ?)

En gros, est-ce que le programme pourrait se résumer comme cela ?

#include <Stepper.h>
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
int stepCount = 0;

void loop() {
myStepper.step(1);
stepCount++;
delay(1000);
}

1/ oui laisse. stepsPerRevolution est défini plus haut: const int stepsPerRevolution = 200;

2/non, c'est une variable qui va servir de compteur qui est créée et initialisée à 0.

3/void setup(){} est obligatoire, meme vide ( si tu le vire, tu ne compilera pas)

les lignes Serial.print() ne servent qu'au débugage pour faire afficher des choses intérressantes sur le moniteur. ( c'est pour cela qu'il faut mettre Serial.begin(9600); dans le setup.

4/ oui "myStepper.step(1);" indique le nombre de pas à faire (ici 1 pas)
stepCount++; s'incémente de 1 à chaque passage il vaut donc 1, 2, 3, .....100, et 200 lorsque le moteur aura fait ses 200 pas ( soit 1 tour), puis 201, 202, 203 etc.....

oui : delay(500);" indique de faire une pause de 500ms entre chaque pas (pour mon cas, il faudrait donc que je mette 1000 au lieu de 500 ?)

tu as bien compris, le moteur va tourner indéfiniment

dans le prg, tu peux virer la ligne stepCount++, car elle sert à compter le nombre de pas effectués mais comme ce compteur n'est pas comparé à un nombre maxi de pas à effectuer, il ne sert à rien.
de meme que int stepCount = 0;

OK, donc si j'ai bien tout compris vos conseils, pour faire tourner indéfiniment mon moteur tel que décrit en début de post, le programme a compiler devra être celui-ci :

#include <Stepper.h>
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
int stepCount = 0;

void setup() {
// initialize the serial port:
Serial.begin(9600);
}

void loop() {
myStepper.step(1);
delay(1000);
}

Maintenant, j'ai bien tout reçu (carte pour le moteur, le moteur STP-43D1016-01, les "câbleries", ...), sauf le principal !!! L'arduino :sob: !!!!
Bon bah des que je pourrai faire le test en réel, je ferai mon retour :wink:

Merci a vous

le sérial.begin dans le set up ne servira que si tu utilises des sérial.print plus loin dans le prg

si tu veux tu peux virer serial begin

mais bien que le setup sera vide, tu dois le laisser sinon tu ne pourras pas compiler

void setup() {}

Merci.

J'attends ma carte avec impatience maintenant :wink:

bonjour,
ca ressemble à une monture pour télescope, non?

Oui, tout a fait.

En faite, c'est pour faire une mini table équatoriale qui ne sera destiné qu'a porter un APN :wink:

pourquoi ne pas mettre directement l'apn sur ton tube?
le résultat en sera que mieux.
déjà il faut faire ta mise en station, comment vas tu la faire avec cette mini table?
sauf si tu as une raquette, un viseur polaire.

sinon tu as un truc pas trop mal et assez simple, cherche focuser arduino.

"pourquoi ne pas mettre directement l'apn sur ton tube?"

Si c'est pour utiliser mon tube (et donc la monture), je ne vois pas pourquoi je me "prendrai la tête" à faire une mini-table équatoriale
La réponse est tout simplement pour faire un setup ultra léger (donc sans tube ni monture) afin de pouvoir juste le glisser dans le sac lors de petite rando et donc naturellement de m'affranchir du setup astronomique classique, lourd, et plus que restreignant pour le "promener". Essais de faire au moins 30 minutes de marche avec tube, monture, ...
Ce setup, il ne pèsera pas plus de 3 kilos (contre une 20aine de kilos avec tube + monture).

Il ne sera destiné que pour de la photo grand champ (c'est à dire avec objectif de 12mm jusqu'à 100mm max.).
Les temps de pose seront court (de l'ordre de la minute, et au pire de 2 minutes je pense), donc au niveau echantillonage, cela devrait suffire pour qu'il n'y ai pas de filé d'étoiles sur mes poses.

Donc, pour un tel setup, la MES peut être "imprécise" (dans une certaine limite bien sur).

"déjà il faut faire ta mise en station, comment vas tu la faire avec cette mini table?
sauf si tu as une raquette, un viseur polaire."

J'ai confectionné cette raquette pour pouvoir l'emmener "partout".
Dessus, j'ai un réglage pour les latitudes de 0 à 90°, et dessus, un mini chercheur qui me sert de viseur polaire. Le principe est strictement identique à une monture équatoriale avec les réglages en altitude et en azimut pour la mise en station. Donc, selon ou je me trouve, pas de soucis.
Ensuite, une fois que ce réglage est fait, viens le plateau "Ascension Droite" qui sera celui piloté par ce montage.
Pour ce qui est du réglage DEC, une rotule est fixée sur le plateau A.D.
Une raquette, inutile. A quoi me servirait-elle ?

Donc tu auras compris je pense.
Je ne cherche que a faire un petit suivi sur un laps de temps restreint (juste à suivre le mouvement de la terre en gros). Je ne recherche pas a faire une monture motorisé tout axe et encore moins à avoir besoin d'un ordinateur.

Pour le "focuser arduino", a quoi bon me servira-t-il ?
Je ne demande qu'un seul réglage de vitesse, dans un seul sens. Pas d'autre besoin.