Bonjour,
Je fais un projet où j'ai besoin d'un suivi solaire, que je manœuvre avec deux servomoteurs programmés via Arduino (je me suis inspiré de ce projet : https://ouiaremakers.com/posts/tutor...racker-solaire). J'utilise également 4 ldr (résistance qui varie avec la lumière pour les novices ). Jusque là tout va bien. Le hic c'est que quand je le teste IRL (malheureusement pour l'instant sans le support final), il n'y a qu'un seul servo qui réagit (alors que je les commande pareillement) et il vibre essentiellement (or je souhaite avoir une stabilité optimale). On dirait qu'il ne bouge pas en fonction de la lumière que je fais varier.
Comment est-ce que je pourrais l'améliorer afin qu'il fonctionne ?
Le circuit :Code:#include <Servo.h> Servo SERVO1; // servo moteur horizontal Servo SERVO2; //servo moteur vertical int Servo1=90; // Variable de position du servo1, de 0 à 179° int Servo2=90; // Variable de position du servo2, de 0 à 179° int ldr1=0; int ldr2=0; int ldr3=0; int ldr4=0; int ecart = 0000011110; // écart permis entre les photoresistances sans qu'il y ai d'ajustement des servo (ne pas hesiter a jouer avec cette valeur selon la source lumineuse) // Photorésistances sur A0, A1, A2 et A3 #define LDR1 A0 //haut-droite #define LDR2 A1 //bas-droite #define LDR3 A2 //bas-gauche #define LDR4 A3 //haut-gauche bool mouvement = false; //condition pour mouvement des servo, cela permet d'avoir un mouvement continu //tant que nous ne somme pas a l'equilibre +/- ecart et d'avoir une tempo lorsque nous avons l'équilibre //(les servos cherchent moins souvent) void setup() { Serial.begin(9600); // Moniteur série SERVO1.attach(11); // Servo1 sur la broche 11 SERVO2.attach(8); // Servo2 sur la broche 8 // Servos en position initiale SERVO1.write(Servo1); delay (1000); SERVO2.write(Servo2); delay (1000); } void loop() { mouvement=false; // On lit les photoresistances ldr1 = analogRead(LDR1); ldr2 = analogRead(LDR2); ldr3 = analogRead(LDR3); ldr4 = analogRead(LDR4); //N.B.: plus une ldr est exposée à la lumière, plus sa résistance diminue if ((ldr1<ldr2+ecart) && (ldr1<ldr4+ecart)) //il y a plus de soleil sur la ldr1 que sur la ldr2 et ldr4 { if (Servo1<179) { Servo1++; SERVO1.write(Servo1); mouvement=true; } if (Servo2<179) { Servo2++; SERVO2.write(Servo2); mouvement=true; } } if ((ldr2<ldr1+ecart) && (ldr2<ldr3+ecart)) //il y a plus de soleil sur la ldr2 que sur la ldr1 et ldr3 { if (Servo1<179) { Servo1++; SERVO1.write(Servo1); mouvement=true; } if (Servo2>0) { Servo2--; SERVO2.write(Servo2); mouvement=true; } } if ((ldr3<ldr2+ecart) && (ldr3<ldr4+ecart)) //il y a plus de soleil sur la ldr3 que sur la ldr2 et ldr4 { if (Servo1>0) { Servo1--; SERVO1.write(Servo1); mouvement=true; } if (Servo2>0) { Servo2--; SERVO2.write(Servo2); mouvement=true; } } if ((ldr4<ldr1+ecart) && (ldr4<ldr3+ecart)) //il y a plus de soleil sur la ldr4 que sur la ldr1 et ldr3 { if (Servo1>0) { Servo1--; SERVO1.write(Servo1); mouvement=true; } if (Servo2<179) { Servo2++; SERVO2.write(Servo2); mouvement=true; } } if (mouvement == false) { delay(1000); //si on suit le soleil on peut mettre un long delay, sinon pour plus de reactivité, un faible delay } }
Merci beaucoup du temps que vous m'avez déja accordé et peut être au temps que vous m'accorderez !
-----