Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Traqueur solaire Arduino

Composants et fournitures

Arduino UNO
× 1
Micro-servomoteur SG90
× 2
LDR, 5 Mohm
× 4
Résistance 330 ohm
× 4
Potentiomètre rotatif (générique)
× 1
Bouton-poussoir, bouton-poussoir
× 2
Mini panneau solaire
× 1

Outils et machines nécessaires

Arduino IDE
Parallax PLX-DAQ

À propos de ce projet

Ce projet présente un banc d'essai matériel/logiciel ouvert pour tracker solaire. Le prototype proposé est basé sur un suiveur solaire à deux axes contrôlé avec Arduino Uno, qui est une plate-forme de prototypage open source basée sur du matériel et des logiciels faciles à utiliser. Le tracker solaire peut être contrôlé automatiquement à l'aide de capteurs LightDependent Resistor (LDR) ou manuellement à l'aide d'un potentiomètre. De plus, ce banc d'essai fournit une instrumentation virtuelle basée sur Excel dans laquelle les données de son tracker solaire peuvent être enregistrées et présentées. Le matériel utilisé a été choisi pour être peu coûteux, compact et polyvalent. Le banc d'essai proposé est conçu pour aider les étudiants à développer leur compréhension de la théorie du contrôle et de leur application.

Le banc d'essai proposé est présenté sur la figure 1. Il est basé sur un tracker solaire qui peut tourner automatiquement pour suivre le soleil à l'aide de quatre capteurs LDR et de deux servomoteurs (SM1 et SM2), ou manuellement à l'aide d'un potentiomètre. Pour basculer entre les deux modes (automatique et manuel), un bouton poussoir est utilisé. Un autre bouton poussoir permet de relier soit le SM1 (servomoteur haut-bas) soit le SM2 (servomoteur gauche-droite) au potentiomètre pour contrôler leur mouvement. De plus, un ordinateur est utilisé comme instrument virtuel pour visualiser le mode et le courant, la tension et la puissance du panneau photovoltaïque en fonction du temps dans MS Excel. La carte Arduino Uno est utilisée pour implémenter toutes les exigences logicielles du système.

Conception mécanique

Comme le montre la figure 2, le modèle 3D de conception assistée par ordinateur (CAO) du suiveur solaire est conçu dans CATIA. Il est composé du panneau PV, des servomoteurs gauche-droite et haut-bas, et de quatre capteurs LDR. Pour l'axe horizontal, un roulement est fixé en parallèle avec le servomoteur haut-bas pour une meilleure flexibilité. Le suiveur solaire est conçu pour avoir deux degrés de liberté, d'est en ouest par le servomoteur gauche-droite et du sud au nord par le servomoteur haut-bas. Les capteurs LDR sont placés aux quatre coins du panneau photovoltaïque et sont placés dans des tubes sombres avec un petit trou sur le dessus pour détecter l'illumination du soleil. Ces tubes sombres sont également considérés comme un concentrateur de rayonnement et sont utilisés pour augmenter la robustesse du suiveur solaire.

Système matériel

La figure 3 présente le circuit électronique du banc d'essai proposé. Pour le mode automatique, le microcontrôleur convertit les valeurs analogiques des capteurs LDR (broches A0 à A3) en numériques. Ensuite, il contrôle deux servomoteurs (haut-bas et gauche-droite) en utilisant deux signaux de modulation de largeur d'impulsion (PWM) (broches 5 et 6) pour suivre le soleil. Les mouvements de rotation se produisent selon deux axes, en azimut d'est en ouest selon la course quotidienne du soleil et en élévation du sud au nord selon la course saisonnière du soleil. Pour le mode manuel, un potentiomètre (broche A4) est utilisé pour contrôler le mouvement des deux servomoteurs, un bouton poussoir (broche 11) est déployé pour connecter le potentiomètre soit au servomoteur haut-bas soit au servomoteur gauche-droite. De plus, un autre bouton-poussoir (broche 12) est utilisé pour basculer entre les deux modes. De plus, la tension PV est mesurée via la broche analogique A5 de l'Arduino, puis le courant PV est calculé puisque la résistance de la charge est déjà connue. Ensuite, le courant PV, la tension et la puissance en fonction du temps et le mode réel sont envoyés à l'ordinateur pour les présenter en temps réel sur MS Excel.

Le circuit du capteur LDR est conçu comme un circuit diviseur de tension. La variation de l'intensité lumineuse est proportionnelle à la variation de la tension de sortie du diviseur. Le haut du diviseur de potentiel est à 5 V, la masse est à 0 V et la sortie du diviseur de tension est connectée à une entrée analogique (A 0 par exemple) du microcontrôleur. Par la suite, le convertisseur analogique-numérique (ADC) du microcontrôleur convertit la valeur analogique lue par A 0 en une valeur numérique comprise entre 0 et 1023 car l'ADC est codé sur 10 bits, et selon cette valeur, il est possible de connaître le niveau de luminosité. La valeur des résistances utilisées dans les diviseurs de tension est de 330 .

Deux servomoteurs à 180 degrés sont utilisés. Un servomoteur (MG996R) pour contrôler le suiveur solaire selon l'axe vertical, qui est le servomoteur gauche-droite. Et un micro servomoteur (SG90) pour contrôler le suiveur solaire selon l'axe horizontal, qui est le servomoteur haut-bas. L'avantage du servomoteur est que l'on peut contrôler son arrêt, sa course, le sens de rotation et la vitesse à l'aide d'un seul fil à faible courant connecté directement à une sortie du microcontrôleur sans avoir besoin de pilotes. Les servomoteurs utilisés sont contrôlés par la carte Arduino UNO via un câble électrique à 3 fils comme indiqué sur la Fig. 3, deux fils pour l'alimentation et un fil pour PWM pour contrôler ses positions.

La conception du logiciel embarqué

Le logiciel embarqué est la pièce qui sera embarquée dans le matériel (Arduino Uno) pour contrôler et surveiller le banc d'essai du suiveur solaire. Le logiciel embarqué est conçu pour couvrir les exigences suivantes :

1. Le banc d'essai a deux modes :manuel et automatique. Un bouton-poussoir est connecté à la broche 12 pour basculer entre les deux modes.

2. Si le mode manuel est actif, le potentiomètre peut piloter les servomoteurs soit d'est en ouest pour le moteur gauche-droit, soit du sud au nord pour le moteur haut-bas. Un bouton-poussoir est connecté à la broche 11 pour basculer le potentiomètre entre les deux moteurs, soit il contrôle le servomoteur gauche-droite soit le servomoteur haut-bas.

3. Si le mode automatique est actif, l'algorithme présenté sur la figure 4 sera exécuté. Ce dernier utilise les valeurs analogiques renvoyées par les capteurs LDR. Par exemple, en considérant l'azimut ou l'axe vertical, les valeurs moyennes de deux LDR de droite et de deux LDR de gauche sont comparées et si l'ensemble de LDR de gauche reçoit plus de lumière, le suiveur solaire se déplacera dans cette direction via le servomoteur gauche-droite. Ce dernier continuera à tourner jusqu'à ce que le résultat de différence soit dans la plage [−10, 10]. Cette plage est utilisée pour stabiliser le contrôleur et une fois que le suiveur solaire est perpendiculaire au soleil, aucun autre contrôle n'est effectué. D'un autre côté, si le bon ensemble de LDR reçoit plus de lumière, le suiveur solaire se déplace dans cette direction à travers le servomoteur gauche-droite et continuera à tourner jusqu'à ce que le résultat de différence soit dans la plage [−10, 10]. La même méthode est utilisée pour l'axe d'élévation. De plus, nous avons également déterminé le rayonnement moyen entre les quatre capteurs LDR et si cette valeur est inférieure à une petite valeur (8 :une valeur qui a été ajustée et testée pratiquement et qui est restituée lorsque l'irradiation est nulle). C'est-à-dire que la nuit est venue. Dans ce cas, le suiveur solaire doit revenir à la position montante du soleil. Par exemple, si la position de lever du soleil peut être atteinte en réglant 0 degré dans le servomoteur gauche-droite et 30 degrés dans le servomoteur haut-bas. Cela peut être facilement fait grâce à la fonction C "servox. écrire (angle)" fourni par Arduino IDE.

4. La tension PV acquise via la broche analogique A5 doit être traitée et utilisée pour calculer le courant et la puissance PV. Ensuite, toutes ces données et le mode réel doivent être envoyés via un câble USB à l'ordinateur, puis les présenter dans MS Excel.

Le PLX-DAQ Excel Macro est utilisé pour l'acquisition de données du microcontrôleur Arduino vers une feuille de calcul Excel. Nous n'avons qu'à le télécharger. Après l'installation, un dossier nommé "PLX-DAQ" sera automatiquement créé sur le PC dans lequel se trouve un raccourci nommé "PLX-DAQ Spreadsheet". Ensuite, pour établir la communication entre la carte et Excel, il suffit d'ouvrir le Tableur et de définir les paramètres de connexion (Baud rate et port) dans la fenêtre PLX-DAQ (Fig. 5). Par la suite, après avoir cliqué sur "connecter", les données de sortie seront collectées et affichées en temps réel sur la feuille de calcul Excel

Le prototype

La figure 6 montre le suiveur solaire à l'état détaché et assemblé. Comme présenté, toute la structure a été fabriquée à l'aide de plaques de bois, et il est clair que tous les composants mentionnés ont été utilisés pour construire le suiveur solaire avec des modes manuel et automatique (capteurs LDR, Arduino Uno, servomoteurs, potentiomètre, boutons-poussoirs et le petit panneau PV).

La figure 7 montre l'ensemble du banc d'essai, le suiveur solaire avec instrumentation virtuelle et une lampe artificielle qui peut exposer la lumière pour tester le suiveur solaire. Le tracker solaire et l'ordinateur sont connectés via un câble USB. Une fois la tension PV acquise, le contrôleur traite cette information et l'utilise pour calculer le courant et la puissance PV. Ensuite, toutes ces données sont envoyées à l'ordinateur pour les présenter dans MSExcel. De Fig. 5 et 6, il est clair que le banc d'essai proposé est petit, flexible et facile à utiliser. Il peut permettre aux étudiants, chercheurs et ingénieurs d'appliquer leurs algorithmes de manière simple avant de procéder à la mise en œuvre d'un grand dispositif de suivi solaire.


Code

  • Banc d'essai de suiveur solaire du logiciel embarqué
Banc de test du suiveur solaire du logiciel embarquéArduino
//Servo motor library#include //Initialize variablesint mode =0;int ax =0; int buttonState1 =0 ; int buttonState2 =0 ; int prevButtonState1 =0;int prevButtonState2 =0; int ldrtopr=0; // en haut à droite LDR int ldrtopl =1; // en haut à gauche LDR int ldrbotr =2; // LDR en bas à droite int ldrbotl =3; // LDR en bas à gauche int topl =0;int topr =0; int botl =0;int botr =0;//Déclarer deux servosServo servo_updown;Servo servo_rightleft;int threshold_value=10; //mesure de sensibilitévoid setup(){ Serial.begin(9600); //configuration de la connexion série //ouvre le port série, définit le débit de données à 9600 bps Serial.println("CLEARDATA"); //effacer toutes les données qui ont déjà été placées dans Serial.println("LABEL,t,voltage,current,power,Mode"); //définir les en-têtes de colonnes (commande PLX-DAQ) pinMode(12, INPUT); //Bouton de commutation de mode pinMode(11, INPUT); // Commutateur d'axe pinMode (A4, INPUT); //Potentiomètre pour mouvement droite-gauche et pour mouvement haut-bas servo_updown.attach(5); //Mouvement de haut en bas du servomoteur servo_rightleft.attach(6); //Mouvement droite-gauche du servomoteur}boucle vide(){//pv_power();mode char; volt flottant =lecture analogique (A5) * 5,0/1023 ; tension flottante =2*volt; // Volt=(R1/R1+R2)*Tension / R1=R2=10Ohms => voltage=2*volt) float current =voltage/20; // I=voltage/(R1+R2) float power =voltage*current; Serial.print("DONNEES,HEURE,"); // Commande PLX-DAQ Serial.print(voltage); //envoyer la tension au port série Serial.print(","); Serial.print(current); // envoie le courant vers le port série Serial.print(","); Serial.print(puissance); // envoie l'alimentation au port série Serial.print(","); // Serial.println(Mode); buttonState1 =digitalRead(12); if (buttonState1 !=prevButtonState1) { if (buttonState1 ==HIGH) { // Changer de mode et allumer le bon indicateur if (mode ==1) { mode =0; } else { mode =1; } } } prevButtonState1 =buttonState1; retard (50); // Attendre 50 milliseconde(s) if (mode ==0) { Mode='M'; Serial.println(Mode); //Envoyer le mode "Manuel" au port série manualsolartracker(); } else { // mode automatique Mode ='A'; Serial.println(Mode); tracker solaire automatique(); //envoie le mode "Automatique" au port série } }void automaticsolartracker(){ //capture des valeurs analogiques de chaque LDR topr=analogRead(ldrtopr); //capture de la valeur analogique du LDR supérieur droit topl=analogRead(ldrtopl); //capture de la valeur analogique du LDR supérieur gauche botr=analogRead(ldrbotr); //capture de la valeur analogique du bot right LDR botl=analogRead(ldrbotl); // capture de la valeur analogique du LDR gauche du bot // calcul de la moyenne int avgtop =(topr + topl) / 2 ; //moyenne des meilleurs LDR int avgbot =(botr + botl) / 2; //moyenne des LDR inférieurs int avgleft =(topl + botl) / 2; //moyenne des LDR gauches int avgright =(topr + botr) / 2; //moyenne des LDR corrects //Obtenir les différents int diffélev =avgtop - avgbot; //Obtenir les différentes moyennes entre le haut des LDR et le bot des LDR int diffazi =avgright - avgleft; //Obtenir les différentes moyennes entre les LDR à droite et les LDR à gauche //mouvement gauche-droite du tracker solaire if (abs(diffazi)>=valeur_seuil){ //Changer la position uniquement si la différence de lumière est plus grande que la valeur_seuil si (diffazi> 0 ) { if (servo_rightleft.read() <180) { servo_rightleft.write((servo_updown.read() + 2)); } } if (diffazi <0) { if (servo_rightleft.read()> 0) { servo_rightleft.write((servo_updown.read() - 2)); } } } //mouvement de haut en bas du suiveur solaire if (abs(diffelev)>=seuil_valeur){ //Changer la position uniquement si la différence de lumière est plus grande que thethreshold_value if (diffelev> 0) { if (servo_updown.read() <180) { servo_updown.write((servo_rightleft.read() - 2)); } } if (diffelev <0) { if (servo_updown.read()> 0) { servo_updown.write((servo_rightleft.read() + 2)); } } } } void manualsolartracker(){ buttonState2 =digitalRead(13); if (buttonState2 !=prevButtonState2) { if (buttonState2 ==HIGH) { // Changer de mode et allumer le bon indicateur if (axe ==1) { ax =0; } else { hache =1; } } } prevButtonState2 =buttonState2; retard (50); // Attendre 50 millisecondes si (axe ==0) { // contrôle le mouvement droite-gauche servo_rightleft.write(map(analogRead(A4), 0, 1023, 0, 180)); } else { // // contrôle le mouvement haut-bas servo_updown.write(map(analogRead(A4), 0, 1023, 0, 180)); } }

Schémas


Processus de fabrication

  1. Dés numériques Arduino
  2. Contrôleur de jeu Arduino
  3. Solar Tracker V2.0
  4. Jeu Pixel Chaser
  5. Traqueur solaire basé sur l'Internet des objets (IoT)
  6. Lévitation électromagnétique répulsive Arduino
  7. Contrôleur domestique Arduino activé par Alexa
  8. NeoMatrix Arduino Pong
  9. Mesure du rayonnement solaire avec Arduino