La mesure de puissance fonctionne maintenant, reste encore tout le reste à faire

This commit is contained in:
Christian Zufferey
2020-06-03 20:13:40 +02:00
parent 3583c74cd5
commit 7431eeb759
6 changed files with 134 additions and 136 deletions

View File

@@ -1,5 +1,5 @@
-- Petit script pour faire office de crontab pour les mesures
print("\n 0_cron.lua zf200527.1827 \n")
print("\n 0_cron.lua zf200603.1950 \n")
cron1=tmr.create()
cron1:alarm(10*1000, tmr.ALARM_AUTO, function()
@@ -8,15 +8,14 @@ cron1:alarm(10*1000, tmr.ALARM_AUTO, function()
http_post(influxdb_url,"energy,memory=cron1_"..yellow_id.." ram="..node.heap())
f = "0_1_htu21d.lua" if file.exists(f) then dofile(f) end
http_post(influxdb_url,"energy,capteur=th1 temperature="..ztemp1)
http_post(influxdb_url,"energy,capteur=th1 humidity="..zhum1)
-- f = "0_1_htu21d.lua" if file.exists(f) then dofile(f) end
-- http_post(influxdb_url,"energy,capteur=th1 temperature="..ztemp1)
-- http_post(influxdb_url,"energy,capteur=th1 humidity="..zhum1)
--
-- ztemp1=nil zhum1=nil ztemp2=nil zhum2=nil
f = "0_2_htu21d.lua" if file.exists(f) then dofile(f) end
http_post(influxdb_url,"energy,capteur=th2 temperature="..ztemp2)
http_post(influxdb_url,"energy,capteur=th2 humidity="..zhum2)
ztemp1=nil zhum1=nil ztemp2=nil zhum2=nil
-- f = "0_zdyndns.lua" if file.exists(f) then dofile(f) end

View File

@@ -1,6 +1,6 @@
-- Lit le convertisseur ADC connecté sur le transformateur de courant
-- pour mesurer le courant électrique de l'installation PV
print("\n 0_get_data.lua zf191024.1037 \n")
print("\n 0_get_power.lua zf200603.2013 \n")
-- Astuce de mesure:
-- On converti le courant en tension avec la résistance de charge du
@@ -17,10 +17,9 @@ print("\n 0_get_data.lua zf191024.1037 \n")
-- bien dans la plage de mesure avec le choix de la résistance de conversion
-- la conversion courant/tension/puissance est faite avec une simple régle de 3
zpow_cal=401 --puissance mesurée de la charge étalon
zadc_cal=189 --valeur de l'adc pour zpow_cal
zadc_offset=548
zpow_cal=692 --puissance mesurée de la charge étalon
zadc_cal=59 --valeur de l'adc pour zpow_cal
zadc_offset=172
zadc_sum=0 zadc_offset_sum=0 znb_mes=0
zadc_min=zadc_offset zadc_max=zadc_offset

View File

@@ -1,10 +1,16 @@
# Mesure d'énergie d'une installation monophasée
zf200603.1508
zf200603.1940
**ATTENTION:<br>
Ce README est parti d'un autre projet similaire, donc pas tout juste pour ce projet**
<!-- TOC titleSize:2 tabSpaces:2 depthFrom:1 depthTo:6 withLinks:1 updateOnSave:1 orderedList:0 skip:1 title:1 charForUnorderedList:* -->
## Table of Contents
* [Astuces de mesures de la puissance](#astuces-de-mesures-de-la-puissance)
* [Schéma](#schéma)
* [Astuces](#astuces)
* [Installation](#installation)
* [Utilisation](#utilisation)
* [Distribution des rôles de NodeMCU](#distribution-des-rôles-de-nodemcu)
@@ -55,7 +61,21 @@ Toutes les fonctions sont bien séparées dans des scripts, cela *complexifie* l
## Astuces de mesures de la puissance
Dans ce projet il y a 1x NodeMCU qui mesure la production électrique de mon installation solaire PV. On mesure le courant injecté dans le réseau électrique de la maison avec un petit transformateur de courant 1/800 *clipsé* sur la phase de l'onduleur.<br>
Dans ce projet il y a 1x NodeMCU qui mesure la production électrique de mon installation solaire PV. On mesure le courant injecté dans le réseau électrique de la maison avec un petit transformateur de courant *clipsé* sur la phase du smart inverter.<br>
### Schéma
![Image](https://github.com/zuzu59/NodeMCU_Lua/blob/master/Mesures/energy/transfo_courant_clip_1p/schemas/sch%C3%A9ma.png?raw=true)
Le petit transfo de courant a un rapport de 25mA à 20A, soit 0.025/20=0.00125 soit encore 1/800.
Une masse virtuelle de 0.5V est constituée avec le pont des résistances R2/R1, cela permet de *remonter* la tension alternative de la mesure de courant.
La résistance R3 est utilisée pour la conversion courant/tension du transfo de courant.<br>
Pour une charge maximale de 600W, la résistance R3 est de 100R, et pour 1'200W elle est de 56R.
### Astuces
* Comme le convertisseur ADC du NodeMCU ne peut mesurer que des valeurs positives comprises entre 0V et 1V, on ajoute une masse *fictive* au signal du transformateur de courant de 0.5V afin de *remonter* l'alternance négative.<br>
Au lieu de *découper* la sinusoïde (50Hz) en 100 *parties*, c'est à dire toutes les 0.2ms (5'000x /s), pour en faire l'intégrale. On lit l'ADC toutes les 11ms (seulement 91x /s) donc beaucoup plus lentement.<br>
* Comme la sinusoïde fait 20ms et est *répétitive*, on balaye (par *décalage*) statistiquement la sinusoïde.<br>

View File

@@ -1,6 +1,6 @@
-- Scripts à charger après le boot pour démarrer son projet
print("\n boot.lua zf200530.1211 \n")
print("\n boot.lua zf200603.1953 \n")
-- function ztime_stamp() return tmr.now()/1000000 end
@@ -20,7 +20,10 @@ function boot()
f="0_btn_flipflop.lua" if file.exists(f) then dofile(f) end
-- print(node.heap()) collectgarbage() print(node.heap())
f="0_cron.lua" if file.exists(f) then dofile(f) end
f="0_get_power.lua" if file.exists(f) then dofile(f) end
-- f="0_cron.lua" if file.exists(f) then dofile(f) end
print("verbose:",verbose) print("boot lancé...")
gpio.write(zLED, gpio.HIGH)

View File

@@ -1,23 +1,103 @@
<!DOCTYPE html>
<!-- ATTENTION, la longueur des lignes DOIT être <128 ! -->
<html lang="fr" dir="ltr">
<head>
<meta charset='utf-8' name='viewport' content='width=device-width, initial-scale=1.0'>
<title>ESP8266 home page</title>
<meta charset='utf-8' name='viewport' content='width=device-width, initial-scale=1.0'>
<%
zout("<title>"..node_id.."</title>")
%>
</head>
<body>
<h1>ESP8266 home page 190727.0941</h1>
<h2>Différentes pages HTML:</h2>
<h3>
<a href="z_page1.html">Page 1, affichage de la température dynamique en code Lua inline.</a><br>
<a href="z_page2.html">Page 2, tableau dynamique écrit en Lua inline.</a><br>
<a href="z_page3.html">Page 3, affichage du capteur non linéaire corrigé.</a><br>
<a href="z_page4.html?field1=11&field2=12&field3=13">Page 4, test de récupération d'arguments pour un web service.</a><br>
<a href="api_hub_temp.html?field1=11&field2=12&field3=13">API HUB Temp, test d'un web service hub de mesures de température.</a><br>
<a href="disp_temp.html">Affichage des températures, affiche les températures mesurées.</a><br>
<a href="page_qui_existe_pag.html">Page qui n'existe pas !</a><br>
</h3>
</body>
<%
zout("<h1>"..node_id.."&nbsp;&nbsp;&nbsp; 200118.1804 </h1>")
%>
<a href="/">Home...</a><br>
<h2>Menu:</h2>
<h3>
LED
<a href="api_sonoff.html?LED=on"> On</a>
<a href="api_sonoff.html?LED=off"> Off</a><br>
<a href="disp_temp.html">Affichage de la température et humidité</a><br>
<br>
<a href="z_index.html?SetupWIFI=true">Wifi setup</a><br>
</h3>
<%
if _GET.SetupWIFI == "true" then
print("On demande le setup wifi depuis le browser !")
wifi_setup_ok=(math.floor(100*node.random()))
zout("<br><br>Etes-vous vraiment certain ?<br>Si oui, faites: ")
zout('<a href="/?SetupWIFI='..wifi_setup_ok..'"> Ok</a><br><br>')
end
%>
<%
if (wifi_setup_ok ~= nil) and (_GET.SetupWIFI == tostring(wifi_setup_ok)) then
print("On confirme le setup wifi depuis le browser !")
zout("<br><br>Choisir comme WIFI AP: setup_gadget puis aller sur: http://192.168.4.1<br><br>")
file.putcontents("_setup_wifi_", "toto")
tmr.create():alarm(5*1000, tmr.ALARM_SINGLE, function()
print("on restart pour le setup wifi")
wifi.sta.config{ssid="", pwd="", auto=true, save=true}
wifi.sta.autoconnect(1) wifi.sta.connect()
node.restart()
end)
end
%>
<%
if _GET.RESTART == "true" then
print("oups restart...")
zout("<br><br>oups restart...<br><br>")
tmr.create():alarm(5*1000, tmr.ALARM_SINGLE, function()
print("on restart...")
node.restart()
end)
end
%>
<%
zout("Etat de la LED:<nsp>")
if gpio.read(zLED) == 1 then zout("OFF") else zout("ON") end
zout("<br>")
%>
<%
if zRELAY ~= nil then
zout("Etat du RELAY:<nsp>")
if gpio.read(zRELAY) == 0 then zout("OFF") else zout("ON") end
zout("<br>")
end
%>
<%
a,b,c = wifi.sta.getip()
if a ~= nil then
zout("<br>IP: "..a.."<br>\n".."MASK: "..b.."<br>\n".."GATEWAY: "..c.."<br>\n")
a=nil b=nil c=nil
end
collectgarbage() zout("RAM: "..node.heap().."<br>")
%>
<%
zout("<br>Etat des GLOBALS !<br>\n")
zout("<table>\n")
for k,v in pairs(_G) do
if k ~= "lua_code" then
v = tostring(v)
zout("<tr>")
zout("<td>"..k.."</td>") zout("<td>"..v.."</td>")
zout("</tr>\n")
end
end
zout("</table>")
%>
<br><br><a href="/?RESTART=true"> Restart !</a><br>
</body>
</html>

View File

@@ -1,103 +0,0 @@
<!DOCTYPE html>
<!-- ATTENTION, la longueur des lignes DOIT être <128 ! -->
<html lang="fr" dir="ltr">
<head>
<meta charset='utf-8' name='viewport' content='width=device-width, initial-scale=1.0'>
<%
zout("<title>"..node_id.."</title>")
%>
</head>
<body>
<%
zout("<h1>"..node_id.."&nbsp;&nbsp;&nbsp; 200118.1804 </h1>")
%>
<a href="/">Home...</a><br>
<h2>Menu:</h2>
<h3>
LED
<a href="api_sonoff.html?LED=on"> On</a>
<a href="api_sonoff.html?LED=off"> Off</a><br>
<a href="disp_temp.html">Affichage de la température et humidité</a><br>
<br>
<a href="z_index.html?SetupWIFI=true">Wifi setup</a><br>
</h3>
<%
if _GET.SetupWIFI == "true" then
print("On demande le setup wifi depuis le browser !")
wifi_setup_ok=(math.floor(100*node.random()))
zout("<br><br>Etes-vous vraiment certain ?<br>Si oui, faites: ")
zout('<a href="/?SetupWIFI='..wifi_setup_ok..'"> Ok</a><br><br>')
end
%>
<%
if (wifi_setup_ok ~= nil) and (_GET.SetupWIFI == tostring(wifi_setup_ok)) then
print("On confirme le setup wifi depuis le browser !")
zout("<br><br>Choisir comme WIFI AP: setup_gadget puis aller sur: http://192.168.4.1<br><br>")
file.putcontents("_setup_wifi_", "toto")
tmr.create():alarm(5*1000, tmr.ALARM_SINGLE, function()
print("on restart pour le setup wifi")
wifi.sta.config{ssid="", pwd="", auto=true, save=true}
wifi.sta.autoconnect(1) wifi.sta.connect()
node.restart()
end)
end
%>
<%
if _GET.RESTART == "true" then
print("oups restart...")
zout("<br><br>oups restart...<br><br>")
tmr.create():alarm(5*1000, tmr.ALARM_SINGLE, function()
print("on restart...")
node.restart()
end)
end
%>
<%
zout("Etat de la LED:<nsp>")
if gpio.read(zLED) == 1 then zout("OFF") else zout("ON") end
zout("<br>")
%>
<%
if zRELAY ~= nil then
zout("Etat du RELAY:<nsp>")
if gpio.read(zRELAY) == 0 then zout("OFF") else zout("ON") end
zout("<br>")
end
%>
<%
a,b,c = wifi.sta.getip()
if a ~= nil then
zout("<br>IP: "..a.."<br>\n".."MASK: "..b.."<br>\n".."GATEWAY: "..c.."<br>\n")
a=nil b=nil c=nil
end
collectgarbage() zout("RAM: "..node.heap().."<br>")
%>
<%
zout("<br>Etat des GLOBALS !<br>\n")
zout("<table>\n")
for k,v in pairs(_G) do
if k ~= "lua_code" then
v = tostring(v)
zout("<tr>")
zout("<td>"..k.."</td>") zout("<td>"..v.."</td>")
zout("</tr>\n")
end
end
zout("</table>")
%>
<br><br><a href="/?RESTART=true"> Restart !</a><br>
</body>
</html>