diff --git a/Mesures/solar_pv_energy/0_get_data.lua b/Mesures/solar_pv_energy/0_get_data.lua
index a5a0a37..8312c0d 100644
--- a/Mesures/solar_pv_energy/0_get_data.lua
+++ b/Mesures/solar_pv_energy/0_get_data.lua
@@ -1,25 +1,29 @@
-- 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 zf190916.1925 \n")
+print("\n 0_get_data.lua zf190916.1945 \n")
-- Astuce de mesure:
--- au lieu de découper la sinusoïde en 100 parties, c'est à dire toutes
+-- On converti le courant en tension avec la résistance de charge du
+-- transformateur de courant 1/800 et le mesure avec l'ADC
+-- Au lieu de découper la sinusoïde 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 (91x /s) beaucoup plus lentement.
+-- les 11ms (91x /s) donc beaucoup plus lentement.
-- Comme la sinusoïde fait 20ms et est répétitive, on balaye (par décalage)
-- statistiquement la sinusoïde.
-- On redresse l'alternance par rapport à la masse fictive (env 0.5),
-- ce qui nous permet d'estimer une valeur RMS du courant
--- quelque soit sa forme !
--- On le somme sur 2.1 secondes avec une moyenne glissante sur 3 valeurs
+-- quelque soit sa forme et on le somme sur 2.1 secondes
+-- Les mesures min et max ne sont là juste pour vérifier que nous sommes
+-- 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=401
-zadc_cal=189
-zadc_err=-5
zadc_sum=0 zadc_offset_sum=0 znb_mes=0
-zadc_rms1=0 zadc_rms2=0 zadc_rms3=0
+zadc_min=zadc_offset zadc_max=zadc_offset
if adc.force_init_mode(adc.INIT_ADC)
then
@@ -39,19 +43,20 @@ end)
function read_adc()
zadc=adc.read(0)
+ if zadc<=zadc_min then zadc_min=zadc end
+ if zadc>=zadc_max then zadc_max=zadc end
zadc_offset_sum=zadc_offset_sum+zadc
zadc=zadc-zadc_offset if zadc<=0 then zadc=zadc*-1 end
zadc_sum=zadc_sum+zadc znb_mes=znb_mes+1
end
function calc_rms()
- zadc_rms=math.floor(zadc_sum/znb_mes)+zadc_err
- if zadc_rms<=0 then zadc_rms=0 end
--- zadc_rms1=zadc_rms2 zadc_rms2=zadc_rms3 zadc_rms3=zadc_rms
--- zadc_rms=math.floor((zadc_rms1+zadc_rms2+zadc_rms3)/3)
+ zadc_rms=math.floor(zadc_sum/znb_mes)
+ if zadc_rms<=8 then zadc_rms=0 end
zadc_offset=math.floor(zadc_offset_sum/znb_mes)
zpower=math.floor(zadc_rms*zpow_cal/zadc_cal)
- print(zadc_offset,zadc_rms,zpower.."W")
+ print(zadc_min,zadc_max,zadc_max-zadc_min,zadc_offset,zadc_rms,zpower.."W")
zadc_min=zadc_offset zadc_max=zadc_offset
zadc_sum=0 zadc_offset_sum=0 znb_mes=0
+ zadc_min=zadc_offset zadc_max=zadc_offset
end
diff --git a/Mesures/solar_pv_energy/0_get_data.lua.190916.1911 b/Mesures/solar_pv_energy/0_get_data.lua.190916.1911
deleted file mode 100644
index c4fed64..0000000
--- a/Mesures/solar_pv_energy/0_get_data.lua.190916.1911
+++ /dev/null
@@ -1,66 +0,0 @@
--- 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 zf190916.1904 \n")
-
--- Astuce de mesure:
--- au lieu de découper la sinusoïde 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 (91x /s) beaucoup plus lentement.
--- Comme la sinusoïde fait 20ms et est répétitive, on balaye (par décalage)
--- statistiquement la sinusoïde.
--- On redresse l'alternance par rapport à la masse fictive (env 0.5),
--- ce qui nous permet d'estimer une valeur RMS du courant
--- quelque soit sa forme !
--- On le somme sur 2.1 secondes avec une moyenne glissante sur 3 valeurs
-
-zadc_offset=550
-zpow_cal=401
-zadc_cal=189
-zadc_err=-5
-
-zadc_min=zadc_offset zadc_max=zadc_offset
-zadc_sum=0 zadc_min_sum=0 zadc_max_sum=0 znb_mes=0
-zadc_rms1=0 zadc_rms2=0 zadc_rms3=0
-
-if adc.force_init_mode(adc.INIT_ADC)
-then
- node.restart()
- return
-end
-
-tmr_read_adc=tmr.create()
-tmr_read_adc:alarm(11, tmr.ALARM_AUTO, function()
- read_adc()
-end)
-
-tmr_calc_rms=tmr.create()
-tmr_calc_rms:alarm(2.1*1000, tmr.ALARM_AUTO, function()
- calc_rms()
-end)
-
-function read_adc()
- zadc=adc.read(0)
- if zadc<=zadc_min then zadc_min=zadc end
- if zadc>=zadc_max then zadc_max=zadc end
- zadc_min_sum=zadc_min_sum+zadc_min
- zadc_max_sum=zadc_max_sum+zadc_max
- zadc=zadc-zadc_offset if zadc<=0 then zadc=zadc*-1 end
- zadc_sum=zadc_sum+zadc znb_mes=znb_mes+1
-end
-
-function calc_rms()
- zadc_rms=math.floor(zadc_sum/znb_mes)+zadc_err
- if zadc_rms<=0 then zadc_rms=0 end
- zadc_rms1=zadc_rms2 zadc_rms2=zadc_rms3 zadc_rms3=zadc_rms
- zadc_rms=math.floor((zadc_rms1+zadc_rms2+zadc_rms3)/3)
-
- zadc_min=math.floor(zadc_min_sum/znb_mes)
- zadc_max=math.floor(zadc_max_sum/znb_mes)
- zadc_offset=math.floor((zadc_min+zadc_max)/2)
-
- zpower=math.floor(zadc_rms*zpow_cal/zadc_cal)
- print(zadc_min,zadc_max,zadc_max-zadc_min,zadc_offset,zadc_rms,zpower.."W")
- zadc_min=zadc_offset zadc_max=zadc_offset
- zadc_sum=0 zadc_min_sum=0 zadc_max_sum=0 znb_mes=0
-
-end
diff --git a/Mesures/solar_pv_energy/README.md b/Mesures/solar_pv_energy/README.md
index abc5478..ea92231 100644
--- a/Mesures/solar_pv_energy/README.md
+++ b/Mesures/solar_pv_energy/README.md
@@ -37,11 +37,13 @@ Toutes les fonctions sont bien séparées dans des scripts, ce qui facilite la p
## Astuces de mesures
-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.
-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.
-De plus, on lit l'ADC toutes les 11ms, soit 91x par seconde. Comme l'alternance fait 20ms, on balaye (déphasage) statistiquement l'alternance. On redresse l'alternance négative par rapport à la masse fictive, ce qui nous permet de mesurer une valeur RMS du courant quelque soit sa forme !
-On le fait toutes les 2.1 secondes avec une moyenne glissante sur 3 valeurs.
-Le calcul de la puissance mesurée est très simpliste, un simple ```P=U*I```. On ne tient pas compte ici du ```cos(phy)`` qui pourrait varier en fonction des charges inductives dans la maison !
+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.
+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.
+Au lieu de *découper* la sinusoïde 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 (91x /s) donc beaucoup plus lentement.
+Comme la sinusoïde fait 20ms et est *répétitive*, on balaye (par *décalage*) statistiquement la sinusoïde.
+On *redresse* l'alternance par rapport à la masse fictive (env 0.5V), ce qui nous permet d'estimer une valeur RMS du courant quelque soit sa forme et on le somme sur 2.1 secondes.
+Les mesures min et max ne sont là juste pour vérifier que nous sommes bien dans la plage de mesure avec le choix de la résistance de *conversion* du transformateur de courant.
+Le calcul de la puissance mesurée est très simpliste, un simple ```P=U*I```. On ne tient pas compte ici du ```cos(phy)``` qui pourrait varier en fonction des charges inductives dans la maison !
@@ -133,7 +135,7 @@ Seulement la corrélation entre les trois température
https://thingspeak.com/apps/plugins/300559
-zf190909.0119
+zf190916.1957
pense bête: