ENIB 2020 : trouver la lumière

De Les Fabriques du Ponant
Aller à : navigation, rechercher

photo de l'équipe

Groupe lumiere.jpg

Que fait ce projet ?

Nous sommes un groupe de 4 étudiants en 3ème année à l'ENIB et pour notre inter-semestre nous réalisons un hackathon avec l'association des petits débrouillards. Nous avons donc choisi de réaliser une machine permettant de déterminer à partir d'un endroit précis le position du soleil. Ce système peut être utilisé avant de placer des panneaux solaires ou les fours solaire afin de pouvoir optimiser au mieux leur rendement. Pour cela nous allons utiliser des résistances photo sensible.

Liste des composants

  • une carte Arduino
  • 2 résistances de 15 kΩ
  • un moteur pas à pas
  • 2 photo résistances
  • un bouton poussoir
  • des câbles
  • breadboard
  • une boite pour servir de support au moteur
  • un socle incliné pour poser les photo résistances

construction du prototype

Nous avons donc commencer par réaliser une boite grâce à la découpeuse laser avec une encoche rectangulaire sur la face du haut pour placer le moteur ainsi qu'une encoche circulaire sur un coté pour placer le bouton.

M Boite.jpg

Nous avons ensuite fabriqué le bras pour maintenir les photo-résistances

M Axe.jpg

On a ensuite isoler les 2 photo-résistances afin qu'elles puissent cibler précisément le soleil ou la source lumineuse dans notre cas.

Haut 1.jpg

Enfin nous avons assemblé le tout

Entier 2.jpg

schéma électronique

câblage des photo-résistances Cablage ldr.jpg

câblage du bouton Cablage btn vrai.png

câblage du cervo moteur Cervo.jpeg

Code

#include <Servo.h>
Servo myservo;
int ldrPin1 = A0; 
int ldrValue1 = 0;   //valeur de ldr 1 
int ldrPin2 = A1;    //ldr 2 
int ldrValue2 = 0;   //valeur de ldr 2 
int btn_pin = 8;   //valeur par defaut du bouton 
int delta =5;
int pos = 0;

void setup() {
  Serial.begin(9600);
  myservo.attach(9);
  pinMode(btn_pin,INPUT);
}

void loop() {
  // read the value from the ldr:
  ldrValue1 = analogRead(ldrPin1);
  ldrValue2 = analogRead(ldrPin2);
  
  // on lit une première fois les valeurs 
  int sub=ldrValue1-ldrValue2;
  int buttonState = digitalRead(btn_pin);
  Serial.println(buttonState);
  if (buttonState == HIGH){
  if(sub<0){
  
    while((-delta>sub || sub>delta)&&(sub<0)){
      pos+=1;
      myservo.write(pos);              // tell servo to go to position in variable 'pos'
      delay(20);
      ldrValue1 = analogRead(ldrPin1);
      ldrValue2 = analogRead(ldrPin2);
      sub=ldrValue1-ldrValue2;
      delay(15);
    }}
   else{
     while((-delta>sub || sub>delta)&&(sub>0)){
      pos-=1;
      myservo.write(pos);              // tell servo to go to position in variable 'pos'
      delay(20);
      ldrValue1 = analogRead(ldrPin1);
      ldrValue2 = analogRead(ldrPin2);
      sub=ldrValue1-ldrValue2;
      delay(15);
   }
  }}
 }

Catégories