Outils pour utilisateurs

Outils du site


wiki:projets:are2018:fablab:projet1

Tracker Solaire

Dans le cadre de A.R.E( Atelier de recherche encadré), nous avons choisis de réalisé un tracker solaire.

Garcia Nicolas

Dechicha Mehdi Ishac

Alsalem Abdullah

Introduction

Le tracker (suiveur) solaire motorisé permet l'alignement de panneaux solaires ,automatiquement, en fonction de l'avancée d'une source lumineuse ou du soleil.

Ici nous réalisons un modèle miniature , basique et composé de deux plaques agencées de manière perpendiculaires ,soutenues verticalement et horizontalement par deux servos moteurs permettant ainsi au système d'avoir deux degrés de liberté et de suivre la direction de la source lumineuse .

I / Inventaire et Pré-modélisation

-La première partie de notre projet a été de la recherche d'un modèle et l'établissement d'un inventaire des pièces/composants qui seront nécessaires Nos recherches se sont portées sur ce modèle de Trackeur solaire

Or , ce modèle n'est qu'un exemple .

Il a été modifié et repensé. La re-modélisation du s'est effectuée brièvement sur papier puis sur le logiciel Tinkercad

Concernant l’inventaire, on se retrouve donc avec des éléments assez basiques

-Les deux servos moteurs (tous les deux sous 5 volts)

-L’arduino UNO ainsi que le shield pour la programmation de notre système.

-les 3 photos résistances pour que ce système puisse suivre la source de lumière.

-Mini Panneau Solaire 11×8 cm 5,5 W

-Et des plaques de plexiglass / imprimerie 3D pour les pièces complémentaires.

-Il s’agit maintenant de réfléchir sur les pièces à concevoir pour compléter la mise en forme du tracker.

Modélisation

I / Modèle de Base

Modèle retravaillé

Ce modèle (Tinkercad) sert maintenant de base au projet

Nombres de changements ont été apportés :

-L'ajout d'un socle moteur (modélisé) permettant la stabilité du moteur horizontal.

-La suppression de la plaque supplémentaire du bas.

-Modification au niveau de la plaque verticale : tout d'abord la tête rotative du moteur passe à travers de la plaque et est clouée à un cylindre (7cm de diamètre). Ce qui fait que le moteur reste stable et que le cylindre ( relié au porte photorésistances ) puisse effectuer correctement les rotations

<note> Ici la porte photorésistance est une pièce modélisée pour obtenir un positionnement triangulaire des photos-résistances et le support du petit panneau solaire.

Cette pièce a totalement été modélisée en 3D

Elle est reliée au cylindre par une autre pièce 3D pensée exprès pour (Le but est d’obtenir une rotation vers le haut/bas des photos résistances selon la direction de la source de lumière) .

Le moteur horizontal se charge de tourner vers la gauche/droite.

Voir plus bas pour la modélisation des pièces.</note>

II / Modélisation 2D

On commence par modéliser les plaques verticale/horizontale à l’aide du logiciel 2D Inkscape. Les plaques seront découpées à la découpe laser

Plaque horizontale ( 17x12cm ; 3mm d'épaisseur)

Plaque verticale avec le trou pour contenir la partie la plus importante du moteur et laisser la tête rotative traverser la plaque comme expliqué précédemment

(14,5 x 12)cm

Orifice (1,5 cm de diamètre).

Partie modélisée en 2D pour le porte photo résistance

(14 x 4) cm

La perforation située en haut accueille une des 3 photorésistances (7 mm de diamètre)

III / Modélisation 3D

Coté modélisation 3D, on dispose de plusieurs pièces à imprimer :

-Porte Photorésistance (Décomposé en 3 pièces)

-Cylindre et Pièce reliant le cylindre aux portes photorésistances (appelée ici Pont)

-Deux chevilles pour l’agencement des deux plaques

Porte Photorésistances

<note>Sur cette pièce le support horizontal situé en bas à été modélisé séparément, puis coller au montage final ; tout comme la première pièce qui sert au positionnement latéral des photorésistances. L’orifice du haut est destiné au positionnement de la photorésistance la plus haute</note>

On s’occupe ensuite de la modélisation du cylindre (7cm de diamètre ; il faut notamment faire attention au positionnement des orifices sur le cylindre par rapport à la tête du servo moteur pour pouvoir bien visser.

Voici le Pont

<note>Le pont est collé au cylindre On a aussi ajouter une barre modélisée sur la partie haute du pont (en bleu ) pour pourvoir mieux coller à la partie arrière du porte photorésistances. Le cylindre collé au pont est cloué a le tête du servo moteur qui passe à travers la plaque </note>

Tests Servomoteurs

Avant d’effectuer les agencements entre les plaques et les moteurs, on a réalisé des tests pour vérifier que les moteurs répondaient correctement sous le code sweep d’Arduino et si ils étaient en mesure de supporter le poids apparent des plaques.

On l’a pour cela fait tourner à vide (rotation continue et rotation à deux temps ) puis avec des plaques TEST de différents type (bois , plastique) ayant a peu près le même poids que notre plaque conçue pour le système que cela soit avec la plaque test ou non, les résultats sont concluants.

Programmation

Branchements et fonctionnement du programme Arduino

Le principe consiste à remarquer que la lumière reçue par les trois photorésistance est identique dès que le capteur (ensemble de 3 photorésistance) est orienté dans l'axe de la lumière .Il faut donc mesurer la lumière reçue par chaque photorésistance en mesurant la tension à leurs borne. Cette mesure est réalisée grâce à la connexion de Port Pin 1 à 3 de la carte (ces derniers sont configurés en port analogique). Le programme compare ensuite ces tensions ordonnant aux servomoteurs de pivoter dans la direction de la ou des photorésistance qui reçoivent le moins de lumière.

En Détail : Principe des photorésistances

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

<note>La programmation de la carte s'effectue via une interface logicielle en pseudo langage C. Une fois le programme écrit, il est envoyé sur la carte qui peut ensuite fonctionner en autonomie (sans connexion avec l'ordinateur). </note>

Codage

Pour faire fonctionner les deux servomoteurs nous avons utilisé le code arduino suivant :

<note warning> #include <servo.h>

IO Pins int pinL = 1; Left Sensor IO Pin

int pinR = 2; Right Sensor IO Pin int pinServo1 = 10; Servo 1 PWM pin

int pinU = 3; up Sensor IO Pin int pinServo2 = 11; Servo 2 PWM pin

int leftValue = 0; The left Sensor Value int rightValue = 0; The right Sensor Value

int upValue = 0; The left Sensor Value int error1 =0; The Deviation between the 2 sensors

int errorAVG1 = 0; Error Average - Rolling 2 Point int error2 =0; The Deviation between the 2 sensors

int errorAVG2 = 0; Error Average - Rolling 2 Point Servo hServo1; The servo object

Servo hServo2;

int Position = 45; Position to write out int minPos = 7; Min Position

int maxPos = 160; Max Position float output1 = (maxPos - minPos) /2; Initial output Position

float output2 = (maxPos - minPos) /2; Initial output Position void setup() { Serial.begin(9600); 9600

pinMode(pinV, INPUT); hServo1.attach(pinServo1); hServo2.attach(pinServo2); Set Servo to Centre for Alignment Purpose

Serial.println(“Moving Servo to start Position”);

hServo1.write(output1);

hServo2.write(output2);

delay(2000);

Serial.println(“Going Live…………….”);

}

void loop()

{

//Input Reading
 leftValue = analogRead(pinL);
 rightValue = analogRead(pinR);
 upValue = analogRead(pinU);
 error1 = leftValue - rightValue;
 error2 = -upValue + (leftValue+rightValue)/2;
 errorAVG1 = (errorAVG1 + error1) / 2;
 errorAVG2 = (errorAVG2 + error2) / 2;

float newOutput1 = output1 + getTravel(errorAVG1);

if (newOutput1 > maxPos)

{

 newOutput1 = maxPos;

}

else

{

 if (newOutput1 < minPos)
 {
   newOutput1 = minPos;
 }

}

  hServo1.write(newOutput1);
  output1 = newOutput1;

float newOutput2 = output2 + getTravel(errorAVG2);

if (newOutput2 > maxPos)

{

 newOutput2 = maxPos;

}

else

{

 if (newOutput2 < minPos)
 {
   newOutput2 = minPos;
 }

}

  hServo2.write(newOutput2);
  output2 = newOutput2;

}

int getTravel(float errorAVG)

{

int deadband = 50;         //Range for which to do nothing with output 10 = -10 to +10  
// -1 = Left; +1 = Right

if (errorAVG < (deadband * -1))

{

 return -1;

}

else

{

 if (errorAVG > deadband)
 {
   return 1;
 }
 else
 {
   return 0;
 }

}

}

Attention si ce programme n'est pas correctement écrit quelques erreurs peuvent subsister</note>

wiki/projets/are2018/fablab/projet1.txt · Dernière modification: 2018/05/09 16:14 de ngarcia