SensorCooler

Dependencies:   mbed DS1820

Committer:
Jumaroag
Date:
Fri Jun 21 02:54:11 2019 +0000
Revision:
12:b4f6eed9c339
Parent:
10:739d1a7a4b1b
Lin zabala Rodriguez Agudo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jumaroag 12:b4f6eed9c339 1 #include "mbed.h"
Jumaroag 12:b4f6eed9c339 2 #include "DS1820.h"//Libreria para medir el sensor de temp
Jumaroag 12:b4f6eed9c339 3
Jumaroag 12:b4f6eed9c339 4 //Defines Estados
Jumaroag 12:b4f6eed9c339 5 #define Medicion_RPM_Max 0
Jumaroag 12:b4f6eed9c339 6 #define Lazo_Cerrado 1
Jumaroag 12:b4f6eed9c339 7 #define Lazo_Abierto 2
Jumaroag 12:b4f6eed9c339 8
Jumaroag 12:b4f6eed9c339 9 DigitalIn CoolerIn(PTE5);//Entrada sensor Hall
Jumaroag 12:b4f6eed9c339 10 DigitalIn Pulsador(PTC0);//Entrada Pulsador
Jumaroag 12:b4f6eed9c339 11
Jumaroag 12:b4f6eed9c339 12 AnalogIn Preset(PTB3);//Entrada analogica del preset
Jumaroag 12:b4f6eed9c339 13
Jumaroag 12:b4f6eed9c339 14 DigitalOut azul(LED_BLUE);
Jumaroag 12:b4f6eed9c339 15 DigitalOut rojo(LED_RED);
Jumaroag 12:b4f6eed9c339 16 DigitalOut verde(LED_GREEN);
Jumaroag 12:b4f6eed9c339 17
Jumaroag 12:b4f6eed9c339 18 PwmOut CoolerOut(PTE20);//La salida tiene que variar entre 1.0 y 0.0
Jumaroag 12:b4f6eed9c339 19
Jumaroag 12:b4f6eed9c339 20 unsigned char t=0,n=0,HabilitacionMedicion=0;
Jumaroag 12:b4f6eed9c339 21
Jumaroag 12:b4f6eed9c339 22 Ticker seg,micro;
Jumaroag 12:b4f6eed9c339 23
Jumaroag 12:b4f6eed9c339 24 void segundos(void);//mediciones y printf
Jumaroag 12:b4f6eed9c339 25 void micro_segundos(void);//antirebote pulsador
Jumaroag 12:b4f6eed9c339 26 unsigned int calculo_RPM(unsigned int pulsos);//funcion que calcula las RPM
Jumaroag 12:b4f6eed9c339 27
Jumaroag 12:b4f6eed9c339 28 Serial serial(USBTX, USBRX);//Comunicacion con PC
hudakz 10:739d1a7a4b1b 29
hudakz 7:8beaacebc82d 30 int main()
hudakz 7:8beaacebc82d 31 {
Jumaroag 12:b4f6eed9c339 32 Pulsador.mode(PullUp);//Habilitamos pull up interno para el pulsador
Jumaroag 12:b4f6eed9c339 33
Jumaroag 12:b4f6eed9c339 34 unsigned char Estado_General=0,habCoolerIn=0,antirebote_pulsador=0,habilitacion_pulsador=0,hab=0,hab_max=0;
Jumaroag 12:b4f6eed9c339 35 unsigned int pulsos=0,RPM=0,RPM_Max=0,Velocidad=0;
Jumaroag 12:b4f6eed9c339 36 float Temperatura=0,Valor_Preset=0,Velocidad_Real=1;
Jumaroag 12:b4f6eed9c339 37
Jumaroag 12:b4f6eed9c339 38 DS1820 ds1820(PTC7);//Entre parentesis va el nombre del pin que recive los datos
Jumaroag 12:b4f6eed9c339 39 ds1820.begin();//Inicio el sensor de Temp
Jumaroag 12:b4f6eed9c339 40
Jumaroag 12:b4f6eed9c339 41 seg.attach(&segundos, 1);//Inicio Ticker 1 seg
Jumaroag 12:b4f6eed9c339 42 micro.attach(&micro_segundos, 0.1);//Inicio Ticker 100uS
Jumaroag 12:b4f6eed9c339 43
Jumaroag 12:b4f6eed9c339 44 azul=1;
Jumaroag 12:b4f6eed9c339 45 rojo=1;
Jumaroag 12:b4f6eed9c339 46 verde=1;
hudakz 9:1d1c57840c7e 47
Jumaroag 12:b4f6eed9c339 48 while(1)
Jumaroag 12:b4f6eed9c339 49 {
Jumaroag 12:b4f6eed9c339 50 switch (Estado_General)//Maquina de estados General del Programa
Jumaroag 12:b4f6eed9c339 51 {
Jumaroag 12:b4f6eed9c339 52 default://En caso de un estado incierto voy a Medicion_RPM_Max que es el estado de reset
Jumaroag 12:b4f6eed9c339 53
Jumaroag 12:b4f6eed9c339 54 case Medicion_RPM_Max://Mido las RPM maximas del cooler conectado
Jumaroag 12:b4f6eed9c339 55 CoolerOut=1;
Jumaroag 12:b4f6eed9c339 56 if(CoolerIn==1 && habCoolerIn==1)//cuento las vueltas del cooler
Jumaroag 12:b4f6eed9c339 57 {
Jumaroag 12:b4f6eed9c339 58 pulsos++;
Jumaroag 12:b4f6eed9c339 59 habCoolerIn=0;
Jumaroag 12:b4f6eed9c339 60 }
Jumaroag 12:b4f6eed9c339 61 if(CoolerIn==0 && habCoolerIn==0)
Jumaroag 12:b4f6eed9c339 62 {
Jumaroag 12:b4f6eed9c339 63 habCoolerIn=1;
Jumaroag 12:b4f6eed9c339 64 }
Jumaroag 12:b4f6eed9c339 65 //Parpadeo Azul y Blanco
Jumaroag 12:b4f6eed9c339 66 if(t%2==0 && hab==0)
Jumaroag 12:b4f6eed9c339 67 {
Jumaroag 12:b4f6eed9c339 68 printf("Midiendo...\n");
Jumaroag 12:b4f6eed9c339 69 azul=0;
Jumaroag 12:b4f6eed9c339 70 rojo=1;
Jumaroag 12:b4f6eed9c339 71 verde=1;
Jumaroag 12:b4f6eed9c339 72 hab=1;
Jumaroag 12:b4f6eed9c339 73 }
Jumaroag 12:b4f6eed9c339 74 if(t%2!=0 && hab==1)
Jumaroag 12:b4f6eed9c339 75 {
Jumaroag 12:b4f6eed9c339 76 printf("Midiendo..\n");
Jumaroag 12:b4f6eed9c339 77 azul=0;
Jumaroag 12:b4f6eed9c339 78 rojo=0;
Jumaroag 12:b4f6eed9c339 79 verde=0;
Jumaroag 12:b4f6eed9c339 80 hab=0;
Jumaroag 12:b4f6eed9c339 81 }
Jumaroag 12:b4f6eed9c339 82
Jumaroag 12:b4f6eed9c339 83 if(t==4 && hab_max==0)//Dejo un margen de tiempo para asegurar el regimen permanente
Jumaroag 12:b4f6eed9c339 84 {
Jumaroag 12:b4f6eed9c339 85 pulsos=0;
Jumaroag 12:b4f6eed9c339 86 hab_max=1;
Jumaroag 12:b4f6eed9c339 87 }
Jumaroag 12:b4f6eed9c339 88 if(t==7 && hab_max==1)//cada 3 seg calculo las RPM
Jumaroag 12:b4f6eed9c339 89 {
Jumaroag 12:b4f6eed9c339 90 RPM_Max=calculo_RPM(pulsos);
Jumaroag 12:b4f6eed9c339 91 pulsos=0;
Jumaroag 12:b4f6eed9c339 92 hab_max=2;
Jumaroag 12:b4f6eed9c339 93 }
Jumaroag 12:b4f6eed9c339 94 if(t==10 && hab_max==2)//Lo hago 2 veces y promedio para estar seguro
Jumaroag 12:b4f6eed9c339 95 {
Jumaroag 12:b4f6eed9c339 96 RPM_Max=(RPM_Max + calculo_RPM(pulsos))/2;//Necesito este dato para los calculos que voy a realizar
Jumaroag 12:b4f6eed9c339 97 pulsos=0;
Jumaroag 12:b4f6eed9c339 98 t=0;
Jumaroag 12:b4f6eed9c339 99 Estado_General=Lazo_Cerrado;//Termina la medicion asi q voy estado lazo cerrado
Jumaroag 12:b4f6eed9c339 100 printf("===Medicion Finalizada===\n");
Jumaroag 12:b4f6eed9c339 101 printf("RPM Maxima: %i rpm\n",RPM_Max);
Jumaroag 12:b4f6eed9c339 102 printf("\n======Lazo Cerrado======\n");
Jumaroag 12:b4f6eed9c339 103 azul=1;
Jumaroag 12:b4f6eed9c339 104 rojo=1;
Jumaroag 12:b4f6eed9c339 105 verde=1;
Jumaroag 12:b4f6eed9c339 106 hab_max=0;
Jumaroag 12:b4f6eed9c339 107 }
Jumaroag 12:b4f6eed9c339 108 break;
Jumaroag 12:b4f6eed9c339 109 //------------------------------------------------------------------------------------
Jumaroag 12:b4f6eed9c339 110 case Lazo_Cerrado://Controlo las RPM del cooler en funcion de la temperatura (en lazo cerrado)
Jumaroag 12:b4f6eed9c339 111 verde=0;
Jumaroag 12:b4f6eed9c339 112 if(CoolerIn==1 && habCoolerIn==1)//cuento las vueltas del cooler
Jumaroag 12:b4f6eed9c339 113 {
Jumaroag 12:b4f6eed9c339 114 pulsos++;
Jumaroag 12:b4f6eed9c339 115 habCoolerIn=0;
Jumaroag 12:b4f6eed9c339 116 }
Jumaroag 12:b4f6eed9c339 117 if(CoolerIn==0 && habCoolerIn==0)
Jumaroag 12:b4f6eed9c339 118 {
Jumaroag 12:b4f6eed9c339 119 habCoolerIn=1;
Jumaroag 12:b4f6eed9c339 120 }
Jumaroag 12:b4f6eed9c339 121
Jumaroag 12:b4f6eed9c339 122 if(t==3)//cada 3 seg calculo las RPM y ajusto la velocidad de salida
Jumaroag 12:b4f6eed9c339 123 {
Jumaroag 12:b4f6eed9c339 124 RPM=calculo_RPM(pulsos);
Jumaroag 12:b4f6eed9c339 125 pulsos=0;
Jumaroag 12:b4f6eed9c339 126 t=0;
Jumaroag 12:b4f6eed9c339 127 if(RPM<Velocidad && Velocidad_Real<1)//Control de RPM en lazo cerrado
Jumaroag 12:b4f6eed9c339 128 {
Jumaroag 12:b4f6eed9c339 129 if((Velocidad-RPM)<400 && Velocidad_Real<0.9)
Jumaroag 12:b4f6eed9c339 130 Velocidad_Real=Velocidad_Real+0.01;
Jumaroag 12:b4f6eed9c339 131 if((Velocidad-RPM)>400)
Jumaroag 12:b4f6eed9c339 132 Velocidad_Real=Velocidad_Real+0.1;
Jumaroag 12:b4f6eed9c339 133 }
Jumaroag 12:b4f6eed9c339 134 if(RPM>Velocidad)
Jumaroag 12:b4f6eed9c339 135 {
Jumaroag 12:b4f6eed9c339 136 if((RPM-Velocidad)<400)
Jumaroag 12:b4f6eed9c339 137 Velocidad_Real=Velocidad_Real-0.01;
Jumaroag 12:b4f6eed9c339 138 if((RPM-Velocidad)>400)
Jumaroag 12:b4f6eed9c339 139 Velocidad_Real=Velocidad_Real-0.1;
Jumaroag 12:b4f6eed9c339 140 }
Jumaroag 12:b4f6eed9c339 141 //Cada 3 seg imprimo por pantalla los datos
Jumaroag 12:b4f6eed9c339 142 printf("\nTemperatura: %.2f\nRPM: %i\n",Temperatura,RPM);
Jumaroag 12:b4f6eed9c339 143 printf("RPM Ideal: %i\nPWM Cooler: %.2f\n",Velocidad,Velocidad_Real);
Jumaroag 12:b4f6eed9c339 144 }
Jumaroag 12:b4f6eed9c339 145
Jumaroag 12:b4f6eed9c339 146 if(HabilitacionMedicion==0)//Cada 1 segundo mido el sensor y calculo la velocidad a la que deberia girar
Jumaroag 12:b4f6eed9c339 147 {
Jumaroag 12:b4f6eed9c339 148 ds1820.startConversion();//Empieza la conversion de temperatura
Jumaroag 12:b4f6eed9c339 149 Temperatura=ds1820.read();//Lees el valor de temperatura
Jumaroag 12:b4f6eed9c339 150 Velocidad=(Temperatura-20)*((RPM_Max-400)/50)+400;//Velocidad en RPM a la q deberia girar el cooler - Responde a la tabla de valores
Jumaroag 12:b4f6eed9c339 151 if(Temperatura>=70)//Si es mayor a 70 se clava al max
Jumaroag 12:b4f6eed9c339 152 {
Jumaroag 12:b4f6eed9c339 153 Velocidad=RPM_Max;
Jumaroag 12:b4f6eed9c339 154 }
Jumaroag 12:b4f6eed9c339 155 if(Temperatura<=20)//Si es menor a 20 se clava en 400 RPM
Jumaroag 12:b4f6eed9c339 156 {
Jumaroag 12:b4f6eed9c339 157 Velocidad=400;
Jumaroag 12:b4f6eed9c339 158 }
Jumaroag 12:b4f6eed9c339 159 CoolerOut=Velocidad_Real;//Fijo un PWM al cooler en funcion a lo controlado
Jumaroag 12:b4f6eed9c339 160 HabilitacionMedicion=1;
Jumaroag 12:b4f6eed9c339 161 }
Jumaroag 12:b4f6eed9c339 162
Jumaroag 12:b4f6eed9c339 163 //Pulsador - si lo puslo cambio de modo
Jumaroag 12:b4f6eed9c339 164 if(Pulsador==0 && antirebote_pulsador==0 && habilitacion_pulsador==1)
Jumaroag 12:b4f6eed9c339 165 {
Jumaroag 12:b4f6eed9c339 166 n=0;
Jumaroag 12:b4f6eed9c339 167 antirebote_pulsador=1;
Jumaroag 12:b4f6eed9c339 168 }
Jumaroag 12:b4f6eed9c339 169 if(n==1 && Pulsador==0 && habilitacion_pulsador==1)//Cambio de estado
Jumaroag 12:b4f6eed9c339 170 {
Jumaroag 12:b4f6eed9c339 171 antirebote_pulsador=0;
Jumaroag 12:b4f6eed9c339 172 habilitacion_pulsador=0;
Jumaroag 12:b4f6eed9c339 173 Estado_General=Lazo_Abierto;
Jumaroag 12:b4f6eed9c339 174 t=0;
Jumaroag 12:b4f6eed9c339 175 printf("\n======Lazo Abierto======\n");
Jumaroag 12:b4f6eed9c339 176 azul=1;
Jumaroag 12:b4f6eed9c339 177 rojo=1;
Jumaroag 12:b4f6eed9c339 178 verde=1;
Jumaroag 12:b4f6eed9c339 179 }
Jumaroag 12:b4f6eed9c339 180 if(n==1 && Pulsador==1 && habilitacion_pulsador==1)
Jumaroag 12:b4f6eed9c339 181 antirebote_pulsador=0;
Jumaroag 12:b4f6eed9c339 182 if(Pulsador==1 && antirebote_pulsador==0)
Jumaroag 12:b4f6eed9c339 183 {
Jumaroag 12:b4f6eed9c339 184 n=0;
Jumaroag 12:b4f6eed9c339 185 antirebote_pulsador=1;
Jumaroag 12:b4f6eed9c339 186 }
Jumaroag 12:b4f6eed9c339 187 if(n==1 && Pulsador==1)
Jumaroag 12:b4f6eed9c339 188 {
Jumaroag 12:b4f6eed9c339 189 antirebote_pulsador=0;
Jumaroag 12:b4f6eed9c339 190 habilitacion_pulsador=1;
Jumaroag 12:b4f6eed9c339 191 }
Jumaroag 12:b4f6eed9c339 192 if(n==1 && Pulsador==0)
Jumaroag 12:b4f6eed9c339 193 antirebote_pulsador=0;
Jumaroag 12:b4f6eed9c339 194
Jumaroag 12:b4f6eed9c339 195 break;
Jumaroag 12:b4f6eed9c339 196 //------------------------------------------------------------------------------------
Jumaroag 12:b4f6eed9c339 197 case Lazo_Abierto://La velocidad del cooler depende del Preset
Jumaroag 12:b4f6eed9c339 198 rojo=0;
Jumaroag 12:b4f6eed9c339 199 if(CoolerIn==1 && habCoolerIn==1)//cuento las vueltas del cooler
Jumaroag 12:b4f6eed9c339 200 {
Jumaroag 12:b4f6eed9c339 201 pulsos++;
Jumaroag 12:b4f6eed9c339 202 habCoolerIn=0;
Jumaroag 12:b4f6eed9c339 203 }
Jumaroag 12:b4f6eed9c339 204 if(CoolerIn==0 && habCoolerIn==0)
Jumaroag 12:b4f6eed9c339 205 {
Jumaroag 12:b4f6eed9c339 206 habCoolerIn=1;
Jumaroag 12:b4f6eed9c339 207 }
Jumaroag 12:b4f6eed9c339 208
Jumaroag 12:b4f6eed9c339 209 if(t==3)//cada 3 seg calculo las RPM
Jumaroag 12:b4f6eed9c339 210 {
Jumaroag 12:b4f6eed9c339 211 RPM=calculo_RPM(pulsos);
Jumaroag 12:b4f6eed9c339 212 pulsos=0;
Jumaroag 12:b4f6eed9c339 213 t=0;
Jumaroag 12:b4f6eed9c339 214 }
Jumaroag 12:b4f6eed9c339 215
Jumaroag 12:b4f6eed9c339 216 if(HabilitacionMedicion==0)//Cada 1 segundo mido el preset y ajusto la salida
Jumaroag 12:b4f6eed9c339 217 {
Jumaroag 12:b4f6eed9c339 218 Valor_Preset=Preset.read();
Jumaroag 12:b4f6eed9c339 219 CoolerOut=Valor_Preset;//Ajusto la velocidad de salida
Jumaroag 12:b4f6eed9c339 220 printf("\nPreset: %.0f\nRPM: %i\n",Valor_Preset*100,RPM);//Muestro los datos
Jumaroag 12:b4f6eed9c339 221 HabilitacionMedicion=1;
Jumaroag 12:b4f6eed9c339 222 }
Jumaroag 12:b4f6eed9c339 223
Jumaroag 12:b4f6eed9c339 224 //Pulsador - si lo pulso cambio a lazo cerrado
Jumaroag 12:b4f6eed9c339 225 if(Pulsador==0 && antirebote_pulsador==0 && habilitacion_pulsador==1)
Jumaroag 12:b4f6eed9c339 226 {
Jumaroag 12:b4f6eed9c339 227 n=0;
Jumaroag 12:b4f6eed9c339 228 antirebote_pulsador=1;
Jumaroag 12:b4f6eed9c339 229 }
Jumaroag 12:b4f6eed9c339 230 if(n==1 && Pulsador==0 && habilitacion_pulsador==1)//Cambio de estado
Jumaroag 12:b4f6eed9c339 231 {
Jumaroag 12:b4f6eed9c339 232 antirebote_pulsador=0;
Jumaroag 12:b4f6eed9c339 233 habilitacion_pulsador=0;
Jumaroag 12:b4f6eed9c339 234 Estado_General=Lazo_Cerrado;
Jumaroag 12:b4f6eed9c339 235 t=0;
Jumaroag 12:b4f6eed9c339 236 printf("\n======Lazo Cerrado======\n");
Jumaroag 12:b4f6eed9c339 237 azul=1;
Jumaroag 12:b4f6eed9c339 238 rojo=1;
Jumaroag 12:b4f6eed9c339 239 verde=1;
Jumaroag 12:b4f6eed9c339 240 }
Jumaroag 12:b4f6eed9c339 241 if(n==1 && Pulsador==1 && habilitacion_pulsador==1)
Jumaroag 12:b4f6eed9c339 242 antirebote_pulsador=0;
Jumaroag 12:b4f6eed9c339 243 if(Pulsador==1 && antirebote_pulsador==0)
Jumaroag 12:b4f6eed9c339 244 {
Jumaroag 12:b4f6eed9c339 245 n=0;
Jumaroag 12:b4f6eed9c339 246 antirebote_pulsador=1;
Jumaroag 12:b4f6eed9c339 247 }
Jumaroag 12:b4f6eed9c339 248 if(n==1 && Pulsador==1)
Jumaroag 12:b4f6eed9c339 249 {
Jumaroag 12:b4f6eed9c339 250 antirebote_pulsador=0;
Jumaroag 12:b4f6eed9c339 251 habilitacion_pulsador=1;
Jumaroag 12:b4f6eed9c339 252 }
Jumaroag 12:b4f6eed9c339 253 if(n==1 && Pulsador==0)
Jumaroag 12:b4f6eed9c339 254 antirebote_pulsador=0;
Jumaroag 12:b4f6eed9c339 255
Jumaroag 12:b4f6eed9c339 256 break;
Jumaroag 12:b4f6eed9c339 257
Jumaroag 12:b4f6eed9c339 258 }//SW
Jumaroag 12:b4f6eed9c339 259 }//while
Jumaroag 12:b4f6eed9c339 260 }//main
hudakz 10:739d1a7a4b1b 261
Jumaroag 12:b4f6eed9c339 262 void segundos(void)
Jumaroag 12:b4f6eed9c339 263 {
Jumaroag 12:b4f6eed9c339 264 t++;
Jumaroag 12:b4f6eed9c339 265 HabilitacionMedicion=0;
Jumaroag 12:b4f6eed9c339 266 }
hudakz 10:739d1a7a4b1b 267
Jumaroag 12:b4f6eed9c339 268 void micro_segundos(void)
Jumaroag 12:b4f6eed9c339 269 {
Jumaroag 12:b4f6eed9c339 270 if(n==0)
Jumaroag 12:b4f6eed9c339 271 n++;
Jumaroag 12:b4f6eed9c339 272 }
hudakz 10:739d1a7a4b1b 273
Jumaroag 12:b4f6eed9c339 274 unsigned int calculo_RPM(unsigned int pulsos)
Jumaroag 12:b4f6eed9c339 275 {
Jumaroag 12:b4f6eed9c339 276 return (pulsos*10);//Pulsos * 10 porque medimos durante 3 seg y cada 2 pulsos 1 vuelta
Jumaroag 12:b4f6eed9c339 277 }