Recopilador de Consumo Eléctrico
Proyecto

Recopilador de Consumo Eléctrico
Esta actividad consiste en utilizar un sensor de corriente y voltaje para crear un registro de consumo energético de una carga de libre elección. Conectaremos el sensor a la placa NodeMCU y usaremos una Tarjeta SD para guardar dicho registro de datos en formato CSV. Esta manera de almacenar la información nos permitirá importar luego los datos a una hoja de cálculo y crear gráficas que nos den brinden una visión más clara de lo que hemos recopilado. Para llevar a cabo el ejercicio necesitarás el siguiente material:

Ejemplo de uso del INA219
#include <Adafruit_INA219.h> // Librería para usar el INA219 (Adafruit INA219 by Adafruit)
// Crear instancia del objeto INA219
Adafruit_INA219 ina219;
void setup() {
// Inicializar el INA219, por defecto se configura para 32V 2A
ina219.begin();
// Puedes utilizar la siguiente función para cambiar el rango
// ina219.setCalibration_32V_1A(); (Mayor precisión en el amperaje)
// ina219.setCalibration_16V_400mA(); (Mayor precisión en el voltaje y amperaje)
}
void loop() {
// Entre medidas hay que esperar unos segundos
delay(2000);
// Tomamos las medidas con el sensor INA219
float shuntvoltage = ina219.getShuntVoltage_mV(); // Voltaje Shunt (mV)
float busvoltage = ina219.getBusVoltage_V(); // Voltaje Bus (V)
float current_mA = ina219.getCurrent_mA(); // Corriente (mA)
float power_mW = ina219.getPower_mW(); // Potencia (mW)
}
Solución en C/C++
// Incluir librerías necesarias
#include <Adafruit_INA219.h>
#include <ESP32Time.h>
#include <SD.h>
// Creamos una instancia de los objetos necesarios
Adafruit_INA219 ina219;
ESP32Time rtc;
File archivo;
// Creamos variables necesarias para la temporización
unsigned long ultimoRegistro = 0;
unsigned long periodoRegistros = 10000;
void setup() {
// Inicialización de monitor serial
Serial.begin(9600);
// Inicialización y comprobación de la tarjeta SD
if(!SD.begin(5)) {
Serial.println("Error al inicializar la Tarjeta SD");
return;
} else {
Serial.println("Tarjeta SD inicializada correctamente!");
}
// Inicialización del sensor INA
if(!ina219.begin()) {
Serial.println("Error al inicializar el sensor INA219");
return;
} else {
Serial.println("Sensor INA219 inicializado correctamente!");
}
// Configurar fecha y hora en el RTC interno del ESP32
rtc.setTime(0, 0, 8, 1, 1, 2024);
Serial.println("Hora establecida en el RTC interno!");
}
void loop() {
if((millis() - ultimoRegistro) > periodoRegistros) {
// Obtener fecha
int dia = rtc.getDay();
int mes = rtc.getMonth();
int anio = rtc.getYear();
// Preparamos cadena con la fecha
String fecha = String(dia) + "/" + String(mes) + "/" + String(anio);
// Obtener hora
int hora = rtc.getHour(true);
int minuto = rtc.getMinute();
int segundo = rtc.getSecond();
// Preparamos cadena con la hora
String tiempo = String(hora) + ":" + String(minuto) + ":" + String(segundo);
// Recopilamos datos sobre el consumo energético
float tensionShunt = ina219.getShuntVoltage_mV();
float tensionBus = ina219.getBusVoltage_V();
float tensionCarga = tensionBus + (tensionShunt / 1000);
float corriente = ina219.getCurrent_mA();
float potencia = ina219.getPower_mW();
// Abrimos el archivo en formato CSV de la tarjeta SD y
// almacenamos las medidas como Valores Separados por Coma
archivo = SD.open("/mediciones.csv", FILE_APPEND);
if(archivo) {
Serial.println("Escribiendo en la Tarjeta SD...");
archivo.print(fecha);
archivo.print(",");
archivo.print(tiempo);
archivo.print(",");
archivo.print(tensionCarga);
archivo.print("V,");
archivo.print(corriente);
archivo.print("mA,");
archivo.print(potencia);
archivo.print("mW,");
archivo.println();
archivo.close();
} else {
Serial.println("Error al abrir el archivo");
}
ultimoRegistro = millis();
}
}
| Vistas | |
|---|---|
| 0 | Número de vistas |
| 0 | Vistas de miembros |
| 0 | Vistas públicas |
| Acciones | |
|---|---|
| 0 | Gustos |
| 0 | No me gusta |
| 0 | Comentarios |
Compartir por correo
Por favor iniciar sesión para compartir esto webpage por correo.