===== Réalisation d'un four solaire avec tracker ===== ==== Le matos ==== 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. ==== Le schéma de montage Arduino ==== {{:ateliers:robotique:sans_titre.jpg?direct&400|}} 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 ! ==== Le bout de code pas piqué des qubits ;) ==== #include 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(??); } } ==== Une proposition de Basile ==== #include 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); } ==== Petite piste ==== 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);