1x Arduino
2x 4.7K résistances ( jaune, violet, rouge, or)
2x capteur photoélectriques
1x Servomoteur
1x broadbord
nx fils de prototypage
∞ votre super organe encéphalique.
Nous voici face à un montage assez simple.
Il s'agit de deux capteurs photoélectrique, couplé à un servomoteur.
Concrètement, si un capteur reçois plus de lumière que l'autre, alors il tourne vers l'Est ou l'Ouest pour égaliser les deux valeurs.
De cette manière le four tourne et est continuellement face au soleil !
#include <Servo.h> Servo servo; int cellulePhotoGauche = 9; int cellulePhotoDroite = 8; int valLuminositeGauche; int valLuminositeDroite; void setup() { Serial.begin(9600); pinMode(cellulePhotoGauche,INPUT); pinMode(cellulePhotoDroite,INPUT); pinMode(servo, OUTPUT); } void loop() { valLuminositeGauche = analogRead(cellulePhotoGauche); valLuminositeDroite = analogRead(cellulePhotoDroite); println("Luminosite à gauche : "); print(valLuminositeGauche); println("Luminosite à droite : "); print(valLuminositeDroite); // SI cellule_01 + 10 == // V1 + 10 > V2 ET v2 + 10 < V1 if(valLuminositeGauche <= valLuminositeDroite){ //servo.write(??); } else if(valLuminositeGauche >= valLuminositeGauche){ //servo.write(??); } }
#include <Servo.h> Servo myServo; int cellulePhotoGauche = A1; int cellulePhotoDroite = A0; int valLuminositeGauche; int valLuminositeDroite; int result; int BasePos = 90; void setup() { Serial.begin(9600); pinMode(cellulePhotoGauche,INPUT); pinMode(cellulePhotoDroite,INPUT); myServo.attach(11); myServo.write(BasePos); delay(5000); } void loop() { valLuminositeGauche = analogRead(cellulePhotoGauche); valLuminositeDroite = analogRead(cellulePhotoDroite); // Serial.print("Luminosite à gauche : "); // Serial.println(valLuminositeGauche); // Serial.print("Luminosite à droite : "); // Serial.println(valLuminositeDroite); result = valLuminositeGauche - valLuminositeDroite; Serial.println(result); Serial.println(""); if (result >= 10){ //tourne gauche devra peut etre etre remplacer par "droite", a voir en pratique car c'est un trop gros travail mental XD tourneGauche(); } else if (result <= -10 ){ //same tourneDroite(); } delay(500); } void tourneGauche(){ Serial.print("Je tourne a gauche "); Serial.println(result); if(){ } BasePos--; myServo.write( BasePos); Serial.print("rotation "); Serial.println(BasePos); } void tourneDroite(){ Serial.print("Je tourne a droite "); Serial.println(result); BasePos++; myServo.write( BasePos); Serial.print("rotation "); Serial.println(BasePos); }
Temporisation = DROITE - GAUCHE; // On reprend l'idée de faire la différence entre la cellule droite et la cellule gauche if(Temporisation > 10){ // SI la temporisation est PLUS GRANDE QUE 10 ALORS... if(trackerPosition <= 180){ // SI la position du servomoteur EST INFERIEUR a 180 degres alors... trackerPosition++; Servo_tracker.write(trackerPosition); } } else if(Temporisation < -10){ // Si la Temporisation est négative et inférieure à -10, déplacez le tracker vers la GAUCHE. if(trackerPosition > 20){ // On vérifier que le tracker n'est pas en fin de course dans la direction GAUCHE. trackerPosition--; Servo_tracker.write(trackerPosition); //On déplacez le tracker vers la GAUCHE } } delay(100);