Pio IX 6ºTecnica - Integrantes: Facundo Carmona, Facundo Sussini - Controlador de cooler mediante un DS1820 y un potenciometro

Dependencies:   mbed DS1820

Committer:
Susso
Date:
Wed Jun 05 01:17:25 2019 +0000
Revision:
7:a74643e9de62
Parent:
6:90322c14f783
dfg; ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sissors 0:e069f9f26768 1
Sissors 0:e069f9f26768 2 #include "mbed.h"
Sissors 0:e069f9f26768 3 #include "DS1820.h"
Susso 5:6515379eac2f 4 #define DATA_PIN A0
Sissors 0:e069f9f26768 5
Susso 5:6515379eac2f 6 #define abierto 0
Susso 5:6515379eac2f 7 #define minimo 1
Susso 5:6515379eac2f 8 #define lineal 2
Susso 5:6515379eac2f 9 #define maximo 3
Susso 5:6515379eac2f 10 #define error 4
Susso 5:6515379eac2f 11
Susso 7:a74643e9de62 12
Susso 5:6515379eac2f 13
Susso 5:6515379eac2f 14 /* defino la funcion principal */
Susso 5:6515379eac2f 15 void sensorsito();
Susso 5:6515379eac2f 16
Susso 5:6515379eac2f 17 /* defino las funciones, ticker y las variables de las vueltas */
Susso 5:6515379eac2f 18
Susso 5:6515379eac2f 19 void pulsos();
Susso 5:6515379eac2f 20
Susso 5:6515379eac2f 21
Susso 5:6515379eac2f 22 char hall=0, vueltas=0, arranque=0;
Susso 5:6515379eac2f 23 void contador2();
Susso 5:6515379eac2f 24 void pulsadorsito2();
Susso 5:6515379eac2f 25 char salida2=0,cuenta2=0, PIN2=0;
Susso 5:6515379eac2f 26 Ticker ti2;
Susso 5:6515379eac2f 27 DigitalIn pin2(A4,PullUp);
Susso 5:6515379eac2f 28
Susso 5:6515379eac2f 29 /* defino lo relacionado al sensor de temperatura y el cooler */
Susso 5:6515379eac2f 30 DS1820 probe(DATA_PIN);
Susso 5:6515379eac2f 31 AnalogIn ADC(A1); // definimos la entrada de ADC
Susso 5:6515379eac2f 32 PwmOut velocidad(A2);
Susso 5:6515379eac2f 33 int temperatura=0,sensor=1;
Susso 5:6515379eac2f 34 uint16_t adcValue; // nos da un rango entre 0-65535
Susso 5:6515379eac2f 35 float voltage, porcentageADC,porcentajetemperatura; // definimos el voltaje y el porcentaje
Susso 5:6515379eac2f 36
Susso 5:6515379eac2f 37 /* defino la fucion , ticker y las variables del pulsador1-- en este caso voy a hacer que la salida se invierta en vez de un pulso */
Susso 5:6515379eac2f 38 void pulsadorsito1();
Susso 5:6515379eac2f 39 void contador1();
Susso 5:6515379eac2f 40 DigitalIn pin1(A3,PullUp);
Susso 5:6515379eac2f 41 char salida1=0,cuenta1=0, PIN1=0;
Susso 5:6515379eac2f 42 Ticker ti1;
Susso 5:6515379eac2f 43
Susso 5:6515379eac2f 44 int main()
Susso 5:6515379eac2f 45 {
Susso 5:6515379eac2f 46 /* defino los tickers */
Susso 5:6515379eac2f 47 ti1.attach(&contador1, 0.001);
Susso 5:6515379eac2f 48 ti2.attach(&contador2, 0.001);
Susso 5:6515379eac2f 49
Susso 5:6515379eac2f 50 /* frecuencia de PWM del cooler */
Susso 5:6515379eac2f 51 velocidad.period(0.0025f); // 400hz
Susso 5:6515379eac2f 52
Susso 5:6515379eac2f 53 while(1) {
Susso 5:6515379eac2f 54 adcValue=ADC.read_u16(); // ponemos el valor del ADC en la variable tipo uint16_t
Susso 5:6515379eac2f 55 voltage=adcValue*3.3 / 65535; // convertimos el valor de ADC a volts
Susso 5:6515379eac2f 56 porcentageADC = voltage*100 / 3.3; // con el valor en volts podemos saber el porcentaje del ADC
Susso 5:6515379eac2f 57
Susso 6:90322c14f783 58 probe.convertTemperature(false, DS1820::all_devices); //Start temperature conversion, wait until ready
Susso 5:6515379eac2f 59 // probe.temperature() ---> temperatura en Cº
Susso 5:6515379eac2f 60 temperatura=probe.temperature();
Susso 5:6515379eac2f 61 porcentajetemperatura=(((float)temperatura-20)*2)/100;
Susso 5:6515379eac2f 62 //0.013*(float)temperatura+0.09
Susso 5:6515379eac2f 63 /* llamo a mis funciones */
Susso 5:6515379eac2f 64 pulsadorsito1();
Susso 5:6515379eac2f 65 pulsadorsito2();
Susso 5:6515379eac2f 66 sensorsito();
Susso 5:6515379eac2f 67 pulsos();
Susso 5:6515379eac2f 68 }
Susso 5:6515379eac2f 69 }
Susso 5:6515379eac2f 70 /* funcion principal------------------------------------------------------------ */
Susso 5:6515379eac2f 71 void sensorsito()
Susso 5:6515379eac2f 72 {
Susso 5:6515379eac2f 73 // arranco el cooler
Susso 5:6515379eac2f 74 if(arranque==0)
Susso 5:6515379eac2f 75 {
Susso 5:6515379eac2f 76 velocidad=0.33;
Susso 5:6515379eac2f 77 arranque=1;
Susso 5:6515379eac2f 78 printf("Arranque \r\n");
Susso 5:6515379eac2f 79 }
Susso 5:6515379eac2f 80
Susso 5:6515379eac2f 81 switch(sensor) {
Susso 5:6515379eac2f 82 case abierto:
Susso 5:6515379eac2f 83 if(salida1==0 ) {
Susso 5:6515379eac2f 84 /* en el caso que quiera controlar el cooler con el potenciometro */
Susso 5:6515379eac2f 85 velocidad=(100-porcentageADC)/100;// el PWM cambia proporcionalmente a la variacion del ADC
Susso 5:6515379eac2f 86 printf("PWM : %.2f \r\n",porcentageADC);
Susso 5:6515379eac2f 87 /* cada segundo leo la cantidad de vueltas */
Susso 5:6515379eac2f 88 vueltas=hall/4;
Susso 5:6515379eac2f 89 printf("La velocidad es de: %d rpm \r\n",vueltas*60);
Susso 5:6515379eac2f 90 vueltas=0;
Susso 5:6515379eac2f 91 hall=0;
Susso 5:6515379eac2f 92 }
Susso 5:6515379eac2f 93 else
Susso 5:6515379eac2f 94 sensor=minimo;
Susso 5:6515379eac2f 95 break;
Susso 5:6515379eac2f 96 /* lo siguiente se ejecutara si quiero que el cooler lo controle el sensor de temperatura */
Susso 5:6515379eac2f 97
Susso 5:6515379eac2f 98 case minimo:
Susso 5:6515379eac2f 99 if(salida1==1) {
Susso 5:6515379eac2f 100 if(temperatura<0)
Susso 5:6515379eac2f 101 sensor=error;
Susso 7:a74643e9de62 102 else if(temperatura<=20) {g=1.0;
Susso 5:6515379eac2f 103 velocidad=1.0;// PWM ---> 0%
Susso 5:6515379eac2f 104 printf("PWM : 0 \r\n");
Susso 5:6515379eac2f 105 printf("temperatura = %d \r\n",temperatura);
Susso 5:6515379eac2f 106 } else if(temperatura>20)
Susso 5:6515379eac2f 107 sensor=lineal;
Susso 5:6515379eac2f 108 } else
Susso 5:6515379eac2f 109 sensor=abierto;
Susso 5:6515379eac2f 110 break;
Susso 5:6515379eac2f 111
Susso 5:6515379eac2f 112 case lineal:
Susso 5:6515379eac2f 113 if(salida1==1) {
Susso 5:6515379eac2f 114 if(temperatura>20 && temperatura<=70) {
Susso 5:6515379eac2f 115 velocidad=1-porcentajetemperatura;// el PWM varia proporcionalmente a ala variacion de temperatura
Susso 5:6515379eac2f 116 printf("PWM : %.3f , temperatura = %d \r\n",porcentajetemperatura,temperatura);
Susso 5:6515379eac2f 117 } else if(temperatura>70)
Susso 5:6515379eac2f 118 sensor=maximo;
Susso 5:6515379eac2f 119 else if(temperatura<20)
Susso 5:6515379eac2f 120 sensor=minimo;
Susso 5:6515379eac2f 121 } else
Susso 5:6515379eac2f 122 sensor=abierto;
Susso 5:6515379eac2f 123 break;
Susso 5:6515379eac2f 124
Susso 5:6515379eac2f 125 case maximo:
Susso 5:6515379eac2f 126 if(salida1==1) {
Susso 5:6515379eac2f 127 if(temperatura>70) {
Susso 5:6515379eac2f 128 velocidad=0.0;// PWM ---> 100%
Susso 5:6515379eac2f 129 printf("PWM : 100 \r\n");
Susso 5:6515379eac2f 130 } else if(temperatura<=70)
Susso 5:6515379eac2f 131 sensor=lineal;
Susso 5:6515379eac2f 132 } else
Susso 5:6515379eac2f 133 sensor=abierto;
Susso 5:6515379eac2f 134 break;
Susso 5:6515379eac2f 135
Susso 5:6515379eac2f 136 case error:
Susso 5:6515379eac2f 137 if(salida1==1)
Susso 5:6515379eac2f 138 {
Susso 5:6515379eac2f 139 printf("Error \r\n");
Susso 5:6515379eac2f 140 if(temperatura>=0)
Susso 5:6515379eac2f 141 sensor=minimo;
Susso 5:6515379eac2f 142 }
Susso 5:6515379eac2f 143 else
Susso 5:6515379eac2f 144 sensor=abierto;
Susso 5:6515379eac2f 145 break;
Susso 5:6515379eac2f 146
Susso 5:6515379eac2f 147
Susso 5:6515379eac2f 148 }
Susso 5:6515379eac2f 149 }
Susso 5:6515379eac2f 150 /* cada vez que el efecto hall se activa cuento */
Susso 5:6515379eac2f 151
Susso 5:6515379eac2f 152 void pulsos()
Susso 5:6515379eac2f 153 {
Susso 5:6515379eac2f 154 if(salida2==1)
Susso 5:6515379eac2f 155 hall++;
Susso 5:6515379eac2f 156 }
Susso 5:6515379eac2f 157
Susso 5:6515379eac2f 158 //-----------funcion pulsador que invierte-------------------------------------------------------------------------
Susso 5:6515379eac2f 159 void pulsadorsito1()
Susso 5:6515379eac2f 160 {
Susso 5:6515379eac2f 161
Susso 5:6515379eac2f 162 switch(PIN1) {
Susso 5:6515379eac2f 163 default:
Susso 5:6515379eac2f 164 case 0:
Susso 5:6515379eac2f 165 if(pin1==1) {
Susso 5:6515379eac2f 166 cuenta1=0;
Susso 5:6515379eac2f 167 } else if(pin1==0) {
Susso 5:6515379eac2f 168 PIN1=1;
Susso 5:6515379eac2f 169 cuenta1=10;
Susso 5:6515379eac2f 170 }
Susso 5:6515379eac2f 171 break;
Susso 5:6515379eac2f 172
Susso 5:6515379eac2f 173 case 1:
Susso 5:6515379eac2f 174 if(cuenta1==0 && pin1==1) {
Susso 5:6515379eac2f 175 salida1=!salida1;
Susso 5:6515379eac2f 176 PIN1=0;
Susso 5:6515379eac2f 177 printf("Toque \r\n ");
Susso 5:6515379eac2f 178 } else if( pin1==1 && cuenta1>0) {
Susso 5:6515379eac2f 179 PIN1=0;
Susso 5:6515379eac2f 180 }
Sissors 0:e069f9f26768 181 break;
Sissors 0:e069f9f26768 182 }
Susso 5:6515379eac2f 183
Susso 5:6515379eac2f 184 }
Susso 5:6515379eac2f 185
Susso 5:6515379eac2f 186 void contador1()
Susso 5:6515379eac2f 187 {
Susso 5:6515379eac2f 188 if(cuenta1)
Susso 5:6515379eac2f 189 cuenta1--;
Sissors 0:e069f9f26768 190 }
Sissors 0:e069f9f26768 191
Susso 5:6515379eac2f 192 //--------------funcion de pulsador por pulsos-----------------------------------------------------------------
Susso 5:6515379eac2f 193
Susso 5:6515379eac2f 194 void pulsadorsito2()
Susso 5:6515379eac2f 195 {
Susso 5:6515379eac2f 196 switch(PIN2) {
Susso 5:6515379eac2f 197 default:
Susso 5:6515379eac2f 198 case 0:
Susso 5:6515379eac2f 199 if(pin2==1) {
Susso 5:6515379eac2f 200 salida2=0;
Susso 5:6515379eac2f 201 cuenta2=0;
Susso 5:6515379eac2f 202 } else if(pin2==0) {
Susso 5:6515379eac2f 203 PIN2=1;
Susso 5:6515379eac2f 204 cuenta2=10;
Susso 5:6515379eac2f 205 }
Susso 5:6515379eac2f 206 break;
Susso 5:6515379eac2f 207
Susso 5:6515379eac2f 208 case 1:
Susso 5:6515379eac2f 209 if(cuenta2==0 && pin2==0)
Susso 5:6515379eac2f 210 salida2=1;
Susso 5:6515379eac2f 211 else if(cuenta2==0 && pin2==1)
Susso 5:6515379eac2f 212 PIN2=0;
Susso 5:6515379eac2f 213 else if( pin2==1 && cuenta2>0)
Susso 5:6515379eac2f 214 PIN2=0;
Susso 5:6515379eac2f 215 break;
Sissors 0:e069f9f26768 216 }
Sissors 0:e069f9f26768 217 }
Sissors 0:e069f9f26768 218
Susso 5:6515379eac2f 219 void contador2()
Susso 5:6515379eac2f 220 {
Susso 5:6515379eac2f 221 if(cuenta2)
Susso 5:6515379eac2f 222 cuenta2--;
Susso 5:6515379eac2f 223 }