Réalisez un Routeur Solaire pour gérer la surproduction
Version V2
Remplacé par la version V8
Avec les panneaux solaires, dans une installation en autoconsommation, il est fréquent d’avoir de la surproduction d’énergie dont on ne sait que faire et qui est envoyée sur le réseau public. Une solution pour stocker cet excédent est de l’envoyer au chauffe-eau électrique.
Un rapide calcul, pour un chauffe-eau de 200l, équipé d’une résistance chauffante de 2400W, montre qu’il faut près d’une heure de chauffe, soit 2.3 kWh pour monter l’eau de seulement 10°.
200l*1000gr*4.18Joule*10°/3600s=2322 Wh = 2.3kWh
Chaque jour, c’est plusieurs kWh qu’il faut fournir au chauffe-eau. Pour un système classique, on effectue cela de nuit à un tarif réduit. En cas de surproduction dans la journée des panneaux photovoltaïques, il faut envoyer cette énergie au chauffe-eau. C’est une superbe batterie de stockage d’énergie. Mais il est fréquent de n’avoir que quelque centaines de watts disponibles et non pas la puissance de 2400 w que demande la résistance du chauffe-eau en branchement classique.
Tableau des Versions
Différentes versions de routeur ont été décrites :
Version | Mesure courant / puissance | Actionneurs | Modulaire | Domoticz | MQTT / Home Assistant | Description |
---|---|---|---|---|---|---|
1 | Sonde Ampèremétrique | Relais | Non | Oui | Non | Routeur Solaire. Mesure de Puissance avec un ESP32 |
2 | Sonde Ampèremétrique | Triac + Relais | Non | Oui | Non | Réalisez un Routeur Solaire pour gérer la surproduction |
3.04_UxI | Sonde Ampèremétrique | Triac + Relais | Oui | Oui | Oui | U x I : Routeur Solaire pour gérer la surproduction photovoltaïque |
3.10 Linky | Linky | Triac + Relais | Oui | Oui | Oui | Réalisez un Routeur Solaire avec un Linky |
Ici, nous allons réaliser un système qui envoi uniquement la puissance excédentaire au chauffe-eau en surveillant la puissance qui entre ou sort de la maison afin qu’elle soit nulle à l’aide d’une sonde de courant branchée derrière le compteur. Ce système ne fonctionne que pour les chauffe-eaux électriques classiques dans lesquels se trouve une résistance électrique et un thermostat électro-mécanique pour contrôler la température.
Le routeur solaire agit comme une vanne qui s’ouvre pour laisser passer la surproduction en surveillant le courant en entrée de la maison afin qu’il soit nul.
Matériels
Pour réaliser l’ensemble, il faut les matériels suivants:
Capteur du Courant
Pour mesurer le courant en entrée de la maison, on utilise un capteur de courant dans lequel on fait passer le fil de phase du secteur. En sortie, agissant comme un transformateur, il fournit un courant identique, mais 2000 fois plus faible. Ce courant est envoyé aux bornes d’une résistance et nous allons mesurer la tension générée.
Il existe différents modèles suivant le courant Max que l’on souhaite mesurer. La version 100A est adaptée à un domicile ayant une puissance max délivrée de 12kVA. On la trouve en Chine chez Aliexpress.
Capteur de la tension
Pour savoir si de l’énergie rentre ou sort de la maison, il faut de même mesurer la tension électrique. C’est en comparant la phase du courant I et de la tension U que l’on connaitra le sens du transfert d’énergie.
Pour mesurer la tension, on utilise un transformateur bobiné classique abaisseur de tension qui nous isole du secteur. Par exemple un 230v/6v. Il faut un modèle le plus petit possible, on ne prélève aucune puissance. Cela n’est plus très facile à trouver. Un transformateur, dit de sonnette, peut faire l’affaire.
Micro-Calculateur ou Microcontrôleur
Pour effectuer les mesures de tension et les calculs, L’ESP32 est un microcontrôleur adapté à notre besoin. Il comprend :
– des entrées analogiques pour mesurer des tensions,
– des entrées/sorties numériques pour actionner un relais ou un triac si besoin,
– une bonne capacité de calcul
– une liaison WIFI pour faire du reporting à distance sur une page web ou un système de domotique.
Gradateur – Triac
Pour ajuster le courant à injecter vers le chauffe-eau, on utilise un gradateur de chez RobotDyn composé d’un Triac et d’un système de détection du passage à zéro de la tension. Il existe en 16A ou 24A et est disponible chez Aliexpress.
Attention, le refroidisseur d’origine du Triac est sous-dimensionné sachant qu’il devra fonctionner pendant plusieurs heures. Rajoutez des éléments d’aluminium ou remplacez-le par un plus-grand. De même les 2 pistes entre le connecteur 230V et le Triac sont un peu faibles. On peut, en rajout, souder une couche de fil de cuivre.
En plus d’un gradateur, on peut rajouter en option 1 ou 2 relais solide pour actionner d’autres dispositifs si besoin.
Mesure Courant et Tension
La mesure des 2 tensions représentantes du courant et le la tension secteur se fait par les entrées analogiques de l’ESP32. Ces entrées acceptent une tension positive entre 0 et 3.3V et numérisent la valeur sur 12 bits, valeurs entre 0 et 4095. Pour s’adapter à la dynamique d’entrée, on crée une référence de tension au milieu de la plage à 1.65V =3.3V/2 à laquelle on rajoutera la tension en sortie du transformateur et de la sonde de courant.
On prélève le 3.3V de l’ESP32 qui en passant par un pont de 2 résistances (R6 et R7) de 4700 ohm connecté à la masse nous fourni au milieu une référence de 1.65V. Pour éviter du bruit de mesure, un condensateur de 470uF (C2) filtre le 3.3V et un autre de 10uF (C1) filtre le point milieu à 1.65V.
Afin de ne pas dépasser les 3.3V crête à crête des signaux à mesurer, ou 1.65V crête, on se fixe une limite de +-1V efficace maximum.
Pour la sonde de courant avec 80A et une résistance de 24 ohm , on arrive à peu près au 1V crête à crête.
24*80A/2000=0.96V efficcace ou 1.36V crête à crête.
Ainsi la tension à mesurer sera dans la plage 1.65V +/- 1.36V.
Chez moi, avec un abonnement de 12KVA, je ne devrai pas dépasser les 60A.
Pour la mesure de tension, il faut mettre un pont de résistances (R4 et R5) pour abaisser le 6V autour de 1V efficace et avoir ainsi un signal à mesurer entre 1.65V +/- 1.41V. Si la courbe rouge de tension sur l’affichage est plate en haut et en bas, il faut augmenter R4 ou diminuer R5.
Raccordement à l’ESP32
Le jeu de piste avec ces cartes qui intègrent un ESP32, est de trouver les GPIO disponibles et non utilisés pour la programmation Flash etc.
Dans notre cas, on mesure les tensions suivantes:
– GPIO 35 : la tension de référence à 1.65V en théorie.
– GPIO 32 : la tension en sortie du transformateur réduite par le pont de résistances R4 et R5
– GPIO 33 : la tension représentant le courant à mesurer
2 LED sur les GPIO 18 et 19 clignotent toutes les 2s. La jaune si on consomme du courant, la verte si on fournit du courant, car nous sommes en surproduction.
La commande du gradateur se fait via le GPIO22 et la lecture de l’impulsion du passage à zéro « Zero Crossing » de la tension secteur sur le GPIO23. Cette impulsion est essentielle pour se synchroniser avec le secteur.
En option, on peut par exemple, connecter un relais solide pilotable en 3.3V au GPIO5.
Timing
Le signal « Zero Crossing » sert de synchronisation au micro-contrôleur pour ouvrir le Triac entre 0 et 100% du temps d’une demi-période de 10 ms suivant le niveau d’énergie à transférer au chauffe-eau.
Mesure
La mesure des 2 valeurs représentant la tension et le courant prend environ 150uS. En pratique, on prévoit sur une période de 20ms (1/50Hz) de prélever 100 couples de valeurs, ce qui donnera une bonne description de la tension à priori sinusoidale et du courant souvent chahuté par les alimentations à découpage.
Pour bien caler dans le temps chaque mesure, on utilise le signal « Zero Crossing » du gradateur. Il passe à 1 durant 500 µs toutes les 10 ms lorsque la tension en 230v est nulle.
Toutes les 40 ms, on effectue :
– la mesure des tensions et courants durant 20ms
– une moyenne sur les dernières mesures pour lisser et réduire le bruit de mesure
– le calcul du courant efficace Ieff
– le calcul de la tension efficace Ueff
– le calcul de la puissance apparente Pva en kVA
– le calcul de la puissance active Pw en kW
– le cosinus φ
Calibration
Un calibrage préalable doit être fait pour définir la constante multiplicative kV dans le programme qui permet la conversion de la tension mesurée en binaire vers la tension réelle. De même pour le courant, la constante kI . Utilisez un voltmètre, une pince ampèremétrique ou votre compteur Linky pour la calibration.
Suivant le transformateur servant à la mesure de tension, il peut y avoir des ajustements à faire. Si la courbe rouge de tension est une belle sinusoïde, ne changez pas R4 et R5. Si la courbe est plate en haut ou en bas, il faut augmenter R4 ou baisser R5.
Ensuite, commencer par mesurer avec un voltmètre la tension exacte du secteur. Par exemple, si la valeur affichée par le montage est 10% en dessous de votre mesure, augmentez la valeur de kV de 10%. Pour le courant, si vous n’avez pas de pince ampèremétrique, utilisez le Linky qui affiche la puissance apparente de VA. Comparez avec la valeur donnée par le système et augmentez ou diminuez en conséquence la valeur de kI.
La convention prise est d’avoir Pw positif si l’on consomme du courant en provenance d’Enedis et Pw négatif en cas de surproduction. En cas d’inversion du signe, tournez d’un demi-tour la sonde de courant sur la phase du secteur ou inversez les fils.
Taux de distorsion harmonique
À la demande de réalisateurs de la version 1 du système, j’ai rajouté le « Taux de distorsion harmonique ». THD. C’est un peu technique, vous pouvez sauter ce paragraphe….
Une tension et un courant idéals sont définis par une forme sinusoïdale parfaite à 50 Hz. En pratique, les appareils (type alimentations à découpage ou autres) introduisent des courants non sinusoïdaux générant de nombreuses harmoniques à 100 Hz, 150 Hz, 200 Hz, 250 Hz……et perturbent le fonctionnement des générateurs, transformateurs etc. Le THD va mesurer l’énergie contenue dans les harmoniques (Énergie totale – Énergie du signal à 50 Hz) par rapport à l’énergie principale et donner un pourcentage.
0% = une sinusoïde parfaite à 50 Hz,
100% = toute l’énergie se trouve dans les harmoniques
Ici, pour des simplicités de calcul, le résultat inclus l’énergie du bruit N en plus des harmoniques.
Exemples harmoniques
Ci-dessous trois cas de consommation/production. Le point de mesure est au niveau du compteur de la maison. Attention les échelles en verticale ne sont pas les mêmes. Les courbes sont toujours calées au max du graphique.
Pas de production photovoltaïque (PV) et pas de Triac
Triac = ouvert à 0%
PV = 0 W
I = 3.05A
PW = 556W
PVA= 752 VA
THDI+N= 42%
Régulation avec le Triac pour amener autour de zéro la consommation en W
Triac = ouvert à 60%
PV = 2400 W
I = 2.12 A
PW = 12 W
PVA = 522 W
THDI = 99%
Surproduction
Triac = 100%
PV =3000W
I = 1.89A
PW = -261W
PVA = 469 VA
THDI+N = 53%
Fonctionnement
Toutes les 40 ms, la tension et le courant sont mesurés sur 100 points durant 20 ms. Si la puissance active Pw est orientée vers le réseau public (Pw<0), le triac s’ouvre un peu plus pour favoriser le transfert vers le chauffe-eau. Ceci est répété jusqu’à atteindre le point d’équilibre ou Pw est proche de zéro.
Si la température est atteinte, le thermostat du chauffe-eau coupe l’alimentation de la résistance. Dans ce cas, le routeur va ouvrir au maximum le triac, mais aucune surproduction ne sera consommé. La valeur Pw va devenir fortement négative, du niveau de la surproduction. À partir d’une certaine valeur, on peut activer (en option) un relais pour consommer sur un autre appareil. On l’arrête si la surproduction cesse. Attention d’avoir une différence entre le seuil d’enclenchement et d’arrêt supérieur à la consommation de l’appareil afin de ne pas avoir une entrée en oscillation du relais.
La nuit, si le niveau de chauffe du ballon n’est pas atteint, on laisse le relais Jour/Nuit d’Enedis prendre le relais (s’il est conservé) ou l’on peut programmer le routeur pour qu’il ouvre le Triac (23h à 4h en hiver). Le routeur prend l’heure sur le réseau internet. Attention, en cas de coupure d’internet, il risque de se désynchroniser. Mettre une plage horaire d’activation qui couvre l’horaire d’hiver et d’été pour éviter les mises à l’heure.
Dans le code source, vous trouverez un reporting vers le système Domoticz. C’est un exemple, en option, pour envoyer des données vers l’extérieur si besoin. Si vous ne le souhaitez pas, passez en commentaire la ligne 435 :
// SendToDomoticz();
Si vous l’utilisez, mettez à jour les paramètres de votre serveur Domoticz autour de la ligne 90.
Dans un souci de simplification, j’ai limité à l’essentiel les fonctionnalités. Les personnes à l’aise dans la programmation peuvent rajouter d’autres Triacs ou relais. De même, il est possible de rajouter une sonde de courant de 20A pour mesurer et afficher le courant envoyé au chauffe-eau.
Page Web
Le code installé sur l’ESP32 comprend un serveur Web qui permet d’afficher sur une page, les différentes mesures ainsi que les courbes de la tension et du courant durant une période de 20 ms. Il suffit de rentrer l’adresse IP de l’ESP32 dans le champ d’adresse de votre navigateur web.
En mode « Auto », le système ajuste l’injection vers le chauffe-eau afin de ne plus envoyer de la surproduction vers le monde extérieur. On peut forcer, à la main, d’autres niveaux d’injection.
Il est possible d’afficher à distance ces mêmes informations sur un petit écran défini ici: https://f1atb.fr/affichage-a-distance-consommation-ou-surproduction-electrique/
Montage
Dans une boite d’électricien, on installe :
- La carte ESP32 (Development Board 2*19 pins) chez Aliexpress ou plus rapidement une carte 2*16 broches ESP 32 Wroom chez uPesy.fr)
- Une alimentation 230V – 5V 1A DC pour l’ESP32
- Un transformateur basse tension 230V – 6V AC pour mesurer la tension (Aliexpress)
- Un gradateur 16A ou 24A de RobotDyn suivant la puissance du chauffe-eau (Aliexpress)
- Sonde de courant 100A/50ma (Aliexpress)
- Résistances R1 et R2 : entre 470 et 820 Ω 1/4 ou 1/8W
- R3 : 24 Ω 1/4W
- R4 : 24000 Ω 1/4 ou 1/8 W (À ajuster suivant transformateur)
- R5 : 4700 Ω 1/4 ou 1/8W (À ajuster suivant transformateur)
- R6 et R7 : 4700 Ω 1/4 ou 1/8W
- Condensateur C1 : 10μF ou plus en 12V ou plus
- Condensateur C2 : 220μF à 470μF en 12V ou plus
- 2 LEDS en face avant
- Du fil de câblage et une plaque à trou pour le montage
- Un fusible (option) pour protéger l’arrivée 230V
Raccordé à cette boite, on a la sonde de courant à placer autour du fil de phase du secteur à mesurer. Relier le blindage à la masse pour éviter de capter du bruit électrique.
Dans le schéma ci-dessous, on garde le contacteur Jour/Nuit et on installe en parallèle le routeur.
Remarque: le routeur ne coupe pas le neutre mais la phase uniquement.
Code Source
L’ensemble du code est écrit en utilisant l’IDE Arduino. Il est injecté dans un premier temps par la liaison série, puis une fois en place, on peut le modifier si besoin par le WIFI comme décrit ici. Il faut dans les préférences de l’IDE, faire appel au gestionnaire de carte de « Espressif » qui développe l’ESP32. Allez dans Fichier / Préférences et mettez l’adresse : https://dl.espressif.com/dl/package_esp32_index.json
Le code source est composé de 3 fichiers installés dans le même dossier :
– le fichier principal SolarRouter_v2.ino
– le fichier PageWebb.cpp qui contient le code HTML et Javascript de la page web
– le fichier PageWeb.h de déclaration
Le code source est disponible ici:
Dezipper l’ensemble et ouvrez dans l’IDE Arduino (version 2.xx) le fichier SolarRouter_v2.01.ino.
Vérifiez que vous avez les bibliothèques installées sur votre IDE Arduino :
– RemoteDebug
– NTPClient
Pour la compilation du fichier SolarRouter_v2.01.ino, veuillez sélectionner la carte ESP32 Dev Module. Avec certaines cartes, si le téléversement du code dans l’ESP32 ne se fait pas, il faut presser sur le bouton boot au début de la tentative de téléversement.
Personnalisation
Il est nécessaire de modifier les premières lignes du code afin de donner à l’ESP32 les caractéristiques de votre réseau ethernet à la maison.
//WIFI
const char* ssid = "nom_du_reseau_wifi"; //Put here your WIFI SSID
const char* password = "12345678"; //Put here the WIFI password
// Set your Static IP address
IPAddress local_IP(192, 168, 0, 208);
// Set your Gateway IP address
IPAddress gateway(192, 168, 0, 254);
IPAddress subnet(255, 255, 255, 0);
IPAddress primaryDNS(8, 8, 8, 8); //optional
IPAddress secondaryDNS(8, 8, 4, 4); //optional
À la première ligne, mettez le nom de votre réseau Wifi auquel l’ESP32 devra se connecter.
À la deuxième ligne, mettez le mot de passe de votre réseau Wifi.
Il faut ensuite donner une adresse IP (IPAddress local_IP) à votre ESP32 (c’est comme un numéro de téléphone). En général, les box internet ont un champ d’adresses dynamiques (qui peuvent changer à tout moment) qu’elles attribuent lorsque que quelqu’un se connecte au WIFI. Si c’est votre smartphone, c’est parfait, vous ne cherchez pas à communiquer avec lui. Pour l’ESP, il faut lui attribuer une adresse fixe. En allant faire un tour auprès de votre box à la rubrique réseau / DHCP, vous trouverez le champ des adresses dynamiques. Par exemple, souvent les Livebox d’Orange attribuent des adresses dynamiques DHCP entre 192.168.1.10 et 192.168.1.150. Il vous reste alors un champ libre pour attribuer vos propres adresses entre 192.168.1.151 et 192.168.1.253. Souvent les .254 et .255 sont réservés à autre chose. Vous pouvez ainsi donner comme adresse 192.168.1.200 à l’ESP32 si aucune autre machine sur le réseau occupe déjà cette adresse.
IPAddress gateway correspond à l’adresse IP de votre box. C’est elle qui fait la passerelle (gateway) avec le monde extérieur. Chez Orange, c’est en général 192.168.1.1. Chez Free, c’est plutôt 192.168.0.254. Les trois premiers chiffres 192.168.0 ou 192.168.1 doivent être les mêmes pour la box et votre ESP. C’est ce qui est traduit par le masque subnet (255,255,255,0) qui dit que les 3 premiers chiffres sont fixes sur le réseau et le dernier peut changer d’une machine à l’autre.
Toutes ces adresses sont au format IPV4, ancien format bien pratique mais qui sature et est en cours de remplacement par IPV6. Si vous avez un PC sous windows, tapez cmd dans le moteur de recherche en bas, puis dans la page à fond noir vous tapez ipconfig . Vous en saurez un peu plus sur votre réseau et l’adresse IP de votre PC
Les primaryDNS et secondaryDNS correspondent aux « Domain Name Server » ceux qui veut dire les serveurs d’annuaires. Quand vous tapez une adresse http://ToTo.com, ces serveurs convertissent le nom en adresse IP, seule compréhensible par les machines. Ainsi votre ESP quand il doit chercher l’heure chez « fr.pool.ntp.org », il peut trouver un serveur. Ne les changé pas.
Forçage de nuit
Le code comprend un forçage de nuit de 23h à 4h. Si vous voulez le retirer, passez le en commentaire en mettant en début de ligne //
//if (hour >= 23 || hour <= 4) { //Force water Heater ....
// ModeHeater = 5;
// retard = 0;
// retardF = 0;
// }
// if (LastHour == 4 && hour == 5) { ModeHeater = 0; } // Back to Automatic mode
Bugs Soft
Attention, si vous n’arrivez pas à communiquer entre votre PC et l’ESP32, c’est qu’il vous manque le driver pour l’interface USB. En général, c’est le CP2102 qui se trouve sur la carte ESP32. De nombreux Tutos sur internet expliquent comment l’installer. Exemple: https://techexplorations.com/guides/esp32/begin/cp21xxx/
L’IDE Arduino va vous demander un mot de passe lors de la compilation. Répondez n’importe quoi, 1 lettre minimum.
Parfois avec l’IDE Arduino en fin de transfert, l’icone reste jaune et vous n’avez plus la main. Fermez l’IDE et le relancer.
Sur certaines configurations, lors de la compilation, il y a une erreur de librairie inexistante :…..include <hwcrypto/sha.h>
Avec un editeur de texte, ouvrez le fichier dans vos bibliothèques Arduino C:\Users\Utilisateur\Documents\Arduino\libraries\RemoteDebug\src\utility\Websockets.cpp
Le début de l’adresse peut changer suivant l’utilisateur. Retrouvez le dossier Arduino pour localiser le fichier dans les sous-dossiers.
A la ligne 42, remplacez :
#include <hwcrypto/sha.h>
par
#include <esp32/sha.h>
Ne me demandez pas pourquoi, sur mon PC de bureau, je n’ai pas besoin de faire cette modification, sur mon PC portable, j’ai besoin.
Diagramme fonctionnel
Le gradateur avec le signal Zero Crossing toute les 10ms, permet de synchroniser l’ensemble en activant une interruption sur l’ESP32. Un timer fourni une interruption interne toute les 100μs permettant de générer un retard de 0 à 10ms par pas de 100μs pour déclencher l’ouverture du triac à l’instant défini par le logiciel.
Toutes les 40ms et durant 20ms, 100 valeurs de tensions et 100 valeurs de courants sont prélevés et stockés. Ensuite, les calculs de puissance sont effectués et peuvent être envoyés au client web qui les demande.
Heure de la douche
Maintenant que vous avez je l’espère bien compris le fonctionnement, vous remarquerez qu’il faut prendre sa douche le matin les jours de grand soleil afin de profiter de la surproduction à midi.
Exemple de routage
Dans cet exemple, il y a une légère surproduction. L’ouverture du triac vers le chauffe-eau est de 76% du temps. Le système se régule pour avoir une puissance échangée avec le réseau public autour de 0 (ici -16W). Sur une durée de sinusoïde de 20 ms, on a des périodes en orange où l’on consomme (produit U*I >0) sur le réseau public et des périodes en vert (produit U*I<0) où l’on injecte sur le réseau. Le somme des 100 mesures du produit U*I sur la période de 20 ms donne un résultat proche de zéro (-16 W). Par contre, pour le calcul de la puissance apparente qui est le produit de la tension et du courant efficaces qui ne tient pas compte du signe (voir formules ci-dessus), on a une valeur importante (776 VA).
Cette courbe est chahutée pour 2 raisons :
– le triac n’est ouvert que 76% du temps. Dans une demi-période de 10 ms, on envoie du courant au chauffe-eau en dents de scie (voir courbe ci-dessus) ce qui se traduit à l’entrée de la maison par des phases de consommation et d’injection suivant la réponse des onduleurs. Avec un bilan de puissance active (W) proche de zéro
– nombre d’appareils (comme les chargeurs, les alimentations d’appareils électroniques.) ne consomment pas un courant sinusoïdal et cela ressort plus lorsqu’il n’y a pas une grosse charge résistive qui consomme.
Votre fournisseur d’électricité vous facture en fonction des W ou Wh et non pas sur le VA (puissance apparente).
Sécurité
En travaillant sur ce projet en 230V, vous acceptez d’assumer la responsabilité de votre propre sécurité et de prendre toutes les précautions nécessaires pour éviter les accidents électriques.
Responsabilité
Articles sur le photovoltaïque
- Routeur photovoltaïque V12 – Affichage et paramétrage
- Routeur Photovoltaïque – Raccordement à un chauffe-eau
- Routeur Photovoltaïque – Installation rapide du logiciel
- Routeur photovoltaïque piloté via MQTT
- Capteur SmartGateways / Siconia pour routeur photovoltaïque
- Routeur photovoltaïque – Modes de régulation
- Routeur photovoltaïque – Affichage et paramétrage
- Routeur photovoltaïque – Réalisation matérielle
- Réalisation d’un Routeur photovoltaïque Multi-Sources Multi-Modes et Modulaire
- Routeur photovoltaïque – Installation manuelle du logiciel
- Capteur Shelly Em™ – Shelly Pro Em™ pour routeur photovoltaïque
- Exemples Montage Routeur Photovoltaïque F1ATB
- Capteur Enphase – Envoy-S Metered™ pour routeur photovoltaïque
- Routeur photovoltaïque simple à réaliser
- Capteur UxIx2 ou UxIx3 pour routeur photovoltaïque
- Triacs gradateurs pour routeur photovoltaïque
- Capteur Linky pour routeur photovoltaïque
- Capteur UxI pour routeur photovoltaïque
- Programmation de l’ESP32 – Application au routeur Photovoltaïque
- Chauffer votre piscine avec l’excédent d’énergie Photovoltaïque
- U x I : Routeur Solaire pour gérer la surproduction photovoltaïque (DIY)
- Panneaux Photovoltaïques Intégrés Au Bâti (IAB) d’un abri voiture
- Réalisez un Routeur Solaire avec un Linky (DIY)
- Câblage de panneaux Photovoltaïques à des Micro-Onduleurs en Autoconsommation (DIY)
- Démarches Administratives pour le Photovoltaïque
- Affichage à distance consommation ou surproduction électrique
- Réalisez un Routeur Solaire pour gérer la surproduction
- Câblage de panneaux Photovoltaïques à un onduleur en Autoconsommation (DIY)
- Panneaux Photovoltaïques Intégrés Au Bâti (IAB)
- Routeur Solaire. Mesure de Puissance avec un ESP32
Bonjour,
Mêmes félicitations et bravos!
Pouvons-nous alimenter l’ESP32 par sa broche VIN en 7/8V d’après un régulateur de tension 78L08 installé derrière un pont de diode, et filtré, alimenté par un double enroulement du transfo 6V~ qui sert de sonde de tension? Double enroulement pour ne pas perturber l’enroulement qui sert de capteur.
Quand l’ESP 32 est alimentée sur sa broche VIN, pouvons nous utiliser le port COM par le micro USB sans risques pour Debug et téléversements?
Merci de votre avis. Jmarcusse
De mémoire, sur Vin d’un ESP32, on ne peut mettre que du 5V et pas du 8V.
Bonjour,
Tout d’abord merci et bravo pour votre travail et le partage.
Une question sur le gradateur, vous utilisez un système de détection du passage à zéro de la tension, alors que sur d’autres routeur on voit des SSR no zero crossing. Est-il possible d’avoir une explication sur ce type choix ?
Merci beaucoup
Thierry
SSR ou Triac, c’est assez similaire. Avec le Triac, on n’a pas à se soucier de l’instant de fermeture après l’avoir amorcé. Cela se fera au passage du courant par zéro. Avec le SSR (cela peut dépendre de la technologie utilisée), il faut commander l’arrêt au passage par zéro du courant afin d’éviter de la surchauffe.
Avec le module utilisé dans mon montage, j’ai un signal de passage par zéro très précis qui génère une interruption sur l’ESP32 pour décompter exactement le temps. Simultanément, l’ESP32 peut faire des calculs. Après l’interruption du passage par zéro, une interruption d’un timer interne permet de déclencher l’ordre vers le Triac au bon instant.
Ok pour le 7805 ald 7808.
Je tente l’alim de l’ESP par le second enroulement secondaire du transfo. Merci.
Bonjour André !
C’est une invention redoutable de simplicité et efficacité.
Merci pour ce partage.
Auriez-vous une photo de détail pour l’implantation de l’ESP sur la plaque d’expérimentation avec les composants de mesure ?
Novice, c’est cette partie qui effraye un peu à réaliser.
Encore merci pour votre réponse
Non malheureusement, je n’ai pas plus de photos, mais regardez bien le site web et les 2 vidéos sur Youtube qui explique le système.
Bonsoir André,
Le matériel est commandé au pays du soleil levant.
Une implantation sera faite sur un breadboard proto pour test, puis je tenterai du définitif soudé pour mettre en œuvre votre schéma.
Puis-je vous demander l’explication du protocole de mesure et ajustage des coefficients kV et kI ? Je dispose du linky et d’un voltmètre.
Un grand merci par avance pour votre temps et patience
kV et kI permettent d’ajuster les valeurs de sortie en Volt et Ampère. Puis par calcul la puissance. Suivant le transformateur servant à la mesure de tension, il peut y avoir des ajustements à faire. Commencer par mesurer avec un voltmètre la tension secteur de 230V environ. Par exemple, si la valeur affichée par le montage est 10% en dessous de votre mesure, augmentez la valeur de kV de 10%. Pour le courant, si vous n’avez pas de pince ampèremétrique, utilisez le Linky qui affiche la puissance apparente de VA. Comparez avec la valeur donnée par le système et augmentez ou diminuez en conséquence la valeur de kI.
MERCI
j ai trouvé le problème , la sonde avait une diode , mais je ne sais pas quel paramètre régler,
pour U ET I ca va mais les autres ,
retard , c’est quoi ,le cos phi en quelle unité ?
car le routeur met en route et le triac mais ne s arrête pas mais je vois l inversion des courbes quand je retourne la pince A ?
merci à vous
A part le coefficient de cadrage de U et I, il n’y a rien à régler.
Il est normal qu’en tournant la pince de 180 degré, la phase du courant s’inverse.
Cos Phi est le rapport entre la puissance Active et la puissance apparente.
Voir l’explication ici https://www.youtube.com/watch?v=m0qxJGlqG4s
Il n’y a pas d’unité.
Le Triac ne s’arrête pas, c’est normal si la pince est dans le mauvais sens, le calcul montre que toute votre puissance consommée, est en fait de la puissance en surproduction. D’où l’ouverture du Triac.
Comme en ce moment, il n’y a pas de soleil, impossible de tester la surproduction. Sauf si vous trichez en modifiant le logiciel en rajoutant une valeur de puissance négative qui fera croire au calcul de la surproduction. Mais avec la pince dans le bon sens.
j aimerai bien régler le point milieu de la sinusoïde , car il y a plus de + que de moins , du coup j ai enlevé le petit condensateur sans succès ,
je ne sais pas comment arrêter » le chauffe eau » à 100% sur la page html , ca revient toujours à 100% ,
peut être que cela est dut au fluctuations des 50 hz 1 OU 2 pour cent ou de la tension irrégulière de 240 V 0 255 V et de la forme de la sinusoïde ?
j ai essayé de régler le délai mais cela ne change rien …
serait il facile de faire un système comparateur avec deux sondes courant , car ici c ‘est l enfer pour la stabilité du réseau 😉
merci à vous
B
Merci pour la réponse
je pense que mes problèmes viennent de l instabilité du courant edf , https://zupimages.net/viewer.php?id=23/03/828o.png
Bien sur , j inverse la pince pour simuler une production , ce que je peux dire , c est que le triac n est pas synchronisé aux vues des 25 50 75 100 pour cent ?
Mon montage est conforme avec des courbes de courant tension plus que déformés , sans doute dues au moteurs diesel EDF , mon montage fonctionne de façon plus que binaire , cad , avec un peu aléatoire en production / consommation .
le triac ne se d’éclanche pas correctement, les tension positives et négatives ne sont pas équivalentes, la fréquence varie n est pas stable ! le triac a sans doute du mal a se caler sur le ZC et la fréquence interne du contrôleur ? Que faire ? peut on se caller uniquement sur le ZC ?
MERCI
Cdlt B
Bonjour le programme pour un NANO (possible de me dire ou est le problème)
/*
Routeur solaire V2.01
******************
Mesure de la tension, du courant et de la puissance
En cas de surproduction d’électricité solaire, activer un Triac et un relais (en option)
pour connecter une charge résistive capable d’absorber la surproduction.
Les détails et le câblage matériel sont disponibles dans :
https://f1atb.fr dans la section Domotique / Domotique
Exercice 2020 – Novembre 2022
Licence publique générale GNU v3.0
*/
// PINS – GPIO
const int AnalogIn0 = 7; // 35 – ADC7
const int AnalogIn1 = 4; // 32 – ADC4
const int AnalogIn2 = 5; // 33 – ADC5
const int zeroCross = 11; // 23 – MOSI
const int pulseTriac = 6; // 22 – SCL
const int LedYellow = 12; // 18 – MISO
const int LedGreen = 13; // 19 – SCK
//const int OptionalRelay = D10; // 5 – SS
// VARIABLES
int value0;
int volt[100];
int amp[100];
int sinus[100]; // Table des sinus
int ModeHeater = 0;
int LastHour = -1; // Dernière heure
float Uef; // Voltage
float Ief; // Courrant
float PVA; // Puissance en AV
float PW; // Puissance en watts heure
float PowerFactor; // Facteur de puissance
float kV = 0.2083; // Coefficient d’étalonnage de la tension. À régler
float kI = 0.0642; // Coefficient d’étalonnage du courant. A ajuster
float Wh = 0; // Watt*heure
float THDv; // Distorsion harmonique totale, y compris le bruit de la tension
float THDi; // Distorsion harmonique totale, y compris le bruit du courant
float voltM[100]; // Valeur moyenne de la Tension
float ampM[100]; // Valeur moyenne de l’Amps
float retardF = 100; // Valeur flottante de retard(delay)
// Interruption, Courant à Zero Crossing du dispositif Triac
void IRAM_ATTR currentNull() {
if ((millis() – lastIT) > 2) { // pour éviter la détection de bugs pendant 2ms
delayTriac = 0; // Synchronisation temporelle toutes les 10 ms
lastIT = millis();
digitalWrite(pulseTriac, LOW); // Stop du Triac
phasePositive = !phasePositive;
if (phasePositive ){
Idx0 =(micros() % 20000) / 200; // Pour synchroniser l’intégration de tension et de curent court et les courbes à afficher
// To synchronise the voltage and curent short integration and the curves to display
}
}
}
// D’interruption de la Minuterie
void IRAM_ATTR onTimer() { // Interruption toutes les 100 microsecondes
delayTriac += 1;
if (delayTriac > retard && retard < 98) { // 100 pas en 10 ms
digitalWrite(pulseTriac, HIGH); // Activer le Triac
}
}
// LA PUISSANCE // POWER
//————————————–
void MeasurePower() {
int iStore;
value0 = analogRead(AnalogIn0); // Valeur moyenne. Doit être de 3,3v / 2 = 1,65v
unsigned long MeasureMillis = millis();
while (millis() – MeasureMillis < 21) { // Lire les valeurs en continu pendant 20 ms. Une boucle dure environ 150 microsecondes
iStore = ((micros() % 20000) / 200+100 – Idx0) % 100; // Nous avons besoin de plus de résultats pendant 20 ms pour remplir les tableaux de 100 échantillons
volt[iStore] = analogRead(AnalogIn1) – value0;
amp[iStore] = analogRead(AnalogIn2) – value0;
}
}
void ComputePower() {
float V;
float V1 = 0;
float V2 = 0;
float Uef2 = 0;
float I;
float I1 = 0;
float I2 = 0;
float Ief2 = 0;
Uef = 0;
Ief = 0;
PW = 0;
for (int i = 0; i = THDv && Uef > 0) {
THDv = floor(100 * sqrt(Uef2 – THDv) / Uef); // Distorsion harmonique totale + bruit pour la tension
} else {
THDv = 0;
}
THDi = 2 * (sq(I1 / 3000000) + sq(I2 / 3000000)); //(Niveau de fréquence fondementale actuelle 50 Hz)²
if (Ief2 >= THDi && Ief > 0) {
THDi = floor(100 * sqrt(Ief2 – THDi) / Ief); // Distorsion harmonique totale + bruit pour le courant
} else {
THDi = 0;
}
}
void Overproduction() {
if (ModeHeater == 0) { // Chauffe-eau / Chauffe-Eau automatique
// Surproduction
retardF = retardF + PW / 200; // Diminuer/augmenter le délai pour augmenter/diminuer la conduction Triac
if (retardF 100) { retardF = 100; }
retard = int(retardF); // valeur entière utilisée pour conduire le triac
}
// Relais optionnel. Pour éviter les oscillations, la différence entre les 2 seuils On et Off
// Le triac DOIT être plus grande que la puissance consommée par l’appareil
if (PW 0) { // Éteindre le relais // Switch Off
digitalWrite(OptionalRelay, LOW);
}
}
void Read_Hour() {
// Mise à jour de l’heure // Time Update / de l’heure
temps.update();
Serial.println(temps.getFormattedTime());
int hour = int(temps.getHours());
if (LastHour != 0 && hour == 0) { Wh = 0; } // Maitre les Watt heure à 0 une fois par jour
if (hour >= 23 || hour <= 4) { // Forcer le Chauffe-eau pendant la nuit sur On. Valeurs OK pour l’été et l’hiver même si il y a une heure d’erreur
ModeHeater = 5;
retard = 0;
retardF = 0;
}
if (LastHour == 4 && hour == 5) { ModeHeater = 0; } // Retour au mode automatique // Back to Automatic mode
LastHour = hour;
}
// SETUP
//*******
void setup() {
pinMode(LedYellow, OUTPUT);
pinMode(LedGreen, OUTPUT);
pinMode(zeroCross, INPUT);
pinMode(pulseTriac, OUTPUT);
pinMode(OptionalRelay, OUTPUT);
digitalWrite(LedYellow, LOW);
digitalWrite(LedGreen, LOW);
digitalWrite(pulseTriac, LOW); // Stop Triac
digitalWrite(OptionalRelay, LOW); // Stop Relay
Serial.begin(115200);
Serial.println("Booting");
for (int i = 0; i < 100; i++) { // Réinitialiser les mesures de la table
voltM[i] = 0;
ampM[i] = 0;
}
// Diverses minuteries // Various Timers
previousComputeMillis = millis();
previousBlinkMillis = millis();
previousWifiMillis = millis();
attachInterrupt(zeroCross, currentNull, RISING);
//Hardware timer
timer = timerBegin(0, 80, true); // Diviseur Horloge,une micro seconde // Clock Divider, 1 micro second Tick
timerAttachInterrupt(timer, &onTimer, true);
timerAlarmWrite(timer, 100, true); // Interruption toutes les 100 microsecondes // Interrupt every 100 Ticks or microsecond
timerAlarmEnable(timer);
// Table des sinus, pour accélérer le calcul du THD // Table of Sinus, to speed up THD computation
for (int angle = 0; angle = 40) {
previousComputeMillis = millis();
MeasurePower();
ComputePower();
Overproduction();
}
if (millis() – previousBlinkMillis >= 2000) {
Blink = !Blink;
if (Blink) {
previousBlinkMillis = millis() – 1950;
} else {
previousBlinkMillis = millis();
}
if (PW >= 0) {
digitalWrite(LedYellow, Blink);
digitalWrite(LedGreen, LOW);
} else {
digitalWrite(LedYellow, LOW);
digitalWrite(LedGreen, Blink);
}
Debug.println(« V25: » + String(voltM[25]));
Debug.println(« Idx0: » + String(Idx0));
}
Read_Hour();
Debug.println(« Power: » + String(PW));
Serial.println(« Power: » + String(PW));
if (voltM[25] <0){ // Il devrait être positif pour l’affichage.
phasePositive = !phasePositive;
}
SendToDomoticz(); // Il est facultatif pour informer le système domotique.
}
}
ArduinoOTA
.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH)
type = "sketch";
else // U_SPIFFS
type = "filesystem";
// NOTE: si la mise à jour de SPIFFS ce serar l’endroit pour démonter SPIFFS en utilisant SPIFFS.a la fin ()
Debug.println("Start updating " + type);
})
.onEnd([]() {
Debug.println("\nEnd");
})
.onProgress([](unsigned int progress, unsigned int total) {
Debug.printf("Progress: %u%%\r", (progress / (total / 100)));
})
.onError([](ota_error_t error) {
Debug.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) Debug.println("Auth Failed");
else if (error == OTA_BEGIN_ERROR) Debug.println("Begin Failed");
else if (error == OTA_CONNECT_ERROR) Debug.println("Connect Failed");
else if (error == OTA_RECEIVE_ERROR) Debug.println("Receive Failed");
else if (error == OTA_END_ERROR) Debug.println("End Failed");
});
ArduinoOTA.begin();
}
Merci pour une réponse
En premier le Nano ne saura pas capable en 20ms de faire les 100 mesures de tension et les 100 mesures de courant dans Measurepower. Hier, j’ai utilisé le Nano pour acqurir des valeurs analogiques. Il me fallait 90uS pour une valeur.Il faut descendre à 50 points de mesure.
Après il faut revoir les interruptions. Le timer de 100uS est je pense trop rapide, il faut peut etre tourné autour de 200uS.
Cdlt
J’ai supprimé la partie wifi
merci
Merci
le logiciel me dit qu’il il y a un problème : void IRAM_ATTR currentNull()
sa fais partie d’une commende du wifi ?????
IRAM_ATTR c’est lié aux interruptions.
Bonjour et merci pour votre partage.
Mes connaissances en électronique étant limitées, pourriez-vous me donner un modèle précis pour l’ESP32, j’ai suivi votre lien vers aliexpress mais cela mène à plusieurs modèle. Le seul critère serait 2×19 pins?
Merci
Allez par exemple chez ce vendeur sur AliExpress et prenez le modèle ESP32 38P
https://fr.aliexpress.com/item/32959541446.html
Merci beaucoup André
Je vais reproduire votre schéma à la virgule près. Si j’ai un soucis je n’hésiterai pas à revenir vers vous. Ma lumière commence à s’allumer par rapport à ce monde obscure de l’électronique.
Merci
je vais acheté un ESP32
Bonjour, j’essaye désespérément de programmer mon esp32 dans l’ide d’Arduino Ver 2.0.3.
Je rencontre plusieurs messages d’erreur lors de la compilation:
C:\Users\chris\OneDrive\Bureau\SolarRouter_v2.01\SolarRouter_v2.01\SolarRouter_v2.01.ino: In function ‘void setup()’:
C:\Users\chris\OneDrive\Bureau\SolarRouter_v2.01\SolarRouter_v2.01\SolarRouter_v2.01.ino:378:47: warning: iteration 100u invokes undefined behavior [-Waggressive-loop-optimizations]
sinus[angle] = int(30000 * sin(angle_rad));
^
C:\Users\chris\OneDrive\Bureau\SolarRouter_v2.01\SolarRouter_v2.01\SolarRouter_v2.01.ino:375:29: note: containing loop
for (int angle = 0; angle <= 100; angle++)
^
c:\Arduino IDE\libraries\RemoteDebug-master\src\RemoteDebug.cpp: In member function 'void RemoteDebug::processCommand()':
c:\Arduino IDE\libraries\RemoteDebug-master\src\RemoteDebug.cpp:1520:39: error: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'uint32_t {aka unsigned int}' [-Werror=format=]
DebugWS.printf("$app:M:%lu:\n", free);
^
c:\Arduino IDE\libraries\RemoteDebug-master\src\RemoteDebug.cpp: In member function 'void RemoteDebug::wsSendInfo()':
c:\Arduino IDE\libraries\RemoteDebug-master\src\RemoteDebug.cpp:1931:117: error: format '%lu' expects argument of type 'long unsigned int', but argument 6 has type 'uint32_t {aka unsigned int}' [-Werror=format=]
DebugWS.printf("$app:V:%s:%s:%c:%lu:%c:N\n", version.c_str(), board.c_str(), features, getFreeMemory(), dbgEnabled);
^
c:\Arduino IDE\libraries\RemoteDebug-master\src\RemoteDebugWS.cpp: In function 'void webSocketEvent(uint8_t, WStype_t, uint8_t*, size_t)':
c:\Arduino IDE\libraries\RemoteDebug-master\src\RemoteDebugWS.cpp:233:6: warning: unused variable 'blk_count' [-Wunused-variable]
int blk_count = 0;
^
c:\Arduino IDE\libraries\RemoteDebug-master\src\RemoteDebugWS.cpp:234:7: warning: unused variable 'ipaddr' [-Wunused-variable]
char ipaddr[26];
^
cc1plus.exe: some warnings being treated as errors
exit status 1
Compilation error: exit status 1
J'ai testé avec plusieurs librairies différentes pour RemoteDebug mais sans succès…. Un coup de main est le bienvenu s'il vous plait.
Merci
Je ne comprend pas l’avalanche d’erreurs de compilation.
Pour la compilation du fichier SolarRouter_v2.01.ino, veuillez sélectionner la carte ESP32 Dev Module.
Je viens par acquit de conscience, de refaire l’ensemble de l’exercice.
J’ai téléchargé le source sur mon site, dezippé le fichier, ouvert l’IDE avec le fichier .ino, sélectionnez la carte ESP32 DEV Module et lancé la compilation. Tout est OK.
Retélécharger le zip pour re-essayer.
J’ai un peu avancé:
c:\Arduino IDE\libraries\RemoteDebug-master\src\utility\WebSockets.cpp:42:10: fatal error: hwcrypto/sha.h: No such file or directory
#include
^~~~~~~~~~~~~~~~
compilation terminated.
exit status 1
Compilation error: exit status 1
merci de votre aide
Comme vous semblez avoir des difficultés avec Remote-Debug et je ne comprends pas pourquoi, essayez un exemple simple comme ici : https://f1atb.fr/index.php/fr/2022/05/27/programmation-de-lesp32-par-le-wifi/ ou tout autre exemple trouvé sur le web.
Bonjour, le test que vous me proposez est concluant. cela fonctionne. Jai désinstallé Arduino- ide ainsi que mes librairies puis nettoyé la base de registre de Windows. Je suis reparti avec une nouvelle installation « propre » avec votre lien pour les cartes esp32 mais a nouveau l’utilisation de la bibliothèque Remote-Debug pose toujours le même problème et renvoi la même erreur.
J’en ai testé plusieurs versions sans succès; quelle version utilisez vous ?
Merci
Bonjour André, j’ai fini par trouvé une solution…
Comme écrit plus haut dans les messages, J’ai modifié le Websockets.cc .
J’ai remplacé « hwcrypto/sha.h » par « esp32/sha.h » avec visual code studio et malgré un message d’erreur me conseillant d’utiliser « sha_parallel_engine.h » plutôt que « esp32/sha.h » cela fonctionne.
C’est étrange car visiblement je ne suis pas le seul sur la toile à rencontrer cette difficulté.
J’espère que mon message pourra aider ceux qui rencontreraient la même difficulté.
Encore merci et bonne journée je vais chercher à configurer une deuxième sortie à triac, modulable comme la première….
Bonjour, je suis F6FXW (ex F1DKB), et viens de découvrir avec très grand plaisir vos publications.
Je ne suis plus actif, mais ai par le passé beaucoup pratiqué la CW sur 15m.
Je suis resté passionné d’électronique, et prend beaucoup de plaisir à « bidouiller » quelques montages à bas d’Arduino.
Je vous ai trouvé, car je commence à m’intéresser de plus près à l’autoconsommation à partir de photovoltaïque.
Je me régale à lire vos documents. J’ai quelques connaissances, ayant par le passé travaillé dans un service d’électronique de puissance où la réinjection sur le réseau nous était familière.
Dans l’immédiat, je cherche à avoir des infos sur les réelles contraintes administratives liées à l’auto-consommation. Sachant que j’envisagerais la mise en œuvre d’un ensemble de moins de 3kWc installé sur la terrasse de ma maison (coté Sud à ~ 2.5m du sol)
J’imagine bien que vous n’avez guère le temps de discuter avec « tout le monde » mais si vous voulez bien me transmettre votre email, ce serait avec plaisir que je vous transmettrai les résultats de mes futurs essais dans le domaine de l’autoconsommation.
(Dans le registre HAM Radio je vois bien que je n’aurais rien à vous apporter 🙂
Bien cordialement,
Michel, F6FXW avec toutes mes 73.
Merci pour votre super travail de pédagogie.
Après les quelques aléas de librairies manquantes, et autre diviseur de tension que j’avais mal calculé, tout fonctionne parfaitement.
Reste plus que le soleil cet été.
Bonjour
vous avez réalisé un super travail, avec un soft très complet, qui m’a permis d’apprendre beaucoup de choses sur l’ESP32.
Je l’ai adapté pour l’utiliser avec un variateur de puissance avec contrôle numérique, comme détaillé ici;
https://www.pierrox.net/wordpress/2019/03/04/optimisation-photovoltaique-3-controle-numerique-du-variateur-de-puissance/
Et au lieu de faire chauffer le chauffe eau toutes les nuits jusqu’à ce que le thermostat du chauffe eau atteigne sa consigne, j’ai ajouté un compteur dans le programme qui cumule le temps de chauffe x % de puissance du régulateur. Ce compteur est le seuil mini à atteindre par jour, grâce l’énergie redirigée vers le chauffe eau, + énergie Enedis si besoin, afin de satisfaire le besoin mini d’eau chaude de la journée. Cela laisse l’opportunité d’exploiter le surplus solaire du lendemain au lieu de tout chauffer grâce à Enedis dans la nuit précédente.
J’ai une question: dans le soft, dans void IRAM_ATTR currentNull(), je ne comprends pas l’utilité de :
phasePositive = !phasePositive;
if (phasePositive ){
Idx0 =(micros() % 20000) / 200; // To synchronise the voltage and curent short integration and the curves to display .
Avec ces lignes, les mesures U et I sont erratiques; Lorsque je supprime ces lignes, les mesures sont stables et pertinentes. Pouvez vous m’expliquer a quoi servent ces lignes si vous avez le temps svp?
Je pourrai mettre a disposition ma version du soft si cela vous intéresse.
Merci pour votre site et vos partages
Laurent
Très bien votre réalisation. J’ai regardé le SCR que vous avez utilisé, il fonctionne sur le même principe que le Triac que j’ai utilisé en détectant le passage par zéro et découpant le signal à chaque demi période de 10ms. Je comprends pas complètement comment vous vous êtes interfacé. Je suppose que vous avez fait sauter la partie Wifi avec l’ESP8266.
Pour avoir une image stable à l’écran qui commence par une sinusoïde croissante à gauche, il faut se synchroniser à 20ms. Hors le signal zéro crossing sort toutes les 10ms. Vous ne savez pas si derrière la tension va monter ou descendre. En analysant le signe de la tension 5ms après le zéro crossing vous voyez si votre tension est positive ou négative. Ainsi vous ajustez la phase de votre système pour démarrer les courbes toujours sur du positif.
J’utilise un ESP32, avec votre soft, donc pas besoin d’interface avec un autre ESP.
Le SCR que j’utilise a besoin d’une impulsion pour son activation, à chaque demi période. Le courant reste ensuite passant jusqu’au prochain zéro crossing.
Merci pour l’explication.
Cela ne devrait pas avoir d’impact sur les calculs de mesure. Je vais approfondir mes recherches
Bonjour Laurent,
J’ai apprécié la description de votre réalisation, basé sur le projet d’André.
Je viens de réaliser le montage qui fonctionne bien, j’aimerai rajouter comme vous le seuil de chauffe mini à atteindre, et ne pas charger à fond le cumulus, pour laisser de la place pour le « probable » soleil du lendemain!
Pouvez-vous me transmettre votre programme? Je suis aussi sur ESP32.
Bien cordialement. JMarcusse
Bonjour
j’ai mis les fichiers sous le lien
https://drive.google.com/file/d/1sZjfvcpm1jrx8-GrxWCehSIF4YiTvPou/view?usp=sharing
car je ne peux pas joindre le fichier dans cette réponse
Rechercher « CumulPourcentChauffeCEmini » dans le programme et dans pageweb.cpp, et adapter ces lignes à votre programme.
La valeur du cumul de chauffe s’affiche aussi dans la page web , d’ou la modif de pageweb.cpp
Cordialement
Laurent
Bonjour,
Merci pour le partage qui me permet d’avoir une construction que je maitriserai en cas de panne.
J’ai identifier tous les composants et la partie hardware ne me pose pas de problème.
Pour les LED j’ai trouvé en 2 V 20 mA. ça passe dans le circuit?
Là ou je suis plus réservé c’est la programmation que je ne maitrise pas du tout.
Et il possible d’avoir un tuto simple pour télécharger le programme abouti dans l’ESP32.
Sans ça, je ne sais pas si je me lance.
Espérant votre aide.
Cordialement.
Serge
Pour les LED, pas de souci. La tension d’une LED n’est pas très importante, il faut surtout limiter le courant max avec une résistance en série.
Pour l’ESP32, j’ai une page qui explique un peu : https://f1atb.fr/index.php/fr/2022/05/27/programmation-de-lesp32-par-le-wifi/.Allez également sur Youtube, faite une recherche « ESP32 Arduino ». De nombreux tuto existent. Il faut commencer par des programmes simples pour mieux maitriser la bête. Il y a de nombreux exemples dans l’IDE Arduino, une fois que vous avez introduit la carte ESP32. Ce micro-contrôleur est une merveille pour les applications de domotique.
Bonjour,
Je vais ma lancer dans la programmation et ai commandé les composants.
Pour les résistances, condo et led, je cherche encore car pour le prix des composants le port est x4. nous devrions monter une coopérative. Si vous avez des adresses. Je suis de l’Aude (11).
J’ai une question pour les diodes. OK pour la tension, je vais prendre la 2 V mais pour le courant? La résistance de 820 est elle adaptée avec 20 mA?
Il doit exister des LED équiper pour montage en percement de cloison (boite plexo) mais je n’arrive pas à trouver. Si vous connaissez le nom générique pour une recherche.
Pour les composants, je vais chez différents fournisseurs :
Conrad en France
Reichelt en Allemagne, très bien fourni
Ebay : beaucoup de personnes en France font de l’import-export depuis la chine dans leur garage et vous vendent au prix chinois *2 ou *3 mais c’est encore interessant et rapide
Aliexpress en Chine. Très bas prix mais faut pas être pressé.
Pour les Led, vous percez au diamètre de la Led et une goutte de colle et c’est bon. Sans cela chez Reichlet vous trouvez la Led + support+résistance intégrée pour 3€.
L’ESP32 sort du 3.3V. Avec une LED de 2V vous aurez (3.3-2)/820=1.6mA . En fait le courant sera supérieur car 2V c’est avec 20mA de courant. En fait vous pouvez baisser la résistance jusqu’à 220 ohm.
Bonjour, étant très débutant dans la programmation , je n’ai pas compris comment incorporer les trois fichiers du code source. Pour le fichier INO , pas de problème mais les deux suivant , comment les utiliser??? Merci pour un coup de main.
Mettez les 3 fichiers dans le même dossier. Cliquez sur le .ino. Le fichier apparaitra dans l’IDE Arduino. Les 2 autres fichiers apparaissent automatiquement dans 2 autres onglets en haut de page.
Merci beaucoup pour votre réponse. En fait je n’avais pas vu de près mon écran. Mais j’ai un problème de compilation qui s’arrete include NTPClient.h qui me dit qu’il ne trouve pas le chemin . ( j’ai pensé que c’était a cause des fichiers manquant)
Donc là je ne sais pas ce qu’il manque.