Tutorial de Aurelpere | Catégories : Énergie
Construction d'un tracker photovoltaique à partir d'un leve plaque
Construction d'un tracker photovoltaique à partir d'un leve plaque
tracker, photovoltaique, phtv, dimensionnement
tracker:
Leve plaque BRD : 150€
verin "Actionneur linéaire 12V DC , 1320LBS(6000N) 20 pouces (500mm) moteur électrique" : 69€ sur aliexpress, disponible sur amazon un peu plus cher
Hbridge L298n 7a: 11€ livré sur aliexpress ("Moteur d'entrainement PWM 160W 7A 12V 24V, Module de commande L298, Signal de commande logique, optocoupleur, frein")
2 Pignon chaine 92T: "Pignon arrière 25H JO98/108/138 maillons 55T 65T 68T 70T 80T 92T, pour 47CC 49CC Mini Moto RL facades D343 Pit Pocket Bike" : 40€
2 Pignons "Pignon pour scooter électrique 8T 9T 11T 13T 25H 410 420, pour moteur à courant continu 25H JOMotor MY1020 BM1109 MY1016Z MY1018"
10€
2 Pignons "Pignon de moteur électrique pour Pit-Bike, pignon de moteur à courant continu, pièces RL, D343, 9T, 11T, 13T, 25H, JOMotor 25H"
4€
Moteur "Moteur électrique à engrenage à vis sans fin à couple élevé, engrenage en métal réversible, basse vitesse, angle droit, aimant en continu, CC, 12V, 24V" (Torque 6Nm)
53€
ou
Moteur "Moteur à engrenages CC à vis sans fin autobloquant, couple de bain, moteur de boîte de vitesses turbo en métal, inversé, basse vitesse, DC 12V, 24V, 200kg.cm" 62€
Module
Module photovoltaique Voltech 2mx1m 375W: 200€
Pilotage:
raspberry: environ 100€
metre facom: 20€
kit de poids soviétique: 60€
niveau à bulle: 5€
equerre alu: 6€
ebarbeuse: 50€
perceuse: 50€
poste à souder: 100€
Nous posons deux axes pour notre module:
un axe Oz perpendiculaire au plan du module (vertical lorsque le module est à plat) et un axe Ox paralelle au plan du module (horizontal lorsque le module est à plat)
Caractéristiques du module:
poids 21,2kg
Longueur: 1,8m
Largeur: 1m
La théorie de wikipedia nous dit que le moment d'inertie selon l'axe Oz est donc :
Jdelta=1/12*m*L (avec m masse du module et L longueur du module)
Jdelta=1/12*1,8*21,2=3,18Nm
Ndt: on assimile le module à une "barre" car ici l'axe de rotatation est l'axe paralelle au plan du rectangle formé par le module et non l'axe perpendiculaire
On verifie maintenant experiementalement :
Centrer le module sur le leve plaque et le mettre horizontalement.
verifier qu'il n'y a pas de vent
faire le niveau de la surface sur laquelle le mat du leve plaque est posé
fixer un repere horizontal au niveau du bas du module
poser un poids de 500g à l'extremité du module
mesurer la distance entre la position à l'équilibre et la position avec le poids
On a:
Jdelta=d*F
avec d distance en metre à l'axe de rotation (bras de levier)
F force appliquée au solide (ici mg avec m masse du solide en kg, et g constance gravitationelle)
On a donc
Jdelta=0,9*0,5*9,8=4,41Nm
On mesure la rotation : dans notre cas, la distance de rotation à l'extrémité du module varie entre 3 et 10 cm. Les variations importantes
sont dus aux frotements de l'axe qui peut etre en force ou coulisser plus librement.
L'ordre de grandeur du moment d'inertie est bien vérifié.
Refaire avec poids exact?
Pour le moment d'inertie selon l'axe Ox, il est plus difficile de vérifier expérimentalement, car l'axe du lève plaque ne permet pas
d'avoir une position à l'équilibre avec le poids du module (qui viendra caler sur la butée en subissant son poids)
On se contentera donc de la théorie:
La theorie nous dit
Jdelta=1/12*m(b²+c²) avec m masse du module, b longueur du petit coté, c longueur du grand coté
Jdelta=1/12*21,2*(1,8²+1²)=7,49NM
Ce resultat theorique étant tres fortement inferieur au poids du module, on dimensionnera à partir de la force necessaire pour soulever le poids du module (l'axe etant soumis au poids):
F=mg=21,2*9,8
Soit 200Nm en ordre de grandeur (1m de bras de levier en ordre de grandeur)
On a donc maintenant les caractéristiques pour dimensionner les moteurs d'entrainement de notre module selon les deux axes de rotation.
Mais les trackers ont une prise au vent conséquente.
Si on souhaite prendre en compte la résitance au vent il faut mesurer la force appliqué au module selon la vitesse du vent:
Fp=1/2*ρ*v²*S*Cp
Avec ρ densité de l'air egal à 1,2 kg/m3 en ordre de grandeur pour des conditions de temperature et de pressions "standards".
v vitesse du vent en m/s
S surface de l'objet en m²
Cp coefficient de pression sans dimension égal à 2 pour une plaque rectangulaire en métal
On a donc :
Fp=1/2*1,2*1,8*2*v²=2,16*v²
Chatgpt nous donne les abaques des vitesses de vent en km/h et leurs conversions en m/s et le nom generique en météorologie:
Calme : Moins de 1 km/h (Moins de 0.3 m/s)
Très légère brise : 1-5 km/h (0.3-1.5 m/s)
Légère brise : 6-11 km/h (1.6-3.0 m/s)
Petite brise : 12-19 km/h (3.4-5.4 m/s)
Jolie brise : 20-28 km/h (5.5-7.9 m/s)
Bonne brise : 29-38 km/h (8.0-10.7 m/s)
Vent frais : 39-49 km/h (10.8-13.8 m/s)
Vent modéré : 50-61 km/h (13.9-16.9 m/s)
Vent assez fort : 62-74 km/h (17.2-20.6 m/s)
Fort vent : 75-88 km/h (20.8-24.4 m/s)
Tempête : 89-102 km/h (24.7-28.3 m/s)
Violente tempête : 103-117 km/h (28.6-32.5 m/s)
Ouragan : Au moins 118 km/h (Au moins 32.8 m/s)
Nous avons donc une Force Fp qui peut varier de
Un ordre de grandeur de 20N pour une legere brise
à
Un ordre de grandeur de 2000N pour une tempete
(Ndt: la force de gravité d'1 kg est d'environ 10N donc la force de 2000N correspond en ordre de grandeur à la force de gravité de 200kg).
Les moments d'inertie sur les axes sont du meme ordre de grandeur (20Nm et 2000Nm) puisque les dimensions du modules sont de l'ordre du metre.
Si vous souhaitez construire un tracker qui resiste donc à des conditions de tempete, il est conseillé de dimensionner le tracker en conséquence
d'une part avec des attaches au sol suffisante, d'autres part avec une armature au dos des modules pour les attacher adaptée, et désactivant le tracking
lors des vents de tempetes ou plus important.
Le dimensionnement pour la résistance au vent est une des raisons pour lesquelles les trackers sont cher et donc moins répandus que les installations photovoltaïques fixes.
Les moteurs pas à pas et servomoteurs (step motors en anglais) qui ont un couple suffisant pour résister à des vents importants sont chers, et ca peut se comprendre pour des moteurs conçu pour de la précision dans les pas.
(par exemple là: https://www.distrelec.fr/fr/automatisation/moteurs-et-entrainements/moteurs-pas-pas-et-servocommandes/c/cat-L3D_525513 )
Pour les verins (hydraulic cylinder en anglais), la force de poussée est généralement dans des ordres de grandeurs suffisant pour resister aux tempetes.
Pour notre tutoriel low-tech, on sait que les moteurs de carotteuse ont des couples (torque en anglais) d'un ordre de grandeur suffisant pour résiter à des tempêtes (1W correspond à 1 newton que multiplie 1 mètre par seconde, une carotteuse de 2000W devrait donc avoir un couple d'un ordre de grandeur plus ou moins dans les 2000Nm).
Après vérification sur les caractéristiques techniques des perceuses, visseuses à choc, et caroteuses, et une vérification manuelle des résistances (frein/embreillage) lorsque le moteur n'est pas alimenté, ce type de moteur ne conviendra pas.
Pour pouvoir dimensionner une résistance à des vents entre la violente tempête et l'ouragan, on va donc procéder différemment:
on trouve sur aliexpress à des prix abordables (70€) des moteurs pas à pas ou des moteurs à engrenage/vis sans fin dont le torque (le couple) est d'un ordre de grandeur de 20Nm (200kgcm). On va donc utiliser ce moteur avec deux réducteurs 1:10 pour obtenir un couple résistant à 2000Nm.
Rappel : le couple exprimé en Nm est une force de rotation produite par le moteur qui se calcule selon le meme principe que le moment d'inertie: la force en newton x la distance à l'axe de rotation en metre
Les transmissions par couroie ou chaine permettent de réduire ce torque/couple, et cela se calcule très simplement:
C1=(R1/R2)*C2
Avec C1 couple sur la poulie 1
R1 rayon de la poulie 1
C2 couple sur la poulie2
R2 rayon de la poulie 2
Le rayon etant directement proportionnel aux nombre de dents d'une roue dentée (un pignon de vélo ou de moto par exemple), on peut facilement calculer les rapports de transmission en divisant le nombre de dents du grand pignon par le nombre de dents du petit pignon (en vérifiant que cest bien le meme standard de dents).
Ainsi une transmission 80 dents/10 dents (80T / 10T en anglais avec T pour tooth) produira une réduction de 1:8, comme ici sur amazon pour du vélo électrique ("Keenso Kit Chaîne et Pignon 80T 25H 34mm 3 Trous Pignon 10T H Trou Chaîne Pignon 146 Maillons Chaîne") à 30€.
On remarquera que les transmission de vélo standard ont des rapport de réduction maximum de 50dents/11dents, soit une réduction de 1:5, ce qui est insuffisant pour des réductions efficaces sans multiplier les poulies.
Il est difficile de trouver des transmissions avec des réductions de 1:10, mais on en trouve sur aliexpress et on pourra assez facilement adapter un pédalier de vélo sur lequel on va venir souder des pignons, ce qui nous permettra de faire une reduction 1:100 avec un seul axe ajouté en plus de l'axe principal et de l'axe du moteur.
On va donc à utiliser un moteur pas à pas ou un moteur à engrenage avec vis sans fin (test de résistance non alimenté à réception des pièces) commandé par un raspberry pi (mais le porte plaque etant sur roulette, on prendra la précaution de ranger le tracker en cas de tempete ;))
On va d'abord s'interesser à la trajectoire solaire ou solar trajectory en anglais.
On mesure typiquement la position du soleil selon deux systemes de coordonnées:
le systeme equatorial avec des coordonnées exprimées en:
ascension droite equivalente à la longitude terrestre mesurée en heures minutes secondes
déclinaison équivalente à la latitude terrestre mesurée en degré minutes secondes
le systeme horizontal avec des coordonnées exprimées en:
degré d'azimut
degré d'altitude ou de hauteur
Les abaques de trajectoire solaire (par exemple disponibles ici : https://www.astrolabe-science.fr/diagramme-solaire-azimut-hauteur ) nous donnent les trajectoires du soleil dans une journée (généralement plusieurs journées typiques de plusieurs saisons) exprimées en degrés horizontal.
Pour lire un graphique de ce type:
si on suit le graphique inséré dans ce tuto et issu du lien ci-dessus, lorsqu'on suit par exemple la courbe rouge pour paris, voici ce qu'on peut lire:
le 21 décembre, lorsqu'on regarde le sud, le soleil suit une trajectoire qui commence à -50° d'azimut (vers l'Est sur l'axe horizontal) lorsque le soleil se lève, puis lorsque le soleil va vers l'ouest tout au long de la journée (on suit la courbe rouge), il prend de la hauteur jusqu'à atteindre 17° de hauteur (sur l'axe vertical) à midi (position 0° d'azimut sur l'axe horizontal) puis redescend jusqu'à 0° de heuteur lorsqu'il se couche (vers l'Ouest sur l'axe horizontal).
Pour paris, on a :
un degré d'azimut qui varie de -130° à +130° selon l'heure et la saison
un degré d'altitude ou de hauteur qui varie de 0° à 64° selon l'heure et la saison
Pour notre tracker,
Pour calculer notre débattement horizontal (selon un axe Oz vertical si le module est posé au sol), on n'a pas vraiment de contrainte sur le lève plaque utilisé puisque l'axe tourne à 360° sans probleme. Donc on pourra suivre le soleil de -130° d'azimut à +130° d'azimut sans probleme.
Pour calculer notre debattement vertical (selon l'axe Ox horizontal si le module est posé au sol), on a une contrainte sur l'angle maximal.
N'ayant pas de décimetre sous la main, on va utiliser pythagore (voir photo):
64cm*150cm*134cm
socatoa:
sinus phi=opposé/hypothenus
sinus phi=134/150
sinus phi=0,8933
phi=1,1046 rad
phi=1,1046*180/pi=63°
On a donc une contrainte pour notre leve plaque qui accepte des angles selon l'axe Ox de 0° à 63°.
Lorsque le tracker est à son angle maximum (63°), on est perpendiculaire au soleil lorsque le soleil est à un angle phi de
phi=180-63-90=27°
Lorsque le soleil a un angle plus faible que 27°, le tracker ne pourra pas suivre en étant perpendiculaire au soleil.
On voit cependant que la butée est assurée par le ressort (sur la photo on voit la marque au niveau de la peinture). On peut donc gagner en amplitude sur la butée en perçant et en faisant une encoche dans la potence.
La mesure manuelle du débattement entre l'axe du tube sur lequel est fixé la manivelle et le dos du module lorsque le leve plaque est incliné à son angle maximum nous donne 42cm. (voir photo)
On va fixer une potence sur la partie fixe du porte plaque qui tourne avec l'axe vertical, afin d'y fixer une tige sur laquelle on fixera le verin qui pourra tourner avec l'axe vertical afin d'ajuster l'angle sur l'axe horizontal.
On commence par fixer la potence en metal en la soudant à la partie fixe vis à vis de l'axe vertical. Il faut bien poncer la peinture avant de faire la soudure. (voir photo). On fait ici une soudure à l'arc.
On perce ensuite une tige en metal qu'on vient boulonner à la potence (voir photo).
On perce et on fixe également une tige en métal qu'on vient boulonner à la partie mobile qui ajuste l'angle sur l'axe horizontal, cad les "bras" qui permettent de porter la plaque ou le module photovoltaïque (voir photo).
On fixe ensuite le verin aux deux tiges en métal. Le verin est équipé de fixations avec des chevilles qui permettent de "suivre" l'angle pris par les tiges sur lesquelles il est fixé. (voir photo)
Remarquez qu'on a pris une tige en métal en angle droit afin d'éviter que cette fixation soit entièrement libre. Elle vient buter sur une partie de la tige, ce qui permet par la suite d'étaloner plus précisément l'amplitude du verin.
On teste ensuite la course du verin. Il faudra faire attention, car on arrive sur la butée du porte plaque à une avancée du verin d'environ 40cm et ce modèle a une course de 50cm. (voir photos)
Après observation des éléments bloquant, on va modifier la potence pour éviter la butée lorsque le soleil a un degré d'altitude inférieur à 27°.
Pour cela on va :
-laisser passer le ressort en évidant la potence (pour éviter que le ressort fasse butée)
-augmenter l'angle en abaissant la fixation du ressort en perçant la potence
-augmenter l'angle en coupant les bords de la potence
Voir photos :
1/2: observation dessus/dessous
3/4: demontage potence
4/5 : observation dessous, angle max à l'equerre
On arrive ainsi à un angle maximum de quasi 90° et on peut donc suivre le soleil sous tous les angles!
Pour controller le verin, on va utiliser un raspberry pi, l'ordinateur monocarte le plus répandu. Il est doté de d'une série 40 pins, qu'on peut connecter à divers appareils, appelés "controlleur GPIO".
Une première lecture des tutos et librairies disponibles pour utiliser le gpio et des un certain temps passer à tester des hypothèses éronnées pour installer correctement en utilisant les bonnes versions m'amène à vous exposer les options possibles:
-système d'exploitation :
Archives et versions de systemes d'exploitation utiles pour la rétrocompatibilité (tout lecteur soucieux de l'informatique low tech est incité à télécharger et garder des copies en local de ces archives et les partager en torrent!):
*dietpi:
https://dietpi.com/downloads/images/
*raspberry pi os:
https://downloads.raspberrypi.org/raspbian/images
si vous utilisez wheezy,
attention à bien mettre a jour votre /etc/apt/sources.list en faisant:
echo "deb http://legacy.raspbian.org/raspbian/ wheezy main contrib non-free rpi" >> /etc/apt/sources.list
NB: ChatGPT nous donne les dates suivantes de sortie des raspberry:
On espère que c'est vrai (ca vient de chatgpt), mais vous pouvez vérifier sur ce qui est écrit sur le pcb de votre carte.
Pour vérifier la version de votre raspberry sous raspberry pi os si vous ne savez pas quelle version cest(voir photo):
sudo usermod -a G gpio pi pinout
Ajustez avec le système d'exploitation qui vous parait le plus pertinent au regard des filtres de pertinence que vous utilisez. Vous avez la liste des anciennes versions d'os de dietpi et de raspberry pi os au cas où les versions les plus récentes ne fonctionneraient plus (et je me repette : tout lecteur soucieux de l'informatique low tech est incité à télécharger et garder des copies en local de ces archives et les partager en torrent!).
Pour l'install, comme d'habitude, telecharger balenaetcher, flasher une clé usb avec l'image téléchargée, booter. Les login/mdp par défaut pour dietpi sont root/dietpi et pour raspberry pi os pi/raspberry (attention au clavier en qwerty par défaut sous raspberry pi os au démmarage). Pour configurer le clavier, les locales, la timezone et le wifi, faire
sudo dietpi-configsous dietpi et
sudo raspi-configsous raspberry pi.
-driver utilisé pour controler le gpio
Essais infructueux avec pip et le depot pypi (erreur de compilations etc.). Installer en passant en root avec la commande
sudo -s
le plus simple est alors d'installer une version déjà compilée avec apt:
sudo apt install python3-rpi.gpio
faire un test pour voir si ca fonctionne bien (toujours en etant utilisateur root):
python3 import RPi.GPIO
Se reporter à la doc de sourceforge, plus explicite que celle de pypi: http://sourceforge.net/p/raspberry-gpio-python/wiki/Home/
installé par défaut sous raspberry pi
sous dietpi faire
sudo apt install python3 python3-venv python3-pip python3 -m venv venv source venv/bin/activate pip install lgpio gpiozero
Le premier point à comprendre est la numérotation des fiches: les pins (fiches) ont chacune un numéro qui va de 1 à 40 en suivant un ordre de bas en haut et de gauche à droite, et chaque pin a également un numéro GPIO qui est différent du numero de pin.
Pour cela on peut chercher les infos sur internet: https://wiki.lowtechlab.org/wiki/Serveur_orangepi-raspberry_nextcloud_en_photovolta%C3%AFque_autonome ou taper les commande suivantes dans raspberry pi os (voir image)
sudo usermod -aG gpio votre_user pinout
Dans ce tuto, que ce soit avec gpiozero ou RPi.GPIO, on utilisera la numerotation GPIO et pas la numérotation pin
On branche les GPIO 2 et 4 (alim +5V) aux deux fiches +5V du HBrdige On branche les GPIO 6 et 7 (Ground, la terre) aux deux fiches GND du HBrdige On branche les GPIO 23 et 16 à l'interrupteur 3 du HBridge Pour tester le "enable" du HBridge, on branche les GPIO 20 et 21 au ENA du HBridge
On utilise ensuite les scripts suivants :
import time import RPi.GPIO as GPIO import gpiozero def forwardzero(wait): led16=gpiozero.LED(16) led23=gpiozero.LED(23) led20=gpiozero.LED(20) led21=gpiozero.LED(21) try: print("forwardzero") #cas où le hbridge necessite un signal enable #led21.off() #led20.on() #mettre un signal sur l'interrupteur led23.off() led16.on() #laisser le signal actif le temps de wait time.sleep(wait) #eteindre le signal sur l'interrupteur led16.off() except KeyboardInterrupt: print("keyboard interrupt") except Exception as err: print(err) finally: print("zero") #signal à zero sur l'interrupteur led16.off() led23.off() #signal à zero sur la fiche enable led20.off() led21.off() def backwardzero(wait): led16=gpiozero.LED(16) led23=gpiozero.LED(23) led20=gpiozero.LED(20) led21=gpiozero.LED(21) try: print("backwardzero") #cas où le hbrige necessite un signal sur enable #led20.off() #led21.on() #signal sur interrupteur led16.off() led23.on() #wait time.sleep(wait) #signal off sur interrupteur led23.off() except KeyboardInterrupt: print("keyboardinterrupt") except Exception as err: print(err) finally: print("zero") #signal à zero sur l'interupteur led16.off() led23.off() #signal à zero sur la fiche enable led20.off() led21.off() #pin16 gpio23 #pin36 gpio25 def forward(wait): GPIO.setmode(GPIO.BCM) GPIO.setup(16,GPIO.OUT) GPIO.setup(23,GPIO.OUT) GPIO.setup(20,GPIO.OUT) GPIO.setup(21,GPIO.OUT) try: print("forward") GPIO.output(20,GPIO.LOW) GPIO.output(21,GPIO.HIGH) GPIO.output(23,GPIO.LOW) GPIO.output(16,GPIO.HIGH) time.sleep(wait) GPIO.output(16,GPIO.LOW) GPIO.output(21,GPIO.LOW) except KeyboardInterrupt: print("keyboard interrupt") except Exception as err: print(err) finally: print("zero") GPIO.output(20,GPIO.LOW) GPIO.output(21,GPIO.LOW) GPIO.output(23,GPIO.LOW) GPIO.output(16,GPIO.LOW) #GPIO.cleanup() chez moi, ca n'enleve pas les +3V def backward(wait): GPIO.setmode(GPIO.BCM) GPIO.setup(20,GPIO.OUT) GPIO.setup(21,GPIO.OUT) GPIO.setup(16,GPIO.OUT) GPIO.setup(23,GPIO.OUT) try: print("backward") GPIO.output(20,GPIO.LOW) GPIO.output(21,GPIO.HIGH) GPIO.output(23,GPIO.HIGH) time.sleep(wait) GPIO.output(23,GPIO.LOW) GPIO.output(21,GPIO.LOW) except KeyboardInterrupt: print("keyboardinterrupt") except Exception as err: print(err) finally: print("zero") GPIO.output(20,GPIO.LOW) GPIO.output(21,GPIO.LOW) GPIO.output(23,GPIO.LOW) GPIO.output(16,GPIO.LOW) #GPIO.cleanup() chez moi ca n'enleve pas les +3V forward(2) backward(2) forwardzero(2) backwardzero(2)
GPIO.BCM permet d'utiliser la numerotation GPIO GPIO.HIGH envoie un signal de +3V dans la fiche concernée GPIO.LOW remet le signal à 0V (GND, la terre) gpiozero fait la meme chose avec les methodes .on() et .off()
Mes tests au voltmetre montrent que le signal est par défaut à +3V dans les fiches GPIO, y compris après un GPIO.cleanup(), donc je l'ai désactivé dans le code. Quelques tests m'ont permis d'activer le verin dans un sens et pas dans l'autre. Les tests au voltmetre montrent que le GPIO fonctionne bien mais que le Hbridge n'active pas correctement l'interrupteur.
Le choix de ce modèle de HBridge L298N (voir description dans materiel) a été fait pour accepter du 7A, le moteur du verin etant un 12V 5A.
Une mesure du verin en pousée à vide donne 0,5A et en charge à 35kg 1A.
On fera donc le test avec un HBridge un peu plus "standard" (2A max).
Pour la pousée en charge sous violente tempete, on cherchera plus tard de l'électronique de qualité.
Update dès réception d'un hbridge un peu moins erratique
fr none 0 Draft
Vous avez entré un nom de page invalide, avec un ou plusieurs caractères suivants :
< > @ ~ : * € £ ` + = / \ | [ ] { } ; ? #