ControlTemperatura / Mbed 2 deprecated ControlTemperatura_2_6

Dependencies:   mbed

Fork of ControlTemperatura_2_5 by ControlTemperatura

Committer:
davicone
Date:
Thu Apr 09 07:30:53 2015 +0000
Revision:
5:cc6ff3f4aca1
Parent:
4:9d435331bbc7
Child:
6:de176672744c
:)

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.printf("Iniciando\n\r"); // Se imprime y se da enter
davicone 0:ac833c85625c 80 pc.attach(&LeerSerie);
davicone 5:cc6ff3f4aca1 81 //timmer.attach(&Contador,1.0);
davicone 0:ac833c85625c 82
davicone 0:ac833c85625c 83 while(inicioProceso == No)
davicone 0:ac833c85625c 84 {
davicone 0:ac833c85625c 85 wait(0.1);
davicone 0:ac833c85625c 86 //pc.printf("y");
davicone 0:ac833c85625c 87 }// Espera a recibir comando
davicone 0:ac833c85625c 88
davicone 0:ac833c85625c 89 pc.printf("Proceso Iniciado\r\n");
davicone 3:e060cff29402 90 // Encender Ventiladores
davicone 3:e060cff29402 91 ventilador1 = 1;
davicone 3:e060cff29402 92 ventilador2 = 1;
davicone 3:e060cff29402 93 pc.printf("Ventiladores Encendidos\r\n");
davicone 3:e060cff29402 94 reflector1 = Encendido;
davicone 3:e060cff29402 95 reflector2 = Encendido;
davicone 3:e060cff29402 96 reflector3 = Encendido;
davicone 3:e060cff29402 97 reflector4 = Encendido;
davicone 3:e060cff29402 98 pc.printf("Reflectores Encendidos\r\n");
davicone 0:ac833c85625c 99
davicone 3:e060cff29402 100
davicone 3:e060cff29402 101 // Espera a que todos los sensores alcancen la temperatura de trabajo, que el curado inicie
davicone 3:e060cff29402 102 while(curadoIniciado == No)
davicone 3:e060cff29402 103 {
davicone 3:e060cff29402 104 LeerSensores();
davicone 3:e060cff29402 105 if((tempSen1 >= tempTrabajo) && (tempSen2 >= tempTrabajo) && (tempSen3 >= tempTrabajo) && (tempSen4 >= tempTrabajo))
davicone 3:e060cff29402 106 {
davicone 3:e060cff29402 107 curadoIniciado = Si;
davicone 3:e060cff29402 108 }
davicone 3:e060cff29402 109 }
davicone 3:e060cff29402 110
davicone 3:e060cff29402 111 pc.printf("Curado Iniciado\r\n");
davicone 3:e060cff29402 112 // Activar timer
davicone 3:e060cff29402 113
davicone 0:ac833c85625c 114 // --------------------------------------------------------------------------- PROCESO
davicone 0:ac833c85625c 115 while(finProceso == No)
davicone 0:ac833c85625c 116 {
davicone 0:ac833c85625c 117
davicone 3:e060cff29402 118 LeerSensores();
davicone 0:ac833c85625c 119
davicone 3:e060cff29402 120 // ------------------------------ Controlar Reflector 1
davicone 3:e060cff29402 121 if(tempSen1 > tempTrabajo)
davicone 3:e060cff29402 122 {
davicone 3:e060cff29402 123 reflector1 = Apagado;
davicone 3:e060cff29402 124 pc.printf("Reflector 1: Apagado\r\n");
davicone 3:e060cff29402 125 }
davicone 3:e060cff29402 126 else if(tempSen1 < tempTrabajo)
davicone 3:e060cff29402 127 {
davicone 3:e060cff29402 128 reflector1 = Encendido;
davicone 3:e060cff29402 129 pc.printf("Reflector 1: Encendido\r\n");
davicone 3:e060cff29402 130 }
davicone 3:e060cff29402 131
davicone 3:e060cff29402 132 // ------------------------------ Controlar Reflector 2
davicone 3:e060cff29402 133 if(tempSen2 > tempTrabajo)
davicone 3:e060cff29402 134 {
davicone 3:e060cff29402 135 reflector2 = Apagado;
davicone 3:e060cff29402 136 pc.printf("Reflector 2: Apagado\r\n");
davicone 3:e060cff29402 137 }
davicone 3:e060cff29402 138 else if(tempSen2 < tempTrabajo)
davicone 3:e060cff29402 139 {
davicone 3:e060cff29402 140 reflector2 = Encendido;
davicone 3:e060cff29402 141 pc.printf("Reflector 2: Encendido\r\n");
davicone 3:e060cff29402 142 }
davicone 3:e060cff29402 143
davicone 3:e060cff29402 144 // ------------------------------ Controlar Reflector 3
davicone 3:e060cff29402 145 if(tempSen3 > tempTrabajo)
davicone 3:e060cff29402 146 {
davicone 3:e060cff29402 147 reflector3 = Apagado;
davicone 3:e060cff29402 148 pc.printf("Reflector 3: Apagado\r\n");
davicone 3:e060cff29402 149 }
davicone 3:e060cff29402 150 else if(tempSen3 < tempTrabajo)
davicone 3:e060cff29402 151 {
davicone 3:e060cff29402 152 reflector3 = Encendido;
davicone 3:e060cff29402 153 pc.printf("Reflector 3: Encendido\r\n");
davicone 3:e060cff29402 154 }
davicone 3:e060cff29402 155
davicone 3:e060cff29402 156 // ------------------------------ Controlar Reflector 4
davicone 3:e060cff29402 157 if(tempSen4 > tempTrabajo)
davicone 3:e060cff29402 158 {
davicone 3:e060cff29402 159 reflector4 = Apagado;
davicone 3:e060cff29402 160 pc.printf("Reflector 4: Apagado\r\n");
davicone 3:e060cff29402 161 }
davicone 3:e060cff29402 162 else if(tempSen4 < tempTrabajo)
davicone 3:e060cff29402 163 {
davicone 3:e060cff29402 164 reflector4 = Encendido;
davicone 3:e060cff29402 165 pc.printf("Reflector 4: Encendido\r\n");
davicone 3:e060cff29402 166 }
davicone 0:ac833c85625c 167
davicone 5:cc6ff3f4aca1 168 while((pausaProceso == Si) && (finProceso == No)) // ---------------------------------- Proceso Pausado
davicone 0:ac833c85625c 169 {
davicone 0:ac833c85625c 170 pc.printf("Proceso Puasado\r\n");
davicone 3:e060cff29402 171 // Apagar Ventiladores
davicone 3:e060cff29402 172 ventilador1 = 0;
davicone 3:e060cff29402 173 ventilador2 = 0;
davicone 3:e060cff29402 174 pc.printf("Ventiladores Apagados\r\n");
davicone 3:e060cff29402 175 reflector1 = Apagado;
davicone 3:e060cff29402 176 reflector2 = Apagado;
davicone 3:e060cff29402 177 reflector3 = Apagado;
davicone 3:e060cff29402 178 reflector4 = Apagado;
davicone 3:e060cff29402 179 pc.printf("Reflectores Apagados\r\n");
davicone 3:e060cff29402 180 wait(1);
davicone 0:ac833c85625c 181 }
davicone 5:cc6ff3f4aca1 182 wait(1);
davicone 0:ac833c85625c 183 }
davicone 0:ac833c85625c 184
davicone 0:ac833c85625c 185 pc.printf("Proceso Terminado\r\n");
davicone 5:cc6ff3f4aca1 186 while(1);
davicone 0:ac833c85625c 187 }
davicone 0:ac833c85625c 188
davicone 0:ac833c85625c 189
davicone 0:ac833c85625c 190 // --------------------------------------------------------------------------- Funciones
davicone 0:ac833c85625c 191
davicone 0:ac833c85625c 192 // --------------------------------------------------------------------------- LeerSerie
davicone 0:ac833c85625c 193 void LeerSerie(void)
davicone 0:ac833c85625c 194 {
davicone 0:ac833c85625c 195 comando = pc.getc();
davicone 0:ac833c85625c 196 switch(comando)
davicone 0:ac833c85625c 197 {
davicone 0:ac833c85625c 198 case 'I':
davicone 0:ac833c85625c 199 inicioProceso = Si;
davicone 0:ac833c85625c 200 // Guardar Tiempo
davicone 0:ac833c85625c 201 // Guardar Temperatura
davicone 0:ac833c85625c 202 pc.scanf("%s %s",sTiempo, sTemperatura);
davicone 0:ac833c85625c 203 pc.printf("\r\n");
davicone 0:ac833c85625c 204 pc.printf(sTiempo);
davicone 0:ac833c85625c 205 pc.printf("\r\n");
davicone 0:ac833c85625c 206 pc.printf(sTemperatura);
davicone 0:ac833c85625c 207 pc.printf("\r\n");
davicone 0:ac833c85625c 208
davicone 0:ac833c85625c 209 tiempoFinal = atoi(sTiempo);
davicone 0:ac833c85625c 210 tempTrabajo = atoi(sTemperatura);
davicone 0:ac833c85625c 211 break;
davicone 0:ac833c85625c 212
davicone 0:ac833c85625c 213 case 'P':
davicone 0:ac833c85625c 214 pausaProceso = Si;
davicone 0:ac833c85625c 215 break;
davicone 0:ac833c85625c 216
davicone 0:ac833c85625c 217 case 'F':
davicone 0:ac833c85625c 218 finProceso = Si;
davicone 0:ac833c85625c 219 break;
davicone 0:ac833c85625c 220
davicone 0:ac833c85625c 221 case 'R':
davicone 0:ac833c85625c 222 pausaProceso = No;
davicone 0:ac833c85625c 223 break;
davicone 0:ac833c85625c 224
davicone 0:ac833c85625c 225 }
davicone 3:e060cff29402 226 }
davicone 3:e060cff29402 227
jeka 1:677ecfe29f10 228
jeka 2:7e518b8dcda8 229 //----------------------------------------------------Leer temperatura
jeka 1:677ecfe29f10 230 void LeerSensores(void)
jeka 1:677ecfe29f10 231 {
davicone 4:9d435331bbc7 232 /*int i;
davicone 3:e060cff29402 233 //-------------------------------------------------------------------------- sensor 1
davicone 3:e060cff29402 234 //----------------------------- Se realizan múltiples lecturas para sacar un promedio de voltaje
davicone 3:e060cff29402 235 for ( i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 236 {
davicone 3:e060cff29402 237 adcTempSen1[i] = pinSen1.read_u16();
davicone 3:e060cff29402 238 wait(0.01);
davicone 3:e060cff29402 239 }
davicone 3:e060cff29402 240 // ---------------------------- Se calcula el promedio
davicone 3:e060cff29402 241 proSen1 = 0;
davicone 3:e060cff29402 242 for (i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 243 {
davicone 3:e060cff29402 244 proSen1 += adcTempSen1[i];
davicone 3:e060cff29402 245 }
davicone 3:e060cff29402 246 proSen1 /= numMuestreos;
davicone 4:9d435331bbc7 247
jeka 1:677ecfe29f10 248
davicone 3:e060cff29402 249 //-------------------------------------------------------------------------- sensor 2
davicone 3:e060cff29402 250 //----------------------------- Se realizan múltiples lecturas para sacar un promedio de voltaje
davicone 3:e060cff29402 251 for ( i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 252 {
davicone 3:e060cff29402 253 adcTempSen2[i] = pinSen2.read_u16();
davicone 3:e060cff29402 254 wait(0.01);
davicone 3:e060cff29402 255 }
davicone 3:e060cff29402 256 // ---------------------------- Se calcula el promedio
davicone 3:e060cff29402 257 proSen2 = 0;
davicone 3:e060cff29402 258 for (i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 259 {
davicone 3:e060cff29402 260 proSen2 += adcTempSen2[i];
davicone 3:e060cff29402 261 }
davicone 3:e060cff29402 262 proSen2 /= numMuestreos;
davicone 4:9d435331bbc7 263
jeka 1:677ecfe29f10 264
davicone 3:e060cff29402 265 //-------------------------------------------------------------------------- sensor 3
davicone 3:e060cff29402 266 //----------------------------- Se realizan múltiples lecturas para sacar un promedio de voltaje
davicone 3:e060cff29402 267 for ( i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 268 {
davicone 3:e060cff29402 269 adcTempSen3[i] = pinSen3.read_u16();
davicone 3:e060cff29402 270 wait(0.01);
davicone 3:e060cff29402 271 }
davicone 3:e060cff29402 272 // ---------------------------- Se calcula el promedio
davicone 3:e060cff29402 273 proSen3 = 0;
davicone 3:e060cff29402 274 for (i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 275 {
davicone 3:e060cff29402 276 proSen3 += adcTempSen3[i];
davicone 3:e060cff29402 277 }
davicone 3:e060cff29402 278 proSen3 /= numMuestreos;
davicone 4:9d435331bbc7 279
davicone 3:e060cff29402 280
davicone 3:e060cff29402 281 //-------------------------------------------------------------------------- sensor 4
davicone 3:e060cff29402 282 //----------------------------- Se realizan múltiples lecturas para sacar un promedio de voltaje
davicone 3:e060cff29402 283 for ( i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 284 {
davicone 3:e060cff29402 285 adcTempSen4[i] = pinSen4.read_u16();
davicone 3:e060cff29402 286 wait(0.01);
davicone 3:e060cff29402 287 }
davicone 3:e060cff29402 288 // ---------------------------- Se calcula el promedio
davicone 3:e060cff29402 289 proSen4 = 0;
davicone 3:e060cff29402 290 for (i=0; i< numMuestreos; i++)
davicone 3:e060cff29402 291 {
davicone 3:e060cff29402 292 proSen4 += adcTempSen4[i];
davicone 3:e060cff29402 293 }
davicone 3:e060cff29402 294 proSen4 /= numMuestreos;
jeka 1:677ecfe29f10 295
jeka 1:677ecfe29f10 296
davicone 4:9d435331bbc7 297 tempSen1 = convertirTemp(proSen1);
davicone 4:9d435331bbc7 298 tempSen2 = convertirTemp(proSen2);
davicone 4:9d435331bbc7 299 tempSen3 = convertirTemp(proSen3);
davicone 4:9d435331bbc7 300 tempSen4 = convertirTemp(proSen4);*/
davicone 4:9d435331bbc7 301
davicone 4:9d435331bbc7 302 // SOLO TEST
davicone 4:9d435331bbc7 303 tempSen1 = 50;
davicone 4:9d435331bbc7 304 tempSen2 = 50;
davicone 4:9d435331bbc7 305 tempSen3 = 50;
davicone 4:9d435331bbc7 306 tempSen4 = 50;
davicone 4:9d435331bbc7 307 // ----- TEST
davicone 3:e060cff29402 308
davicone 3:e060cff29402 309 pc.printf("Sensor1: %.2f C. /r /n ", tempSen1);
davicone 3:e060cff29402 310 pc.printf("Sensor2: %.2f C. /r /n ", tempSen2);
davicone 3:e060cff29402 311 pc.printf("Sensor3: %.2f C. /r /n ", tempSen3);
davicone 3:e060cff29402 312 pc.printf("Sensor4: %.2f C. /r /n ", tempSen4);
jeka 1:677ecfe29f10 313
davicone 3:e060cff29402 314 }
davicone 3:e060cff29402 315
davicone 3:e060cff29402 316 // --------------------------------------------------------------------------- convertirTemp
davicone 3:e060cff29402 317 float convertirTemp(float promedio)
davicone 3:e060cff29402 318 {
davicone 3:e060cff29402 319 float temperatura;
jeka 1:677ecfe29f10 320
davicone 3:e060cff29402 321 // convertir el promedio a resistencia
davicone 3:e060cff29402 322 promedio = 65535 / promedio - 1;
davicone 3:e060cff29402 323 promedio = ResistSerie / promedio;
davicone 3:e060cff29402 324 temperatura = promedio / NominalTermistor; // (R/Ro)
davicone 3:e060cff29402 325 temperatura = log(temperatura); // ln(R/Ro)
davicone 3:e060cff29402 326 temperatura /= CoeficienteB; // 1/B * ln(R/Ro)
davicone 3:e060cff29402 327 temperatura += 1.0 / (TempNominal + 273.15); // + (1/To)
davicone 3:e060cff29402 328 temperatura = 1.0 / temperatura; // Invertir
davicone 3:e060cff29402 329 temperatura -= 273.15; // convertir a C
davicone 3:e060cff29402 330 return temperatura;
davicone 3:e060cff29402 331 }
davicone 3:e060cff29402 332
davicone 5:cc6ff3f4aca1 333 // --------------------------------------------------------------------------- Contador
davicone 5:cc6ff3f4aca1 334 void Contador(void)
davicone 5:cc6ff3f4aca1 335 {
davicone 5:cc6ff3f4aca1 336
davicone 5:cc6ff3f4aca1 337 }
davicone 5:cc6ff3f4aca1 338
davicone 3:e060cff29402 339