luki

Dependencies:   mbed tsi_sensor DS1820 DHT11

Committer:
guidoglorioso
Date:
Thu Dec 12 20:01:18 2019 +0000
Revision:
5:0cb38dfc1026
Parent:
3:f483abe4bc57
v

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sissors 0:e069f9f26768 1
Sissors 0:e069f9f26768 2 #include "mbed.h"
guidoglorioso 5:0cb38dfc1026 3 #include "tsi_sensor.h"
guidoglorioso 5:0cb38dfc1026 4 #include <Dht11.h>
guidoglorioso 5:0cb38dfc1026 5 /* This defines will be replaced by PinNames soon */
guidoglorioso 5:0cb38dfc1026 6 #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
guidoglorioso 5:0cb38dfc1026 7 #define ELEC0 9
guidoglorioso 5:0cb38dfc1026 8 #define ELEC1 10
guidoglorioso 5:0cb38dfc1026 9 #elif defined (TARGET_KL05Z)
guidoglorioso 5:0cb38dfc1026 10 #define ELEC0 9
guidoglorioso 5:0cb38dfc1026 11 #define ELEC1 8
guidoglorioso 5:0cb38dfc1026 12 #else
guidoglorioso 5:0cb38dfc1026 13 #error TARGET NOT DEFINED
guidoglorioso 5:0cb38dfc1026 14 #endif
guidoglorioso 5:0cb38dfc1026 15 // ENTRADAS Y SALIDAS
guidoglorioso 5:0cb38dfc1026 16 DigitalOut led_rojo(LED_RED);
guidoglorioso 5:0cb38dfc1026 17 DigitalOut led_verde(LED_GREEN);
guidoglorioso 5:0cb38dfc1026 18 DigitalOut led_azul(LED_BLUE);
guidoglorioso 5:0cb38dfc1026 19 AnalogIn preset_abierto(PTB1);//PRESET LAZO ABIERTO
guidoglorioso 5:0cb38dfc1026 20 PwmOut velocidad_cooler(PTB0);//COOLER
guidoglorioso 5:0cb38dfc1026 21 DigitalIn medidor_rpm(PTB8); //SENSOR EFECTO HALL
guidoglorioso 5:0cb38dfc1026 22 Dht11 sensor(PTB2);
guidoglorioso 5:0cb38dfc1026 23 //VALORES NECESARIOS
guidoglorioso 5:0cb38dfc1026 24 #define VELOCIDAD_MAX 7500 //MAXIMA VELOCIDAD QUE ALCANZA EL COOLER
guidoglorioso 5:0cb38dfc1026 25 #define VOLTAJE_MIN 0.06 //VOLTAJE QUE SE NECESITA PARA LOS 200 RPM
guidoglorioso 5:0cb38dfc1026 26 #define RPM_MIN 360
guidoglorioso 5:0cb38dfc1026 27 #define TEMP_MAX 40
guidoglorioso 5:0cb38dfc1026 28 #define TEMP_MIN 10
guidoglorioso 5:0cb38dfc1026 29 //TIMERS
guidoglorioso 5:0cb38dfc1026 30 Ticker timer1;
guidoglorioso 5:0cb38dfc1026 31 Timer t;
guidoglorioso 5:0cb38dfc1026 32
guidoglorioso 5:0cb38dfc1026 33 //FUNCIONES
guidoglorioso 5:0cb38dfc1026 34 void revoluciones();
guidoglorioso 5:0cb38dfc1026 35 void boton_puls();
guidoglorioso 5:0cb38dfc1026 36 void valor_preset();
guidoglorioso 5:0cb38dfc1026 37 void tiempo();
guidoglorioso 5:0cb38dfc1026 38 void func_temp();
guidoglorioso 5:0cb38dfc1026 39
guidoglorioso 5:0cb38dfc1026 40 //ESTADOS
guidoglorioso 5:0cb38dfc1026 41 enum {INICIO,CUENTA,ESPERO_PULS,LAZO_ABIERTO,LAZO_CERRADO,CV1,CV2,CV3,DECRECE_CERRADO,CRECE_CERRADO,APRETAR,SOLTAR,ESPERO,ESPERO2,FIN_PERIODO,CONTEO};
guidoglorioso 5:0cb38dfc1026 42
guidoglorioso 5:0cb38dfc1026 43 //VARIABLES
guidoglorioso 5:0cb38dfc1026 44 float preset,vel=0.5;
guidoglorioso 5:0cb38dfc1026 45 int rpm=0,pulsos=0,velocidad;
guidoglorioso 5:0cb38dfc1026 46 char tiempo1=0,tiempo4=0,tiempo3=10,modo=INICIO,temp,conversion=0;
guidoglorioso 5:0cb38dfc1026 47
guidoglorioso 5:0cb38dfc1026 48 //CONFIG TSI
guidoglorioso 5:0cb38dfc1026 49 TSIAnalogSlider tsi(ELEC0, ELEC1, 40);
Sissors 0:e069f9f26768 50
guidoglorioso 5:0cb38dfc1026 51 int main()
guidoglorioso 5:0cb38dfc1026 52 {
guidoglorioso 5:0cb38dfc1026 53 timer1.attach(&tiempo,0.1);
guidoglorioso 5:0cb38dfc1026 54 medidor_rpm.mode(PullUp);//PULLUP
guidoglorioso 5:0cb38dfc1026 55 while(1) {
guidoglorioso 5:0cb38dfc1026 56 valor_preset(); //FUNCIONES DEL PROGRAMA
guidoglorioso 5:0cb38dfc1026 57 revoluciones();
guidoglorioso 5:0cb38dfc1026 58 boton_puls();
guidoglorioso 5:0cb38dfc1026 59 func_temp();
guidoglorioso 5:0cb38dfc1026 60 /* printf("%i\n",rpm);*/
guidoglorioso 5:0cb38dfc1026 61 switch(modo) {
guidoglorioso 5:0cb38dfc1026 62 default:
guidoglorioso 5:0cb38dfc1026 63 case INICIO://SE PRENDEN LOS LEDS DE INICIO
guidoglorioso 5:0cb38dfc1026 64 led_azul=1;
guidoglorioso 5:0cb38dfc1026 65 led_verde=0;
guidoglorioso 5:0cb38dfc1026 66 led_rojo=1;
guidoglorioso 5:0cb38dfc1026 67 break;
guidoglorioso 5:0cb38dfc1026 68 case LAZO_ABIERTO:
guidoglorioso 5:0cb38dfc1026 69 if(tiempo4==0) {//TIEMPO PARA SETEAR PWM
guidoglorioso 5:0cb38dfc1026 70 velocidad_cooler.write(preset);
guidoglorioso 5:0cb38dfc1026 71 tiempo4=1;
guidoglorioso 5:0cb38dfc1026 72 }
guidoglorioso 5:0cb38dfc1026 73 //APRETANDO EL TSI SE CAMBIA DE MODO A LAZO CERRADO
guidoglorioso 5:0cb38dfc1026 74 break;
guidoglorioso 5:0cb38dfc1026 75 case LAZO_CERRADO:
guidoglorioso 5:0cb38dfc1026 76 if(temp<TEMP_MIN)modo=CV1;//CASO PARA TEMPERATURA MENOR AL MINIMO
guidoglorioso 5:0cb38dfc1026 77 if((temp<TEMP_MAX)&&(temp>TEMP_MIN))modo=CV2;//CASO PARA TEMPERATURA ENTRE EL MINIMO Y MAXIMO
guidoglorioso 5:0cb38dfc1026 78 if(temp>TEMP_MAX)modo=CV3;//CASO PARA TEMPERATURA AL MAXIMO
guidoglorioso 5:0cb38dfc1026 79 //APRETANDO EL TSI SE CAMBIA DE MODO A LAZO ABIERTO
guidoglorioso 5:0cb38dfc1026 80 break;
guidoglorioso 5:0cb38dfc1026 81 case CV1:
guidoglorioso 5:0cb38dfc1026 82 velocidad=RPM_MIN;//SETEO DE RPM MIN
guidoglorioso 5:0cb38dfc1026 83 if(rpm<(velocidad+100))modo=CRECE_CERRADO;//EN CASO DE QUE LOS RPM BAJEN AL VALOR SETEADO
guidoglorioso 5:0cb38dfc1026 84 if(rpm>(velocidad-100))modo=DECRECE_CERRADO;//EN CASO DE QUE LOS RPM SUBAN AL VALOR SETEADO (SE COLOCA UN RANGO PERMITIDO DE +-100RPM)
guidoglorioso 5:0cb38dfc1026 85 break;
guidoglorioso 5:0cb38dfc1026 86 case CV2:
guidoglorioso 5:0cb38dfc1026 87 velocidad=RPM_MIN+((temp-TEMP_MIN)*((VELOCIDAD_MAX-RPM_MIN)/(TEMP_MAX-TEMP_MIN)));//SETEO DE RPM SEGUN TEMPERATURA
guidoglorioso 5:0cb38dfc1026 88 if(rpm<(velocidad+100))modo=CRECE_CERRADO;
guidoglorioso 5:0cb38dfc1026 89 if(rpm>(velocidad-100))modo=DECRECE_CERRADO;
guidoglorioso 5:0cb38dfc1026 90 break;
guidoglorioso 5:0cb38dfc1026 91 case CV3:
guidoglorioso 5:0cb38dfc1026 92 velocidad=VELOCIDAD_MAX;
guidoglorioso 5:0cb38dfc1026 93 if(rpm<(velocidad+100))modo=CRECE_CERRADO;
guidoglorioso 5:0cb38dfc1026 94 if(rpm>(velocidad-100))modo=DECRECE_CERRADO;
guidoglorioso 5:0cb38dfc1026 95 break;
guidoglorioso 5:0cb38dfc1026 96 case DECRECE_CERRADO:
guidoglorioso 5:0cb38dfc1026 97 if(rpm<=(velocidad+100)) {//SE SALE DEL MODO UNA VEZ SE ALCANCE EL VALOR REQUERIDO
guidoglorioso 5:0cb38dfc1026 98 modo=LAZO_CERRADO;
guidoglorioso 5:0cb38dfc1026 99 break;
guidoglorioso 5:0cb38dfc1026 100 }
guidoglorioso 5:0cb38dfc1026 101 if(conversion==1) {// PERMITE DISMINUIR LA VELOCIDAD SOLO DESPUES DE HABER MEDIDO LOS RPM
guidoglorioso 5:0cb38dfc1026 102 conversion=0;
guidoglorioso 5:0cb38dfc1026 103 if(vel>0.01)vel=vel-0.01;//CHEQUEA QUE NO SE ENCUENTRE EN EL MINIMO
guidoglorioso 5:0cb38dfc1026 104 else vel=0;
guidoglorioso 5:0cb38dfc1026 105 velocidad_cooler.write(vel);//SE SETEA LA VELOCIDAD CORREGIDA
guidoglorioso 5:0cb38dfc1026 106 }
guidoglorioso 5:0cb38dfc1026 107 break;
guidoglorioso 5:0cb38dfc1026 108 case CRECE_CERRADO:
guidoglorioso 5:0cb38dfc1026 109 if(rpm>=(velocidad-100)) {//SE SALE DEL MODO UNA VEZ SE ALCANCE EL VALOR REQUERIDO
guidoglorioso 5:0cb38dfc1026 110 modo=LAZO_CERRADO;
guidoglorioso 5:0cb38dfc1026 111 break;
guidoglorioso 5:0cb38dfc1026 112 }
guidoglorioso 5:0cb38dfc1026 113 if(conversion==1) {// PERMITE AUMENTAR LA VELOCIDAD SOLO DESPUES DE HABER MEDIDO LOS RPM
guidoglorioso 5:0cb38dfc1026 114 conversion=0;
guidoglorioso 5:0cb38dfc1026 115 if(vel<0.99)vel=vel+0.01;//CHEQUEA QUE NO SE ENCUENTRE EN EL MAXIMO
guidoglorioso 5:0cb38dfc1026 116 else vel=1;
guidoglorioso 5:0cb38dfc1026 117 velocidad_cooler.write(vel);//SE SETEA LA VELOCIDAD CORREGIDA
guidoglorioso 5:0cb38dfc1026 118 }
guidoglorioso 5:0cb38dfc1026 119
guidoglorioso 5:0cb38dfc1026 120 break;
guidoglorioso 5:0cb38dfc1026 121 }
guidoglorioso 5:0cb38dfc1026 122 }
guidoglorioso 5:0cb38dfc1026 123 }
guidoglorioso 5:0cb38dfc1026 124 void valor_preset()
guidoglorioso 5:0cb38dfc1026 125 {
guidoglorioso 5:0cb38dfc1026 126 if(preset_abierto<= VOLTAJE_MIN)preset=VOLTAJE_MIN;//SE FIJA LA VELOCIDAD MINIMA DEL COOLER EN LAZO ABIERTO
guidoglorioso 5:0cb38dfc1026 127 else preset=preset_abierto;
guidoglorioso 5:0cb38dfc1026 128 }
guidoglorioso 5:0cb38dfc1026 129 void boton_puls()
guidoglorioso 5:0cb38dfc1026 130 {
guidoglorioso 5:0cb38dfc1026 131 static char modo_local1=APRETAR;
guidoglorioso 5:0cb38dfc1026 132 switch(modo_local1) {
guidoglorioso 5:0cb38dfc1026 133 default:
guidoglorioso 5:0cb38dfc1026 134 case APRETAR:
guidoglorioso 5:0cb38dfc1026 135 if(tsi.readPercentage()!=0)modo_local1=SOLTAR;//SE APRIETA EL TSI Y SE ESPERA A SOLTARLO
guidoglorioso 5:0cb38dfc1026 136 break;
guidoglorioso 5:0cb38dfc1026 137 case SOLTAR:
guidoglorioso 5:0cb38dfc1026 138 if(tsi.readPercentage()==0) {
guidoglorioso 5:0cb38dfc1026 139 modo_local1=APRETAR;
guidoglorioso 5:0cb38dfc1026 140 if(modo==LAZO_ABIERTO) {//SE CAMBIA AL MODO CONTRARIO QUE SE ENCUENTRA ACTIVO
guidoglorioso 5:0cb38dfc1026 141 led_azul=0;
guidoglorioso 5:0cb38dfc1026 142 led_rojo=1;
guidoglorioso 5:0cb38dfc1026 143 modo=LAZO_CERRADO;
guidoglorioso 5:0cb38dfc1026 144 } else {
guidoglorioso 5:0cb38dfc1026 145 modo=LAZO_ABIERTO;
guidoglorioso 5:0cb38dfc1026 146 led_azul=1;
guidoglorioso 5:0cb38dfc1026 147 led_rojo=0;
guidoglorioso 5:0cb38dfc1026 148 }
guidoglorioso 5:0cb38dfc1026 149 }
Sissors 0:e069f9f26768 150 break;
Sissors 0:e069f9f26768 151 }
Sissors 0:e069f9f26768 152 }
guidoglorioso 5:0cb38dfc1026 153 void revoluciones()
guidoglorioso 5:0cb38dfc1026 154 {
guidoglorioso 5:0cb38dfc1026 155 static char modo_local=CUENTA;
guidoglorioso 5:0cb38dfc1026 156 static int pulsos=0;
guidoglorioso 5:0cb38dfc1026 157 switch(modo_local) {
guidoglorioso 5:0cb38dfc1026 158 case CUENTA:
guidoglorioso 5:0cb38dfc1026 159 rpm=pulsos*60;//SE HACE LA CUENTA PARA SABER LA CANTIDAD RPM
guidoglorioso 5:0cb38dfc1026 160 conversion=1;//INDICADOR DE FINALIZACION DE CONVERSION
guidoglorioso 5:0cb38dfc1026 161 printf("RPM COOLER= %i,PORCENTAJE DE PRESET= %.2f,VEL ACTUAL= %.2f,VEL SETEADA=%i,TEMP=%i,\n",rpm,preset*100,vel,velocidad,temp);
guidoglorioso 5:0cb38dfc1026 162 tiempo3=10;//TIEMPO ENTRE CADA SENSADO
guidoglorioso 5:0cb38dfc1026 163 pulsos=0;
guidoglorioso 5:0cb38dfc1026 164 modo_local=ESPERO;
guidoglorioso 5:0cb38dfc1026 165 break;
guidoglorioso 5:0cb38dfc1026 166 case ESPERO:
guidoglorioso 5:0cb38dfc1026 167 if(tiempo3==0)modo_local=CUENTA;//CUANDO FINALIZA EL TIEMPO DE SENSADO
guidoglorioso 5:0cb38dfc1026 168 else {
guidoglorioso 5:0cb38dfc1026 169 if(medidor_rpm==1) {
guidoglorioso 5:0cb38dfc1026 170 modo_local=ESPERO_PULS;
guidoglorioso 5:0cb38dfc1026 171 pulsos++;
guidoglorioso 5:0cb38dfc1026 172 }
guidoglorioso 5:0cb38dfc1026 173 }
guidoglorioso 5:0cb38dfc1026 174 case ESPERO_PULS:
guidoglorioso 5:0cb38dfc1026 175 if(medidor_rpm==0)modo_local=ESPERO;
guidoglorioso 5:0cb38dfc1026 176 if(tiempo3==0)modo_local=CUENTA;
guidoglorioso 5:0cb38dfc1026 177 break;
Sissors 0:e069f9f26768 178 }
Sissors 0:e069f9f26768 179 }
guidoglorioso 5:0cb38dfc1026 180 void func_temp()
guidoglorioso 5:0cb38dfc1026 181 {
guidoglorioso 5:0cb38dfc1026 182 if(tiempo1==0) {
guidoglorioso 5:0cb38dfc1026 183 sensor.read(); //SE LEE LA TEMPERATURA
guidoglorioso 5:0cb38dfc1026 184 temp=sensor.getCelsius();//SE ASIGNA EL VALOR DE TEMPERATURA A UNA VARIABLE
guidoglorioso 5:0cb38dfc1026 185 tiempo1=50;//TIEMPO ENTRE CADA LECTURA DE TEMPERATURA 5 SEGUNDOS
guidoglorioso 5:0cb38dfc1026 186 tiempo3=10;//REINICIA TIEMPO MEDICION RPM EN CASO DE HABER INTERRUMPIDO
guidoglorioso 5:0cb38dfc1026 187 pulsos=0;//REINICIA PULSOS
guidoglorioso 5:0cb38dfc1026 188 }
guidoglorioso 5:0cb38dfc1026 189 }
guidoglorioso 5:0cb38dfc1026 190 void tiempo()
guidoglorioso 5:0cb38dfc1026 191 {
guidoglorioso 5:0cb38dfc1026 192 if(tiempo1!=0)tiempo1--;
guidoglorioso 5:0cb38dfc1026 193 if(tiempo3!=0)tiempo3--;
guidoglorioso 5:0cb38dfc1026 194 if(tiempo4!=0)tiempo4--;
guidoglorioso 5:0cb38dfc1026 195 }