ControlTemperatura / Mbed 2 deprecated ControlTemperatura_2_1

Dependencies:   mbed

Fork of ControlTemperatura_2 by ControlTemperatura

Committer:
davicone
Date:
Thu Apr 09 07:17:41 2015 +0000
Revision:
4:9d435331bbc7
Parent:
3:e060cff29402
:);

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davicone 0:ac833c85625c 1
davicone 0:ac833c85625c 2 // --------------------------------------------------------------------------- Inclusiones
davicone 0:ac833c85625c 3 #include "mbed.h"
davicone 0:ac833c85625c 4 #include "string.h"
davicone 0:ac833c85625c 5 using namespace std;
davicone 0:ac833c85625c 6
davicone 3:e060cff29402 7 #define Si 1
davicone 3:e060cff29402 8 #define No 0
davicone 3:e060cff29402 9 #define numMuestreos 5
davicone 3:e060cff29402 10 #define CoeficienteB 3950
davicone 3:e060cff29402 11 #define NominalTermistor 10000
davicone 3:e060cff29402 12 #define TempNominal 25
davicone 3:e060cff29402 13 #define ResistSerie 100
davicone 3:e060cff29402 14 #define Encendido 0
davicone 3:e060cff29402 15 #define Apagado 1
davicone 3:e060cff29402 16
davicone 0:ac833c85625c 17
davicone 0:ac833c85625c 18
davicone 0:ac833c85625c 19
davicone 0:ac833c85625c 20
davicone 0:ac833c85625c 21 // --------------------------------------------------------------------------- Variables y objetos
davicone 0:ac833c85625c 22 Serial pc(USBTX, USBRX); // Inicializo el puerto serie para comunicarme con la computadora
davicone 0:ac833c85625c 23 // La frecuencia por default es de 9600
davicone 0:ac833c85625c 24
davicone 0:ac833c85625c 25 // Variables
davicone 0:ac833c85625c 26 unsigned int tiempoFinal; // Variable para almacenar el tiempo máximo
davicone 0:ac833c85625c 27 float tempTrabajo; // Temperatura a la cual se debe mantener el sistema
jeka 1:677ecfe29f10 28 float tempSen1; // Temperatura del sensor 1
davicone 0:ac833c85625c 29 float tempSen2; // Temperatura del sensor 2
davicone 0:ac833c85625c 30 float tempSen3; // Temperatura del sensor 3
jeka 1:677ecfe29f10 31 float tempSen4; // Temperatura del sensor 4
davicone 3:e060cff29402 32 float proSen1; // Promedio para conversión sensor 1
davicone 3:e060cff29402 33 float proSen2; // Promedio para conversión sensor 2
davicone 3:e060cff29402 34 float proSen3; // Promedio para conversión sensor 3
davicone 3:e060cff29402 35 float proSen4; // Promedio para conversión sensor 4
davicone 3:e060cff29402 36 uint16_t adcTempSen1[numMuestreos]; // Variable para almacenar valor de adc sensor 1
davicone 3:e060cff29402 37 uint16_t adcTempSen2[numMuestreos]; // Variable para almacenar valor de adc sensor 2
davicone 3:e060cff29402 38 uint16_t adcTempSen3[numMuestreos]; // Variable para almacenar valor de adc sensor 3
davicone 3:e060cff29402 39 uint16_t adcTempSen4[numMuestreos]; // Variable para almacenar valor de adc sensor 4
davicone 0:ac833c85625c 40 Timer timmer; // Timer para medir el tiempo transcurrido
davicone 0:ac833c85625c 41 bool inicioProceso = No; // Variable para determinar si el proceso se inicia
davicone 0:ac833c85625c 42 bool pausaProceso = No; // Variable para pausar
davicone 0:ac833c85625c 43 bool finProceso = No; // Variable finalizar el proceso
davicone 0:ac833c85625c 44 char comando; // Variable para leer el comando a ejecutar en el proceso
jeka 1:677ecfe29f10 45 char sTiempo[10]; // stringtiempo
davicone 3:e060cff29402 46 char sTemperatura[10]; // string temperatura
davicone 3:e060cff29402 47 bool curadoIniciado = No;
jeka 1:677ecfe29f10 48
davicone 0:ac833c85625c 49
davicone 0:ac833c85625c 50
davicone 0:ac833c85625c 51 //Pines de Salida
davicone 0:ac833c85625c 52 DigitalOut reflector1(p26); // Salida para controlar el reflector 1
davicone 0:ac833c85625c 53 DigitalOut reflector2(p25); // Salida para controlar el reflector 2
davicone 0:ac833c85625c 54 DigitalOut reflector3(p24); // Salida para controlar el reflector 3
davicone 0:ac833c85625c 55 DigitalOut reflector4(p23); // Salida para controlar el reflector 4
davicone 0:ac833c85625c 56 DigitalOut ventilador1(p22); // Salida para controlar el ventilador 1
davicone 0:ac833c85625c 57 DigitalOut ventilador2(p21); // Salida para controlar el ventilador 2
davicone 0:ac833c85625c 58
davicone 0:ac833c85625c 59 // Pines de Entrada
davicone 0:ac833c85625c 60 AnalogIn pinSen1(p16); // Entrada para leer la temperatura del sensor 1
davicone 0:ac833c85625c 61 AnalogIn pinSen2(p17); // Entrada para leer la temperatura del sensor 2
davicone 0:ac833c85625c 62 AnalogIn pinSen3(p18); // Entrada para leer la temperatura del sensor 3
davicone 0:ac833c85625c 63 AnalogIn pinSen4(p19); // Entrada para leer la temperatura del sensor 4
davicone 0:ac833c85625c 64
davicone 0:ac833c85625c 65
davicone 0:ac833c85625c 66 // --------------------------------------------------------------------------- Prototipos
jeka 1:677ecfe29f10 67 void LeerSerie (void); // Función para leer el puerto serie
davicone 3:e060cff29402 68 void LeerSensores (void); // Función para leer temperatura delos sensores
davicone 3:e060cff29402 69 float convertirTemp(float promedio); // Función para convertir la lectura ADC a temperatura
davicone 0:ac833c85625c 70
davicone 0:ac833c85625c 71
davicone 0:ac833c85625c 72 // --------------------------------------------------------------------------- Programa principal
davicone 0:ac833c85625c 73 int main()
davicone 0:ac833c85625c 74 {
davicone 0:ac833c85625c 75 pc.baud(9600);
davicone 0:ac833c85625c 76 pc.printf("Iniciando\n\r"); // Se imprime y se da enter
davicone 0:ac833c85625c 77 pc.attach(&LeerSerie);
davicone 0:ac833c85625c 78
davicone 0:ac833c85625c 79 while(inicioProceso == No)
davicone 0:ac833c85625c 80 {
davicone 0:ac833c85625c 81 wait(0.1);
davicone 0:ac833c85625c 82 //pc.printf("y");
davicone 0:ac833c85625c 83 }// Espera a recibir comando
davicone 0:ac833c85625c 84
davicone 0:ac833c85625c 85 pc.printf("Proceso Iniciado\r\n");
davicone 3:e060cff29402 86 // Encender Ventiladores
davicone 3:e060cff29402 87 ventilador1 = 1;
davicone 3:e060cff29402 88 ventilador2 = 1;
davicone 3:e060cff29402 89 pc.printf("Ventiladores Encendidos\r\n");
davicone 3:e060cff29402 90 reflector1 = Encendido;
davicone 3:e060cff29402 91 reflector2 = Encendido;
davicone 3:e060cff29402 92 reflector3 = Encendido;
davicone 3:e060cff29402 93 reflector4 = Encendido;
davicone 3:e060cff29402 94 pc.printf("Reflectores Encendidos\r\n");
davicone 0:ac833c85625c 95
davicone 3:e060cff29402 96
davicone 3:e060cff29402 97 // Espera a que todos los sensores alcancen la temperatura de trabajo, que el curado inicie
davicone 3:e060cff29402 98 while(curadoIniciado == No)
davicone 3:e060cff29402 99 {
davicone 3:e060cff29402 100 LeerSensores();
davicone 3:e060cff29402 101 if((tempSen1 >= tempTrabajo) && (tempSen2 >= tempTrabajo) && (tempSen3 >= tempTrabajo) && (tempSen4 >= tempTrabajo))
davicone 3:e060cff29402 102 {
davicone 3:e060cff29402 103 curadoIniciado = Si;
davicone 3:e060cff29402 104 }
davicone 3:e060cff29402 105 }
davicone 3:e060cff29402 106
davicone 3:e060cff29402 107 pc.printf("Curado Iniciado\r\n");
davicone 3:e060cff29402 108 // Activar timer
davicone 3:e060cff29402 109
davicone 0:ac833c85625c 110 // --------------------------------------------------------------------------- PROCESO
davicone 0:ac833c85625c 111 while(finProceso == No)
davicone 0:ac833c85625c 112 {
davicone 0:ac833c85625c 113
davicone 3:e060cff29402 114 LeerSensores();
davicone 0:ac833c85625c 115
davicone 3:e060cff29402 116 // ------------------------------ Controlar Reflector 1
davicone 3:e060cff29402 117 if(tempSen1 > tempTrabajo)
davicone 3:e060cff29402 118 {
davicone 3:e060cff29402 119 reflector1 = Apagado;
davicone 3:e060cff29402 120 pc.printf("Reflector 1: Apagado\r\n");
davicone 3:e060cff29402 121 }
davicone 3:e060cff29402 122 else if(tempSen1 < tempTrabajo)
davicone 3:e060cff29402 123 {
davicone 3:e060cff29402 124 reflector1 = Encendido;
davicone 3:e060cff29402 125 pc.printf("Reflector 1: Encendido\r\n");
davicone 3:e060cff29402 126 }
davicone 3:e060cff29402 127
davicone 3:e060cff29402 128 // ------------------------------ Controlar Reflector 2
davicone 3:e060cff29402 129 if(tempSen2 > tempTrabajo)
davicone 3:e060cff29402 130 {
davicone 3:e060cff29402 131 reflector2 = Apagado;
davicone 3:e060cff29402 132 pc.printf("Reflector 2: Apagado\r\n");
davicone 3:e060cff29402 133 }
davicone 3:e060cff29402 134 else if(tempSen2 < tempTrabajo)
davicone 3:e060cff29402 135 {
davicone 3:e060cff29402 136 reflector2 = Encendido;
davicone 3:e060cff29402 137 pc.printf("Reflector 2: Encendido\r\n");
davicone 3:e060cff29402 138 }
davicone 3:e060cff29402 139
davicone 3:e060cff29402 140 // ------------------------------ Controlar Reflector 3
davicone 3:e060cff29402 141 if(tempSen3 > tempTrabajo)
davicone 3:e060cff29402 142 {
davicone 3:e060cff29402 143 reflector3 = Apagado;
davicone 3:e060cff29402 144 pc.printf("Reflector 3: Apagado\r\n");
davicone 3:e060cff29402 145 }
davicone 3:e060cff29402 146 else if(tempSen3 < tempTrabajo)
davicone 3:e060cff29402 147 {
davicone 3:e060cff29402 148 reflector3 = Encendido;
davicone 3:e060cff29402 149 pc.printf("Reflector 3: Encendido\r\n");
davicone 3:e060cff29402 150 }
davicone 3:e060cff29402 151
davicone 3:e060cff29402 152 // ------------------------------ Controlar Reflector 4
davicone 3:e060cff29402 153 if(tempSen4 > tempTrabajo)
davicone 3:e060cff29402 154 {
davicone 3:e060cff29402 155 reflector4 = Apagado;
davicone 3:e060cff29402 156 pc.printf("Reflector 4: Apagado\r\n");
davicone 3:e060cff29402 157 }
davicone 3:e060cff29402 158 else if(tempSen4 < tempTrabajo)
davicone 3:e060cff29402 159 {
davicone 3:e060cff29402 160 reflector4 = Encendido;
davicone 3:e060cff29402 161 pc.printf("Reflector 4: Encendido\r\n");
davicone 3:e060cff29402 162 }
davicone 0:ac833c85625c 163
davicone 0:ac833c85625c 164 while(pausaProceso == Si) // ---------------------------------------- Proceso Pausado
davicone 0:ac833c85625c 165 {
davicone 0:ac833c85625c 166 pc.printf("Proceso Puasado\r\n");
davicone 3:e060cff29402 167 // Apagar Ventiladores
davicone 3:e060cff29402 168 ventilador1 = 0;
davicone 3:e060cff29402 169 ventilador2 = 0;
davicone 3:e060cff29402 170 pc.printf("Ventiladores Apagados\r\n");
davicone 3:e060cff29402 171 reflector1 = Apagado;
davicone 3:e060cff29402 172 reflector2 = Apagado;
davicone 3:e060cff29402 173 reflector3 = Apagado;
davicone 3:e060cff29402 174 reflector4 = Apagado;
davicone 3:e060cff29402 175 pc.printf("Reflectores Apagados\r\n");
davicone 3:e060cff29402 176 wait(1);
davicone 0:ac833c85625c 177 }
davicone 0:ac833c85625c 178 }
davicone 0:ac833c85625c 179
davicone 0:ac833c85625c 180 pc.printf("Proceso Terminado\r\n");
davicone 0:ac833c85625c 181 }
davicone 0:ac833c85625c 182
davicone 0:ac833c85625c 183
davicone 0:ac833c85625c 184 // --------------------------------------------------------------------------- Funciones
davicone 0:ac833c85625c 185
davicone 0:ac833c85625c 186 // --------------------------------------------------------------------------- LeerSerie
davicone 0:ac833c85625c 187 void LeerSerie(void)
davicone 0:ac833c85625c 188 {
davicone 0:ac833c85625c 189 comando = pc.getc();
davicone 0:ac833c85625c 190 switch(comando)
davicone 0:ac833c85625c 191 {
davicone 0:ac833c85625c 192 case 'I':
davicone 0:ac833c85625c 193 inicioProceso = Si;
davicone 0:ac833c85625c 194 // Guardar Tiempo
davicone 0:ac833c85625c 195 // Guardar Temperatura
davicone 0:ac833c85625c 196 pc.scanf("%s %s",sTiempo, sTemperatura);
davicone 0:ac833c85625c 197 pc.printf("\r\n");
davicone 0:ac833c85625c 198 pc.printf(sTiempo);
davicone 0:ac833c85625c 199 pc.printf("\r\n");
davicone 0:ac833c85625c 200 pc.printf(sTemperatura);
davicone 0:ac833c85625c 201 pc.printf("\r\n");
davicone 0:ac833c85625c 202
davicone 0:ac833c85625c 203 tiempoFinal = atoi(sTiempo);
davicone 0:ac833c85625c 204 tempTrabajo = atoi(sTemperatura);
davicone 0:ac833c85625c 205 break;
davicone 0:ac833c85625c 206
davicone 0:ac833c85625c 207 case 'P':
davicone 0:ac833c85625c 208 pausaProceso = Si;
davicone 0:ac833c85625c 209 break;
davicone 0:ac833c85625c 210
davicone 0:ac833c85625c 211 case 'F':
davicone 0:ac833c85625c 212 finProceso = Si;
davicone 0:ac833c85625c 213 break;
davicone 0:ac833c85625c 214
davicone 0:ac833c85625c 215 case 'R':
davicone 0:ac833c85625c 216 pausaProceso = No;
davicone 0:ac833c85625c 217 break;
davicone 0:ac833c85625c 218
davicone 0:ac833c85625c 219 }
davicone 3:e060cff29402 220 }
davicone 3:e060cff29402 221
jeka 1:677ecfe29f10 222
jeka 2:7e518b8dcda8 223 //----------------------------------------------------Leer temperatura
jeka 1:677ecfe29f10 224 void LeerSensores(void)
jeka 1:677ecfe29f10 225 {
davicone 4:9d435331bbc7 226 /*int i;
davicone 3:e060cff29402 227 //-------------------------------------------------------------------------- sensor 1
davicone 3:e060cff29402 228 //----------------------------- Se realizan múltiples lecturas para sacar un promedio de voltaje
davicone 3:e060cff29402 229 for ( i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 230 {
davicone 3:e060cff29402 231 adcTempSen1[i] = pinSen1.read_u16();
davicone 3:e060cff29402 232 wait(0.01);
davicone 3:e060cff29402 233 }
davicone 3:e060cff29402 234 // ---------------------------- Se calcula el promedio
davicone 3:e060cff29402 235 proSen1 = 0;
davicone 3:e060cff29402 236 for (i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 237 {
davicone 3:e060cff29402 238 proSen1 += adcTempSen1[i];
davicone 3:e060cff29402 239 }
davicone 3:e060cff29402 240 proSen1 /= numMuestreos;
davicone 4:9d435331bbc7 241
jeka 1:677ecfe29f10 242
davicone 3:e060cff29402 243 //-------------------------------------------------------------------------- sensor 2
davicone 3:e060cff29402 244 //----------------------------- Se realizan múltiples lecturas para sacar un promedio de voltaje
davicone 3:e060cff29402 245 for ( i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 246 {
davicone 3:e060cff29402 247 adcTempSen2[i] = pinSen2.read_u16();
davicone 3:e060cff29402 248 wait(0.01);
davicone 3:e060cff29402 249 }
davicone 3:e060cff29402 250 // ---------------------------- Se calcula el promedio
davicone 3:e060cff29402 251 proSen2 = 0;
davicone 3:e060cff29402 252 for (i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 253 {
davicone 3:e060cff29402 254 proSen2 += adcTempSen2[i];
davicone 3:e060cff29402 255 }
davicone 3:e060cff29402 256 proSen2 /= numMuestreos;
davicone 4:9d435331bbc7 257
jeka 1:677ecfe29f10 258
davicone 3:e060cff29402 259 //-------------------------------------------------------------------------- sensor 3
davicone 3:e060cff29402 260 //----------------------------- Se realizan múltiples lecturas para sacar un promedio de voltaje
davicone 3:e060cff29402 261 for ( i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 262 {
davicone 3:e060cff29402 263 adcTempSen3[i] = pinSen3.read_u16();
davicone 3:e060cff29402 264 wait(0.01);
davicone 3:e060cff29402 265 }
davicone 3:e060cff29402 266 // ---------------------------- Se calcula el promedio
davicone 3:e060cff29402 267 proSen3 = 0;
davicone 3:e060cff29402 268 for (i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 269 {
davicone 3:e060cff29402 270 proSen3 += adcTempSen3[i];
davicone 3:e060cff29402 271 }
davicone 3:e060cff29402 272 proSen3 /= numMuestreos;
davicone 4:9d435331bbc7 273
davicone 3:e060cff29402 274
davicone 3:e060cff29402 275 //-------------------------------------------------------------------------- sensor 4
davicone 3:e060cff29402 276 //----------------------------- Se realizan múltiples lecturas para sacar un promedio de voltaje
davicone 3:e060cff29402 277 for ( i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 278 {
davicone 3:e060cff29402 279 adcTempSen4[i] = pinSen4.read_u16();
davicone 3:e060cff29402 280 wait(0.01);
davicone 3:e060cff29402 281 }
davicone 3:e060cff29402 282 // ---------------------------- Se calcula el promedio
davicone 3:e060cff29402 283 proSen4 = 0;
davicone 3:e060cff29402 284 for (i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 285 {
davicone 3:e060cff29402 286 proSen4 += adcTempSen4[i];
davicone 3:e060cff29402 287 }
davicone 3:e060cff29402 288 proSen4 /= numMuestreos;
jeka 1:677ecfe29f10 289
jeka 1:677ecfe29f10 290
davicone 4:9d435331bbc7 291 tempSen1 = convertirTemp(proSen1);
davicone 4:9d435331bbc7 292 tempSen2 = convertirTemp(proSen2);
davicone 4:9d435331bbc7 293 tempSen3 = convertirTemp(proSen3);
davicone 4:9d435331bbc7 294 tempSen4 = convertirTemp(proSen4);*/
davicone 4:9d435331bbc7 295
davicone 4:9d435331bbc7 296 // SOLO TEST
davicone 4:9d435331bbc7 297 tempSen1 = 50;
davicone 4:9d435331bbc7 298 tempSen2 = 50;
davicone 4:9d435331bbc7 299 tempSen3 = 50;
davicone 4:9d435331bbc7 300 tempSen4 = 50;
davicone 4:9d435331bbc7 301 // ----- TEST
davicone 3:e060cff29402 302
davicone 3:e060cff29402 303 pc.printf("Sensor1: %.2f C. /r /n ", tempSen1);
davicone 3:e060cff29402 304 pc.printf("Sensor2: %.2f C. /r /n ", tempSen2);
davicone 3:e060cff29402 305 pc.printf("Sensor3: %.2f C. /r /n ", tempSen3);
davicone 3:e060cff29402 306 pc.printf("Sensor4: %.2f C. /r /n ", tempSen4);
jeka 1:677ecfe29f10 307
davicone 3:e060cff29402 308 }
davicone 3:e060cff29402 309
davicone 3:e060cff29402 310 // --------------------------------------------------------------------------- convertirTemp
davicone 3:e060cff29402 311 float convertirTemp(float promedio)
davicone 3:e060cff29402 312 {
davicone 3:e060cff29402 313 float temperatura;
jeka 1:677ecfe29f10 314
davicone 3:e060cff29402 315 // convertir el promedio a resistencia
davicone 3:e060cff29402 316 promedio = 65535 / promedio - 1;
davicone 3:e060cff29402 317 promedio = ResistSerie / promedio;
davicone 3:e060cff29402 318 temperatura = promedio / NominalTermistor; // (R/Ro)
davicone 3:e060cff29402 319 temperatura = log(temperatura); // ln(R/Ro)
davicone 3:e060cff29402 320 temperatura /= CoeficienteB; // 1/B * ln(R/Ro)
davicone 3:e060cff29402 321 temperatura += 1.0 / (TempNominal + 273.15); // + (1/To)
davicone 3:e060cff29402 322 temperatura = 1.0 / temperatura; // Invertir
davicone 3:e060cff29402 323 temperatura -= 273.15; // convertir a C
davicone 3:e060cff29402 324 return temperatura;
davicone 3:e060cff29402 325 }
davicone 3:e060cff29402 326
davicone 3:e060cff29402 327