Proyecto final
Revision 8:6f184796147a, committed 2019-01-07
- Comitter:
- freind00
- Date:
- Mon Jan 07 13:05:08 2019 +0000
- Parent:
- 7:e0452337a3d1
- Commit message:
- final
Changed in this revision
| final.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/final.cpp Thu Dec 20 13:21:41 2018 +0000
+++ b/final.cpp Mon Jan 07 13:05:08 2019 +0000
@@ -8,16 +8,19 @@
#define constanteIntensidad 1.423595702690060e-09
#define vectormuestras 100
#define offsetTension 0.50369472
-#define offsetIntensidad 0.5040785
+#define offsetIntensidad 0.4152
#define eps 2.220446049250313e-016
+void sacardatos();
+
TextLCD lcd(D8, D9, D2, D3, D4, D5, TextLCD::LCD16x2); // rs, e, d4-d7
Serial pc(USBTX, USBRX); // tx, rx
InterruptIn button(PC_13);
-AnalogIn tension(A0);
+AnalogIn tension(A2);
AnalogIn intensidad(A1);
-
+ Ticker timerCaptura;
+ Ticker timerVisualizacion;
struct Vectores{
float vTensionA[vectormuestras];
@@ -27,39 +30,34 @@
float vIntensidadB[vectormuestras];
}vectores;
+ float flag=0;
+ int bufferActivo=0;
+ int contador=0;
+ int pulsador=0;
+
struct Medidas{
- float medidaTension;
- float medidaIntensidad;
+
+ float VRMS;
+ float IRMS;
+ float P_activa;
+ float P_reactiva;
+ float P_aparente;
+ float Consumo_Pact;
+ float Consumo_Preact;
+ float FP;
}medidas;
-int contador=0;
-int pulsador=0;
-int bufferActivo=0;
-int flag=0;
-int16_t measV=0;
-int16_t measI=0;
-int32_t producto=0;
-int64_t sumatorioV=0;
-int64_t sumatorioI=0;
-int64_t sumatorioPA=0;
-float VRMS=0;
-float IRMS=0;
-float P_activa=0;
-float P_reactiva=0;
-float P_aparente=0;
-float Consumo_Pact=0;
-float Consumo_Preact=0;
-float FP=0;
//Captura de valores mediante muestreo
void captura() //función muestreo
{
+
float medidaTension=tension.read();
- medidaTension=medidaTension-offsetTension*datoTension;
+ medidaTension=(medidaTension-offsetTension)*datoTension;
float medidaIntensidad=intensidad.read();
- medidaIntensidad=medidaIntensidad-offsetIntensidad*datoIntensidad;
+ medidaIntensidad=(medidaIntensidad-offsetIntensidad)*datoIntensidad;
if(bufferActivo==1) {
vectores.vTensionA[contador] = medidaTension;
@@ -83,35 +81,35 @@
{
lcd.cls();
if(pulsador==0){
- lcd.printf("VRMS:\n %f", VRMS);
+ lcd.printf("VRMS:\n %f", medidas.VRMS);
}
else if (pulsador ==1) {
- lcd.printf("IRMS:\n %f", IRMS);
+ lcd.printf("IRMS:\n %f", medidas.IRMS);
}
else if (pulsador ==2) {
- lcd.printf("Pot. activa:\n %f", P_activa);
+ lcd.printf("Pot. activa:\n %f", medidas.P_activa);
}
else if (pulsador ==3) {
- lcd.printf("Pot. reactiva:\n %f", P_reactiva);
+ lcd.printf("Pot. reactiva:\n %f", medidas.P_reactiva);
}
else if (pulsador ==4) {
- lcd.printf("Pot. aparente:\n %f", P_aparente);
+ lcd.printf("Pot. aparente:\n %f", medidas.P_aparente);
}
else if (pulsador ==5) {
- lcd.printf("Consumo Pot. A:\n %f", Consumo_Pact);
+ lcd.printf("Consumo Pot. A:\n %f", medidas.Consumo_Pact);
}
else if (pulsador ==6) {
- lcd.printf("Consumo Pot. R:\n %f", Consumo_Preact);
+ lcd.printf("Consumo Pot. R:\n %f", medidas.Consumo_Preact);
}
else if (pulsador ==7) {
- lcd.printf("Factor de potencia:\n\r %f", FP);
+ lcd.printf("Factor de pot.:\n %f", medidas.FP);
}
}
@@ -120,15 +118,23 @@
void cambio_boton()
{
pulsador++;
- if(pulsador>8) {
+ if(pulsador>7) {
pulsador=0;
}
}
int main()
{
- Ticker timerCaptura;
- Ticker timerVisualizacion;
+ float measV=0;
+ float measI=0;
+ float producto=0;
+ float sumatorioV=0;
+ float sumatorioI=0;
+ float sumatorioPA=0;
+ medidas.Consumo_Pact=0.0;
+ medidas.Consumo_Preact=0.0;
+
+
timerCaptura.attach_us(&captura,200);//Hace que la función muestreo se ejecute cada 200us
timerVisualizacion.attach(&visualizacion,1.0);//Hace que la función mostrar se ejecute cada segundo
button.rise(&cambio_boton);//Hace que la función boton se ejecute cada vez que se pulse el botón
@@ -159,14 +165,23 @@
sumatorioPA+=producto;
}
- VRMS=sqrt(sumatorioV)/vectormuestras;
- IRMS=sqrt(sumatorioI);
- P_activa=sqrt(constanteTension*constanteIntensidad)*sumatorioPA;
- P_aparente=VRMS*IRMS;
- P_reactiva=sqrt(P_aparente*P_aparente)-(P_aparente*P_aparente);
- Consumo_Pact=Consumo_Pact+P_activa*20e-3/(3600*1000);
- Consumo_Preact=Consumo_Preact+P_reactiva*20e-3/(3600*1000);
- FP=P_activa/(P_aparente+eps);
+ medidas.VRMS=sqrt(sumatorioV/vectormuestras);
+ medidas.IRMS=sqrt(sumatorioI/vectormuestras);
+ medidas.P_activa=sumatorioPA/vectormuestras;
+ medidas.P_aparente=medidas.VRMS*medidas.IRMS;
+ medidas.P_reactiva=sqrt((medidas.P_aparente*medidas.P_aparente)-(medidas.P_activa*medidas.P_activa));
+ medidas.Consumo_Pact=medidas.Consumo_Pact+medidas.P_activa*20e-3/(3600*1000);
+ medidas.Consumo_Preact=medidas.Consumo_Preact+medidas.P_reactiva*20e-3/(3600*1000);
+ medidas.FP=medidas.P_activa/(medidas.P_aparente+eps);
+ //sacardatos();
}
+ wait(0.001);
}
+}
+
+void sacardatos(){
+ timerCaptura.attach(&captura,100);
+ for (int i=0;i<100;i++){
+ printf("%f\r\n",vectores.vIntensidadB[i]);
+ }
}
\ No newline at end of file