Bonjour,
Je découvre le monde de la programmation Arduino et trouve cela très passionnant et captivant. Je me documente sur différents forums et site français ou anglais (j'avoue que ça aide de parler couramment anglais ! :D).
J'ai fabriqué une horloge à engrenage en bois avec une gestion électronique pour faire mouvoir le mécanisme. j'utilise pour cela un moteur 28BYJ-48 et son driver ULN2003. J'ai réussi en quelques jours à faire un programme pour faire tourner un moteur à la vitesse de 12 tours par minute. C'est la vitesse qui correspond au ration de la démultiplication utilisée.
Je souhaiterai utiliser un RTC pour contrôler avec précision la rotation du moteur pour qu'il fasse précisément 12 tours/minute ou 1 tour en 5 seconde. Je voudrai intégrer au code une fonction qui interrogerait le RTC toutes les secondes pour qu'il contrôle si le moteur à fait le bon nombre de pas et puisse le corriger s'il en fait plus ou pas assez.
Si pour 1 tour de 2048 pas en 5 seconde, il faut que le moteur fasse précisément 409.6 pas/seconde. Hors je doute que l'on puisse diviser les pas en 1/10 de pas! Donc si je fais faire 410 pas/seconde le moteur va faire 0.4 pas de plus en une seconde soit 24 pas de trop par minute (0.4x60=24 ) et 1440 pas de trop par heure (24x60=1440). Soit 3.5s de plus par heure (1440/409.6=3.5 (en arrondissant au 1/10 de seconde ) et donc 1.4 minute d'avance par jour.
Pour utiliser le RTC DS3132 il faut la librairie rtclib.h. Je vais brancher le port SCL sur la sortie analogique 5 et le port SDA sur la sortie analogique 4.
J'en appelle à votre aide pour m'aiguiller sur les fonctions à utiliser pour synthétiser ce que j'ai décrit et comment insérer la gestion du RTC à mon code.
Merci à tous pour vos conseilles, idées, compétences et aide.
Guillaume
#include "RTClib.h"
RTC_DS3231 rtc;
#include <Stepper.h>
double stepsPerRevolution = 2048;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
void setup() {
myStepper.setSpeed(12); //1= 1tour/min ; 60s/5= 12 =1tour en 5s
Serial.begin(9600);
}
void loop() {
Serial.println("clockwise");
myStepper.step(stepsPerRevolution);
}