Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed tsi_sensor DHT11
main.cpp
00001 //TRABAJO PRACTICO 1 - COOLER 00002 00003 #include "mbed.h" 00004 #include <stdlib.h> /* srand, rand */ 00005 #include <time.h> /* time */ 00006 #include "tsi_sensor.h" 00007 #include "Dht11.h" /* LIBRERIA SENSOR */ 00008 00009 /* This defines will be replaced by PinNames soon */ 00010 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) 00011 #define ELEC0 9 00012 #define ELEC1 10 00013 #elif defined (TARGET_KL05Z) 00014 #define ELEC0 9 00015 #define ELEC1 8 00016 #else 00017 #error TARGET NOT DEFINED 00018 #endif 00019 00020 00021 00022 TSIAnalogSlider tsi(ELEC0, ELEC1, 40); 00023 00024 00025 DigitalOut rojo(LED_RED); 00026 DigitalOut verde(LED_GREEN); 00027 DigitalOut azul(LED_BLUE); 00028 00029 DigitalIn vueltas(PTD2); 00030 00031 InterruptIn vuel(PTD4); 00032 00033 Dht11 sensor(PTD7); 00034 00035 00036 AnalogIn potenciometro(PTB0); 00037 00038 PwmOut cooler(PTB3); //Menos significativo unidad 00039 00040 Ticker tiempo; 00041 00042 Ticker escritura; 00043 enum {INICIO,GENERADOR,DETECCION,CHEQUEO}; 00044 enum {COMIENZO,ABIERTO,CERRADO}; 00045 enum {ROJO,VERDE,AZUL,ON,OFF}; 00046 00047 int estado=0, modo=0,comienza_juego,color=0,segundos=0,giros=0,RPM=0,entrada=0,escritura_hab=OFF; 00048 00049 float p=0,incr=0.0005; 00050 00051 DigitalOut myled(LED1); 00052 00053 void sumav(){ 00054 giros++; //por cada vuelta del cooler incrementa un giro 00055 } 00056 00057 00058 void segundo_reset() //cada un segundo toma el valor de los giros, predice su valor en RPM, los guarda en otra variable y resetea los giros 00059 { 00060 segundos++; 00061 if(segundos==1) { 00062 RPM=giros*60; 00063 giros=0; 00064 segundos=0; 00065 } 00066 } 00067 void escritura_cooler() //cada cierto tiempo escribe al a salida del PWM 00068 { 00069 cooler.period(0.5f); 00070 cooler.write(p); 00071 } 00072 void cooler_automatizado()//funcion principal que controla los modos 00073 { 00074 switch(estado) { 00075 case COMIENZO: 00076 if(modo==CERRADO) {//se activa el modo cerrado 00077 printf("MODO CERRADO ACTIVADO\n\r"); 00078 escritura_hab=OFF; 00079 estado=CERRADO; 00080 } 00081 if(modo==ABIERTO) {//se activa el modo abierto 00082 printf("MODO ABIERTO ACTIVADO\n\r"); 00083 escritura_hab=OFF; 00084 estado=ABIERTO; 00085 } 00086 break; 00087 case CERRADO: 00088 sensor.read(); //indica que se va a leer el DHT11 00089 if(sensor.getCelsius()==20){ //si la temperatura es 20 se mantiene en 3000 RPM 00090 if(RPM>3000){ 00091 p=p-incr; 00092 } 00093 else{ 00094 p=p+incr; 00095 } 00096 } 00097 if((sensor.getCelsius()>20)&&(sensor.getCelsius()<70)){//en el rango de 20 y 70 grados hace una regla de tres y saca el RPM equivalente y trata de llevar su velocidad al RPM indicado 00098 int cel = sensor.getCelsius();//lee el sensor en celsius 00099 int resultado = (cel * 10000) / 70; 00100 printf("TEMP: %d resultado: %d RPM: %d\r\n",cel,resultado,RPM);// 00101 if(RPM>resultado){ 00102 p=p-(float)0.0005;//disminuye la velocidad 00103 } 00104 else{ 00105 p=p+(float)0.0005;//aumenta la velocidad 00106 } 00107 if(p>(float)1){ 00108 p=(float)1;//el cooler al maximo 00109 } 00110 } 00111 if(sensor.getCelsius()>=70){ 00112 p=(float)1;//mas de 70c al maximo 00113 } 00114 if(escritura_hab==OFF) { 00115 escritura.attach(&escritura_cooler,0.2);//se acrtualiza la info del duty cada 200ms 00116 escritura_hab=ON; 00117 } 00118 break; 00119 00120 case ABIERTO: 00121 printf("RPM: %d\n\r",RPM); 00122 if(RPM>=3000){ 00123 p=potenciometro;//si la velocidad es mas grande que la minima le presta atencion al potenciometro 00124 } 00125 else{ 00126 p=p+incr;//de lo contrario se incrementa la velocidad 00127 } 00128 if(escritura_hab==OFF) { 00129 escritura.attach(&escritura_cooler,0.2); 00130 escritura_hab=ON; 00131 } 00132 if(p>(float)1){ 00133 p=(float)1; 00134 } 00135 break; 00136 } 00137 } 00138 00139 00140 00141 00142 00143 int main() 00144 { 00145 rojo=1; 00146 verde=1; 00147 azul=1; 00148 00149 tiempo.attach(&segundo_reset,1); 00150 vuel.rise(&sumav); 00151 00152 while(1) { 00153 cooler_automatizado(); 00154 00155 float v = tsi.readPercentage(); 00156 00157 if((v>(float)0.15)&&(v<(float)0.4)) { 00158 rojo=0; 00159 verde=1; 00160 azul=1; 00161 estado=COMIENZO; 00162 modo=ABIERTO; 00163 v=0; 00164 00165 } else if((v>(float)0.3)&&(v<(float)0.6)) { 00166 rojo=1; 00167 verde=0; 00168 azul=1; 00169 } else if((v>(float)0.5)&&(v<(float)0.9)) { 00170 rojo=1; 00171 verde=1; 00172 azul=0; 00173 estado=COMIENZO; 00174 modo=CERRADO; 00175 v=0; 00176 } else if((v>=(float)0.9)) { 00177 rojo=1; 00178 verde=1; 00179 azul=1; 00180 } else if((v<=(float)0.15)) { 00181 rojo=1; 00182 verde=1; 00183 azul=1; 00184 } 00185 } 00186 00187 }
Generated on Sat Jul 16 2022 09:00:20 by
1.7.2