Desarrollo: PulsePi, registra y controla tu consumo.

Cui Bono

So far, so good
Desde
19 Jul 2007
Mensajes
29.855
Reputación
51.554
PulsePI es una aplicación creada por mí (y espero que por otros también) para el microcontrolador Raspberry PI (en adelante la llamaré "raspi") que le permite registrar los pulsos de un contador de energía y presentar esos datos. Está siendo probada sobre la distribúción Raspbian, que es un port de Debian Wheezy para la arquitectura ARM del raspi.

RaspberryPi.jpg


Más info: Raspberry Pi - Wikipedia, la enciclopedia libre

Esta aplicación funciona tras una adaptación del hardware, añadiendo un circuito al emisor de pulsos.

El primer diseño es éste:
pulsePi.jpg


Se parte del hecho de que los impulsos en un contador Hager EC-152 son en salida a colector abierto.

Lo más limpio sería usar un relé y puentear con un contacto libre de tensión GPIO0 con GND cuando llegue un pulso, pero también es lo más caro y haría necesario usar una fuente de alimentación externa si no queremos que nuestra raspi tenga una bobina en su alimentación.

He sustituido el relé por un circuito optoacoplado alimentado por la propia raspi.

El tras*istor de salida (dentro del contador) actúa como un interruptor, uniendo eléctricamente sus dos puntas accesibles cuando sucede el pulso. Ese "corto" provoca el paso de corriente por el diodo led del optoacoplador, que actúa inyectando electrone por la base del fototransistor haciendo que su colector y emisor funcionen también como si fuera un interruptor, dando paso a la corriente entre colector y emisor y, por tanto, poniendo GPIO0 a referencia cercana a cero voltios, y eso es lo que hace que se genere la rutina de interrupción en nuestra raspi.

El programa necesita para la ejecución tener instalados libmysqlclient y las librerías wiringPi.
https://projects.drogon.net/raspberry-pi/wiringpi/

Para el desarrollo en lenguaje C necesitamos las librerías de mysql y este Makefile adaptado por mí:
http://46.137.166.84/pulsepi/Makefile

El código en C se compila y linka con el Makefile, poniendo ambos (pulsePi.c y su Makefile) en el mismo directorio y ejecutando "make". Este es pulsePi.c en su primera y brutota versión:
http://46.137.166.84/pulsepi/pulsePi.c.txt

Es necesario tener instalado un servidor mySQL con una base de datos que sea accesible por la aplicación (ver configuración de la base en el código fuente de pulsePi).

Cuando llega el pulso, se genera una interrupción. El raspi deja de hacer lo que esté haciendo y la atiende. Captura el tiempo unix de su reloj interno (se supone exacto porque la raspi se actualiza con servidores NTP) y salva la info en la base de datos. No hace nada más. La lectura e interpretación de los datos se hace con consultas a la base de datos, que pueden hacerse con diversas aplicaciones (también con el popular Excell y sus opciones de importación de datos externos).

Los primeros datos obtenidos son estos: http://46.137.166.84/pulsepi/pulsos.csv (podeis importarlo a EXCELL).

El número que empieza por 135... es un timestamp unix, eso se convierte a dia mes año segundos y microsegundos con diferentes funciones, como por ejemplo, con éste código en PHP, que usa la función "date" : http://46.137.166.84/pulsepi/codigo_php.txt
Este PHP, ejecutado en un webserver da como salida un texto tal que éste: http://46.137.166.84/pulsepi/salida_php.txt

Al incorporar un servidor web y tener los datos de los pulsos en una base mysql, la manipulación de los datos y la representación con gráficos reshulones o listados de textos se hace mucho más potente.

Cada pulso son 100wh, según las especificaciones del contador. Para convertir esa energía a potencia media instantánea hay que restarle al tiempo actual el tiempo del anterior pulso y tendríamos P = 3600 seg/hr x 100 w*hr/((t-t1)seg) = 360000/(t-t1) w, simbolizando esos vatios el promedio de potencia instantánea consumida durante el pulso. Podeis ver cómo se hace eso en el programa PHP de ejemplo que os he puesto.

Los datos de esta primera prueba no han salido perfectos. Aunque como totalizador sí que serviría ya que el número de pulsos se corresponde (más o menos), con un error de 8 pulsos, con lo que me marca antes y después mi contador en su display. Sin embargo, hay pulsos fantasma que falsean los datos de potencia media instantánea.

El número de pulsos por hora es pequeño (unos pocos a la hora) y, además, aparecen errores, seguramente debido a "rebotes" en el hardware. Una cosa es cortocircuitar GPIO0 y GND a pata juntando cables (eso me salía muy bien) y otra depender de la caja de color que supone el circuito interno de impulsos del contador, que seguramente sea otro optoacoplador.

Se puede solucionar añadiendo un filtro, cambiando la alimentación de 3.3v a la de 5v o quizás poniendo un condensador entre colector y emisor de la salida de impulsos. Tengo que probarlo.

Tal y como está, creo que necesita un sensor adicional, de corriente en amperios, que nos de pulsos con mayor frecuencia, quizás uno cada 10 segundos o así. Este nuevo sensor ayudaría a corregir los falsos pulsos y, a la vez, podríamos usar los pulsos del totalizador de whr para autocalibrar el propio sensor, pero esto da para otro post y éste ya es un tocho.
 
Ese bicho no tiene conversor A/D ?

Ya puestos lo interesante (lonchafinista) seria medir tu la tensión y la corriente, te ahorras el medidor de consumo :D

Edito:

Si tienes problemas de ruido usa los 5V en vez de los 3.3V y pon una resistencia los más pequeña posible, para que pase la mayor cantidad de corriente posible por el diodo del optoacoplador.

A la salida del optoacoplador veo algo que no entiendo, no deberías poner una resistencia entre la tensión 3.3V y la pata 5 del opto? Al final no querías usar una salida en colector abierto y estas usando una salida en colector abierto, la del optoacoplador en este caso.
 
Última edición:
Leo "programar".... y se me cierra la mente. La vez que me puse me pareció algo complicadísimo. En fin, algún día tendré que empezar.

Gracias por compartir este proyecto. Estuve indagando algo en cosillas similares, con el arduino, que ya tiene algunos proyectos funcionando... y me compré el OWL, que te lo da todo básicamente hecho más la excel que ya puse en el otro hilo y me voy sirviendo.

Lo seguiré de cerca por si veo oportunidad de cambiar o añadirlo junto con el OWL.

Lo que más me interesa sería disponer de algún dispositivo que hiciera varias lecturas de consumo a la vez y por separado, para poder medir distintos circuitos o aparatos.

Ánimo y felicitaciones.
 
Las conexiones no me acaban de gustar como las has hecho.
Yo las haría de esta forma.
Faltaría calcular las resistencias del emisor para que hubieran 3.3V en la entrada del gpio cuando el tras*istor entre en saturación.
Tambien la R1 habría que calcularla en función de los Voltios que tenga el tras*istor del contador durante el pulso.

 
Última edición:
No tiene. Un A/D tendría que ser externo.

Sí que tiene 2 comparadores analógicos, de los que solo uno es accesible. Con ese comparador analógico y una conversión V/F previa puedes tener una especie de A/D rústico, pero el coste no valdría la pena y sería más efectivo comprar una tarjeta de expansión para la raspi.

Una posible solución que barajo es ésto:
Sensor de corriente ACS714 - 30A - BricoGeek.com

Eso es un ACS714 Allegro, lleva un sensor hall de corriente.

Si te fijas en el datasheet, http://www.pololu.com/file/0J196/ACS714.pdf en la página 13 tienes el diagrama "Application 4. Rectified Output. 3.3 V scaling". Ten en cuenta que la corriente de cuadro es alterna, por eso hay que rectificar, pasar de Iac a Vac y luego rectificar Vac a Vcc con algún rizado.

Luego podría venir algo como ésto, que es de lo que hablas, un ADC, Brian Dorey.com | Raspberry Pi I2C Analog-to-Digital Converter
Yo esto lo veo muy aparatoso y propongo otra solución.

¿Cómo pasamos de un Ivac/Vdc con un ACS714 a una conversión A/D efectiva y, a la vez, barata ahorrándonos un ADC? Con lo que he comentado antes, un convertidor voltaje-frecuencia que tome la tensión del ACS714 ( http://www.ti.com/lit/ds/symlink/lm331.pdf ), y luego a contar pulsos.

Podría ser una solución que destierre el contador.
 
Las conexiones no me acaban de gustar como las has hecho.
Yo las haría de esta forma.
Faltaría calcular las resistencias del emisor para que hubieran 3.3V en la entrada del gpio cuando el tras*istor entre en saturación.


Veo el mismo problema en tu montaje que en el original, cuando el tras*istor del opto esta en corte estas midiendo una tensión flotante, eso es una fuente de ruido impresionante.

Lo suyo es poner una resistencia entre los 3.3V y la pata cinco y medir la entrada en la pata 5. Cuando el tras*istor esta en corte estas midiendo los 3.3V de alimentación ya que la resistencia del tras*istor se considera infinita, cuando esta en saturación estas midiendo los 0V de GND, no hay tensiones flotantes.
 
Veo el mismo problema en tu montaje que en el original, cuando el tras*istor del opto esta en corte estas midiendo una tensión flotante, eso es una fuente de ruido impresionante.

Lo suyo es poner una resistencia entre los 3.3V y la pata cinco y medir la entrada en la pata 5. Cuando el tras*istor esta en corte estas midiendo los 3.3V de alimentación ya que la resistencia del tras*istor se considera infinita, cuando esta en saturación estas midiendo los 0V de GND, no hay tensiones flotantes.

Cuando el tras*istor está en corte la pata GPIO0 mide "1" lógico, ya que tiene un pull-up interno de 1K8 ohm, no cecesitas implementar tú mismo el pull-up poniendo la resistencia que dices. Pull-up resistor - Wikipedia, the free encyclopedia Es decir, con las patas GPIO0 y GND al aire ya tienes un "1". La conmutación es tirando a tierra la pata GPIO0.

La pata GPIO0 mide "0" si cortocircuitas esa pata con GND.

La pata 5 la tienes que tirar a tierra a través de la unión colector-emisor y la corriente queda limitada por el pull-up interno de la raspi.

La configuración de koni es la de "seguidor emisor" y no nos valdría en este caso, porque la lógica de la entrada es contraria. La tensión en este esquema no es flotante cuando está en corte, está a tierra a través de a resistencia.

Pero viene bien este apunte que me hace, porque lo del pull-up es básico y no lo había explicado y puede dar lugar a esquemas equivocados.

Puedes ver el pull-up en la página 2 del esquema:
www.raspberrypi.org/wp-content/uploads/2012/04/Raspberry-Pi-Schematics-R1.0.pdf

Como podeis ver, no podemos conectar la pata GPIO0 a 5v, es una pata que tiene 3.3V a través del pull-up. Esa parte del circuito es de 3.3v. Sí que podemos meterle 5v al diodo del optoacoplador para separar una posible fuente de ruido alimentando esa parte del circuito con la fuente de 5v y no la dde 3.3v.
 
Las conexiones no me acaban de gustar como las has hecho.
Yo las haría de esta forma.
Faltaría calcular las resistencias del emisor para que hubieran 3.3V en la entrada del gpio cuando el tras*istor entre en saturación.
Tambien la R1 habría que calcularla en función de los Voltios que tenga el tras*istor del contador durante el pulso.


Cuando el tras*istor está en corte la pata GPIO0 mide "1" lógico, ya que tiene un pull-up interno de 1K8 ohm, no cecesitas implementar tú mismo el pull-up poniendo la resistencia que dices. Pull-up resistor - Wikipedia, the free encyclopedia Es decir, con las patas GPIO0 y GND al aire ya tienes un "1". La conmutación es tirando a tierra la pata GPIO0.

La pata GPIO0 mide "0" si cortocircuitas esa pata con GND.

La pata 5 la tienes que tirar a tierra a través de la unión colector-emisor y la corriente queda limitada por el pull-up interno de la raspi.

La configuración de koni es la de "seguidor emisor" y no nos valdría en este caso, porque la lógica de la entrada es contraria. La tensión en este esquema no es flotante cuando está en corte, está a tierra a través de a resistencia.

Pero viene bien este apunte que me hace, porque lo del pull-up es básico y no lo había explicado y puede dar lugar a esquemas equivocados.

Puedes ver el pull-up en la página 2 del esquema:
www.raspberrypi.org/wp-content/uploads/2012/04/Raspberry-Pi-Schematics-R1.0.pdf

Como podeis ver, no podemos conectar la pata GPIO0 a 5v, es una pata que tiene 3.3V a través del pull-up. Esa parte del circuito es de 3.3v. Sí que podemos meterle 5v al diodo del optoacoplador para separar una posible fuente de ruido alimentando esa parte del circuito con la fuente de 5v y no la dde 3.3v.

Ok, no he mirado el esquema del raspi, si tiene una resistencia de pull-up interna no hace falta ponerla fuera.

No tiene. Un A/D tendría que ser externo.

Sí que tiene 2 comparadores analógicos, de los que solo uno es accesible. Con ese comparador analógico y una conversión V/F previa puedes tener una especie de A/D rústico, pero el coste no valdría la pena y sería más efectivo comprar una tarjeta de expansión para la raspi.

Una posible solución que barajo es ésto:
Sensor de corriente ACS714 - 30A - BricoGeek.com

Eso es un ACS714 Allegro, lleva un sensor hall de corriente.

Si te fijas en el datasheet, http://www.pololu.com/file/0J196/ACS714.pdf en la página 13 tienes el diagrama "Application 4. Rectified Output. 3.3 V scaling". Ten en cuenta que la corriente de cuadro es alterna, por eso hay que rectificar, pasar de Iac a Vac y luego rectificar Vac a Vcc con algún rizado.

Luego podría venir algo como ésto, que es de lo que hablas, un ADC, Brian Dorey.com | Raspberry Pi I2C Analog-to-Digital Converter
Yo esto lo veo muy aparatoso y propongo otra solución.

¿Cómo pasamos de un Ivac/Vdc con un ACS714 a una conversión A/D efectiva y, a la vez, barata ahorrándonos un ADC? Con lo que he comentado antes, un convertidor voltaje-frecuencia que tome la tensión del ACS714 ( http://www.ti.com/lit/ds/symlink/lm331.pdf ), y luego a contar pulsos.

Podría ser una solución que destierre el contador.

El ACS714 vale una leña al menos en la pagina que pones 7€, por lo que leo no es de tipo hall, sino que usa una resistencia shunt de 1.2mOhm lo cual es mucho mejor ya que tiene mayor precisión, sobretodo con corrientes bajas que los sensores hall (es mejor para medir consumos cercanos a 0), además pone que las salidas y las entradas están aisladas eléctricamente, mola, sino no valdría para la aplicación que quieres hacer. La desventaja que yo veo frente a un Hall es que con este hay que tocar el cuadro, con el otro enrrollas un hilo al rededor de un hilo y tienes la medida, con este tienes que destornillar un cable, metérselo al sensor y sacar del sensor otro a donde estaba antes el primero, vamos que no seria para usuarios domésticos, no les vas a pedir a alguien que no tiene ni idea que enrede en el cuadro.

Lo del conversor, como cuentas los pulsos?, el raspi ese tiene una TPU, tiene algún contador hardware?? Lo vas a hacer por software?

No se si se te olvida o lo obvias, pero además de la intensidad tienes que medir el voltaje, la potencia consumida es voltaje por intensidad, suponer que el voltaje es de 230V@50Hz (el nominal de la red) y no hay reactiva no es posible. A unas malas podrías suponer un voltaje de 230V@Hz pero aun así tienes que medir de alguna forma el paso por 0 (fase de la onda de voltaje) para poder calcular la potencia consumida.
 

Te hecho caso, y le he puesto un relé.
Lo he alimentado a 24vdc con una fuente externa.

Los resultados, en "texto legible" son:
comienzo
2/ 0 -- Tue, 30/Oct/2012 22:26:42
3/ 1 -- Tue, 30/Oct/2012 22:31:15 1317 w
4/ 2 -- Tue, 30/Oct/2012 22:31:15 994708 w
5/ 3 -- Tue, 30/Oct/2012 22:34:02 2155 w
6/ 4 -- Tue, 30/Oct/2012 22:34:03 503140 w
7/ 5 -- Tue, 30/Oct/2012 22:40:00 1007 w
8/ 6 -- Tue, 30/Oct/2012 22:40:01 1004725 w
9/ 7 -- Tue, 30/Oct/2012 22:43:29 1730 w
10/ 8 -- Tue, 30/Oct/2012 22:47:44 1411 w
11/ 9 -- Tue, 30/Oct/2012 22:52:04 1380 w
12/ 10 -- Tue, 30/Oct/2012 22:56:26 1375 w
13/ 11 -- Tue, 30/Oct/2012 22:56:27 1010889 w
14/ 12 -- Tue, 30/Oct/2012 23:01:15 1246 w
15/ 13 -- Tue, 30/Oct/2012 23:01:16 998328 w
16/ 14 -- Tue, 30/Oct/2012 23:06:00 1266 w
17/ 15 -- Tue, 30/Oct/2012 23:06:00 1006486 w
18/ 16 -- Tue, 30/Oct/2012 23:10:38 1297 w
19/ 17 -- Tue, 30/Oct/2012 23:10:38 999575 w
20/ 18 -- Tue, 30/Oct/2012 23:15:13 1311 w
21/ 19 -- Tue, 30/Oct/2012 23:19:47 1313 w
22/ 20 -- Tue, 30/Oct/2012 23:19:47 983727 w
23/ 21 -- Tue, 30/Oct/2012 23:22:30 2205 w
24/ 22 -- Tue, 30/Oct/2012 23:22:31 1021273 w
25/ 23 -- Tue, 30/Oct/2012 23:25:01 2398 w
26/ 24 -- Tue, 30/Oct/2012 23:27:31 2397 w
27/ 25 -- Tue, 30/Oct/2012 23:31:34 1483 w
28/ 26 -- Tue, 30/Oct/2012 23:36:18 1267 w
La que absorbe 1300w es la bomba de calor del piso de arriba. Además, tengo un radiador con termostato en el salón, que absorbe unos 950w y entra de vez en cuando. El PC conectado a la tele de 32" también estará masajeando lo suyo y el frigo entrará de vez en cuando.

Sigue habiendo un rebote, en torno a un segundo después de la señal buena, pero es mucho más claro que antes (a no ser que este consumiendo un MW real :roto2: )

Es más fácil de filtrar (es trivial).

He encontrado un posible ADC, para prescindir del contador. Es éste:
uLog - The Lil'est Logger

Eso (se llama uLog) lleva tres convertidores analógico/digital (ADC) y su propia memoria. Eso va a piñón fijo tomando 50 medidas por segundo a 10 bits de resolución y guardándolas.

Para absorber los datos hay que usar el SPI de la raspi y descargarlos. Tiene un problemilla, y es que detecta automáticamente si está conectado algo y entonces deja de recoger datos y se pone a escuchar las órdenes. Eso nos obligaría a poner un interruptor y gastar una de nuestras salidas GPIO para decirle al cacharrujo que lea o que coja datos.

Como sensor de corriente, se puede usar esto:
Non-invasive AC current sensor (30A max) - Current - Sensors - Shop

Como la corriente es alterna, habría que convertirla a señal rectificada que pueda leerse por el ADC. Se puede usar esto: Compre Convertidores AC-DC Amp,2can,Ib 50pA,BiFET,SOIC8 Analog Devices AD736JRZ en RS Online y lo recibirá en 24/48 horas. Es un convertidor rms-dc, como los de los polímetros.

Sensor + RMS/DC + uLog + Raspi = 50 medidas por segundo de la corriente (algo menos porque hay que parar a descargar, y si descargas datos, el uLog no mide). LA conexión a la SPI no debería dar problemas y la alimentación del uLog es la misma que el de la raspi o se le puede enchufar una batería.
 
El ACS714 vale una leña al menos en la pagina que pones 7€, por lo que leo no es de tipo hall, sino que usa una resistencia shunt de 1.2mOhm lo cual es mucho mejor ya que tiene mayor precisión, sobretodo con corrientes bajas que los sensores hall (es mejor para medir consumos cercanos a 0), además pone que las salidas y las entradas están aisladas eléctricamente, mola, sino no valdría para la aplicación que quieres hacer. La desventaja que yo veo frente a un Hall es que con este hay que tocar el cuadro, con el otro enrrollas un hilo al rededor de un hilo y tienes la medida, con este tienes que destornillar un cable, metérselo al sensor y sacar del sensor otro a donde estaba antes el primero, vamos que no seria para usuarios domésticos, no les vas a pedir a alguien que no tiene ni idea que enrede en el cuadro.
Cierto, no es tipo hall. Es caro, sí, y no te quita de rectificar correctamente, porque la salida sería alterna. Tocar el cuadro a veces es hasta imposible, porque no hay sitio.

Lo del conversor, como cuentas los pulsos?, el raspi ese tiene una TPU, tiene algún contador hardware?? Lo vas a hacer por software?
No lo he mirado, pero no me suena que tenga contadores. Tiene RTC, pero sin backup por pila.
Si se mete un VFC se haría por software, ya que si se mete un contador externo no puedes leerlo en paralelo y si lo lees en serie, hay que tirar de UART y eso pide a gritos SPI y un ADC, que saldría más barato.

Ya lo tengo medio enfilao con el uLog del post anterior, seguramente lo compre, en cuanto me lea bien los datasheets.

No se si se te olvida o lo obvias, pero además de la intensidad tienes que medir el voltaje, la potencia consumida es voltaje por intensidad, suponer que el voltaje es de 230V@50Hz (el nominal de la red) y no hay reactiva no es posible. A unas malas podrías suponer un voltaje de 230V@Hz pero aun así tienes que medir de alguna forma el paso por 0 (fase de la onda de voltaje) para poder calcular la potencia consumida.

Yo creo que eso de la reactiva iba a ser muy complicado de lonchafinear. Tratar de medir la tensión sería sencillo, con un tras*formador, un rms-dc y el mismo uLog, que tiene tres ADC y sólo usamos uno. El desplazamiento de fase V-I es tema mayor. Se puede hacer algo porque tenemos un tercer ADC y tenemos la corriente convertida en tensión, podemos tener esa tensión con un trafo y son comparables en fase con circuitos integrados del mercado. Si tengo un rato mañana hago un esquema a ver si se me ocurre algo que no duela al bolsillo.

El tema de la corriente resistiva estaría solucionado con el contador (no nos lo vamos a poder quitar de encima, de momento, si queremos consumo exacto). Teniendo el contador con captura de sus pulsos nos podemos permitir integrar en el tiempo los datos de tensión x intensidad del uLog y luego compararlos con los datos del contador (que es un integrador de pulsos y es consumo con menos error). Así quizás se podría calibrar el sensor de corriente y mejorar su precisión.
 
Medir 50 veces por segundo no es suficiente, la frecuencia de red es de 50Hz, según el teorema de muestreo de shannon nyquist tienes que medir al menos al doble de velocidad del armónico de mayor frecuencia. El voltaje se puede considerar una onda pura de 50Hz, no así la corriente, todos los aparatos electrónicos introducen armónicos en la red (bombillas de bajo consumo, led, ordenadro, televisión), para medir el consumo con algo de precisión yo no descartaría por lo menos hasta el 4 armónico, nos vamos a los 250 Hz lo que supondría un muestreo de 500Hz.

Resumiendo mínimo tienes que coger 1000 muestras por segundo y te curas en salud (cuantas más mejor), la potencia total la puedes calcular simplemente con la formula:

//Para cada muestra tomada
Ptot=Ptot+V*I/1000

La potencia instantánea la puedes calcular para una ventana de 1 seg (es un filtro de primer orden) como:

//Para cada muestra tomada
Pinst=Pinst*0.995+V*I*0.005


Tanto el Voltaje como la intensidad hay que medirlas con signo, rectificar es un error, las operaciones también hay que hacerlas con signo. V*I a veces da un valor positivo y a veces negativo, de hay viene la reactiva que tiene mucho sentido cuando se esta trabajando con maquinas eléctricas y deja de tener tanto cuando se trabaja con dispositivos electrónicos que tienden a deformar la onda de corriente (introducir armónicos).

El problema de medir la energía consumida se reduce a poder medir con precisión y con signo V(t) e I(t) mil veces por segundo.

Para medir el voltaje yo también usaría un tras*formador, para reducir el voltaje y más importante aun, par conseguir aislamiento de la red, tiene que haber un aislamiento total de la red por seguridad del raspi y del que enrede en el raspi.

Otra forma de medir el voltaje seria usar un Isolation amplifier - Wikipedia, the free encyclopedia , puedes mirar a ver si hay algo barato, estos bichos suelen ser muy caros, del orden de 1000€ uno bueno, no se si habrá cosas baratas para este tipo de aplicaciones.
 
Última edición:
Medir 50 veces por segundo no es suficiente, la frecuencia de red es de 50Hz, según el teorema de muestreo de shannon nyquist tienes que medir al menos al doble de velocidad del armónico de mayor frecuencia. El voltaje se puede considerar una onda pura de 50Hz, no así la corriente, todos los aparatos electrónicos introducen armónicos en la red (bombillas de bajo consumo, led, ordenadro, televisión), para medir el consumo con algo de precisión yo no descartaría por lo menos hasta el 4 armónico, nos vamos a los 250 Hz lo que supondría un muestreo de 500Hz.

Resumiendo mínimo tienes que coger 1000 muestras por segundo y te curas en salud (cuantas más mejor), la potencia total la puedes calcular simplemente con la formula:

Te has equivocado de fórmula.
La fórmula es:
60143bf5820b99d18bcafc082c075069.png


Potencia eléctrica - Wikipedia, la enciclopedia libre

En esta fórmula alternativa a la tuya V e I son valores eficaces (y no instantáneos), es decir, son valores RMS, de ahí que la señal alterna de los sensores las rectifique dando lugar a una señal de corriente continua que se corresponde con el valor rms (no es un rectificado a lo loco). Para llegar a eso usaría un convertidor ac/rms-dc, el que cito en un post anterior.

Eso valores rms los muestrearía luego con el convertidor analógico digital del uLog, teniendo 50 muestras por segundo de una señal que ya viene convertida a valor eficaz por medios analógicos en un pequeño chip. Esa señal ya no tiene la frecuencia de red y los armónicos los ha integrado.

Esta estrategia evita las multiplicaciones y sumas de la integración digital que quieres hacer tú, y por tanto, tiene menos errores. Aparte, lo de muestrear dos señales 1000 veces por segundo tiene que ser caro-caro.

Tanto el Voltaje como la intensidad hay que medirlas con signo, rectificar es un error, las operaciones también hay que hacerlas con signo. V*I a veces da un valor positivo y a veces negativo, de hay viene la reactiva que tiene mucho sentido cuando se esta trabajando con maquinas eléctricas y deja de tener tanto cuando se trabaja con dispositivos electrónicos que tienden a deformar la onda de corriente (introducir armónicos).

Ya he explicado por qué rectificar (a rms) no es un error. Hablemos del ángulo de desfase.

Está claro que las dos señales rms son escalares, representan el valor eficaz del módulo de un vector. El ángulo de desfase lo podemos capturar con las dos señales alternas, una proveniente del sensor de corriente y la otra de un trafo, es decir las tomaríamos antes de hacer la conversión rms y entrarían por separado (correlacionados en el tiempo) a incorporarse como dato en la raspi. El desfase lo capturaríamos en el dominio de la frecuencia y no por comparación en dominio-tiempo, no por datos instantáneos.

Se puede usar un PLL ( Phase-locked loop - Wikipedia, the free encyclopedia ), que se implementa en chips que tienen dos cualidades altamente lonchafinistas. La primera es que son baratos hasta dar risa. La segunda es que son "de su padre y de su progenitora", lo cual significa que tenemos múltiples modelos y podemos apuntar al objetivo que más nos interese y que se adapte mejor a nuestro hardware.

Existen muchas posibles soluciones para medir el ángulo de desfase con las señales generadas por un chip PLL que compare esas dos señales de entrada. Tienes señales digitales de paso por cero de cada una de las dos señales y tienes diferentes rampas. Tanto si usamos interrupciones en la GPIO como si usamos el comparador analógico, podemos tener, por decir algo, una señal de 0 a 20ms simbolizando el desfase de V e I para una señal de 50 hz.

El problema de medir la energía consumida se reduce a poder medir con precisión y con signo V(t) e I(t) mil veces por segundo.

Para medir el voltaje yo también usaría un tras*formador, para reducir el voltaje y más importante aun, par conseguir aislamiento de la red, tiene que haber un aislamiento total de la red por seguridad del raspi y del que enrede en el raspi.

Otra forma de medir el voltaje seria usar un Isolation amplifier - Wikipedia, the free encyclopedia , puedes mirar a ver si hay algo barato, estos bichos suelen ser muy caros, del orden de 1000€ uno bueno, no se si habrá cosas baratas para este tipo de aplicaciones.

No entiendo bien qué me quieres decir. Cualquier trafo aisla y tanto si usamos el sensor de Allegro como uno de bobina no tendremos voltajes peligrosos si dejamos los 220v en el cuadro y entramos a la raspi con señales de bajo voltaje.
 
Me equivoco mucho porque digo las cosas sin reflexionar demasiado :D, pero en este caso no me equivoco, los valores RMS solo se pueden usar cuando todas las ondas son senoidales de 50 hz, eso es correcto en el caso de bombillas (resistencias), bobinas, condensadores, motores, tras*formadores ... típico material eléctrico de naturaleza lineal.

Eso es incorrecto en el caso de fluorescentes, lamparas LED, un soldador, televisiones, vídeos ....

Por ejemplo esta es la intensidad que pasa a trabes de un fluorescente:

m_rys1_przebieg.jpg


Si hay armónicos de corriente la formula que tu dices es incorrecta hay que hacerlo como yo digo, lo que tu dices supondría un error de medida importante, a ojo de buen cubero mucho más del 10% cuando intentes medir por ejemplo el consumo de un fluorescente.

Las formula real de la potencia consumida es la integral de V(t) por I(t) por diferencial de t respecto del tiempo, en el caso de que V(t) e I(t) sean senoidales puras se puede simplificar y queda como tu dices, se ha hecho desde los inicios cuando todo era eléctrico y no había electrónica, pero no deja de ser una simplificación que para que sea cierta parte del supuesto de que no hay ni armónicos de tensión (esto suele ser cierto) ni de corriente (esto ya es discutible).

Lo bueno de los armónicos es que se cancelan unos con otros y al final no vas a tener una cosa de señal así en la entrada del cuadro, pero si quieres hacer algo con rigor y precisión tienes que hacer el calculo como yo digo, de nada sirve usar un medidor de intensidad con un 1% de precisión si luego cometes un error del 5% por despreciar los armónicos. En la wikipedia ya lo advierte pero la verdad es que hace poco hincapié en el asunto:

Cuando se trata de corriente alterna (AC) sinusoidal, el promedio de potencia eléctrica desarrollada por un dispositivo de dos terminales es una función de los valores eficaces o valores cuadráticos medios, de la diferencia de potencial entre los terminales y de la intensidad de corriente que pasa a través del dispositivo.

Pero vamos que si el error te importa poco puedes hacerlo como dices, eso si para medir cosas como consumos de televisiones, monitores, ordenadores, fluorescentes ... tu sistema será muy malo, para medir consumos de neveras, lavadoras, bombillas incandescentes, estufas de resistencia ... funcionara sin problemas.

Lo que digo es que el amplificador diferencial aislado, aisla y amplifica, te sirve para aislar y acondicionar la señal para el conversor A/D, te ahorras el trafo que suele ser rellenito, pesado y lo mismo vale el solito más que el amplificador. Es una opción a valorar no se que saldrá mejor.

Lo mismo lo más fácil es no medir la tensión, por normativa creo recordar (lo mismo me confundo 8:) que no puede variar más de un 2% con respecto a la nominal, así que suponer 230V no es un error grave. La frecuencia suele ser muy muy precisa, hasta el punto que antiguamente se hacían relojes analógicos usando la frecuencia de red como base de tiempo. La "fase" se puede medir con un simple optoacoplador como el que tienes y de paso te ahorras el tras*formador. Es una chapuza pero jorobar el trabajo se queda en la mitad :XX: y el error que introduce no va a ser mucho.
 
Última edición:
Volver