Juillet 2017 , par Techno_fabrik
Difficulté :
Durée :
Réalisation d'un tracker solaire avec 3 photorésistances
Matériel
carte Arduino (Uno / Mega)
3 photorésistances 100 kOhms
3 résistances 10 k Ohms
pile 9V
2 servo-moteurs 9g
PRÉREQUIS :
Connaissance des risques électriques. Montage réalisable par tous. Notion d'électronique et bases en programmation.
RÉALISATION
ETAPE 1 : Capter la lumière
Pour capter une source lumineuse, nous avons utilisé des photorésistances de 100 kOhms.
Les photorésistances sont des résistances qui varient en fonction de l’intensité lumineuse reçue. Plus la photorésistance capte de la lumière et plus sa résistance deviendra faible.
Nous avons utilisé des photorésistances de 100kOhms.
Nous allons connecter la photorésistance en série avec une résistance de 10 kOhms pour pouvoir avoir une variation de la tension au point milieu. Nous connecterons ce point à une entrée analogique de l’Arduino.
ETAPE 2 : Se déplacer pour suivre la source lumineuse
Deux servo-moteurs permettent de se déplacer circulairement sur deux axes. En programmant la rotation par rapport aux valeurs des photorésistances, nous pouvons suivre la source lumineuse.
ETAPE 3: Réaliser le tracker
Le module composé des trois photorésistances permet de connaitre sa position par rapport à la lumière.
Lorsque l'on est parfaitement positionné, les trois photorésistances sont à leur maximum, et sont plus ou moins égaux.
Programme (codé en C)
// 29/07/2017 - Programme C - Tracker solaire - Carte Arduino ( UNO )
// Ce programme a pour objectif de :
// - Traiter les informations apportés par les photorésistances
// - Gérer la rotation et l'inclinaison du module pour suivre une source lumineuse
// Programme réalisé par Techno_Fabrik
//********************BIBLIOTHEQUES****************************
// bibliothèque permettant d'utiliser les commandes pour servomoteurs facilement
#include <Servo.h>
//********************DECLARATIONS****************************
float photo_r_0,photo_r_1,photo_r_2; // valeur des photorésisances
int servo1=6; // commande du premier servo
int servo2=7;
int angle_rot=90,angle_inc=90; // angle des servos
Servo moteur_rotation;
Servo moteur_inclinaison;
//*************************INITIALISATION **********************
void setup() {
moteur_rotation.attach(servo1); // on relie l'obtet au pin de commande
moteur_inclinaison.attach(servo2);// on relie l'objet au pin de commande
Serial.begin(9600);
delay(2000);
}
//*************************************** BOUCLE ***************************
void loop() {
while ( (angle_rot > 10 )&&(angle_rot< 170) && (angle_inc>10)&&(angle_inc<170)) // sécurité pour les servos
{
photo_r_0=analogRead(A0);Serial.print("R_0 : ");Serial.println(photo_r_0); // entrée analogique 8 bits = 1024 valeurs = 0 à 5V
photo_r_1=analogRead(A1);Serial.print("R_1 : ");Serial.println(photo_r_1);
photo_r_2=analogRead(A2);Serial.print("R_2 : ");Serial.println(photo_r_2);
if ( photo_r_0<photo_r_1-3) // selon la valeur des photorésistances, on va moduler l'angle des servomoteurs
{
angle_rot=angle_rot-1;
moteur_rotation.write(angle_rot);
}
else if (photo_r_0>photo_r_1+3)
{
angle_rot=angle_rot+1;
moteur_rotation.write(angle_rot);
}
if (photo_r_2>photo_r_1+3)
{
angle_inc=angle_inc-1;
moteur_inclinaison.write(angle_inc);
}
else if (photo_r_2<photo_r_1-3)
{
angle_inc=angle_inc+1;
moteur_inclinaison.write(angle_inc);
}
}
Serial.println(" ANGLE SERVO MAXIMUM ");
}