1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
// Trackeur solaire - papy 2018
int PinLdrEst = A0; // 3 LdRs capteurs de lumière
int PinLdrOuest = A1;
int PinLdrHauteur = A2;
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 et moteurs
pinMode(PinLdrOuest,INPUT);
pinMode(PinLdrHauteur,INPUT);
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop()
{
int ValLdrEst = analogRead(PinLdrEst); // lire et calculer les valeurs
int ValLdrOuest = analogRead(PinLdrOuest);
int ValLdrHauteur = analogRead(PinLdrHauteur);
int Bas = (ValLdrEst + ValLdrOuest) / 2;
Serial.print(" H "); Serial.println(ValLdrHauteur);
Serial.print(" E "); Serial.println(ValLdrEst);
Serial.print(" O "); Serial.println(ValLdrOuest);
Serial.print(" B "); Serial.println(Bas);
int test = ValLdrEst + ValLdrOuest + ValLdrHauteur; // établit la luminosité ambiante
test = test / 3;
Serial.print(" test ");
Serial.print (test);
Serial.print(" ");
int Diff1 = ValLdrEst - ValLdrOuest;
Diff1 = abs(Diff1);
int Diff2 = ValLdrHauteur - Bas;
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 && ValLdrHauteur < Bas && 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 && ValLdrHauteur > Bas && Diff2 > Ecart)
{
digitalWrite(IN3, HIGH); // Moteur V tourne dans l'autre sens
digitalWrite(IN4, LOW);
analogWrite(ENB, 120);
Serial.println(" Hauteur > Bas ");
}
delay (1000);
} |
Partager