ControlTemperatura / Mbed 2 deprecated ControlTemperatura_2_4

Dependencies:   mbed

Fork of ControlTemperatura_2_3 by ControlTemperatura

Committer:
davicone
Date:
Thu Apr 09 07:47:07 2015 +0000
Revision:
6:de176672744c
Parent:
5:cc6ff3f4aca1
:);

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