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:


#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)

}
// 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 en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.