Home Assistant Fácil

Curso de Home Assistant y domótica

  • Blog
  • Soy un pardillo
  • Podcast
  • Curso Arduino
  • Curso Domótica
  • Acceder
Usted está aquí: Inicio / Podcast / Medidor de consumos INA219

Medidor de consumos INA219

Maxi

El sensor INA219 es un chip de Texas Instruments capaz de monitorizar el consumo de energía de un dispositivo. En este capítulo hablamos con German y José Manuel sobre este sensor: como calcular y graficar la corriente que consume un prototipo a lo largo del tiempo.

Además, verás el principio de funcionamiento del current-ranger, una actualización de Tiny GS (Offset en los satélites) y la opinión de dos expertos que te ayudará a exprimir al máximo la batería de tus proyectos.

Para más información puedes visitar la primera parte donde destripamos a fondo el sensor INA219.

Puedes seguir a los contertulios es sus diferentes cuentas de Twitter:

  • Germán Martín @gmag12
  • José Manuel Galileo @G4lile0
  • Luis del valle (proyectos MAKER) @programarfacilc
  • Luis del Valle (Inteligencia Artificial) @ldelvalleh

Prepárate un café con leche y aprende a resolver tus problemas de programación durmiendo. ?

Indice de contenidos

  • 1 Gráficas con sensor INA219
  • 2 Software para visualización de webcam Open Source
  • 3 Tiny GSM
  • 4 Calcular la duración de una batería
  • 5 Notas del pódcast
INA219-tertulia-maker

Gráficas con sensor INA219

El sensor INA219 es un chip de Texas Instruments capaz de monitorizar el consumo de energía de un dispositivo. Lo hace midiendo la caída de tensión de una resistencia en derivación o resistencia shunt.

Datos sobre el proyecto con INA219:

  • Recuerda que debes medir en simultáneo el voltaje, la corriente y calcular la potencia (vatios-hora), si quieres medir con precisión el consumo de una placa alimentada por baterías. Si solo usas una sola placa, es suficiente medir el consumo.
  • El sensor permite una lectura cada 1 milisegundos.

El código que se cargó en la placa de Arduino es el siguiente.

#include <Adafruit_INA219.h>
#include <Wire.h>

Adafruit_INA219 ina219;

unsigned long tiempoAnterior = 0;
unsigned long tiempo = 10;
unsigned long tiempoCount = 0;
float msToh=2.7778e-7;
float acumulaCurrent=0;

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    delay(1);
  }

  // Iniciar INA219
  if (!ina219.begin()) {
    while (1) {
      delay(10);
    }
  }

  // 16v 400mA
  ina219.setCalibration_16V_400mA();
}

void loop() {
  if(millis()<tiempoAnterior){
    tiempoAnterior =  millis();
  }

  if (millis() - tiempoAnterior >= tiempo) {
    tiempoAnterior =  millis();
    tiempoCount += tiempo;
    // Obtener corriente
    float current_mA = ina219.getCurrent_mA();
    acumulaCurrent += current_mA;
    // Convertir a mAh (mA*h)
    float current_mAh = acumulaCurrent * tiempoCount * msToh;
    Serial.print(tiempoCount);
    Serial.print("$");
    Serial.print(current_mA);
    Serial.print("$");
    Serial.println(current_mAh);
  }
}

El IDE de Python que se utiliza es Mu y el código para graficar el consumo es el siguiente.

import serial
import time
import statistics
import matplotlib.pyplot as plt

# Abrir para leer el puerto serie
ser = serial.Serial('COM3', 9600, timeout=1)
time.sleep(2)

# Número de muestras más o menos cada muestra 1ms
numMuestras = 1000

centinela = True

dataX = []
datamA = []
datamAh = []
# Repetir numMuestras
for i in range(numMuestras):
    # Leer línea serial
    line = ser.readline()   # read a byte string
    if line:
        if centinela:
            print("Comienza a leer")
            centinela = False

        # Convertir a string y separar línea serial
        # 10$0.20$2.3
        #
        strSerial = line.decode().split('$')
        try:
            # Convertir a números
            tiempo = int(strSerial[0])
            mA = float(strSerial[1]);
            mAh = float(strSerial[2]);

            # Añadir a las listas
            dataX.append(tiempo)
            datamA.append(mA)
            datamAh.append(mAh)
        except:
            print("Error")
ser.close()

print("Media mA: " + str(sum(datamA) / len(datamA)))

# Gráfica
fig, ax = plt.subplots(2)
fig.suptitle('CONSUMOS')

# Plot datos
ax[0].plot(dataX, datamA)
ax[0].set_title("mA")

# Mostrar las líneas mayores de gris
ax[0].grid(b=True, which='major', color='#555555', linestyle='-')

# Mostrar las líneas menores en un gris menos intenso
ax[0].minorticks_on()
ax[0].grid(b=True, which='minor', color='#999999', linestyle='-', alpha=0.2)

ax[1].plot(dataX, datamAh)
ax[1].set_title("mAh")

# Mostrar las líneas mayores de gris
ax[1].grid(b=True, which='major', color='#555555', linestyle='-')

# Mostrar las líneas menores en un gris menos intenso
ax[1].minorticks_on()
ax[1].grid(b=True, which='minor', color='#999999', linestyle='-', alpha=0.2)

plt.show()

Si el consumo de tu proyecto con #Arduino #ESP8266 #ESP32 te importa menos que un semáforo apagado no leas este tutorial sobre el medidor de consumo para proyectos #Maker #INA219 Para los demás aquí está el enlace con el #podcast #YouTube y tutorial https://t.co/e3u2Mvn6cC

— programarfacil.com (@programarfacilc) June 8, 2021

Software para visualización de webcam Open Source

Con este software podrás mantener en primer plano la captura de una webcam.

Muestra una segunda webcam de una forma sencilla utilizando este software #opensource #CamDesk https://t.co/BGnAOtLOEg

— programarfacil.com (@programarfacilc) June 14, 2021

Tiny GSM

Una pequeña biblioteca Arduino para módulos GSM, que simplemente funciona.

La librería #TinyGSM nos permite integrar multiples protocolos con una librería muy ligera. Podemos enviar datos vía GSM gracias a la capa superior que nos abstrae de los comandos #AT. Compatible con #Arduino y #ESP8266 https://t.co/cd9RN606yF pic.twitter.com/5xBoM9EIrO

— programarfacil.com (@programarfacilc) April 16, 2018

Calcular la duración de una batería

Aquí verás que variables debes usar si quieres calcular la duración estimativa de una batería mediante Battery Life Calculator.

  • Para empezar, debes colocar que capacidad de la batería (mAh) que va a tener la batería que uses. Por ejemplo: 2000 mAh de una batería 18650.
  • Consumo de corriente del dispositivo durante el deep sleep. Por ejemplo: 17 µA del ESP12.
  • Consumo de corriente del dispositivo cuando está encendido. Por ejemplo: 75 mA.
  • Número de veces que se enciende el dispositivo por hora. Por ejemplo: 1 vez por hora.
  • Duración del lapso de tiempo que está encendido. Por ejemplo: 10000 ms.

Notas del pódcast

  • 00:05:31
    • Actualización Tiny GS
  • 00:14:52
    • Librería TinyGSM
  • 00:20:16
    • INA219
  • 00:45:24
    • Battery Life Calculator
  • 00:57:28
    • ¿Cómo funciona el current-ranger?
  • Enigma IOT mediciones en ESP-12

Gracias a Shutterstock por la cesión de las imágenes.

slzb-06

SLZB-06U: migrar coordinador Zigbee desde Sonoff Dongle P (y por qué el Dongle E es diferente)

Vale, lo confieso: no hay nada que me dé más pereza en domótica que tener que migrar toda la red Zigbee. El típico momento en el que tu viejo … [+ info...]

Home Assistant 2026.6

Home Assistant 2026.6: dashboard inteligente, IR bidireccional y automatizaciones más claras

Llevas meses peleándote con el dashboard de Home Assistant: añadir una tarjeta requería saber de memoria el nombre de cada tipo de bloque, y al final … [+ info...]

MATTER HOME ASSISTANT

Matter Home Assistant: Thread local sin nube

Hay automatizaciones que parecen una chorrada hasta que las vives todos los días. Sesenta minutos después del amanecer, los toldos de mi terraza bajan … [+ info...]

Copyright © 2026 · Programar Fácil · Aviso legal