Monitorización de corriente continua

Por Soloelectronicos @soloelectronico

La medición de la Intensidad de la corriente siempre es un poco desafiante, ya que tenemos que medirla en un circuito en serie pues por lo general, la medición no es posible sin romper un circuito, insertando algunos cables para la medida.

Hay algunos métodos directos que utilizan una masa comun entre el dispositivo medido y el dispositivo de medición con la ayuda de un registro entre ellos. Pero tales métodos son nunca tan confiables debido al uso de una masa común, que puede hacer que los sistemas sean inestables.

Los sensores podrían ayudar a resolver este desafío. Los sensores como el INA219 de Texas Instruments operan en una configuración de bus I2C que hace posible medir la corriente viva.

  • El módulo del sensor de corriente está configurado para monitorear la caída de voltaje de los pines y el voltaje de alimentación del bus, tiempos de conversión y opciones de filtro.
  • El valor de calibración programado del módulo de corriente digital de alta precisión se combina con un multiplicador interno para admitir la lectura directa de corriente.
  • El INA219 es un monitor de alimentación y bypass que admite la interfaz I2C o SMBUS.
  • La función de consumo de energía ultrabajo del módulo del sensor de corriente de la interfaz I2C se puede utilizar de manera adecuada y adecuada en equipos que funcionan con baterías.
  • El módulo del sensor de corriente se caracteriza por una salida de señal I2C, que puede comunicarse directamente con el sistema principal.

En este proyecto, la primera parte fue conectar este sensor con una MCU , que en este caso fue un ESP32 con Arduino IDE debido a su facilidad de uso y capacidad para monitoreo remoto a través de internet ,aunque también puede funcionar con una Raspberry Pi como vamos a ver.

En el caso de usar como MCU una Raspberry el desafío que se enfrentó el autor fue encender esta a través de GPIO usando un convertidor de USB a TTL. El Raspberry Pi no se inicia y las medidas tampoco aparecen ,pero el autor encontró una solución sobre la marcha.

Ahora, se tiene la solución para encender RaspberryPi a través de GPIO. El problema es que se requiere usar GPIO 2 y 4 para suministrar energía de 5V y GPIO 6 para suministrar tierra.

La siguiente imagen muestra el Pi en ejecución a través de Putty y sus actualizaciones, la imagen es el gráfico de la absorción de corriente en mAmps por Pi, alcanzando el máximo alrededor de 900 mAmps solo a veces.

Normalmente permanece alrededor de 500mAmps.

Cuando la RaspberryPi funciona con comandos sudo de apagado todavía hay algo de energía requerida por el LED de estado y otras funciones internas. Si desenchufamos el cable, el consumo de energía será cercano a cero, como en las siguientes capturas de pantalla.

Tambien se puede agregar una pequeña pantalla que pudiera mostrar los datos en vivo para el monitoreo de energía por ejemplo una pantalla LCD SSD1306 para que funcione.

Una idea más es que los datos de monitoreo de energía se pueden enviar a los ruidosos, como AWS IoT, donde los datos se manipulan de manera efectiva, pero eso es demasiado para un dispositivo tan pequeño. Además, no encaja con el proyecto.

Una cosa más interesante es que un PoE HaT para RaspberryPi (básicamente cualquier placa) podría tener capacidad de monitoreo actual con LCD. Sería interesante saber qué parte del software / hardware consume más energía.

A continuación el código del proyecto para Arduino con los comentarios en español;

 #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <Wire.h> #include <Adafruit_INA219.h> #define SCREEN_WIDTH 128 // Ancho de pantalla OLED, en píxeles #define SCREEN_HEIGHT 32 // Altura de la pantalla OLED, en píxeles #define OLED_RESET 4 // Restablecer el pin # (o -1 si se comparte el pin de restablecimiento de Arduino) #define SCREEN_ADDRESS 0x3C /// <Consulte la hoja de datos para la dirección; 0x3D para 128x64, 0x3C para 128x32 Pantalla Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, & Wire, OLED_RESET); Adafruit_INA219 ina219; configuración nula ( nula ) { Serial.begin ( 115200 ); while (! Serial) { // pausará Zero, Leonardo, etc.hasta que se abra la consola serie retraso ( 1 ); } if (! display.begin (SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println (F ( "Falló la asignación SSD1306" )); para (;;); // No continúes, bucle para siempre } display.display (); retraso ( 2000 ); // Pausa por 2 segundos display.clearDisplay (); uint32_t currentFrequency; Serial.println ( "¡Hola!" ); // Inicializa el INA219. // Por defecto, la inicialización usará el rango más grande (32V, 2A). Sin embargo // puede llamar a una función setCalibration para cambiar este rango (ver comentarios). if (! ina219.begin ()) { Serial.println ( "No se pudo encontrar el chip INA219" ); while ( 1 ) {retraso ( 10 ); } } // Para usar un rango de 32V, 1A ligeramente más bajo (mayor precisión en amperios): //ina219.setCalibration_32V_1A(); // O para usar un rango más bajo de 16V, 400mA (mayor precisión en voltios y amperios): //ina219.setCalibration_16V_400mA(); Serial.println ( "Medición de tensión y corriente con INA219 ..." ); } bucle vacío ( vacío ) { tensión de derivación de flotación = 0 ; voltaje del bus flotante = 0 ; flotar current_mA = 0 ; voltaje de carga flotante = 0 ; flotación power_mW = 0 ; shuntvoltage = ina219.getShuntVoltage_mV (); busvoltage = ina219.getBusVoltage_V (); current_mA = ina219.getCurrent_mA (); power_mW = ina219.getPower_mW (); tensión de carga = tensión de bus + (tensión de derivación / 1000 ); //Serial.print("Bus Voltage: "); Serial.print (busvoltage); Serial.println ("V"); //Serial.print("Shunt Voltage: "); Serial.print (shuntvoltage); Serial.println ("mV"); //Serial.print("Load Voltage: "); Serial.print (voltaje de carga); Serial.println ("V"); Serial.print ( "Actual:" ); Serial.print (current_mA); Serial.println ( "mA" ); //Serial.print("Power: "); Serial.print (potencia_mW); Serial.println ("mW"); Serial.println ( "" ); retraso ( 10 ); display.clearDisplay (); display.setTextSize ( 2 ); display.setTextColor (SSD1306_WHITE); display.setCursor ( 5 , 5 ); display.print (current_mA); display.print ( "mA" ); // display.setCursor (0,0); // display.print (power_mW); // display.print ("mWatt"); display.display (); retraso ( 100 ); display.clearDisplay (); } Fuente :https://www.element14.com