Pio IX 6ºTecnica - Integrantes: Facundo Carmona, Facundo Sussini - Controlador de cooler mediante un DS1820 y un potenciometro
main.cpp@7:a74643e9de62, 2019-06-05 (annotated)
- Committer:
- Susso
- Date:
- Wed Jun 05 01:17:25 2019 +0000
- Revision:
- 7:a74643e9de62
- Parent:
- 6:90322c14f783
dfg; ;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |