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. {{:wiki:projets:are2018:fablab:intro_are.png?400|}} 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 {{:wiki:projets:are2018:fablab:tracker.png?400|}} 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 11x8 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 {{:wiki:projets:are2018:fablab:tracker_are.png?400|}} {{:wiki:projets:are2018:fablab:tracker_1.png?400|}} 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 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. --- 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 {{:wiki:projets:are2018:fablab:ink_pl_3.png?400|}} Plaque horizontale ( 17x12cm ; 3mm d'épaisseur) {{:wiki:projets:are2018:fablab:ink_pl_2.png?400|}} 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). {{:wiki:projets:are2018:fablab:ink_pl.png?400|}} 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 {{:wiki:projets:are2018:fablab:are_1.png?400|}} {{:wiki:projets:are2018:fablab:porte_pr_.png?400|}} {{:wiki:projets:are2018:fablab:porte_pr_1.png?400|}} 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 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. {{:wiki:projets:are2018:fablab:pont_are.png?400|}} Voici le Pont {{:wiki:projets:are2018:fablab:pieces_are.jpg?400|}} {{:wiki:projets:are2018:fablab:tracker_1.jpg?400|}} 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 --- 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. {{:wiki:projets:are2018:fablab:capture_d_ecran_22_.png?400|}} {{ :wiki:projets:are2018:fablab:20180327_110033_487263808012761.mp4 |}} --- 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. {{:wiki:projets:are2018:fablab:code_2_are.png?400|}} 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 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). Codage Pour faire fonctionner les deux servomoteurs nous avons utilisé le code arduino suivant : #include //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