Bonjour, Bonsoir
Cela fait maintenant 2 semaine en cours de SI en première que je cherche ce qui ne fonctionne pas avec mon code, mais je ne trouve toujours pas.
Le projet est de faire un panneau solaire qui traque le soleil tout seul. Jusqu’ici je pensais avoir bien compris ce qu'il fallait faire, et que j'y arrivais plutôt bien. Mais malheureusement ce n'était apparemment pas le cas.
#include <Servo.h>
Servo myservo1;
Servo myservo2;
int value;
double angle_1;
double angle_2;
double angle_3;
double angle_4;
bool C1=false, C2=false, C3=false, C4=false;
bool M1Sh180=false, M1Sa180=false, M2Sh180=false, M2Sa180=false;
bool M1Sh90=false, M1Sa90=false, M2Sh90=false, M2Sa90=false;
bool Defaut=false, Perfect=false;
bool M2h_90_180=false, M2a_0_90=false;
void setup ()
{
// Configuration initial
Serial.begin(9600);
myservo1.attach(9);
myservo2.attach(10);
}
void loop ()
// En boucle
{
// Récupération des valeurs aux Analog
int valeur_1=analogRead(A2);
int valeur_2=analogRead(A3);
int valeur_3=analogRead(A4);
int valeur_4=analogRead(A5);
/* Calcul de la tension
Plus la tension (U) est élevé, plus la résistance (R) l'est aussi
Et vis versa, pas besoin de calculer R*/
float tension_1=valeur_1*(5.0 / 1023.0);
float tension_2=valeur_2*(5.0 / 1023.0);
float tension_3=valeur_3*(5.0 / 1023.0);
float tension_4=valeur_4*(5.0 / 1023.0);
// Indique sur le Moniteur la valeur de la tension (U)
Serial.println(tension_1);
Serial.println(tension_2);
Serial.println(tension_3);
Serial.println(tension_4);
// Mettre en true ou false les variables C1, C2, C3, C4
if (valeur_1<252)
C1=true;
else
C1=false;
if (valeur_2<252)
C2=true;
else
C2=false;
if (valeur_3<252)
C3=true;
else
C3=false;
if (valeur_4<252)
C4=true;
else
C4=false;
// Position par défaut et variables de mouvements de servos moteurs
M1Sh180= !(C1) and !(C2) and !(C3) and C4 or C1 and !(C2) and !(C3) and !(C4) or C1 and !(C2) and C3 and C4 or C1 and C2 and !(C3) and C4;
M1Sa180=!(C1) and !(C2) and C3 and !(C4) or !(C1) and C2 and !(C3) and !(C4) or !(C1) and C2 and C3 and !(C4) or !(C1) and C2 and C3 and C4 or C1 and C2 and C3 and !(C4);
M2Sh180=!(C1) and !(C2) and !(C3) and C4 or !(C1) and !(C2) and !(C3) and !(C4) or !(C1) and !(C2) and C3 and C4 or !(C1) and C2 and C3 and C4 or C1 and !(C2) and C3 and C4 or C1 and !(C2) and !(C3) and C4;
M2Sa180=!(C1) and C2 and !(C3) and !(C4) or C1 and !(C2) and !(C3) and !(C4) or C1 and C2 and !(C3) and !(C4) or C1 and C2 and !(C3) and C4 or C1 and C2 and C3 and !(C4);
M1Sh90=!(C1) and !(C2) and C3 and !(C4) or !(C1) and C2 and !(C3) and !(C4) or !(C1) and C2 and C3 and !(C4) or !(C1) and C2 and C3 and C4 or C1 and C2 and C3 and !(C4);
M1Sa90=!(C1) and !(C2) and !(C3) and C4 or C1 and !(C2) and !(C3) and !(C4) or C1 and !(C2) and C3 and C4 or C1 and C2 and !(C3) and C4;
M2Sh90= !(C1) and !(C2) and !(C3) and C4 or !(C1) and !(C2) and !(C3) and !(C4) or !(C1) and !(C2) and C3 and C4 or !(C1) and C2 and C3 and C4 or C1 and !(C2) and C3 and C4;
M2Sa90=C1 and !(C2) and !(C3) and !(C4) or !(C1) and C2 and !(C3) and !(C4) or C1 and !(C2) and !(C3) and C4 or C1 and C2 and !(C3) and !(C4) or C1 and C2 and !(C3) and C4 or C1 and C2 and C3 and !(C4);
M2h_90_180=C1 and C2 and !(C3) and !(C4) or C1 and C2 and C3 and !(C4) or C1 and C2 and !(C3) and C4 or C1 and !(C2) and !(C3) and !(C4) or !(C1) and C2 and !(C3) and !(C4);
M2a_0_90=!(C1) and !(C2) and C3 and C4 or C1 and !(C2) and C3 and C4 or !(C1) and C2 and C3 and C4 or !(C1) and !(C2) and C3 and !(C4) or !(C1) and !(C2) and !(C3) and C4;
Defaut=!(C1) and !(C2) and !(C3) and !(C4);
Perfect=C1 and C2 and C3 and C4;
// Position de lever de soleil
if (Defaut==true);
angle_1=90;
angle_2=180;
myservo1.write(angle_1);
myservo2.write(angle_2);
// Faire bouger les servos moteurs suivant les variables positives ou non si Perfect==false
if (Perfect==false);
if (angle_2>90)
if (M1Sh180==true);
angle_1=angle_1-1;
if (M1Sa180==true);
angle_1=angle_1++;
if (M2Sh180==true);
angle_2=angle_2++;
if (M2Sa180==true);
angle_2=angle_2--;
// Deuxième partie des 180 degrès du M2
if (angle_2<90)
if (M1Sh90==true);
angle_1=angle_1--;
if (M1Sa90==true);
angle_1=angle_1++;
if (M2Sh90==true);
angle_2=angle_2++;
if (M2Sa90==true);
angle_2=angle_2--;
// Si le pannau solaire est parallèle au sol
if (angle_2=90)
if (Defaut==true);
if (M2h_90_180==true);
angle_2=angle_2++;
if (M2a_0_90==true);
angle_2=angle_2--;
myservo1.write(angle_1);
myservo2.write(angle_2);
delay (250) ;
}
Voici à quoi ressemble mon code et mon projet sur tinkerkad.
Dans un premier temps je récupère donc les valeurs analogique, et défini à partir de quel valeur analogique récupérer je considère que les photorésistance captent le soleil.
Ensuite je définie plusieurs variable qui vont changer suivant quel photorésistances captent du soleil.
Si l'angle_2 est strictement supérieur à 90°:
Moteur 1 :
M1Sh180=true alors le moteur 1 doit tourner dans le sens horaire lorsque angle_2>90°
M1Sa180=true alors le moteur 1 doit tourner dans le sens anti horaire lorsque angle_2>90°
Moteur 2:
M2Sh180=true alors le moteur 2 doit tourner dans le sens horaire lorsque angle_2>90°
M2Sa180=true alors le moteur 2 doit tourner dans le sens anti horaire lorsque angle_2>90°
Si l'angle_2 est strictement inférieur à 90°:
Moteur 1 :
M1Sh90=true alors le moteur 1 doit tourner dans le sens horaire lorsque angle_2<90°
M1Sa90=true alors le moteur 1 doit tourner dans le sens anti horaire lorsque angle_2<90°
Moteur 2 :
M2Sh90=true alors le moteur 2 doit tourner dans le sens horaire lorsque angle_2<90°
M2Sa90=true alors le moteur 2 doit tourner dans le sens anti horaire lorsque angle_2<90°
Si l'angle_2=90°=
M2h_90_180=true alors le moteur 2 doit tourner dans le sens horaire lorsque angle_2=90°
M2h_0_90=true alors le moteur 2 doit tourner dans le sens anti horaire lorsque angle_2=90°
Si aucune des photorésistance ne captent le soleil:
Defaut=true alors le panneau solaire doit retourner à sa position matin (avec angle_1=90 et angle_2=180)
Si toutes les photorésistances captent le soleil:
Perfect=true alors il ne bouge pas
Ainsi, lorsque je fait varier les photorésistances, les moteurs sont sensé tourner jusqu'à trouver le soleil. Mais ça ne marche pas .