La mesure de puissance fonctionne maintenant, reste encore tout le reste à faire
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||

|
||||
|
||||
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>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.." 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>
|
||||
|
||||
@@ -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.." 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>
|
||||
Reference in New Issue
Block a user