Outils pour utilisateurs

Outils du site


ateliers:robotique:four_solaire

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

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.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(??); 
   }
}

Une proposition de Basile

#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);
}
 

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);
ateliers/robotique/four_solaire.txt · Dernière modification : 2022/06/22 15:13 de 127.0.0.1