Réalisez un Routeur Solaire pour gérer la surproduction
Version V2
Remplacé par la version V3.04_UxI

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/index.php/fr/2023/02/09/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
- 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 André,
félicitations pour vos connaissances. j ai décidé de construire votre routeur. J ai un pb. La tension mesurée U et affichée sur l’interface web n’est pas stable. Au démarrage, elle est de 290V puis diminue (au fur et a mesure du rafraichissement de lécran) jusqu’à 75V environ).
avez vous une idée de l origine du PB?
Quelles sont les PIN sur l ESP32 non utilisées qui doivent être reliées au GND?
merci pour votre réponse
Je ne comprends pas pourquoi vous avez une chute de tension.
J’espère que votre transformateur ne sort pas trop de tension et que l’on dépasse la plage 0v à 3.3V en entrée des GPIO
Il n’y a pas de PINS/GPIO à mettre à la masse à part les Gnd (Ground).
Cdlt
merci André. l une des pins GND n était pas reliée avec les autres. depuis, U est stable. !
merci pour votre réponse rapide.
Très bonne information. Quelqu’un a déjà eu ce problème.
Et j’ai toujours le problème !!!! J’ai refait le montage en « volant » , remplacer l’esp32, le transfo … toujours la tension qui passe de 220V à 75V … vérifier toutes les GND … raccorder toutes les GND entre elles.
Malheureusement je dois faire une grossière erreur de câblage !!!!
Si Jean Francois peut donner un peu + d’info sur son PB …
Merci de votre aide
pat34
bonjour, j’ai eu ce problème. L’alimentation USB (à découpage) perturbe le fonctionnement du devboard si elle est proche. Je suis passé en alimentation linéaire (7805) et le problème a disparu.
Bonjour André,
Comme tout le monde je tiens à vous féliciter pour vos travaux et vos explications.
J’ai juste un blocage avec le bug que vous citez, je l’ai sur mon PC de bureau et mon portable.
Par contre je ne trouve pas cette fameuse ligne 42
#include
à remplacer par
#include
NB: je suis novice en Arduino et suis aussi un peu perdu dans tout ce qui est communication, comment trouver l’adresse IP de la carte ESP32?
Merci d’avance
La modification à apporter n’est pas dans le programme. Il faut pour trouver le fichier à modifier allez dans le dossier Documents\Arduino\libraries\RemoteDebug\src\utility\Websockets.cpp et modifier le fichier websockets.cpp
Pour l’adresse ip il faut aller dans votre box internet, voir la zone DHCP qui gère les adresses IP de votre réseau à la maison.
Si vous avez une box orange,vous pouvez mettre par exemple :
IPAddress local_IP(192, 168, 1,200);
// Set your Gateway IP address
IPAddress gateway(192, 168, 1,1);
Super ! merci pour votre réponse, je n’aurais jamais trouvé tout seul 🙂
bonne journée à vous
Bonjour André,
autre pb que je rencontre , l interface web indique que le routeur fonctionne en mode forcé à 100% en permanence. Lorsque je coche la boite de dialogue »AUTO », celle ci reste cochée jusqu’au rafraichissement de l’écran suivant , puis, revient automatiquement en mode 100%.
Pensez vous que cela puisse venir du fait que l’esp32 n’arrive pas à récupérer l’heure sur internet?
Dans Votre script , je n ai pas vu trace de la bibliothèque « Time.h ». Est-ce un oubli? faut il rajouter la ligne : #Include Time.h ??
(Je n ‘y connais pas grand chose en programmation)
bonjour Mr André
j’ai regardé la vidéo ainsi que la liste du matériel et je ne comprends pas où est passé la pei les résistances et les condensateur ? comment faire
Vous avez la liste des composants au chapitre Montage
https://f1atb.fr/index.php/fr/2022/12/03/realisez-un-routeur-solaire-pour-gerer-la-surproduction/
Bonjour André
Connaissez-vous ceci
https://fr.aliexpress.com/item/4000382480848.html?spm=a2g0o.order_list.order_list_main.4.24c95e5bLXY0Sw&gatewayAdapt=glo2fra
Cordialement
Non, je ne connais pas ce produit. Je ne comprends pas le fonctionnement. Comment récupère-t-on les données. Je ne vois aucune explication.
Cdlt
Bonjour,
Ce produit est utilisé par le Profs solaire pour son routeur solaire. j’ai un fichier pdf si vous voulez des infos.
Voir la vidéo du prof solaire pour une explication du fonctionnement.
J’ essai en vain de le faire fonctionner….
Je connais ce routeur basé sur une technologie similaire.
Cdlt
bonsoir
,’ai trouvé ça sur le nrt (Youtube)
https://www.youtube.com/watch?v=IwiVro6u89Q&list=PL1ajbYcl-hyfKT2c4rnTnyfmMDqsaN64f&index=8
Cordialement
JMM
Bonjour André.
Je possède un cumulus thermodynamique, et j’ai cru comprendre que le système étant différent d’un chauffe-eau classique, je ne pourrais pas bénéficier des avantages du routeur solaire. Vous me le confirmez ?
Merci 🙂
Oui, mon projet de routeur n’est pas adapté aux cumulus thermodynamique.
Cdlt
Quoiqu’il me semble que les cumulus thermodynamique possèdent une résistance chauffante d’appoint – peut-être pas tous ?
Bonsoir
Aie aie aie … mon signal n’est vraiment pas joli: https://photos.app.goo.gl/qUSPiCyYvwML8taM8
Je n’avais pas de résistance à 47kOhm du coup j’ai fait un pont avec 68kOhm et 10kOhm. Est ce que ca vient de la ? Pourquoi la sinusoïdale de la tension est elle écrasée comme ça ?
Bonjour,
Je me permets de répondre, pour laisser à André le temps de travailler sur la nouvelle version 😉
Manifestement, la tension aux bornes de R5 est trop élevée. Il suffit de baisser R5 ou augmenter R4 pour que la tension aux bornes de R5 ne dépasse pas 1V efficace (mesurée au multimètre).
Très juste, tension trop élévé.
Cdlt
Je suis arrivé à un beau courant de sortie de 0,9V (mesuré au multimètre) mais j’ai toujours des plats : https://photos.app.goo.gl/xa5zc1Tb7E25fhRq6
Faut il chercher à avoir mieux ?
vous pouvez encore améliorer. la mesure de 0.9v est probablement sous estimée car vous avez des résistances élevées. Cdlt André
Même en tombant à 0,6V, j’ai encore des plats : https://photos.app.goo.gl/zsM4ZHvFsy5MyrHh8
Pourtant ma tension intermédidiaire est 1,65V
Restez comme cela. Peut-être que votre transfo sature. Cela n’affectera pas le sens de transfert de l’énergie.
Damien, pour info, j’ai R5 = 27K. Je n’ai pas touché R4 (24K).
2K7, pas 27K…desolé, erreur de frappe ! 😉
bonjour a la compilation du programme il indique une erreur
C:\Users\jacol\Desktop\routeur solaire\SolarRouter_v2.01\SolarRouter_v2.01.ino: In function ‘void setup()’:
C:\Users\jacol\Desktop\routeur solaire\SolarRouter_v2.01\SolarRouter_v2.01.ino:382:18: warning: iteration 100 invokes undefined behavior [-Waggressive-loop-optimizations]
sinus[angle] = int(30000 * sin(angle_rad));
~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\jacol\Desktop\routeur solaire\SolarRouter_v2.01\SolarRouter_v2.01.ino:380:29: note: within this loop
for (int angle = 0; angle <= 100; angle++) {
~~~~~~^~~~~~
Le croquis utilise 855405 octets (65%) de l'espace de stockage de programmes. Le maximum est de 1310720 octets.
Les variables globales utilisent 53168 octets (16%) de mémoire dynamique, ce qui laisse 274512 octets pour les variables locales. Le maximum est de 327680 octets.
qu'el est t'il ?
Ceci est uniquement un avertissement du compilateur qui trouve 100 boucles suspectes. Les avertissements sont donnés ou pas suivant vos paramètres dans les préférences.
Cdlt
C’est un avertissement justifié,
le bon code est :
…/…
for (int angle = 0; angle < 100; ++angle)
…/…
ce qui permet au compilateur de faire une meilleur optimisation.
En outre utiliser un int32 pour stocker un float avec rescale 30k n'est pas utile en architecture 32bits, autant utiliser directement un array de float32, ou alors passer sur un array de uint16_t et faire un rescale en 64k-1.
Un rescale de 30k (ou 32k-1) se serrait pour un int16_t.
Cette optimisation mémoire ne serait utile que pour un vrai Arduino ou un ancien ESP plus limité en Ram que un ESP32.
Admiratif devant votre maitrise du code pour optimiser la compilation. L’idée de base était d’optimiser le temps de calcul. Un développement en série pour calculer un sinus est très long. Créer une table de sinus optimise le temps. Je retiens pour la version v3 en préparation.
Cdlt
Bonjour, chez moi c’est la même chose et je pense que c’est le réseau qui est comme ça. La mesure direct sur 6volts alternatif fais aussi des plats, mais en un peux mois fort.
Dans le code routeur solaire v2.0 a quelle ligne faux t’il ajouter ajouter les donné personnel ssid, mp wifi et adresse IP du module. je suis un peux perdus merci
en version 2.01 c’est en ligne 33 et 34 juste audessous de « //WIFI »
merci, et rien d’autre ?
Bonjour,
merci pour pour toute ces explications. tout est câblé, vérifié, mais je peine a avoir l’interface web pour faire mon diagnostic en tension et courant… et sans cela. je ne peux avancer (enfin, si j’ai bien tout compris). svp, le programme est-il directement utilisable ? l’adresse IP est en dur 192.168.0.208 mais dans chrome comme Mozilla pas de réponse. y a-t-il un élément qui m’échappe ? (je connais les langage python, matlab, fortran, je comprends le C++ mais alors les interfaces web…je n’y connais rien du tout !)
Il vaut mieux mettre l’adresse IP en dur, mais cela dépend de votre box. Il faut trouver le gateway (l’adresse IP de la box) et attribuer une adresse en dehors du champ des adresses automatiques (DHCP) que distribue la box.
Si vous avez une box orange. En général le gateway c’est 192.168.1.1 et vous pouvez mettre l’adresse IP pour l’ESP : 192.168.1.200
Si vous n’y arrivez pas, je vous le ferai en prenant le contrôle de votre PC à distance.
Cdlt
André
fait ! merci. (j’ai honte). par contre mon transfo 230-6V me délivre du 7.8V environ (je l’avais mesuré), j’ai des tensions écrêtée au possible que je vois bien maintenant ! je me lance dans les modifs de résistance. merci encore pour tout !
Le mien (6V) sort du 11V à vide – j’ai dû également fortement atténuer le signal.
après la modification de la ligne 42 esp/sha.h il mes ala compilation ceci C:\Users\jacol\Desktop\routeur solaire\SolarRouter_v2.01\SolarRouter_v2.01.ino: In function ‘void setup()’:
C:\Users\jacol\Desktop\routeur solaire\SolarRouter_v2.01\SolarRouter_v2.01.ino:379:18: warning: iteration 100 invokes undefined behavior [-Waggressive-loop-optimizations]
sinus[angle] = int(30000 * sin(angle_rad));
~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\jacol\Desktop\routeur solaire\SolarRouter_v2.01\SolarRouter_v2.01.ino:377:29: note: within this loop
for (int angle = 0; angle <= 100; angle++) {
~~~~~~^~~~~~
In file included from c:\Users\jacol\OneDrive\Documents\Arduino\libraries\RemoteDebug\src\utility\WebSockets.cpp:42:
C:\Users\jacol\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.8/tools/sdk/esp32/include/mbedtls/port/include/esp32/sha.h:20:2: warning: #warning esp32/sha.h is deprecated, please use sha_parallel_engine.h instead [-Wcpp]
#warning esp32/sha.h is deprecated, please use sha_parallel_engine.h instead
^~~~~~~
c:\Users\jacol\OneDrive\Documents\Arduino\libraries\SolarRouter_v2.01\PageWeb.cpp: In function 'char* getPageWeb()':
c:\Users\jacol\OneDrive\Documents\Arduino\libraries\SolarRouter_v2.01\PageWeb.cpp:119:5: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
"\r »;
^~~~~~~~~~~~~~~~~~~~~~je ne vois plus se qu’il faux faire . Merci
Ce ne sont que des alertes et pas des bugs.
Allez dans Fichier/Préférences et à la ligne Avertissement du compilateur, mettez ‘none’. Ainsi, vous ne serez plus embêté par ces messages verbeux de compilation.
Cdlt
parfais Merci
… les charactères inf/sup sont interprétés comme des balises … ça a coupé le texte de mon précédent post…
#include « sha/sha_parallel_engine.h »
Bonjour,
Après avoir longtemps galéré pour faire fonctionner le routeur, il fonctionne enfin. Je souhaitais donc vous faire un retour d expérience afin que les galères puissent servir..
Un grand merci à André pour sa disponibilité et sa volonté de faire partager son savoir.
1) ayant un PC sous windows7, j ai utilisé une version d Arduino ide plus ancienne que celle qui tourne sous Windows 10, mais ça fonctionne.
2) pour ceux qui sont pourvus d une box bouygues, l adresse IP de la Gateway est celle de la box à savoir:192.168.1.254. L adresse IP de la carte Arduino est 192.168.1.208 (et non pas 192.168.0.208).le masque de sous réseau est 255.255.255.0
3) une fois le soft d André télé versé dans la carte, j avais des reboot réguliers de celle ci, toutes les 30 sec. J ai cherché pendant des jours, sans trouver l origine du pb. En désespoir de cause, j ai désinstallé puis, ré installé Ide Arduino (Méme version que la précédente). Nouvel essai et apparition du message d erreur s #include Sha etc lors de la compilation,… Alors que je ne l avais pas la première fois. Re désinstallation, puis Re installation du soft, compilation Ok télé versement Ok ( en étant obligé d appuyer sur le bouton reset de la carte).
Test un situ et la miracle, ça fonctionne à merveille.
Conclusion : ide Arduino est un formidable outil mais qui semble peu stable puisque des mêmes causes ne donnent pas les mêmes consequences… Enfin, c est come cel que je l interprète. Donc, si vous avez des pbs, essayez de désinstaller/réinstaller ide Arduino et voyez si ça change qque chose….
Merci pour votre retour d’expérience.
Cdlt
André
Bonsoir, il faux changer l’adresse ip dans de la ligne 38 par ceci , L adresse IP de la carte Arduino est 192.168.1.208 (et non pas 192.168.0.208). ?
pour la Bbox, les adressés IP du réseau local vont de 192.168.1.1 jusqu’à 192.168.1.254.
donc le routeur doit avoir une adresse IP commençant par 192.168.1.xx. après, cela dépend de chaque réseau local
À André
Le routeur est programmé sans encombres, monté, calibré. Pour info, j’ai dû diminuer R5 à 2k7.
Les variables dans le programme :
Kv 0,2386
Ki 0,717.
Les essais sont concluants. Merci encore
73
Bonjour André.
J’ai remarqué une chose hier soir, à 21h il n’y avait plus de production solaire, j’entendais par intermittence (toutes les 30 secondes environ), la résistance de mon chauffe eau résonnait 1s environ. On dirait que le triac s’ouvre brièvement et régulièrement. Rien d’anormal sur la page web, juste une rapide élévation de la puissance et ça redevient normal. Je ne vois pas de surconsommation dans mon suivi. Est ce normal ?
Bonjour,
Ceci me fait évoquer un défaut de gestion des threads dans le programme.
Toutes les 30 sec le ESP32 fait une interaction avec le WiFi et les envois vers Domoticz.
Comme un seul core du ESP32 est utilisé il n’est pas disponible à ce moment pour traiter le contrôle du TRIAC et le TRIAC se ferme en fin de cycle.
Quand le core du ESP32 est de nouveau dispo il reprend le contrôle du TRIAC et le rouvre.
D’où la résonance dans le chauffe eau toute les 30 sec.
Pour tester cette hypothèse, désactivez tous le code de gestion exécuté toutes les 30 sec et vérifier alors le comportement du chauffe eau.
L’autre solution plus lourde est de ne pas utiliser « loop() » dans le programme mais de faire deux boucles, une sur chaque core 0 et 1 du ESP32, avec une des deux dédiée au TRIAC, l’autre à la gestion du WiFi, Domoticz etc…
https://randomnerdtutorials.com/esp32-dual-core-arduino-ide/
(attention au Race Condition !!)
Ce sont des questions que je me suis posé, mais une lampe en sortie du Triac fonctionne bien en continu. Toute l’activité du Triac est basée sur des interruptions et non pas dans le flot de la boucle loop.
Je regarderai encore avec un oscilloscope.
Cdlt
André
Bonjour,
C’est un superbe projet !
Très bien expliqué !
Je vais l’utiliser pour faire un routeur solaire sur mon installation.
J’ai repris le code pour faire un refactoring et je le posterais dès qu’il serra propre.
Je suis aussi en train de rajouter un export MQTT avec auto-discovery pour l’intégration Domoticz/HomeAssistant.
à bientôt
Une version V3 est en cours avec MQTT/Home Assistant.
Cdlt
André
Bonjour,
vous pouvez accéder à mon code en cours si cela vous est utile.
j’ai fait quelques correctif sur certaines partie de votre version 2.1 et j’ai ajouter des commentaire pour moi même pour comprendre chaque partie du calcul.
j’ai fait un refactoring assez important.
le code compile et s’exécute, il y a encore pas mal d’ajustement à faire pour le MQTT.
https://burg.myqnapcloud.com:9443/share.cgi?ssid=c2807e20982a450289a5251d512906c2
Bonjour, projet intéressant, je cherchais ce genre de solution d’optimisation d’autoconsommation, toutefois un point technique me gène à propos du variateur d’énergie qui fonctionne par alternances entières. Ça signifie que les micro-onduleurs doivent fournir une puissance maxi sur ces alternances et ensuite plus rien sur les alternances non alimentées. Les panneaux ne pouvant pas fournir les pointes de puissance, il faut probablement un stockage dans les micro-onduleurs, ou ajouter des condensateurs de stockage sur les panneaux pour fournir les alternances qui sont chargées ?
De mon coté je cherchais une solution avec du PWM en AC afin d’avoir une consommation sinusoïdale. Il est probable que les micro-onduleurs n’aient pas de condensateur réservoir suffisant sur le bus DC pour fournir une telle consommation hachée ? D’où peut-être des problèmes possibles avec certains produits ?
Avez vous des commentaires ?
On travaille au niveau de la demi alternance du secteur de 10ms. Par exemple, après le passage à zéro de la tension, pendant 4ms le Triac ne conduit pas, puis durant les 6ms suivante, le triac conduit l’énergie vers un chauffe-eau par exemple. Puis, même scénario pour les 10ms suivantes.
Cdlt
André
Bonjour Monsieur,
Je vous remercie pour ce magnifique routeur, dont le fonctionnement est si bien expliqué. Je me suis lancé dans la réalisation, aujourd’hui
je viens de finir le routeur et de le brancher à un moment où mes panneaux solaires produisaient peu environ 300W, ceci avec une intensité de l’ordre de 1A, d’après le petit compteur de mon installation. J’étais néanmoins en surproduction avant le branchement du routeur et quand je l’ai branché (mis sur ON le disjoncteur de 20A du chauffe-eau et du routeur) j’ai lu sur la page web une intensité de l’ordre de 100A et sur le Linky, j’ai vu que je consommais environ 1200VA, ce qui correspond aux 1200W de la résistance du chauffe eau. A un autre moment j’ai même lu sur la page web une tension U de plus de 500V. J’ai remis sur OFF le disjoncteur et coupé l’alimentation du routeur. J’ai dû faire une grossière erreur, mais je ne parviens pas à la trouver. Voyez-vous d’où peut venir le problème ? Merci pour l’attention portée à ce message.
Bien cordialement
E.Duquenne
Bonjour
Dans un premier temps, branchez le routeur mais sans charge en sortie, afin de faire une première vérification et calibrer la tension puis le courant.
Si vous avez 500V d’affiché, cela veut dire que votre transformateur sort plus que 6V. Il faudra reprendre les valeurs de R4 et R5 afin d’avoir une courbe rouge qui ressemble à une sinusoïde puis éventuellement retoucher dans le programme le coefficient multiplicatif afin qu’il affiche la même tension secteur que vous affiche un voltmètre ou le Linky.
Ensuite calibrez kI pour avoir une puissance qui correspond à ce que vous pouvez mesurer. Ensuite branchez le chauffe eau.
Cdlt
André
Merci beaucoup pour votre réactivité, votre analyse et vos conseils, demain matin, je vais suivre pas à pas vos conseils, en espérant résoudre le ou les problèmes. Bien cordialement.
Eric
Bonjour Monsieur,
depuis ce matin, j’ai résolu quelques problèmes de soudures, j’ai débranché le chauffe-eau, j’ai rajouté des résistances en série pour passer de 24000 ohms à 28200 ohms sur la R4 car j’ai effectivement 7V au transfo qui était pourtant vendu pour fournir 5V. (R4=R5(Ue-Us)/Us où Ue=7V ici, Us=1V) . Mais j’ai encore un problème, j’obtiens bien une sinusoïde rouge au dessus de l’axe noir et quand elle passe sous cet axe noir, elle devient horizontale. La formule que j’ai obtenue est-elle fausse ? Mes souvenirs de physique remontent à plus de 30ans…
D’autre part, je n’avais pas de résistance de 24ohms en R3, j’ai mis une 22ohms. Mais la courbe verte que j’obtiens est très plate et occupe la bande supérieure de l’écran sur 0.2cm de haut. Dois-je la remplacer par exactement 24ohms pour résoudre le problème ou est-ce un problème de sonde ? La sonde de courant est sur la phase entre le tableau électrique et le boitier blanc d’interruption générale à côté du Linky, c’est le modèle que vous indiquez .
J’ai passé toute la journée à faire, refaire les soudures, monter et démonter le routeur, tester, calculer, mais là, je suis au bout de ce que je peux faire. Je me demande si je ne devrais pas recommencer tout mon circuit.
Je ne sais pas si vous pourrez encore m’aider avec ces indications. ( actuellement la page web indique 244V, 53A, 9031W et 12951VA)
Bonne soirée et bon dimanche.
Bien cordialement
E.Duquenne
A la lecture des constatations, je pense que vous n’avez pas 1.65V sur le GPIO35. La division par 2 des 3.3V avec les 2 résistances de 4.7k n’est pas correcte.
Pour la 22 ohms, ce n’est pas un problème.
Vous pouvez m’envoyer la photo de l’écran sur mon mail directement. f1atb.fr@gmail.com
Cdlt
Re(bonsoir) (à André)
Oui le principe de sortie par demies alternances est compris, avec un triac on ne peut pas faire mieux.
La question qu’on peut se poser est; est ce que les onduleurs peuvent fournir la puissance max du chauffe-eau pendant les 10ms des demies alternances alors que les panneaux ne fournissent que très peu, les condensateurs des micro-onduleurs peuvent fournir un peu mais leur capacité est-elle suffisante ? Il est probable que plutôt c’est le réseau qui fournit la puissance crête lorsque le triac conduit…
De mon coté j’ai abandonné cette solution à cause des grosses variations de puissance que ça demande au système photovoltaïque, je réfléchi à une solution PWM qui consomme du courant vrai sinus (redresseur, MOSFET ou IGBT + inductance de lissage…)
Bons essais à tous
En regardant la courbe, en fin d’article, au chapitre exemple de routage, on voit ce qui se passe au niveau de l’entrée de la maison. Sur 10ms, il y a des périodes de consommation où Enedis fournit et des périodes d’injection ou les onduleurs fournissent. Avec un décalage de phase. Il serait intéressant d’avoir sur la même courbe le courant en sortie des onduleurs.
Bonjour Andre
Superbe travail, je réalise votre routeur pour chauffer un ballon ECS de 1200w
J’ai pu apercevoir que vous avez ajouter un fusible, et je voulais connaitre la référence de ce dernier.
Merci et vivement la V3
Cordialement
C’est un tout petit fusible pour protéger/couper l’alimentation de l’ESP32 qui consomme seulement 1 ou 2 W.
Cdlt
merci et bon WE
Bonjour à tous,
Est-ce que quelqu’un a ajouter une boucle de mesure de la puissance envoyée au chauffe eau ? Si tel est le cas, pouvez-vous partager le montage et le code svp ?
L’idée est de suivre la conso du chauffe eau sur Domoticz.
D’avance merci !
vous devirez reprendre le code qui lit et qui calcul la puissance sur le TC 1/2000 (le 100A/50mA) pour en controller un second de la même façon.
vous intégrez le résultat sur la durée voulue et ça vous donne la consommation du chauffe eau (il faut mettre le second TC sur le câble de phase qui alimente le chauffe eau, sinon vous allez mesurer n’importe quoi au hasard)
si vous exécuter trop d’interuption en même temps il va par contre falloir envisager d’utiliser le second core du CPU du ESP32 et modifier assez profondément l’architecture du programme.
cordialement,
Bonjour a tous, arrivez vous a mètre l’Arduino 2.1.0 en Français. même après redémarrage il n’est toujours pas en français ?
Oui, fonctionne chez moi en Fr. Testé à l’instant
oui super , vous avez bien l’arduino IDE 2.1.0 Il faux assez longtemps pour démarrer aussi chez vous ?
Oui, pourtant mon PC n’est pas un escargot mais Arduino IDE est bien long !
Bonjour
Merci pour votre travail et votre partage.
J’ai quasiment terminé mon routeur, et j’aurais 2 questions car je n’ai pas de grande connaissances en programmation:
J’ai besoin( car contrat en Heures Super Creuses la nuit) de modifier les horaires de forçage, j’ai rentré les valeurs de 3 à 5 Heures
du coup le ligne de code:
if (LastHour == 4 && hour == 5) { ModeHeater = 0; } // Back to Automatic mode
Doit aussi être modifiée (les termes LastHour et == ne me parlent pas!) du coup ce serait:
if (LastHour == 5 && hour == 6) { ModeHeater = 0; } // Back to Automatic mode
Le wifi de ma box est coupé de 23H à 6H, est-ce un soucis pour l’ESP32, qui doit avoir l’heure en permanence?
Merci pour votre réponse
Cordialement
Je ne vois pas bien quelle plage horaire, vous voulez forcer. Si c’est de 3h00 à 5h59 , vous devez mettre:
if (hour >= 3 && hour <= 5) { //Si l'heure est supérieure ou egal à 3 et inférieure ou égal à 5 ModeHeater = 5; //Mode forcée retard = 0; //Plus de retard à l'ouverture du Triac retardF = 0; //Plus de retard en nombre flottant } if (LastHour == 5 && hour == 6) { ModeHeater = 0; } // Si l'heure précédente (lors du dernier passage dans ce programme était égale 5 et l'heure actuelle est egale à 6. On met un double égal pour une comparaison de valeurs. On revient en mode automatique Modheater=0. LastHour = hour; on met l'ancienne heure égale à l'heure actuelle Si vous coupez le WIFI pendant quelques heures, il faudra faire l'essai. Je ne sais pas comment se comporte le programme (la bibliothèque) de gestion de l'heure en l'absence de réponse. Je pense que l'heure continu à se calculer, en utilisant l'horloge interne à l'ESP32. Cdlt
Bonjour,
au vu du code de ce routeur, si vous coupez le WiFi, il va rebooter en continu et lors du reboot il va vautrer par ce qu’il ne pourra pas toucher un serveur NTP pour avoir l’heure.
donc
choix 1 :
laissez la box avec le WiFi ‘on’
choix 2 :
modifier le code pour ne pas déclencher de reboot cpu soft (désactiver les « ESP.restart(); »)
modifier le setup pour ne pas checker le WiFi pendant plus de 30 sec au démarrage
absolument booter le ESP32 de jour pour qu’il se synchronize avec un NTP
modifier le code pour que le client NTP ne cherche pas à se synchroniser toutes les 5 minutes pendant les heures ou le WiFi est ‘OFF’
le choix 2 me semble cependant difficile pour vous.
cordialement,
J’avais oublié le test du Wifi toutes les 30s.
sur la ligne 416
if (millis() – previousWifiMillis > 30000) {
mettez par exemple
if (millis() – previousWifiMillis > 3600000) {
Le systeme fera un test toutes les heures seulement. Vous avez droit à 20 erreurs (20h) avant qu’il ne reset.
Cdlt
Bonjour, Merci pour vous réponses.
Bon Week-end
Cdlt
Bonjour,
Super travail ,merci beaucoup !
Auriez vous une version en triphasé car j’ai tout en triphasé (chauffe eau, resistance appoint PAC,et surtout production photovoltaique)
Merci de votre collaboration.
Alain
En triphasé, il y a la version avec le Linky comme source de mesure : https://f1atb.fr/index.php/fr/2023/05/18/realisez-un-routeur-solaire-avec-un-linky-diy/
Cdlt
André
Bonjour,
Great Job,
je me suis inspirer de votre montage pour en faire un a moi , mais le Gradateur – Triac de chez Robotdyn ne semble pas fonctionner correctement , je n’arrive pas à faire une puissance graduelle celle ci ne fonctionne qu’a partir de 80%.
J’ai fait des mesures à l’oscilloscope et je ne trouve pas la sortie ZeroCross en phase avec le zéro du secteur ( 2.4 ms de différence) ….avez-vous fait ces mesures car sur votre diagramme elle sont en phase ?
Merci d’avance
De mémoire, j’ai un peu galéré parce que le pulse est court et je savais pas s’il fallait un front montant ou descendant pour gérer l’interruption. Je n’ai pas noté de décalage entre un passage par zero de V et Zc.
Faite un petit programme qui va de 1 à 100 pour les retards par pas de 1 toutes les secondes pour voir.
Cdlt
Bonjour,
j’ai le même problème de synchro avec mon gradateur Robodyn, j’ai un décalage de au moins 1ms pour le pulse ZeroCross.
je n’ai pas encore eu le temps d’explorer ceci avec précision.
Cordialement,
Je vais essayé , et je vous tiens au courant.
Bonjour,
Donc j’ai fait de multiples essais avec mon gradateur RobotDyn et la version 2 du routeur solaire de André/F1ATB.
J’ai utilisé la version logicielle sans modification telle que téléchargé sur ce site et une version que j’ai modifiée mois même.
J’ai tester les différentes options de paramétrage de la bibliothèque Arduino/Espressif/ESP32 : attachInterrupt(), digitalPinToInterrupt() : RISING, FALLING, CHANGE.
J’ai testé différent échantillonnage temporel pour le relevé de la courbe tension/intensité et différents format de donnée pour aussi mesurer et tester le nombre de points de mesure que l’on peut atteindre par cycle de 20ms.
J’ai vérifié la fréquence des horloges de l’ESP32 et la fréquence de fonctionnement du CPU(): CPU getCpuFrequencyMhz(); // 240MHz —XTAL getXtalFrequencyMhz(); // 40 MHz — APB getApbFrequency(); // 80MHz
Dans toutes les situations je retrouve toujours exactement le même résultat :
– je plafonne à 103-105 mesures par cycle de 20ms (190ms par boucle)
– j’ai exactement 1ms de décalage entre le point zero de la courbe de tension et le pulse zerocross du gradateur RobotDyn, avec une variation du décalage qui est inférieure à 0.1ms
En l’état ce décalage, dans la version actuelle du logiciel, induit une limitation de l’ouverture du gradateur à 90%.
Je n’ai pas comparer ce résultat avec un autre ESP32 ou un autre gradateur.
Je n’ai pas d’osiloscope sous la main pour faire une mesure comparative.
Je n’ai pas de charge sur la sortie du gradateur pendant cette mesure.
Quelle peuvent êtres les cause d’un décalage aussi stable et aussi nette du zero cross ?
– défaut logiciel ? – défaut du gradateur ? – défaut du montage électrique ? – position d’une capacité qui a un effet de filtre et de décalage ?
Si je suis raisonnablement compétent en programmation, je ne pense pas avoir les compétences en électronique pour plus démêler ce problème en l’état.
Cordialement,
Sur la version 3 du routeur, https://f1atb.fr/index.php/fr/2023/05/18/realisez-un-routeur-solaire-avec-un-linky-diy/ , j’ai mis le relevé à l’oscilloscope du signal Zc et de la tension secteur. Il n’y a pas de décalage sur le plan électrique. Le front montant du signal Zc est bien en phase avec le zéro de la tension secteur. Pour les ouvertures, j’ai également mesuré le courant en sortie du Triac. A 100%, on est bien au maxi.
Cdlt
André
Bonjour,
j’ai continuer de regarder ce problème.
j’ai trouvé que la précision du zero cross est attendue à +/- 0.1ms (-0.1ms sur le front ‘rising’ et +0.1ms en ‘falling’), donc un délaçage de 1ms ne correspond pas à ce décalage.
j’ai vérifier ma fréquence de courant par rapport à l’orloge du ESP32, j’ai du 49.9988 Hz, ceci entraine donc un décalage progressif du zero cross de 0.4723usec par cycle par rapport à un cycle de 20ms, ce qui n’est là aussi pas du tout 1ms.
je vais désassembler mon montage pour le refaire et vérifier si il y a un faux contact qui pose problème.
je vais faire un mini programme de lecture analogique sur les différents pins concernées du ESP32 pour enregistrer ~512 valeurs consécutives sur chaque pins et reconstituer des courbes « pseudo oscilloscope » et voir ce que ca me sort.
Cordialement,
Bonjour,
Super routeur.
Il est en service depuis peu et j’ai modifier le code pour le piloter via home assistant. Par contre je le lance quand ma batterie est pleine mais il pompe ma batterie en décharge. je voudrais modifier la consigne de régulation, de 0W a -100W. Quel ligne je dois toucher ? j’ai beau chercher je ne trouve pas…. Merci !
Ouvrir la page action et cliquez sur « Seuil Pw : 0W » en dessous de Triac. Une fenetre s’ouvre et mettez la valeur de seuil qui correspond à votre besoin.Cdlt
Excusez moi je me suis trompé de routeur, vous avez la version V2.01.
Dans ce cas ouvrez le code à la ligne 278 et mettez
retardF = retardF + (PW+100) / 200;
si vous voulez réguler autour de -100W (légère injection)
Cdlt
Super merci ! Ca fonctionne
Bonjour André,
J’ai un panneau solaire et j’ai installé le routeur solaire qui fonctionne très bien. Je voudrai ajouter un 2eme panneau solaire sur le toit de mon garage qui est séparé de la maison (meilleur exposition). La maison et le garage possèdent chacun un tableau électrique avec chacun un différentiel et une terre indépendante. Le capteur de courant est installé sur l’alimentation du tableau de la maison. Donc la consommation du garage (faible) n’est pas vue par le capteur car le garage a sa propre alimentation. Après le disjoncteur EDF situé dans la maison une boite de dérivation permet d’alimenter le tableau de la maison et celui du garage. Donc si je branche un panneau solaire sur une prise du garage, le courant produit par le panneau va remonter jusqu’à la boite de dérivation et la il a deux possibilités soit il est consommé par la maison soit il est réinjecté sur le réseau EDF, voilà ma question. Je pense que comme le courant prend le chemin le plus court il sera consommé par la maison mais je n’en suis pas sure. Si la nouvelle version du routeur permet d’avoir le capteur de courant déporté je le déplacerai dans la boite de dérivation ce qui permettra de prendre en compte la consommation du garage. D’avance merci pour votre réponse.
OK, je vois votre problème avec le point de mesure qui n’est pas au bon endroit. Il y a 2 solutions :
1) vous optez pour la nouvelle version V3.00_Linky avec un ESP32 et un coupleur optique près du Linky et le même ou l’ESP32 avec le Triac que vous avez déjà installé près du chauffe-eau je suppose.
2) Vous déplacez votre sonde de courant près du Linky et attendez que je fasse une nouvelle version V2, qui reprendra les nouvelles possibilités comme la modularité de la version V3.00_Linky. Mais laissez moi un peu de temps pour souffler, la V3.00_Liky avec près de 3000 ligne de code m’a pris 3 mois à développer.
Cdlt
Merci André, je découvre avec votre message que la version V3.00 Linky est en ligne.
Je regarde.
Merci encore pour votre aide.
Bonjour André, mon Linky est à l’entrée de mon terrain dans le coffret gris EDF et loin de la maison, donc sans alimentation 230V. Je vais d’abord faire un test pour relier la sonde de courant avec un câble réseau en utilisant une des 4 paires torsadées pour la connecter dans la boite de dérivation, ce qui permettra de voir l’injection des 2 panneaux solaire. Il me faut environ 5/6 mètres de câble réseau, le test me dira si cela fonctionne ou pas. Si cela ne fonctionne pas j’ai la solution d’alimenter l’ESP32 avec le coupleur optique avec le câble HC/HP (2 fils 1.5mm²) qui n’a plus d’utilité avec le routeur solaire et qui arrive dans le coffret gris EDF et qui est branché actuellement sur le Linky. Une autre solution serait de remonter l’info en sortie du coupleur optique via le câble HC/HP en modifiant un peu le circuit.
Bravo encore pour cet énorme travail et merci pour l’aide que vous nous apportez.
Très bonnes idées pour résoudre le problème de l’alimentation. Avec un câble blindé, type câble réseau, on doit pouvoir faire 20m au moins.
J’aime beaucoup l’idée de reprendre les câbles HC/HP.
Si on a des soucis avec de trop longs câbles, on peut modifier les 2 valeurs de résistance autour du LTV-814. Mais il faut un oscilloscope pour vérifier que le signal est bien carré à l’entrée de l’ESP32.
Cdlt
v2.0 problème pour les valeurs a indiquer dans la partie wifi /de la ligne 34 à 43 et a quoi elle correspondes expl: ip du modem ip : du esp32 , ip: smartphone ici en Belgique il y a des différences je dois les modifiés. je suis un peux perdu merci
Les adresses IP en interne sur votre réseau, c’est comme les numéros de téléphone internes d’un réseau d’entreprise.
C’est votre box internet qui les attribue. Mais pour un système de domotique, il vaut mieux forcer une adresse.
Votre box attribue des adresses, par exemple dans la plage:
192.168.0.1 à 192.168.0.254
ou bien
192.168.1.1 à 192.168.1.254
Dans cette page d’adresse il y a une sous plage de valeurs dites dynamiques, attribuées par la box ex 192.168.0.10 à 192.168.0.100
Les autres sont des adresses statiques. Vous pouvez prendre une adresse pour votre ESP ex 192.168.0.200
Dans les paramètres réseaux DHCP vous trouvez ces informations.
En genéral on ne prend pas celles qui se terminent par 1 ou 254, elles sont utilisées par les box.
A la ligne gateway, mettez l’adresse de votre box.
subnet et primaryDNS ou secondary DNS ne changé rien.
Vous pouvez installer sur votre PC un logiciel comme Angry IP scanner, qui va vous faire la carte des adresses utilisées sur votre réseau.
Je peux, si vous n’y arrivé pas prendre la main sur votre PC pour tout configurer. Ecrivez moi sur f1atb.fr@gmail.com
Cdlt
André
Bonjour, et merci pour les explications et la proposition de tout configuré, mais je vais essayer de configuré seul, il faux que je me débrouille pour apprendre. Cordialement Jean
bonjour André , j’ai remarqué que le compteur (kwh) de la page web du routeur ne correspondait pas à la conso facturée (edf). J’en déduit que l’injection sur le réseau est soustrait du compteur de la page web.
Est-il possible de paramétrer le routeur pour ne comptabiliser que les Kwh consommer du réseau ?
Dans le tableauLa puissance Apparente en VA affichée est la valeur instantanée du Linky sans modification.
La puissance active en W est une moyenne estimée recalée sur les valeurs reçues en Wh du Linky quand elles évoluent.
L’énergie Active du jour est la valeur du Linky – la valeur du Linky à 0h.
L’energie Active Totale est la valeur du Linky
Le premier graphe sur 10mn donne les valeurs en VA et en W comme dans le tableau.Le deuxième graphe en W sur 48h donne bien la différence Soutirée – Injectée. Pour des questions de mémoire de stockage, je stocke uniquement la différence et pas chaque valeur.Le troisième graphe sur 1 an donne également l’energie Soutirée – Injectée. Je ne peux pas stoker les valeurs séparément par manque de place en ROM.CdltExcusez moi, plus haut j’ai répondu pour un routeur en version V3.00_Linky. Vous m’avez posé la question pour une version V2.
Cette version fait la mesure algébrique entre les Wh soutirés et les Wh injectés. Dans la prochaine version V3.00_Sonde , je ferai la séparation afin de retrouver les valeurs d’EDF.
Attendez un peu, dans quelque temps, elle sera en ligne.
Cdlt
Bonjour André ,il y a un quiproquo . On est bien sur le fil du routeur V2 ? J’ai l’impression que vous parlez de la version 3.(linky)
Merci d’avance de prendre le temps de me répondre.
Vous avez raison, je me suis trompé de fil de discussions. J’ai tellement de messages par jour entre le site F1ATB et youtube.com/@f1atb
Merci
Cdlt
André
Pas de problème, vous en faites déjà beaucoup pour nous tous et je vous en remercie. J’attendrai la nouvelle version bien que la v2 fonctionne très bien. Merci et bonne soirée.
Oui, vous en avez déjà fait énormément et je crois bien que nous sommes vraiment très nombreux à vous remercier.
>>>Pour remercier de façon plus concrète F1ATB, notons qu’il est possible de soutenir son travail en effectuant un don (en haut de page).
Bonjour,
Pouvez vous me dire s’il est possible de contrôler la sortie du triac. J’ai une ouverture à 100 % mais pas de tension en sortie. Il y a bien 230 V en entrée.
D’avance merci.
Cdt
Serge
Vérifiez que votre Triac est bien branché. Dans ce cas si vous êtes à 100%, vous devez avoir autour de 3.3V sur l’entée Psm du Triac.
En sortie, on peut mesurer la tension, sauf que s’il n’y a pas de charge, même sans excitation de l’entrée, on a une tension résiduelle sur le 230V. Le Triac n’est pas un interrupteur parfait.
Cdlt
Ce que vous appelez Psm est la gachette? la patte du triac qui n’est ni sur l’entrée ni sur la sortie 230 V.
Le 3.3 V est entre la masse et la gachette?
C’est le signal de commande qui sort du GPIO 22 et va sur le module Gradateur/Triac
OK merci pour la précision.
Je viens de voir que la led bleue du dimmer est allumée alors que j’ai une ouverture à 0 %.
C’est normal?
En gros à partir de 5% d’ouverture, la Led bleu s’allume. Si vous êtes à 0% et elle s’allume, il y a un problème. Débranchez le fil de commande pour voir si cela s’arrête.
Cdlt
Je viens de déposer le dimmer. Le triac a flashé sur la patte Load alors que j’avais sensiblement augmenter la surface du radiateur.
Nouvelle commande mais je vais déporter le triac avec un gros radiateur.
Bonjour,
J’ai suivi le tuto (merci pour tous ces details),
J’ai deux lampe a incandescence pour mes tests une en sortie de triac et l’autre pour la mesure du courant que j’ai installé en sortie d’un gradateur de lampe halogène du bon vieux temps …
– mais j’ai un pb pour la mesure de tension : reste vers 0
– et le courant n’est pas sinusoidale … (mais je mesure le courant du gradateur sur une ample de 60 w)
PS : je ne suis pas certain d’avoir mis le capteur de courant ni le transformateur dans le bon sens, mais a-priori ca va ne jouer que sur le signe, correcte ?
Une idée pour m’aider a trouver le pb, j’ai de la tension au secondaire du transformateur (220v – 6v), mais pas correcte en entree du esp …
En premier, il faut une belle courbe rouge pour la sinusoide de la tension. Quel que soit le sens du transfo. Si ce n’est pas correcte entrée ESP, il doit y avoir un problème de câblage.
Cdlt
après le téléversement dans l’esp j’obtient ceci dans le monitor série: [108392][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
connection failed
ets Jun 8 2016 00:22:57
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:1184
load:0x40078000,len:13192
load:0x40080400,len:3028
entry 0x400805e4
Booting
[ 311][I][ArduinoOTA.cpp:141] begin(): OTA server at: esp32-943cc6384620.local:3232
IP address: 192.168.0.200
[ 315][W][esp32-hal-timer.c:226] timerAttachInterruptFlag(): EDGE timer interrupt is not supported! Setting to LEVEL…
[ 44359][E][WiFiUdp.cpp:172] beginPacket(): could not get host from dns: 11
01:00:45
Power:740.00
[ 48390][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
connection failed
Vous n’avez pas configuré correctement l’adresse IP, le gateway, le nom du réseau WIFI, le mot de passe.
Comme vous n’êtes pas le premier, je vais un chapitre là-dessus, les commentaires au début du code ne suffisent pas.
Cdlt
André
Bonjour, j’ai bien vérifié mais il y a surement un truc qui est a changer quelque part et au quel je ne pense pas?
Tout le monde y arrive en ajustant les résistances. A moins que votre transfo sorte des signaux non sinusoidaux .
Bonjour André,
Tout d’abord merci pour votre travail et surtout votre partage.
J’ai réalisé un premier montage de votre version V2. Celle-ci à fonctionné à merveille pendant 1 mois.
J’ai suite à cela voulu refaire mon montage au propre. Et c’est la que les ennuis sont arrivés.
Depuis les courbes I et V ne s’affiche plus sur la page web. La tension, l’intensité et le reste des informations sont bien affichées mais pas de courbe.
Auriez vous une idée pour m’orienter dans mes recherches ?
En vous remerciant,
Si la tension est correcte (autour de 230V) , je ne me le’xplique pas bien. Si elle n’est pas correcte, il doit y apoir un problème au niveau des 3 entrées de mesure.
Certains ont eu des problèmes avec les GND (masse) de la carte qui n’étaient pas tous reliés ensemble.
Cdlt
Bonjour,
J’utilise la version V2 qui répond a mes attentes avec une sortie sur CE et une vers SSR pour un moteur. Ce moteur étant distant, je souhaite le piloter en WiFi.
J’ai lu votre sujet sur SonOff Mini R2 qui doit pouvoir répondre a mon besoin mais je n’arrive pas à intégrer les lignes de programmation dans la version routeur V2.
Si vous pouvez m’aider sur ce sujet.
Cordialement.
Serge
Trois solutions.
Pour commander à distance, inspiré vous de
SendToDomoticz() à la ligne 160
Ouvrez la version V3.00_Linky, que j’ai publié récemment qui fait cela, mais avec le Linky comme capteur et non la sonde de courant
Cet été, je publierai une nouvelle version V2 qui s’appelera V3.00_Sonde. Elle inclura les commandes à distance.
Cdlt
Merci, je vais attendre la version v3.00 Sonde.
Bonjour,
j’ai lu sur un routeur du commerce clé en main, l’incompatibilité avec des résistances en stéatite
Est-ce le cas pour votre système ?
cdt
merci
Je ne connais pas la raison de l’incompatibilité de la stéatite. Il y a des articles sur le sujet sur le web pas clairs.
Le mien fait de la découpe du réseau à 50Hz.
Cdlt
André
Pour info, sur mon ballon d’eau chaude de 200W j’ai une anode Titane. Il y a une petite carte électronique avec un accumulateur 9V pour alimenter l’anode (10mA environ) quand le chauffe-eau n’est pas alimenté. Lorsque le chauffe-eau est alimenté la carte recharge l’accumulateur 9V. Cette carte est alimentée en 220V et ne peut pas fonctionner correctement avec le découpage du 220V.
J’ai donc déconnecté l’arrivée 220V sur la carte électronique et j’ai amené une alimentation séparée 220V en soudant les deux fils sur le connecteur d’arrivée 220V côté cuivre. J’ai ensuite enlevé l’accumulateur 9V qui ne sert plus à rien car la carte est alimentée en permanence.
Petite erreur de frappe, Chauffe eau de 200 litres et non 200W (il fait 2400W).
Bonne information pour qui serait dans le même cas.
Bonjour ,je l’utilise depuis plusieurs mois sur un ballon stéatite. Aucun problème.
Bonsoir,
Après quelques jours de test, je reviens sur le sujet du délai des impulsions ZeroCross du Gradateur RobotDyn.
Au vu de mes mesures, il est vraisemblable que mon exemplaire comporte un défaut et présente ainsi un décalage du Zero cross de 1.1ms.
Pour la réactivité du ESP32, avec les bibliothèques « classiques », une interruption a un retard de ~ 2.5us +/- 0.7us.
Il est possible de réduire ce délais à 0.08 us en utilisant un code en assembleur pour se rapprocher de la limite matérielle du ESP32 qui est bien meilleur que ce qui est implémenté dans la bibliothèque par défaut. Je n’ai cependant pas explorer cette voie car 2.5us de retard sur une interruption quand mon gradateur se prend 1.1ms … c’est pas un problème.
Lors de mes différents test j’ai aussi exploré les possibilités des 8 canaux de numérisation du ADC1 pour chercher à augmenter la fréquence d’échanttillonage. Je n’ai pas exploité le ADC2 et ses 10 canaux par ce que celui ci est utilisé par le WiFi or la majorité de projets utilisent justement le WiFi.
En outre il existe un mode « DMA » très intéressant mais justement exploitable uniquement avec le ADC1.
Le but de cette recherche était de contourner le fait que je ne dispose pas d’un oscilloscope et que l’échentillonga par défaut du ESP32+Arduino est trop lent.
A noter que sur les Dev Board utilisant un ESP32 WROOM seul 6 canaux ADC1 (channels 0,3,4,5,6,7) sont connectés sur des gpio utilisables.
J’ai ainsi identifié 4 méthodes pour utiliser le ADC1 avec des possibilités variables de fréquence d’échatillonage :
– ADC en mode ‘classique’ avec les bibliothèques Arduino: max 11kHz réparti sur les canaux activés parmi les 8 disponibles
– ADC en mode ‘classique’ avec les bibliothèques Espressif: max 22kHz réparti sur les canaux activés parmi les 8 disponibles
– ADC en mode ‘DMA’ avec l’interface du 2IS prévu pour l’audio: max 277kHz mais sur un seul canal à la fois parmi les 8 disponibles
– ADC en mode ‘DMA’ sans 2IS (besoin de reformater les données obtenues): max 2MHz (!!) réparti sur les canaux activés parmi les 8 disponibles
J’ai implémenté les 4 méthodes et les résultat de la version ‘ADC-DMA’ sont très utiles.
En plus de donner un bien meilleur échantillonnage; celui ci se fait sans charge CPU car c’est le contrôleur qui fait le boulot et qui met les données en RAM via le DMA.
Sur mon problème initial de décalage du ZeroCross, celui ci est donc confirmé.
Ceci m’a aussi permis de mesurer la forme de l’impulsion du Zero cross qui en fait est assez large. J’ai une FWHM de 400us, un front ascendant de 200us, un plateau de 100us, un front descendant de 200us.
Je note aussi que la forme de l’onde de courant est un peu bizarre. Je suis en train de préparer un outil de correction de la linéarité du ADC, bien que je doute que ceci en soit la cause.
Je partage le code ici : https://burg.myqnapcloud.com:9443/share.cgi?ssid=c2807e20982a450289a5251d512906c2
Cordialement,
Correctif de dénomination :
– ADC en mode ‘one-shoot’ avec les bibliothèques Arduino: max 11kHz réparti sur les canaux activés parmi les 8 disponibles
– ADC en mode ‘one-shoot’ avec les bibliothèques Espressif: max 22kHz réparti sur les canaux activés parmi les 8 disponibles
– ADC en mode ‘continuous 2IS’ DMAx1 via l’interface de la bibliothèque 2IS prévu pour l’audio: max 277kHz mais sur un seul canal à la fois parmi les 8 disponibles
– ADC en mode ‘continuous DMA’ DMAx8 via une bibliothèque dédiée (2IS en sousjacent mais besoin de reformater les données obtenues): max 2MHz (!!) réparti sur les canaux activés parmi les 8 disponibles
Intéressant le mode DMA. Pour le routeur les 100 mesures sur 10 ms, cela suffit amplement.
Cdlt
Je n’ai pas précisé quelques éléments important :
– le code est écris avec Eclipse + Sloeber, donc c’est compatible Arduino et MSVS+PlatformIO
– pour le mode DMA, mon code est juste un exemple comparatif des modes one-shoot et continuous, mais c’est bcp plus intéressant d’utiliser le mode DMA continuous avec une gestion d’interuption pour complètement décharger le CPU. cette option est bien documenté sur le site de Espressif :
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc_continuous.html#register-event-callbacks
Bonjour,
J’ai écris un outil de calibration du DAC et du ADC pour l’ESP32 qui permet de calibrer l’ADC de son ESP32 à partir du DAC interne et d’un simple voltmètre (+ un calcul de fit linéaire dans un tableur).
L’outil génère une LUT directement utilisable dans un programme.
L’utilisation de la LUT est plus rapide et plus précise que les corrections implémentées dans la bibliothèque Espressif et Arduino.
Le mode d’emploir est mis en commentaire au début du code.
La référence sous jacente est : https://github.com/e-tinkers/esp32-adc-calibrate
J’ai mis mon code à disposition au même endroit que pour les précédents:
https://burg.myqnapcloud.com:9443/share.cgi?ssid=c2807e20982a450289a5251d512906c2
Je n’ai pas encore testé pour évaluer selon quelle amplitude ceci améliore les mesures de tension, d’intensité ou de puissance.
Cordialement,
Bonjour André
Félicitations pour vos connaissances et d’accorder votre temps pour les non initiés.
Je reconnais n’avoir pas lu l’ensemble de vos réponses aux commentaires très nombreux car vous avez peut être déjà répondu a cette question.
Avant de construire votre routeur, avez vous mesuré le taux de réinjection résiduelle dans le réseau EDF en Wh moyen ainsi que la consommation EDF injecté dans le ballon ECS en Wh moyen lié au temps de réaction de la régulation sur les perturbations de consommation électrique.
Merci pour votre réponse
Christophe
J’avoue ne jamais avoir fait les mesures avec précision. J’ai les deux types de routeur à la maison. Avec la sonde ampèremétrique qui réagit très vite. Une mesure toutes les 40 ms et l’autre avec le Linky, une mesure toute les 2s. Un peu lent, mais plus facile à réaliser. Je suis plus préoccupé par les watts perdus lorsque qu’il y a beaucoup trop d’énergie, les routeurs sont à 100% vers leur charge, mais il reste des Watt qui partent vers Enedis.
Merci pour le retour André.
Généralement les routeurs du marché sont plutôt calé pour être certain de ne pas avoir d’injection dans le réseau EDF donc le talon se situe au environ de 10w lorsque il y a transfert d’énergie vers le ballon ECS. On peut donc considérer que ces 10W chauffe aussi le ballon mais sont prélevés sur Enedis et non sur les panneaux.
Votre routeur offre potentiellement des performances encore plus intéressantes, cela serait peut être intéressant de faire une mesure plus précise pour comparer.
Bien cordialement
Christophe
Bonjour,
votre commentaire a attiré mon attention car je suis justement en train de travailler à une recalibration des pins ADC (convertisseur analogique -> digitale) du ESP32 couplé à une éventuelle modification des fonctions de lecture des sondes ampèremétriques et sondes de courant pour essayé d’amméliorer la précision des mesures, pas vraiment pour gratter 10W, mais plus pour le concept de voir jusqu’où est ce que l’on peut pousser le routeur présenté par André Buhart avec un ESP32.
Cordialement,
On peut régler le seuil de déclenchement comme on le souhaite. Néanmoins il faut bien réaliser que les consommations sont bruitées. Il y a sans arrêt de d’importantes variations, mise en marche de moteurs, découpage d’une plaque à induction etc.. qui font que l’on ne suit pas à 10w près. Les routeurs essayent de s’approcher de l’équilibre, mais sont sans arrêt perturbés.
Cdlt
Bonjour, dans le programme Arduino IDE 2.1.0 quand je modifie dans préférence, l’endroit ou stoker les fichiers en première ligne, le langage en Français, et en dernière ligne >> Additional boards manager URLs: https://dl.espressif.com/dl/package_esp32_index.json << Rien ne se passe Rien ne change même après redémarrage ? Savez vous peux être pourquoi
Je ne comprends pas, sauf s’il y a une faute de frappe dans l’adresse.
Cdlt
Une fois l’URL rentrée vous devez installer la librairie ESP32 de chez Espressif.
Bonjour, mise en service à l’instant. C’est fonctionnel mais pose tout de même problème.
Il ne route pas le surplus mais la totalité de la production solaire. Je m’explique ….
Je produit 1000w, la charge (maison) consomme 300w donc j’injecte 700w dans le réseau EDF.
Le routeur mis en route devrait logiquement me router les 700w vers le CE et bien pas dans mon cas, il cherche à router les … 1000w !!!
En modifiant la ligne 278 qui est « retardF = retardF + PW / 200 » en « retardF = retardF + (PW+300) / 200 j’arrive à l’équilibre.
Aurais je loupé quelques choses?
Ps: j’ai un autre routeur en fonctionnement (ATMEG328P) qui lui route bien les 700w.
vous n’auriez pas la sonde de courant monté a l’envers.?
Non, les valeurs sont bonnes et passe en négatif quand il le faut. Je vérifie la puissance dans chaque circuit via des shelly EM.
Nous avons parlez par mail hier, vous m’aviez dit que vous aviez Discord, et dans mon dernier mail je vous est envoyé une invitation à rejoindre mon tchat. Je pourrais vous y montrez dès impression d’écran des différentes valeurs si vous voulez.
Actuellement en voyage. Il m’est difficile de chater.
A l’occasion 😉
Autre point, comment ce fait il que les valeur de U et I fluctue à ce point? Taux d’échantillonnage trop faible sur un ESP32 comparer à un ATMEG ? Je profite d’avoir les deux plate-forme pour faire des comparaisons.
Étant donné que la base est la valeur PW, si cette dernière n’est pas stable il est normal que la commande du Triac en soit son reflet.
Je fait site à mon commentaire précédent car je n’est pas trouvé la façon de le modifier.
Si je prend la valeur d’EDF, au multimètre elle ne fluctue que très peu (quelques mili-volt) donc pourquoi en sortie d’ESP celle ci fluctue presque de quelques volts?
Le calcul est fait sur 100 mesures durant 20ms. Elles ne sont pas moyennes comme le fait un multimètre. c’est pour cela que vous avez l’impression que cela fluctue. On pourrait faire une moyenne sur U et I, mais je préfère filtrer au niveau de l’ouverture du Triac, en fin de chaine de calcul.
Nous sommes bien d’accord mais j’ai rajouté dans la boucle Loop quelques Serial.print qui me permettent de visualiser dans le moniteur série les valeurs U, I et quelques autres.
Mon point de comparaison est mon routeur actuel sur lequel je récupère U et I de la même manière et la comparaison est flagrante, Donc c’est le programme qui génère cette fluctuation de la régulation?
Si je n’avais pas ce point de comparaison je trouverai peu être sa normal.
Chez moi je n’ai pas de grosses fluctuations. en général inférieur a 1 volt. Cela me fait penser au problème avec certaines cartes qui n’ont pas les masses gnd reliées ensemble.
Bonjour André,
Merci pour tout ces explications. Super.
Je n’arrive pas à communiquer avec l’ESP32. Je reçois le message d’erreur:
exec: « python »: executable file not found in $PATH
Compilation error: exec: « python »: executable file not found in $PATH
Savez-vous pourquoi?
Avez vous installé les bibliothèques complémentaires qui sont listés sur la page?
Bonjour à vous,
Je suis actuellement en plein apprentissage avec mon ESP32 et j’essaye tant bien que mal a charger le programme mais je suis bloqué depuis hier sur ce message d’erreur?
/Users/Desktop/SolarRouter_v2.01/SolarRouter_v2.01/SolarRouter_v2.01.ino:30:21: fatal error: PageWeb.h: No such file or directory
#include « PageWeb.h »
compilation terminated.
exit status 1
Compilation error: PageWeb.h: No such file or directory
Apparemment vous n’avez pas tous les fichiers dans le dossier après le dezippage. Il faut :
PageWeb.cpp
PageWeb.h
SolarRouter_v2.01.ino
cdlt
C’est parfait merci
73 André,
Pour infos je voudrais ici partager quelques déboires que j’ai eu après réalisation du routeur V2.
Le gradateur fonctionnait très mal. La charge (une lampe tungstène) ne pouvait s’allumer que pour des angles de retard importants ou très faibles.
(Je précise que j’utilise le dimmer RobotDyn version 24A)
J’ai donc réalisé un petit montage proto avec un nano qui me permette de piloter l’angle à partir d’un potard.
Après quelques essais et mesures j’ai rapidement constaté que le triac ne pouvait s’allumer que pour des tensions instantanées inférieures à ~150V
Donc soit en début de période de 10ms (retard faible) ou en fin de période (retard fort). Entre deux le triac ne s’allume pas tout simplement !
-1- J’ai donc d’abord supposé que le triac était « foireux » et ai donc remplacé le BTA24 par un BTA12 que j’avais en fond de tiroir. Résultat idem !
-2- J’ai ensuite soupçonné l’optoTriac CT3021, et l’ai remplacé par un MOC3023 que j’avais (Pas facile, car le CT3021 c’est du CMS, et le MOC3023 du traversant…).
Et là bingo! Tout Ok, l’allumage est parfait sur toute la plage des 180°
Le dimmer RobotDyn étant une « chinoiserie » d’AliExpress je ne suis pas trop surpris.
Mais je tenais à laisser un message ici, car pour vos « follower » non électroniciens, et en tous cas sans oscilloscope ne pourront jamais comprendre pourquoi leur routeur tout neuf ne marche pas lorsque ce type de bug apparaît.
Dans ce cas, et pour eux je pense qu’il ne faut pas hésiter ! Si vous avez ces mêmes symptômes, changez de dimmer. (A moins de 10€). Perso j’ai perdu deux jours à pister, investiguer et corriger… Mais je suis Radio-amateur et retraité, et n’abandonne pas quand j’ai un os à ronger !
Encore merci André pour ce magnifique post qui est très clair.
J’ai particulièrement apprécié l’idée du réservoir virtuel pour piloter la réinjection dans le réseau.
Bonne continuation,
et 73 de Michel F6FXW
Je viens de faire une manip similaire, suite à votre remarque en mettant une ampoule à filament de 50W.
La manip est très facile avec le routeur version 3.00_Linky ou demande de modifier le code en forcant le retard sur la version 2.01 avec une sonde ampèremétrique.
Les résultats avec ampèremètre sont les suivants en dehors de la luminosité de l’ampoule qui suit bien le pourcentage d’ouverture du Triac.
10% 0.03A
20% 0.06A
30% 0.10A
40% 0.13A
50% 0.15A
60% 0.17A
70% 0.18A
80% 0.19A
90% 0.20A
100% 0.20A
J’ai donc une bonne progression du courant en fonction du pourcentage d’ouverture.
Vous avez fait l’essai avec une lampe tungstène. Je ne sais pas comment répond ce type d’ampoule avec un courant haché.
7
Cdlt 73
Bonjour,
Oui bien sur, avec un module dimmer opérationnel on obtient les résultats tels que vous les indiquez.
Dans mon cas il s’agit bien d’un module défectueux. (L’optotriac défaillant), et oui, la charge que j’ai utilisé est purement résistive (ampoule tungstène)
J’ai les enregistrements scope si vous le souhaitez. Mais le défaut est réglé, ce n’est pas le problème.
Ce post avait seulement pour objectif de prévenir d’autres makeurs qui seraient dans la même situation.
Je n’ai bien sûr aucune idée du nombre de modules non-fonctionnels mis sur le marché.
Ce dont je suis sûr, c’est que quelqu’un qui n’a pas une grande pratique de l’utilisation des triacs/thyristors aura bien du mal à comprendre ce type de fonctionnement erratique.
Cordiales 73, F6FXW
Bonjour,
j’ai fait récemment une manip similaire, aussi à cause d’un Dimmer partiellement défectueux (un ZC qui est en retard de 1.2ms).
j’ai relevé la puissance de sortie du Dimmer RobotDyn avec comme charge une ampoule tungstène, la mesure est faite avec une « prise intelligente » qui relève W, VA, PF etc…
j’ai pris en compte la correction du retard du ZC.
j’obtiens alors une courbe très similaire à celle reportée par André avec 50% de sortie pour 30% d’ouverture et ~100% de sortie pour 80% d’ouverture.
de mon coté j’ai fait ceci pour disposer d’une calibration du contrôle du dimmer que je vais injecter dans mon routeur basé sur une modification de la « V2 » de André.
cordialement,
Bonjour,Bonsoir, ouf j’ais reussi a ouvrir l’application sur un smartphone a encode les bonne valeur pour le voltage et l’ampérage, il me reste l’afficheur dans la petite maison dans la prairie a mètre au points, et ceci qui mes indiqué dans le moniteur série <> que cela veux t’il dire ?
01:08:15
Power:14802.00
[498656][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
connection failed
[524627][E][WiFiUdp.cpp:172] beginPacket(): could not get host from dns: 11
01:08:45
Power:10097.00
[528658][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
connection failed
[554627][E][WiFiUdp.cpp:172] beginPacket(): could not get host from dns: 11
01:09:15
Power:126127.00
[558658][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
connection failed
[584629][E][WiFiUdp.cpp:172] beginPacket(): could not get host from dns: 11
01:09:45
Power:49249.00
[588660][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
connection failed
[614627][E][WiFiUdp.cpp:172] beginPacket(): could not get host from dns: 11
01:10:15
Power:15146.00
[618658][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
connection failed
[644630][E][WiFiUdp.cpp:172] beginPacket(): could not get host from dns: 11
01:10:45
Power:120642.00
[648661][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
connection failed
[674647][E][WiFiUdp.cpp:172] beginPacket(): could not get host from dns: 11
01:11:15
Power:122504.00
[678678][I][WiFiClient.cpp:253] connect(): select returned due to timeout 3000 ms for fd 53
connection failed
Visiblement le Wifi n’arrive pas à se connecter. Reprenez la zone dédiée au WIFI et vérifiez :
– le nom (SSID)
– le mot de passe (password) de votre réseau
– l’adresse IP que vous donnez à l’ESP32
– l’adresse IP de la passerelle (gateway)
Le wifi se connecte bien avec mon smartphone les valeurs sont affichés et le graphique avec les sinusoïdes aussi et a l’air de bien le rester.
Mais la carte esp32 avec l’afficheur n’est pas encore alimenter.
Bonjour,
Je n’obtient pas l’heure correcte. (il n’y pas d’erreur de compilation pour NTPserveur.h )
Lorsque la fonction « void Read_Hour() » est exécutée, l’instruction « Serial.println(temps.getFormattedTime() » renvoie un horodatage incorrect.
Voir ci-dessus un extrait de la console.
On voit bien qu’il y a une lecture toutes les 30s, mais l’heure n’est pas juste (puisque qu’en réalité il était 17h13 au lancement du programme)
Du coup ModeHeader passe à ‘5’ et donc force le dimmer à plein pots !
Qu’est-ce que j’ai pu mal faire ?…
// ~~~~~~~~~ Extrait du moniteur série ~~~~~~~~~~~~~
17:13:58.417 -> Test Time ->01:00:47
17:13:58.417 -> Power:0.00
17:14:28.413 -> Test Time ->01:01:17
17:14:28.413 -> Power:0.00
17:14:58.438 -> Test Time ->01:01:47
17:14:58.438 -> Power:0.00
17:15:28.435 -> Test Time ->01:02:17
17:15:28.435 -> Power:0.00
17:15:58.430 -> Test Time ->01:02:47
17:15:58.430 -> Power:0.00
17:16:28.460 -> Test Time ->01:03:17
17:16:28.460 -> Power:0.00
17:16:58.454 -> Test Time ->01:03:47
Cordialement,
73 F6FXW
Il ne trouve pas le serveur de temps. Probablement l’adresse IP du Gateway (passerelle de votre réseau. En général adresse de la box internet) pour accéder au monde extérieur n’est pas bonne.
Cdlt
Merci André,
Sorry, je me suis rendu compte que l’aviez précisé dans votre paragraphe « Personnalisation » !
C’est corrigé, et après mise à jour de l’offset à 7200, je récupère bien l’heure locale « juste »
Merci,
73 F6FXW
Bonjour,
Je ne sais pas comment joindre un document sur ce site.
Je vous ai donc envoyé un courrier à votre adresse gmail, avec des copies d’écran et analyse des résultats.
Les observations faites me laissent perplexe, et votre avis me serait bien utile.
Bien cordialement,
F6FXW Michel