/* Programme tracker solair V1.1 Date : 11/07/2018 Auteur : *********************** */ // 4 LdRs capteurs de lumière int PinLdrEst = A0; //LDR haut gauche int PinLdrOuest = A1; //LDR haut droit int PinLdrHauteurd = A2; //LDR bas droit int PinLdrHauteurg = A3; //LDR bas gauche int Ecart = 40; // 2 moteurs horizontal Est/Ouest et vertical Haut/Bas //Mot H const int ENA = 10; const int IN1 = 9; const int IN2 = 8; //Mot V const int ENB = 5; const int IN3 = 6; const int IN4 = 7; int lumi = 900; // intensité lumineuse minimum void setup() { Serial.begin(9600); // lecture écran pinMode(PinLdrEst,INPUT); // entrées / sorties Ldrs pinMode(PinLdrOuest,INPUT); pinMode(PinLdrHauteurd,INPUT); pinMode(PinLdrHauteurg,INPUT); pinMode(ENA, OUTPUT); //moteurs pinMode(ENB, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); delay(500); } void loop() { int ValLdrEst = analogRead(PinLdrEst); // lire et calculer les valeurs int ValLdrOuest = analogRead(PinLdrOuest); int ValLdrHauteurd = analogRead(PinLdrHauteur); int ValLdrHauteurg = analogRead(PinLdrHauteur); //int Bas = (ValLdrHauteurd + ValLdrHauteurg) / 2; Serial.print(" HD "); Serial.println(ValLdrHauteurd); Serial.print(" E "); Serial.println(ValLdrEst); Serial.print(" O "); Serial.println(ValLdrOuest); Serial.print(" HG "); Serial.println(ValLdrHauteurg); int test = ValLdrEst + ValLdrOuest + ValLdrHauteurd + ValLdrHauteurg; // établit la luminosité ambiante test = test / 4; Serial.print(" test "); Serial.print (test); Serial.print(" "); int Diff1 = ValLdrEst - ValLdrOuest; Diff1 = abs(Diff1); int Diff2 = ValLdrHauteurd - ValLdrHauteurg; Diff2 = abs(Diff2); if (test <= lumi || Diff1 <= Ecart || Diff2 <= Ecart) { digitalWrite(ENA, LOW); // les 2 Moteurs sont arrétés ! digitalWrite(ENB, LOW); } if (test >= lumi && ValLdrEst < ValLdrOuest && Diff1 > Ecart) { digitalWrite(IN1, LOW); // Moteur H tourne dans un sens digitalWrite(IN2, HIGH); analogWrite(ENA, 130); Serial.println(" Est < Ouest"); } else if (test >= lumi && ValLdrEst > ValLdrOuest && Diff1 > Ecart) { digitalWrite(IN1, HIGH); // Moteur H tourne dans l'autre sens digitalWrite(IN2, LOW); analogWrite(ENA, 130); Serial.println(" Est > Ouest "); } // SENS vertical if(test >= lumi && ValLdrHauteurd < ValLdrHauteurg && Diff2 > Ecart) { digitalWrite(IN3, LOW); // Moteur V tourne dans un sens digitalWrite(IN4, HIGH); analogWrite(ENB, 120); Serial.println(" Hauteur < Bas"); } else if (test >= lumi && ValLdrHauteurd > ValLdrHauteurg && Diff2 > Ecart) { digitalWrite(IN3, HIGH); // Moteur V tourne dans l'autre sens digitalWrite(IN4, LOW); analogWrite(ENB, 120); Serial.println(" Hauteur > Bas "); } delay (1000); }