Je ne suis plus tout à fait débutant mais pas très doué dans tout ce qui est programmable et aujourd'hui je voudrais vous solliciter
la motorisation d'une monture équatoriale pour avoir un suivi qui compense plus ou moins la rotation de la terre j'ai : un arduino, une base motorshied et un nema 17 (bien sur j'ai du matériel supplémentaire mais j'habite sur une île en plus les conditions du moment qui ne sont pas très favorables il m'est très dur d'avoir du matériel supplémentaire livré) et si cela est possible car comme je vous le rappelle je ne suis pas un expert j'ai une vieille tablette Samsung que j'ai eu pas cher et que je peux utiliser juste pour ce projet
Il y a un sujet similaire en route, sur ce forum mais pas avec le même moteur et une autre électronique.
Pour ta tablette, tu veux utiliser une liaison Bluetooth?
Pour le programme, j'ai posé la question à l'IA qui fait une proposition de programme pas mal comme base de départ.
Le programme IA:
#include <AFMotor.h>
// Déclaration du moteur sur M1/M2
AF_Stepper moteur(200, 1); // 200 pas par tour, moteur branché sur M1/M2
// Définition du pas sidéral (360° en 24h)
// Un tour moteur = 200 pas, réduction 1:100, vis sans fin 144:1
#define PAS_SIDERAL (200 * 100 * 144 / 360.0) // Pas pour 1° de rotation
#define INTERVALLE_SIDERAL (24 * 60 * 60 * 1000 / PAS_SIDERAL) // Intervalle en ms
unsigned long dernierPas = 0; // Stocke le dernier temps d'exécution
void setup() {
moteur.setSpeed(5); // Vitesse du moteur en RPM (ajustable)
Serial.begin(9600);
Serial.println("Début suivi équatorial...");
}
void loop() {
unsigned long maintenant = millis(); // Temps actuel
// Vérifie si l'intervalle de temps est écoulé pour avancer d'un pas
if (maintenant - dernierPas >= INTERVALLE_SIDERAL) {
dernierPas = maintenant; // Met à jour le temps du dernier pas
moteur.step(1, FORWARD, SINGLE); // Un pas en avant
}
// Ici, on peut ajouter d'autres tâches sans bloquer le programme
}
Je ne sais pas s'il y avait des choses à modifier ou autre chose, j'ai installé la bibliothèque mais le moteur vibre et j'ai l'impression qu'il le tourne puis il s'arrête completement avant de redémarrer je ne sais pas si c'est ma carte qui est ancienne ou autre ?
#include "Stepper.h"
// Define number of steps per revolution:
const int stepsPerRevolution = 200;
// Give the motor control pins names:
#define pwmA 3
#define pwmB 11
#define brakeA 9
#define brakeB 8
#define dirA 12
#define dirB 13
// Initialize the stepper library on the motor shield:
Stepper myStepper = Stepper(stepsPerRevolution, dirA, dirB);
void setup() {
// Set the PWM and brake pins so that the direction pins can be used to control the motor:
pinMode(pwmA, OUTPUT);
pinMode(pwmB, OUTPUT);
pinMode(brakeA, OUTPUT);
pinMode(brakeB, OUTPUT);
digitalWrite(pwmA, HIGH);
digitalWrite(pwmB, HIGH);
digitalWrite(brakeA, LOW);
digitalWrite(brakeB, LOW);
// Set the motor speed (RPMs):
myStepper.setSpeed(60);
}
void loop() {
// Step one revolution in one direction:
myStepper.step(200);
delay(2000);
//Step on revolution in the other direction:
myStepper.step(-200);
delay(2000);
}
Voilà une version avec la même bibliothèque, Stepper.h:
#include <Stepper.h>
// Paramètres du moteur
#define PAS_PAR_TOUR 200 // Nombre de pas par tour du moteur Nema 17
// Configuration du moteur avec les broches du Motor Shield Rev3
// Moteur connecté sur M1/M2 => Broches 11, 3, 9, 12 du Shield
Stepper moteur(PAS_PAR_TOUR, 11, 3, 9, 12);
// Paramètres pour le suivi sidéral
#define REDUCTION_ENGRENAGES 100 // Rapport de réduction mécanique
#define REDUCTION_VIS_SANS_FIN 144 // Rapport vis sans fin
#define PAS_SIDERAL (PAS_PAR_TOUR * REDUCTION_ENGRENAGES * REDUCTION_VIS_SANS_FIN / 360.0)
#define INTERVALLE_SIDERAL (24 * 60 * 60 * 1000 / PAS_SIDERAL) // Temps entre chaque pas
unsigned long dernierPas = 0; // Stocke le dernier temps d'exécution
void setup() {
moteur.setSpeed(5); // Définir une vitesse de rotation (RPM)
Serial.begin(9600);
Serial.println("Début suivi équatorial...");
}
void loop() {
unsigned long maintenant = millis(); // Temps actuel en millisecondes
// Vérifie si l'intervalle de temps est écoulé pour avancer d'un pas
if (maintenant - dernierPas >= INTERVALLE_SIDERAL) {
dernierPas = maintenant; // Mise à jour du temps du dernier pas
moteur.step(1); // Avancer d'un pas
}
// Possibilité d'ajouter d'autres tâches ici
}
Je n'ai, malheureusement, pas le temps de faire l'essai "en vrai"
A titre indicatif, je te mets le lien du chat IA qui m'a donné ce résultat. Ce lien ne sera pas disponible en permanence,
alors j'ai essayé le code, il y a du progrès
le moteur fait un pas mais quelques secondes plus tard il en fait un dans l'aure sens j'ai utilisé le lien et j'ai demandé à l'IA de me donner le code pour empêcher le pas en arrière mais rien ne fait le moteur fait toujours ce pas en arrière