- Materiales necesarios para el medidor de potencia ESP32
- Medidor de eficiencia basado en Arduino y ESP32 - Diagrama de circuito
- Diseño de PCB para medidor de eficiencia basado en Arduino y ESP32
- Medidor de eficiencia basado en Arduino y ESP32 - Código
- Prueba del medidor de eficiencia basado en Arduino y ESP32
- Más mejoras
Todos conocemos un voltímetro, amperímetro y vatímetros básicos, las tres cosas básicas que necesita para medir valores en cualquier proyecto o circuito electrónico. Medir el voltaje y la corriente con la ayuda de un multímetro puede ser una buena forma de comenzar, pero uno de los mayores problemas que enfrento al probar un circuito es medir la eficiencia energética. Entonces, hoy resolveremos ese problema construyendo un medidor de eficiencia basado en Arduino y ESP32 que puede medir voltaje de entrada, corriente de entrada, voltaje de salida y corriente de salida. Por lo tanto, puede medir la potencia de entrada y la potencia de salida al mismo tiempo, y con estos valores, podemos medir la eficiencia fácilmente. Anteriormente, también hemos hecho algo muy similar en nuestro proyecto de vatímetro basado en Arduino, pero aquí mediremos tanto la potencia de entrada como la potencia de salida para calcular la eficiencia energética.
En lugar de comprar cuatro metros para el trabajo, podremos resolver este problema incorporando las capacidades de los cuatro metros en uno. La construcción de su medidor digital no solo reduce los costos, sino que también le brinda un margen de maniobra para actualizaciones y mejoras. Como usamos un ESP32 para construir este proyecto, podemos hacer que este medidor esté habilitado para IoT y registrar datos en la web, que es el tema del futuro proyecto. Con todos los conceptos básicos aclarados, entremos en ello.
Nota: este medidor de potencia está diseñado para circuitos de CC. Si está buscando medir la corriente CA para calcular la eficiencia energética de CA, puede consultar los proyectos de Medidor de energía eléctrica y Medidor de energía prepago basados en IoT.
Materiales necesarios para el medidor de potencia ESP32
La siguiente imagen muestra los materiales utilizados para construir el circuito. Como está hecho con componentes muy genéricos, deberías poder encontrar todo el material listado en tu tienda de pasatiempos local.
También he enumerado los componentes a continuación junto con la cantidad requerida. Si está construyendo el circuito usted mismo, es muy recomendable obtener todos los materiales de la lista a continuación.
- Placa ESP32 - 1
- OLED 128X64 - 1
- ACS712-20 IC - 2
- Conector de barril DC - 1
- Condensador 100uF - 2
- 104pF - 2
- 102pF - 2
- 10.000, 1% - 4
- 68.000, 1% - 2
- 6,8 mil, 1% - 2
Medidor de eficiencia basado en Arduino y ESP32 - Diagrama de circuito
El esquema para el medidor de eficiencia basado en Arduino y ESP32 se muestra a continuación. Crear este circuito es muy simple y utiliza componentes genéricos.
El funcionamiento del circuito es muy sencillo. Mediremos el voltaje y la corriente en este proyecto, pero de una manera única. Estamos midiendo voltaje y corriente tanto para la entrada como para la salida, por lo que podemos ver la eficiencia del circuito. Esto resulta muy útil para algunos proyectos. Un ejemplo podría ser un convertidor de CC a CC donde la medición de la eficiencia se vuelve obligatoria. La forma en que funcionan estos circuitos se describe a continuación.
El sensor de corriente IC ACS712:
Como puede ver en la imagen de arriba, estamos usando un IC de sensor de corriente ACS712 para medir la corriente. Este es un IC muy interesante ya que utiliza el efecto Hall para medir la corriente, hay tres variantes de este IC que se pueden encontrar en el mercado f (o 5A, 20A y 30A). Estamos usando la variante 20A de esto y está etiquetada como ACS712-20.
La hoja de datos del ACS712 recomienda un rango de voltaje de 4.5 a 5.5 para operar sin problemas. Y como vamos a medir la corriente con un ESP32, solo es tolerante a 3.3V, por lo que he utilizado un divisor de voltaje con dos resistencias de 10K para reducir el voltaje de salida del ACS712 IC. Cuando no fluye corriente a través del IC, produce 2,5 V, y cuando una cierta cantidad de corriente fluye a través del IC, disminuye el voltaje o aumenta el voltaje según la dirección del flujo de corriente. Hemos utilizado dos de estos circuitos integrados para medir la corriente de entrada y salida. Consulte nuestros proyectos anteriores (a continuación) en los que usamos este sensor ACS712.
- Medidor de energía eléctrica basado en IoT que utiliza Arduino y módulo Wi-Fi ESP8266
- Circuito de amperímetro digital con microcontrolador PIC y ACS712
Donde discutimos el funcionamiento de estos sensores en detalle. Puede consultarlos si desea saber más sobre estos sensores.
El divisor de voltaje:
Para medir el voltaje de entrada y salida, tenemos dos divisores de voltaje en el lado de entrada y salida del circuito. El voltaje máximo que puede medir el circuito es de 35 V, pero se puede cambiar fácilmente cambiando los valores de la resistencia para el divisor de voltaje.
El regulador de voltaje:
Se utiliza un regulador de voltaje genérico LM7805 para alimentar los circuitos integrados ESP32, OLED y ACS712. Como lo estamos alimentando con energía bastante limpia, no se utilizan condensadores de desacoplamiento, pero hemos utilizado condensadores de 100uF tanto en la entrada como en la salida para estabilizar el IC.
El ESP32 IC y la pantalla OLED:
Hemos utilizado un ESP32 como procesador principal, que es responsable de todas las lecturas, cálculos, entradas y salidas. Además, hemos utilizado una pantalla OLED de 128X64 para conocer los valores.
Diseño de PCB para medidor de eficiencia basado en Arduino y ESP32
El PCB para nuestro medidor de eficiencia basado en Arduino y ESP32 está diseñado en una placa de una sola cara. He usado Eagle para diseñar mi PCB, pero puede usar cualquier software de diseño de su elección. La imagen 2D del diseño de mi placa se muestra a continuación.
Se utiliza suficiente traza de tierra para realizar las conexiones a tierra adecuadas entre todos los componentes. Además, nos aseguramos de utilizar las trazas adecuadas de 5 V y 3,3 V para reducir el ruido y mejorar la eficiencia.
- Descargar diseño de PCB y archivos GERBER Medidor de eficiencia basado en Arduino y ESP32
PCB hecho a mano:
Por conveniencia y prueba, hice mi versión hecha a mano del PCB y se muestra a continuación. En la primera versión cometí algunos errores, que rectifiqué usando algunos cables de puente. Pero en la versión final, los arreglé, puedes descargar los archivos y usarlos.
Medidor de eficiencia basado en Arduino y ESP32 - Código
Ahora que tenemos una buena comprensión del lado del hardware, podemos abrir el IDE de Arduino y comenzar nuestra codificación. El propósito del código es leer el voltaje analógico de los pines 35 y 33 de la placa ESP32. Además, leemos el voltaje de 32 y 34 pines, que es el valor actual. Una vez que hacemos esto, podemos multiplicarlos para obtener la potencia de entrada y la potencia de salida, y poniéndola en la fórmula de eficiencia, podemos obtener la eficiencia.
Finalmente, lo mostramos en la pantalla LCD. El programa completo para hacer lo mismo se proporciona al final, que se puede utilizar como tal para el hardware mencionado anteriormente. Además, el código se divide en pequeños fragmentos y se explica.
Como usamos una pantalla OLED de 128X64, necesitamos la biblioteca Adafruit_GFX y la biblioteca Adafruit_SSD1306 para comunicarnos con la pantalla. Puede descargar ambos desde la terminal de administrador de placa predeterminada de Arduino; Si tiene algún problema con la parte del administrador de la placa, también puede descargar e incluir las bibliotecas de su repositorio de GitHub asociado, que se muestra a continuación.
- Descargar la biblioteca Adafruit_GFX
- Descargar la biblioteca Adafruit_SSD1306
Como siempre, comenzamos nuestro código incluyendo todas las bibliotecas requeridas. Luego definimos todos los pines y variables necesarios, todos los cuales se muestran a continuación.
#incluir
Las definiciones SCREEN_WIDTH y SCREEN_HEIGHT se utilizan para definir el tamaño de la pantalla. A continuación hemos definido todos los pines necesarios, a través de los cuales vamos a medir el voltaje y la corriente. A continuación, hemos definido los valores de resistencia que se utilizan en el hardware como puede ver en el esquema. Si no tiene estos valores o si desea cambiar el rango del medidor, puede cambiar esos valores, el código funcionará bien.
Como usamos un ACS712 para medir la corriente, necesitamos el valor mVperAmp para calcular la corriente a partir del voltaje. Como estoy usando un módulo 20A ACS712, el valor mV / A es 100 como se indica en la hoja de datos. Pero debido a que estamos usando un ESP32 y un divisor de voltaje, tendremos la mitad del valor que es 50, y es por eso que hemos puesto el valor mV / AMP.
ACSoffset es el offset que se necesita para calcular la corriente a partir del voltaje. Como los circuitos integrados del ACS712 se alimentan con 5 V, el voltaje de compensación es de 2,5 V. Pero como usamos un divisor de voltaje, baja a 1.25V. Es posible que ya conozca el ADC de mierda del ESP32, así que tuve que usar un valor de 1136. Si tiene problemas de calibración, puede modificar los valores y compensar el ADC.
Finalmente, terminamos esta sección haciendo un objeto de visualización de la clase Adafruit_SSD1306 y pasando el ancho, alto, configuración I 2 C de la pantalla, y el último parámetro -1 se usa para definir la funcionalidad de reinicio. Si su pantalla no tiene un pin de reinicio externo (que ciertamente es para mi pantalla), entonces debe usar -1 para el último argumento.
configuración vacía () {Serial.begin (115200); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Dirección 0x3D para 128x64 Serial.println (F ("Falló la asignación SSD1306")); para (;;); } display.clearDisplay (); display.setRotation (2); display.setTextSize (1); retraso (100); }
A continuación, tenemos nuestra sección setup () . En esta sección, habilitamos el serial para la depuración, verificamos si una pantalla I 2 C está disponible o no con la ayuda del método inicial del objeto de visualización. Además, configuramos la dirección I 2 C. A continuación, borramos la pantalla con el método clearDisplay () . Además, giramos la pantalla con el método setRotation , es porque arruiné el diseño de mi PCB. A continuación, ponemos un retraso de 100 ms para que las funciones surtan efecto. Una vez hecho esto, podemos pasar a la función de bucle. Pero antes de proceder a la función de bucle, tenemos que discutir otras dos funciones que son return_voltage_value () , y return_current_value () .
double return_voltage_value (int pin_no) {double tmp = 0; doble ADCVoltage = 0; doble inputVoltage = 0; doble promedio = 0; para (int i = 0; i <150; i ++) {tmp = tmp + analogRead (pin_no); } avg = tmp / 150; ADCVoltaje = ((promedio * 3.3) / (4095)) + 0.138; inputVoltage = ADCVOLTAGE / (R2_VOLTAGE / (R1_VOLTAGE + R2_VOLTAGE)); // fórmula para calcular el voltaje en, por ejemplo, GND return inputVoltage; }
La función return_voltage_value () se usa para medir el voltaje que ingresa al ADC, y toma pin_no como argumento. En esta función, comenzamos declarando algunas variables, que son tmp, ADCVoltage, inputVoltage y avg. La variable tmp se usa para almacenar el valor ADC temporal que obtenemos de la función analogRead (), luego lo promediamos 150 veces en un ciclo for, y almacenamos el valor en una variable llamada avg. Luego calculamos ADCVoltage a partir de la fórmula dada, finalmente, calculamos el voltaje de entrada y devolvemos los valores. El valor de +0.138 que ve es el valor de calibración que usé para calibrar el nivel de voltaje, juegue con este valor si obtiene algún error.
double return_current_value (int pin_no) {double tmp = 0; doble promedio = 0; doble ADCVoltage = 0; amperios dobles = 0; para (int z = 0; z <150; z ++) {tmp = tmp + analogRead (pin_no); } avg = tmp / 150; ADCVoltage = ((promedio / 4095.0) * 3300); // Obtiene mV Amps = ((ADCVoltage - ACSoffset) / mVperAmp); return Amps; }
A continuación, tenemos la función return_current_value () . Esta función también toma pin_no como argumento. En esta función también tenemos cuatro variables a saber. tmp, avg, ADCVoltage y Amps
A continuación, leemos el pin con función analogRead () y lo promediamos 150 veces, a continuación usamos la fórmula para calcular el voltaje ADC, con eso calculamos la corriente y devolvemos el valor. Con eso, podemos pasar a la sección de bucle.
bucle vacío () {float input_voltage = abs (return_voltage_value (INPUT_VOLTAGE_SENSE_PIN)); float input_current = abs (return_current_value (INPUT_CURRENT_SENSE_PIN)); float output_voltage = abs (return_voltage_value (OUTPUT_VOLTAGE_SENSE_PIN)); float salida_corriente = abs ((retorno_valor_corriente (SALIDA_CURRENT_SENSE_PIN))); input_current = input_current - 0.025; Serial.print ("Voltaje de entrada:"); Serial.print (input_voltage); Serial.print ("- Corriente de entrada:"); Serial.print (input_current); Serial.print ("- Voltaje de salida:"); Serial.print (output_voltage); Serial.print ("- Corriente de salida:"); Serial.println (salida_actual); retraso (300); display.clearDisplay (); display.setCursor (0, 0); display.print ("I / PV:"); display.setCursor (37, 0); display.print (input_voltage); display.setCursor (70, 0); monitor.imprimir ("V"); }
Comenzamos la sección del ciclo declarando y definiendo algunas variables flotantes, en las cuatro variables. Llamamos a las funciones respectivas, pasando pin_no como argumento, ya que el módulo ACS712 puede devolver valores actuales en negativo. Usamos la función abs () de la biblioteca matemática para hacer que el valor negativo sea positivo. A continuación, imprimimos en serie todos los valores para la depuración. A continuación, borramos la pantalla, colocamos el cursor e imprimimos los valores. Hacemos esto para todos los caracteres que se muestran en la pantalla. Lo que marca el final de la función de bucle y el programa.
Prueba del medidor de eficiencia basado en Arduino y ESP32
Como puede ver mi configuración de prueba en la imagen de arriba. Tengo mi transformador de 30 V como entrada y tengo mi medidor conectado para la placa de prueba. Estoy usando una placa convertidora reductora basada en LM2596 y para la carga y estoy usando tres resistencias de 10 ohmios, en paralelo.
Como puede ver en la imagen de arriba, me he conectado a multímetros para verificar el voltaje de entrada y salida. El transformador produce casi 32 V y la salida del convertidor reductor es de 3,95 V.
La imagen aquí muestra la corriente de salida medida por mi medidor de eficiencia y el multímetro. Como puede ver, el multímetro muestra.97 amperios, y si se acerca un poco, muestra 1.0A, está ligeramente apagado debido a la no linealidad presente en el módulo ACS712, pero esto sirve para nuestro propósito. Para una explicación detallada y pruebas, puede ver el video en nuestra sección de videos.
Más mejoras
Para esta demostración, el circuito se hace en una PCB hecha a mano, pero el circuito se puede construir fácilmente en una PCB de buena calidad. En mi experimento, el tamaño de la PCB es realmente grande debido al tamaño del componente, pero en un entorno de producción, se puede reducir utilizando componentes SMD baratos. El circuito tampoco tiene ninguna función de protección incorporada, por lo que incluir un circuito de protección mejorará el aspecto de seguridad general del circuito. Además, mientras escribía el código, noté que el ADC del ESP32 no es tan bueno. La inclusión de un ADC externo como el módulo ADS1115 aumentará la estabilidad y precisión generales.
Espero que les haya gustado este artículo y hayan aprendido algo nuevo de él. Si tiene alguna duda, puede preguntar en los comentarios a continuación o puede utilizar nuestros foros para una discusión detallada.