- Diagrama de bloques del medidor de energía inteligente Raspberry Pi
- Componentes requeridos
- Preparando el Pi
- Diagrama de circuito del medidor de energía Pi
- Código Python para Pi Energy Meter
- Manifestación
Los monitores de energía, ya sea que cubran todo el apartamento o se implementen para monitorear un solo electrodoméstico, le brindan una manera de realizar un seguimiento de su consumo y realizar los ajustes necesarios. Si bien están cada vez más disponibles en el mercado, el fabricante que hay en mí todavía siente que será una gran idea crear una versión de bricolaje que pueda adaptarse para satisfacer requisitos personales específicos. Como tal, para el tutorial de hoy, crearemos un monitor de consumo de energía Raspberry Pi capaz de obtener el consumo de energía y cargarlo en Adafruit.io.
También puede consultar el Medidor de energía IoT basado en Arduino y el Medidor de energía GSM prepago que hemos construido anteriormente.
Diagrama de bloques del medidor de energía inteligente Raspberry Pi
A continuación, se muestra un diagrama de bloques que muestra cómo funciona el sistema.
Escoger las unidades una tras otra;
Unidad de detección de corriente: La unidad de detección de corriente está compuesta por el sensor de corriente SCT -013 que puede medir hasta 100 A, según la versión que compre. El sensor transforma la corriente que pasa a través del cable al que está sujeto en una pequeña corriente que luego se alimenta al ADC a través de una red de divisores de voltaje.
Unidad de detección de voltaje: si bien no pude poner mis manos en un módulo de sensor de voltaje, construiremos un sensor de voltaje sin transformador que mide el voltaje utilizando el principio de los divisores de voltaje. El sensor de voltaje de bricolaje involucra la etapa del divisor de voltaje donde el alto voltaje se transforma a un valor adecuado para la entrada al ADC.
Unidad de procesamiento: la unidad de procesamiento comprende el ADC y la Raspberry pi. El ADC toma la señal analógica y la envía a la Raspberry Pi, que luego calcula la cantidad exacta de energía que se consume y la envía a una nube de dispositivo designada. Para el propósito de este tutorial, usaremos Adafruit.io como nuestra nube de dispositivos. También hemos construido otros
Descargo de responsabilidad: antes de comenzar, es importante mencionar que este proyecto implica la conexión a un suministro de CA que es peligroso y podría ser fatal si no se maneja de manera segura. Asegúrese de tener experiencia trabajando con aire acondicionado antes de intentar esto.
Listo? Vamos a sumergirnos.
Componentes requeridos
Se requieren los siguientes componentes para construir este proyecto;
- Raspberry Pi 3 o 4 (el proceso debe ser el mismo para el RPI2 con un Dongle WiFi)
- ADC I2C de 16 bits ADS1115
- YHDC SCT-013-000
- Adaptador de corriente MicroUSB de 2.5A 5V
- Resistencia de 2W 10K (1)
- Resistencia 1 / 2W 10K (2)
- Resistencia de 33 ohmios (1)
- Resistencia de 2W 3.3k (1)
- Diodo IN4007 (4)
- Diodo Zener de 3.6v (1)
- Potenciómetro de 10k (o preestablecido) (1)
- Condensador de 50v 1uf
- Condensador de 50v 10uf (2)
- Tablero de circuitos
- Cable pasa corriente
- Otros accesorios para uso de Raspberry Pi.
Aparte de los componentes de hardware enumerados anteriormente, el proyecto también requiere algunas dependencias de software y bibliotecas que instalaremos a medida que avancemos.
Si bien este tutorial funcionará independientemente del sistema operativo raspberry pi utilizado, usaré el sistema operativo Raspberry Pi buster que se ejecuta en un Pi 3 (también debería funcionar en un Pi 4) y asumiré que está familiarizado con la configuración de Raspberry Pi con el sistema operativo Raspbian Buster (prácticamente el mismo proceso que las versiones anteriores), y sabe cómo SSH en él usando un software de terminal como Hyper. Si tiene problemas con algo de esto, hay toneladas de Tutoriales de Raspberry Pi en este sitio web que pueden ayudar
Preparando el Pi
Antes de comenzar a conectar los componentes y la codificación, hay algunas tareas simples que debemos realizar en la Raspberry Pi para asegurarnos de que estamos listos para comenzar.
Paso 1: Habilitación del Pi I2C
El núcleo del proyecto de hoy no es solo el raspberry pi, sino el ADC ADS1115 de 16 bits basado en I2C. El ADC nos permite conectar sensores analógicos a la Raspberry Pi ya que la Pi en sí no tiene un ADC incorporado. Toma los datos a través de su propio ADC y los reenvía al raspberry pi a través de I2C. Como tal, necesitamos habilitar la comunicación I2C en el Pi para que pueda comunicarse con él.
El bus I2C de Pi se puede habilitar o deshabilitar a través de la página de configuración de la Raspberry Pi. Para iniciarlo, haga clic en el icono de Pi en el escritorio y seleccione las preferencias seguidas de la configuración de Raspberry pi.
Esto debería abrir la página de configuración. Marque el botón de radio habilitado para el I2C y haga clic en Aceptar para guardarlo y reiniciar el Pi para efectuar los cambios.
Si está ejecutando el Pi en modo sin cabeza, se puede acceder a la página de configuración de Raspbian ejecutando sudo raspi-config.
Paso 2: Instalar la biblioteca ADS11xx de Adafruit
Lo segundo que debemos hacer es instalar la biblioteca de python ADS11xx, que contiene funciones y rutinas que nos facilitan la escritura de un script de Python para obtener valores del ADC.
Siga los pasos a continuación para hacer esto.
- Actualice su pi ejecutando; sudo apt-get update seguido de sudo apt-get upgrade esto actualizará el pi asegurando que no haya problemas de compatibilidad para ningún nuevo software que elija instalar.
- A continuación, ejecute el comando cd ~ para asegurarse de que se encuentra en el directorio de inicio.
- A continuación, instale los elementos básicos de la compilación ejecutando; sudo apt-get install build-essential python-dev python-smbus git
- A continuación, clone la carpeta git de Adafruit que contiene la biblioteca ADS ejecutando; clon de git https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- Cambie al directorio del archivo clonado y ejecute el archivo de instalación usando; cd Adafruit_Python_ADS1x1z seguido de sudo python setup.py install Una
vez hecho esto, la instalación debería estar completa.
Puede probar la instalación de la biblioteca conectando el ADS1115 como se muestra en la sección de esquemas a continuación y ejecutar el código de muestra que vino con la biblioteca primero, cambiando a su carpeta usando; cd ejemplos y ejecutar el ejemplo usando; python simpletest.py
Paso 3: Instale el módulo Python de Adafruit.IO
Como se mencionó durante las presentaciones, publicaremos lecturas de los sensores de voltaje y corriente en Adafruit IO Cloud desde la cual se puede ver desde todo el mundo o conectarse con IFTTT para realizar las acciones que desee.
El módulo de Python Adafruit.IO contiene subrutinas y funciones que aprovecharemos para transmitir fácilmente datos a la nube. Siga los pasos a continuación para instalar el módulo.
- Ejecute el cd ~ para volver al directorio de inicio.
- A continuación, ejecute el comando; sudo pip3 instala adafruit-io . Debería instalar el módulo Python de Adafruit IO.
Paso 4: Configura tu cuenta Adafruit.io
Para usar Adafruit IO definitivamente necesitará primero crear una cuenta y obtener una clave AIO. Esta clave AIO junto con su nombre de usuario será utilizada por su script de Python para acceder al servicio en la nube Adafruit IO. Para crear una cuenta, visite; https://io.adafruit.com/, haga clic en el botón Comenzar gratis y complete todos los parámetros requeridos. Con el registro completo, debería ver el botón Ver clave AIO a la derecha de su página de inicio.
Haga clic en él para obtener su clave AIO.
Con la clave copiada, estamos listos para comenzar. Sin embargo, para facilitar el proceso de envío de datos al servicio en la nube, también puede crear los feeds a los que se enviarán los datos. (Puede encontrar más información sobre qué son las fuentes AIO aquí). Dado que básicamente enviaremos el consumo de energía, crearemos una fuente de energía. Para crear una fuente, haga clic en "fuentes" en la parte superior de la página AIO y haga clic en agregar nueva fuente.
Dale el nombre que quieras, pero para simplificar las cosas, lo llamaré consumo de energía. También puede decidir crear fuentes de voltaje y corriente y adaptar el código para publicar datos en ellos.
Con todo esto en su lugar, ahora estamos listos para comenzar a construir el proyecto.
Diagrama de circuito del medidor de energía Pi
Los esquemas del proyecto del monitor de energía Raspberry Pi son relativamente complejos e implican la conexión a un voltaje de CA como se mencionó anteriormente, asegúrese de tomar todas las precauciones necesarias para evitar descargas eléctricas. Si no está familiarizado con el manejo seguro de voltajes de CA, deje que la alegría de implementar esto en una placa de pruebas, sin encenderla, sea satisfactoria.
Los esquemas implican conectar la unidad de sensores de voltaje y corriente al ADC que luego envía los datos de los sensores a la Raspberry Pi. Para facilitar el seguimiento de las conexiones, los esquemas de cada unidad se presentan por separado.
Esquema del sensor de corriente
Conecte los componentes para el sensor de corriente como se muestra en los esquemas siguientes.
El transformador de corriente utilizado en este proyecto se muestra a continuación, como puede ver, tenemos tres cables, a saber, tierra, Cout y 3.3V
Esquemas del sensor de voltaje
Conecte los componentes para el sensor de voltaje como se muestra en los esquemas siguientes.
Esquemas de la unidad de procesamiento
Conecta todo junto con el ADC (ADS1115) conectado al raspberry pi y la salida de los sensores de corriente y voltaje conectados al pin A0 y A1 del ADS1115 respectivamente.
Asegúrese de que los pines GND de ambas unidades sensoras estén conectados al GND del ADC o al raspberry pi.
Para hacer las cosas un poco menos inestables, implementé los sensores de voltaje y corriente en una Protoboard. Además, no se recomienda construir un circuito de alimentación de CA en la placa de pruebas. Si hace lo mismo, su configuración final puede verse como la imagen de abajo;
Con las conexiones completas, ahora estamos listos para escribir el código del proyecto.
Código Python para Pi Energy Meter
Como es habitual con nuestros proyectos de raspberry pi, desarrollaremos el código del proyecto usando python. Haga clic en el icono de raspberry pi en el escritorio, seleccione programación e inicie la versión de Python que desee utilizar. Usaré Python 3 y algunas de las funciones en Python 3 pueden no funcionar para Python 2.7. Por lo tanto, es posible que sea necesario realizar algún cambio significativo en el código si desea utilizar Python 2.7. Haré un desglose del código en pequeños fragmentos y compartiré el código completo con usted al final.
Listo? Frio.
El algoritmo detrás del código es simple. Nuestro script de Python consulta el ADS1115 (sobre I2C) para lecturas de voltaje y corriente. El valor analógico recibido se recibe, se muestrea y se obtiene el valor cuadrático medio de la tensión y la corriente. La potencia en kilovatios se calcula y se envía a la alimentación Adafruit IO después de intervalos específicos.
Comenzamos el script incluyendo todas las bibliotecas que usaremos. Esto incluye bibliotecas integradas como la biblioteca de tiempo y matemáticas y las otras bibliotecas que instalamos anteriormente.
importar tiempo importar Adafruit_ADS1x15 desde Adafruit_IO importar * importar matemáticas
A continuación, creamos una instancia de la biblioteca ADS1115 que se utilizará para abordar el ADC físico en el futuro.
# Cree una instancia ADS1115 ADC (16 bits).. adc1 = Adafruit_ADS1x15.ADS1115 ()
A continuación, proporcione su nombre de usuario de adafruit IO y la clave "AIO".
username = 'ingrese su nombre de usuario entre estas comillas' AIO_KEY = 'su clave aio ' aio = Cliente (nombre de usuario, AIO_KEY)
Guarde la llave en un lugar seguro. Se puede utilizar para acceder a su cuenta de adafruit io sin su permiso.
A continuación, creamos algunas variables como la ganancia para el ADC, la cantidad de muestras que queremos y establecemos el redondeo que definitivamente no es crítico.
GAIN = 1 # consulte la documentación de ads1015 / 1115 para conocer los valores potenciales. samples = 200 # número de muestras tomadas de ads1115 places = int (2) # set rounding
A continuación, creamos un bucle while para controlar la corriente y el voltaje y enviar los datos a Adafruit io a intervalos. El ciclo while comienza estableciendo todas las variables en cero.
while True: # reset variables count = int (0) datai = datav = maxIValue = 0 #max current value within sample maxVValue = 0 #max voltage value within sample IrmsA0 = 0 #root mean square current VrmsA1 = 0 # root mean square voltage ampsA0 = 0 #corriente pico voltiosA1 = 0 #voltaje kilovatios = flotador (0)
Dado que estamos trabajando con circuitos de CA, la salida de SCT-013 y el sensor de voltaje será una onda sinusoidal, por lo que para calcular la corriente y el voltaje de la onda sinusoidal, necesitaremos obtener los valores máximos. Para obtener los valores pico, probaremos tanto el voltaje como la corriente (200 muestras), y encontraremos los valores más altos (valores pico).
para recuento en rango (muestras): datai.insert (recuento, (abs (adc1.read_adc (0, ganancia = GAIN)))) datav.insert (recuento, (abs (adc1.read_adc (1, ganancia = GAIN)))) # vea si tiene un nuevo maxValue print (datai) if datai> maxIValue: maxIValue = datai if datav> maxVValue: maxVValue = datav
A continuación, estandarizamos los valores convirtiendo los valores de ADC al valor real, después de lo cual usamos la ecuación de la raíz cuadrada media para encontrar el voltaje y la corriente RMS.
# calcular la corriente usando los datos muestreados # el sct-013 que se está usando está calibrado para una salida de 1000 mV a 30 A. IrmsA0 = float (maxIValue / float (2047) * 30) IrmsA0 = round (IrmsA0, places) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = round (ampsA0, places) # Calcular voltaje VrmsA1 = float (maxVValue * 1100 / float (2047)) VrmsA1 = round (VrmsA1, places) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = round (voltsA1, places) print ('Voltaje: {0}'. formato (voltsA1)) print ('Corriente: {0} '. Formato (ampsA0))
Una vez hecho esto, se calcula la potencia y los datos se publican en adafruit.io
#calcular potencia power = round (ampsA0 * voltsA1, places) print ('Power: {0}'. format (power)) #post data to adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' EnergyUsage ', potencia)
Para las cuentas gratuitas, adafruit exige que haya un retraso de tiempo entre las solicitudes o la carga de datos.
# Espere antes de repetir el tiempo de ciclo. Dormir (0)
El código completo del proyecto está disponible al final de esta página.
Manifestación
Con el código completo, guárdelo y presione el botón Ejecutar en Python IDE. Antes de esto, asegúrese de que el Pi esté conectado a Internet a través de WiFi o LAN, y que su clave de aio y su nombre de usuario sean correctos. Después de un tiempo, debería comenzar a ver los datos de energía (potencia) que se muestran en el feed de Adafruit.io. Mi configuración de hardware durante la demostración fue así
Para llevar las cosas más lejos, puede crear un tablero en adafruit.io y agregar un componente gráfico para que pueda obtener una vista gráfica de los datos como se muestra en la imagen a continuación.
Eso es todo chicos, ahora pueden monitorear su consumo de energía desde cualquier parte del mundo. Es importante tener en cuenta que definitivamente hay muchos más ajustes y calibraciones por hacer para transformarlo en una solución realmente precisa, pero creo que esto le brinda casi todo lo que necesita para continuar.
No dudes en enviarme preguntas sobre el proyecto a través de la sección de comentarios. Intentaré responder tantas como sea posible. Hasta la próxima.