MII1SistElec
/
Proyecto
¡Qué majo es Ander Ibabe!
Diff: main.cpp
- Revision:
- 0:91c7502b70de
- Child:
- 1:7c44bfcec04b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Dec 13 09:47:54 2017 +0000 @@ -0,0 +1,151 @@ +#include "mbed.h" +#include "math.h" +#include "TextLCD.h" + +Serial bluetooth (D10,D2); +Serial pc(SERIAL_TX,SERIAL_RX); +TextLCD lcd(D8,D9,D6,D3,D4,D5,TextLCD::LCD16x2); //rs,e,d4-d7 +InterruptIn pulsador(PC_13); +float muestrasA[100]; +float muestrasB[100]; +float muestrasC[100]; +float muestrasD[100]; + +AnalogIn tension (A0); +AnalogIn tensioncontinua (A1); +AnalogIn intensisdad (A4); +AnalogIn intensidadcontinua (A5); +float Vcont; +float Icont; +int contador=0; +int contadorIntensidad=0; +int bufferlleno; +int nbuffer; +Ticker timerMuestro; +Ticker timerVisualizacion; +int i; +float Vrms; +float Irms; +float PotenciaActiva; +float PotenciaReactiva; +float PotenciaAparente; +float FactorPotencia; +float EnergiaActiva; +float EnergiaReactiva=0; +int mostrardato=0; +float precio; + +void temporizador () +{ + if(nbuffer) { + muestrasA[contador]=(tension.read()-Vcont)*219.626*3.3f; + muestrasC[contador]=(intensidad.read()-Icont)*9.525*3.3f; + } else { + muestrasB[contador]=(tension.read()-Vcont)*219.626f*3.3f; + muestrasD[contador]=(intensidad.read()-Icont)*9.725*3.3f; + } + contador++; + if(contador==100) { + contador=0; + nbuffer=!nbuffer; + bufferlleno=1; + } +} + +void boton() +{ + mostrardato++; + if (mostrardato>8) + mostrardato=0; +} + +void mostrar () +{ + lcd.cls(); + switch(mostrardato) { + case 0: + lcd.printf("Vrms:\n3.3f V",Vrms); + pc.printf("Vrms:\n3.3f V",Vrms); + break; + case 1: + lcd.printf("Irms:\n3.3f I",Vrms); + pc.printf("Irms:\n3.3f I",Vrms); + break; + case 2: + lcd.printf("F.pot:\n3.3f ",FactorPotencia); + pc.printf("F.pot:\n3.3f ",FactorPotencia); + break; + case 3: + lcd.printf("P.Apa:\n3.3f VA",PotenciaAparente); + pc.printf("P.Apa:\n3.3f VA",PotenciaAparente); + break; + case 4: + lcd.printf("P.React:\n3.3f VAr",PotenciaReactiva); + pc.printf("P.React:\n3.3f VAr",PotenciaReactiva); + break; + case 5: + lcd.printf("P.Act:\n3.3f W",PotenciaActiva); + pc.printf("P.Act:\n3.3f W",PotenciaActiva); + break; + case 6: + lcd.printf("E.Act:\n3.3f kWh",EnergiaActiva); + pc.printf("E.Act:\n3.3f kWh",EnergiaActiva); + break; + case 7: + lcd.printf("E.React:\n3.3f kWh",EnergiaReactiva); + pc.printf("E.React:\n3.3f kWh",EnergiaReactiva); + break; + } + bluetooth.printf("%3.3f| %3.3f| %3.3f| %3.3f\n",Vrms,Irms,PotenciaActiva,precio); +} + +int main () +{ + float suma; + float sumapotenciaactiva=0; + float sumaIntensidad; + float dato; + float datoIntensidad; + + timerMuestro.attach_us(&temporizador,200); + timerVisualizacion.attach(&mostrar,1); + pulsador.rise(&boton); + Vcont=0; + Icont=0; + for (i=0; i<8; i++) { + Vcont=Vcont+tensioncontinua.read(); + Icont=Icont+intensidadcontinua.read(); + } + Vcont=Vcont/8.0f; + Icont=Icont/8.0f; + + while (1) { + if (bufferlleno) { + bufferlleno=0; + suma=0; + sumaIntensidad=0; + sumapotenciaactiva=0; + for (i=0; i<100; i++) { + if(nbuffer==1) { + dato=muestrasA[i]; + datoIntensidad=muestrasC[i]; + } else { + dato=muestrasB[i]; + datoIntensidad=muestrasD[i]; + } + suma=suma+dato*dato; + sumaIntensidad=sumaIntensidad+datoIntensidad*datoIntensidad; + sumapotenciaactiva=sumapotenciaactiva+dato*datoIntensidad; + } + Vrms=(sqrt(suma/100.0f)*1.01449275362f); + Irms=(sqrt(sumaIntensidad/100.0f)*0.9869); + PotenciaActiva=(sumapotenciaactiva/100.0f)/10.00139f; + EnergiaActiva=EnergiaActiva+(PotenciaActiva/180000000.0f); + PotenciaAparente=Vrms*Irms; + PotenciaReactiva=(sqrt((PotenciaActiva-PotenciaAparente)-(PotenciaActiva*PotenciaActiva))); + EnergiaActiva=EnergiaReactiva+(PotenciaReactiva/180000000.0f); + FactorPotencia=(PotenciaActiva/PotenciaAparente); + precio=EnergiActiva*0.121f; + } + } +}