Economie d'énergie sur moteur pas a pas 28BYJ-48

Bonsoir,

Je me suis lancer dans le projet de fabriquer une horloge sur batterie avec le moteur pas a pas 28BYJ-48, une arduino nano/ Circuit ATMega328.Pour l'instant j'ai ce programme`// Inclut la bibliothèque AccelStepper:
#include <AccelStepper.h>

// Définitions des broches du moteur:
#define motorPin1 8 // IN1 on the ULN2003 driver
#define motorPin2 9 // IN2 on the ULN2003 driver
#define motorPin3 10 // IN3 on the ULN2003 driver
#define motorPin4 11 // IN4 on the ULN2003 driver

// Définit le type d'interface AccelStepper; Moteur 4 fils en mode demi-pas:
#define MotorInterfaceType 8

// Initialisation avec la séquence de broches IN1-IN3-IN2-IN4 pour utiliser la bibliothèque AccelStepper avec le moteur pas à pas 28BYJ-48:
AccelStepper stepper = AccelStepper(MotorInterfaceType, motorPin1, motorPin3, motorPin2, motorPin4);
void setup() {
// Définit le nombre maximum de pas par seconde:
stepper.setMaxSpeed(1000);

void loop() {
// Réglez la vitesse du moteur en pas par seconde:
stepper.setSpeed( 1.13777777777777777777777777777777777777777777 );
// Faire avancer le moteur avec une vitesse constante définie par setSpeed ​​():
stepper.runSpeed();
}`

J'ai mesurer les ampères et je tombe a 300mA ,J'ai calculer que j'aurais besoin de 4 930 pile de 9V si je voulais tenir une année.La consommation d'une carte arduino et de 50mA mais j'ai vu quel était de 0,0049 mA si bien optimiser sur ce site : https://tutoduino.fr/tutoriels/arduino-faible-consommation/.Il ne reste plus que les 250mA a faire tomber(facile a dire) il proviennent donc du moteur et de son module.Commençons par ce dernier: Je pense qu'il n'est pas utile en effet il prend beaucoup de place avec ses LED inutiles et je pense que sa fonction est faisables par une arduino.Le moteur lui risque d'être plus difficilement remplaçable car j'ai besoin de son couple pour faire tourner des engrenages.
Voila voila vous l'aurez compris c'est un problèmes d'optimisation électriques,merci d'avance ppour toute réponse et Bonne nuit !

Bonjour yalow1

Tu peux, déjà, supprimer ces LED.
L'Arduino ne peut pas commander le moteur sans le circuit (ULN 2003) qui est sur le module, donc à garder.
Par contre, comme il n'est pas nécessaire que le moteur soit sous tension en permanence, tu peux le désactiver avec la commande stepper.disableOutputs() et le réactiver, quand nécessaire, par stepper.enableOutputs()

Cordialement
jpbbricole

tout ces 7 sont inutiles...la précision d'un float n'est pas à ce niveau..

il y a mieux que la Nano quand on veut faire de l'économie - cf le blog de @hbachetti

Bonjour jpbbricole,

L'Arduino ne peut pas commander le moteur sans le circuit (ULN 2003) qui est sur le module, donc
à garder.

C'est la que je ne te suis plus : qu'est ce qui manque a l'arduino pour remplir sa fonction ?
J'ai remarquer que le module 2003 n'envoyer que 5 pin au moteur :D'après moi cela correspond au quatre électroaimant et a la terre.D'ailleur je viens d'essayer ce montage :

et le moteur tourne donc soit je suis un génie soit ça abime le moteur ou il délivre moins de couple et pour répondre a ta dernière suggestion : pense tu que c'est intéressant d'éteindre le module toute les 1.137 seconde puis de le rallumer.

En tous cas merci beaucoup pour ta réponse.Je supprimerais sans doute les led si mon cablage ne marche pas.

Cordialement
Yalow1

Merci beaucoup les 7 je savais que la plus part était inutile je voulais juste être sur d'utiliser le valeur la plus précise possible et pour l'arduino nano merci beaucoup je ne connaissais pas.

la capacité en envoyer de la puissance ou protéger les pins lorsque vous pilotez une charge inductive. ➜ le souci n'est pas d'abimer le moteur, vous risquez de griller vos pins et bousiller votre arduino

Pour bien comprendre les moteurs (et pour bien débuter avec l'arduino), c'est bien de lire Le mouvement grâce aux moteurs - les tutos d'eskimon. (commencez par la partie Le moteur à courant continu)

D'accord merci je regarde ça

oui prêtez attention à la partie Le moteur à courant continu • Le blog d'Eskimon

en effet c'est plutôt explicite :sweat_smile:

J'ai bien l'impression qu'on est encore loin pour arriver a tenir une année:je pense donc que je vais partir sur une alimentation secteur.Merci beaucoup a vous pour votre patience et votre compréhension.
Cordialement
Yalow

Bonjour yalow1

Oui, ça tourne, mais juste ça tourne, il n'y a pas beaucoup de couple avec fort risque de perte de pas et, surtout, une sortie d'Arduino n'est en tout cas pas faite pour commander, directement une bobine telle que celle du moteur. En outre, dès que l'on commande un bobinage, il faut une diode de protection, diode qui est comprise dans l'ULN2003.

Pour résumer, pour commander les bobinages de ton moteur, il te faut des transistors pour la puissance et des diodes de protection, composants qui se trouvent dans l'ULN2003.
image

Oui, il faut alimenter le moteur, le temps de l'impulsion, après ça ne sert plus. C'est à essayer mécaniquement, pour voir s'il y a des contraintes sur la mécanique qui pourraient faire que le système tourne tout seul quand il est hors courant.

A+
Cordialement
jpbbricole

Bonjour,

En effet j'utilise maintenant ce programme qui est bien plus économique :

#define in1 8
#define in2 9
#define in3 10
#define in4 11

int dl = 1137.777; // temps entre les pas, minimum 10 ms

void setup() {
    pinMode(in1, OUTPUT);
    pinMode(in2, OUTPUT);
    pinMode(in3, OUTPUT);
    pinMode(in4, OUTPUT);
}

void loop() {
    digitalWrite(in1, HIGH); 
    digitalWrite(in2, LOW); 
    digitalWrite(in3, LOW); 
    digitalWrite(in4, HIGH);
    delay(10);
     digitalWrite(in1, LOW); 
    digitalWrite(in2, LOW); 
    digitalWrite(in3, LOW); 
    digitalWrite(in4, LOW);
    delay(dl);

    digitalWrite(in1, HIGH); 
    digitalWrite(in2, HIGH); 
    digitalWrite(in3, LOW); 
    digitalWrite(in4, LOW);
     delay(10);
     digitalWrite(in1, LOW); 
    digitalWrite(in2, LOW); 
    digitalWrite(in3, LOW); 
    digitalWrite(in4, LOW);
    delay(dl);

    digitalWrite(in1, LOW); 
    digitalWrite(in2, HIGH); 
    digitalWrite(in3, HIGH); 
    digitalWrite(in4, LOW);
     delay(10);
     digitalWrite(in1, LOW); 
    digitalWrite(in2, LOW); 
    digitalWrite(in3, LOW); 
    digitalWrite(in4, LOW);
    delay(dl);

    digitalWrite(in1, LOW); 
    digitalWrite(in2, LOW); 
    digitalWrite(in3, HIGH); 
    digitalWrite(in4, HIGH);
     delay(10);
     digitalWrite(in1, LOW); 
    digitalWrite(in2, LOW); 
    digitalWrite(in3, LOW); 
    digitalWrite(in4, LOW);
    delay(dl);
}

Les led ne s'allume qu'un cour instant néanmoins J'ai l'impression d'utiliser des quarts de pas plutôt que des demis.

Cordialement
Yalow1

Humm ! Peut-être que je me trompe, je ne commence qu'à acquérir les bases de l'IDE Arduino.
Float serait peut-être mieux pour " dl ".
Cordialement.
Philippe.

De plus, delay ne peut traiter qu'un nombre entier, pas un nombre à virgule.
J'ai juste?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.