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
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
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() |
Software para visualización de webcam Open Source
Con este software podrás mantener en primer plano la captura de una webcam.
Tiny GSM
Una pequeña biblioteca Arduino para módulos GSM, que simplemente funciona.
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
- 00:20:16
- 00:45:24
- 00:57:28
- ¿Cómo funciona el current-ranger?
Gracias a Shutterstock por la cesión de las imágenes.