En esta edición del concurso hemos mantenido la estructura del vehículo debido a su gran robustez y capacidad de maniobra. En futuras ediciones nos planteamos reducir el peso para conseguir más eficiencia. Puedes ver la presentación de nuestro proyecto:
El reto electrónico planteado para este año ha sido montar un sistema de medición de la potencia instantánea y de la energía generada por los paneles fotovoltáicos en un determinado intervalo de tiempo seleccionable (1 min, 1h, arbitrario, etc)
Nosotros hemos medido la Potencia instantánea y la hemos sumado cada segundo. De esa forma obtenemos la energía desde que se conecta la tarjeta controladora. Para ello medimos el voltaje mediante un divisor de tensión y la intensidad mediante el Shield ACS712. Hacemos los cálculos de potencia y energía y los mostramos por una pantalla LCD. Acontinuación puedes ver el esquema electrico y la programación en Arduino:
/*Programa de medición de la potencia y energía de paneles solares
para la participación en la VII edición del concurso de vehículos solares
Sustanaible Urban Race
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);//Crear el objeto lcd dirección 0x3F y 16 columnas x 2 filas
int voltaje =0; //variable para almacenar el voltaje
float Sensibilidad=11.39; //sensibilidad para sensor ACS712 de 30A comprobada y corregida el 15-05-23
//en vacio V1=2.22V I1=0, en carga con los paneles en el pasillo V2= 2,4V I2=0.0158A
float Potencia=0;
// Variables de tiempo
unsigned long previousTime = 0; // almacena el tiempo última actualización
const long interval = 1000; // intervalo de tiempo para medir la energía
float Energia=0; // variable que almacena la energía total desde el encendido de Arduino
void setup()
{
Serial.begin(9600); // Iniciamos la puerta serie
lcd.init(); //Inicializamos el LCD
lcd.backlight(); //Encendemos la luz de fondo del LCD
}
void loop()
{
// medida de voltaje sobre resisistencia de 20K. Divisor de tensión de 1M/20K
voltaje=0.1123*analogRead(A0); //lectura en divisor de tensión de resistencias de 2,2k y 100 ohmios
/*
Serial.print("Voltaje");
Serial.println(voltaje);
delay(1000);
*/
//Medidad de Intensidad
float I=get_corriente(200);//obtenemos la corriente promedio de 200 muestras
/*
Serial.print("Intensidad: ");
Serial.println(I,7);
delay(1000);
*/
//medidad de potencia
Potencia=voltaje*I;
/*
Serial.print("Potencia=");
Serial.print(Potencia);
Serial.println("W");
delay(1000);
*/
// lectura del tiempo actual y almacenamiento en la variable
unsigned long currentTime = millis();
// si el tiempo actual menos el anterior es mayor que el intervalo
if (currentTime - previousTime >= interval) {
previousTime = currentTime; // actualiza el tiempo anterior al nuevo ciclo
Energia= Energia + Potencia; //Calcula la energía total sumando la energía cada segundo
/*
Serial.print("Energia=");
Serial.print(Energia);
Serial.println("ws");
*/
// Imprime potencia y energía en LCD
lcd.setCursor(0,0);
lcd.print("Potencia: ");
lcd.print(Potencia);
lcd.print("w");
lcd.setCursor(0,1);
lcd.print("Energia: ");
lcd.print(Energia);
lcd.print("ws");
}
}
//función para tomar 200 muestras de corriente
float get_corriente(int n_muestras)
{
float voltajeSensor;
float corriente=0;
for(int i=0;i<n_muestras;i++)
{
voltajeSensor = analogRead(A1) * (5.0 / 1023.0);////lectura del sensor
corriente=corriente+(voltajeSensor-2.22)/Sensibilidad; //Ecuación para obtener la corriente. comprobado valor 2.22
}
corriente=corriente/n_muestras;
return(corriente);
}