Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
h>
#include <LCDKeypad.h>
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);
//Esta variable necesita ser ajustada en funcin al voltaje que te genere la placa.
2.5 voltios seran 514, pero siempre se pierde algo de voltaje en las resistencias
// TODO: Auto-Ajustarlo usando la media de una lista de tomas.
const int adc_zero = 507; //
relative digital zero of the arudino input from ACS712 (could make this a variable
and auto-adjust it)
void setup()
{
Serial.begin(9600);
//Inicializamos la pantalla LCD.
lcd.begin(16, 2);
lcd.clear();
}
void loop()
{
unsigned long currentAcc = 0;
int voltajemax= 0;
unsigned int voltajemin=1025;
unsigned int count = 0;
unsigned long prevMicros = micros() - sampleInterval ;
while (count < numSamples)
{
if (micros() - prevMicros >= sampleInterval)
{
// Leemos voltaje TODO: Comprobar si el voltaje <200 ERROR en conexin
int voltaje=analogRead(voltPin);
//Nos quedamos con el voltaje mximo y mnimo. Solo usaremos el mximo,
//pero no cuesta nada dejar el mnimo para futuros usos incrementando
precisin
if(voltaje<voltajemin) voltajemin=voltaje;
if(voltaje>voltajemax) voltajemax=voltaje;
//Valor puntual de la corriente
int adc_raw = analogRead(currentPin) - adc_zero;
currentAcc += (unsigned long)(adc_raw * adc_raw);
//Incrementamos contadores
count++;
prevMicros += sampleInterval;
}
}
int voltaje=calcularVoltaje(voltajemax,voltajemin);
float rms=calcularRMS(currentAcc,numSamples);
//Pasamos la intensidad en amperios, a Watios multiplicando por el voltaje
int watios=rms*voltaje;
writeLCDValues(watios,voltaje);
}