![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Pio IX 6ºTecnica - Integrantes: Facundo Carmona, Facundo Sussini - Controlador de cooler mediante un DS1820 y un potenciometro
Diff: main.cpp
- Revision:
- 5:6515379eac2f
- Parent:
- 3:f483abe4bc57
- Child:
- 6:90322c14f783
--- a/main.cpp Fri Jan 13 18:30:37 2017 +0000 +++ b/main.cpp Tue Jun 04 12:07:04 2019 +0000 @@ -1,49 +1,232 @@ -#define MULTIPLE_PROBES -#define DATA_PIN A0 - - -#ifdef MULTIPLE_PROBES #include "mbed.h" #include "DS1820.h" +#define DATA_PIN A0 -#define MAX_PROBES 16 - -DS1820* probe[MAX_PROBES]; - -int main() { - // Initialize the probe array to DS1820 objects - int num_devices = 0; - while(DS1820::unassignedProbe(DATA_PIN)) { - probe[num_devices] = new DS1820(DATA_PIN); - num_devices++; - if (num_devices == MAX_PROBES) +#define abierto 0 +#define minimo 1 +#define lineal 2 +#define maximo 3 +#define error 4 + +//ejemplo +PwmOut g(LED_GREEN); + +/* defino la funcion principal */ +void sensorsito(); + +/* defino las funciones, ticker y las variables de las vueltas */ + +void pulsos(); + + +char hall=0, vueltas=0, arranque=0; +void contador2(); +void pulsadorsito2(); +char salida2=0,cuenta2=0, PIN2=0; +Ticker ti2; +DigitalIn pin2(A4,PullUp); + +/* defino lo relacionado al sensor de temperatura y el cooler */ +DS1820 probe(DATA_PIN); +AnalogIn ADC(A1); // definimos la entrada de ADC +PwmOut velocidad(A2); +int temperatura=0,sensor=1; +uint16_t adcValue; // nos da un rango entre 0-65535 +float voltage, porcentageADC,porcentajetemperatura; // definimos el voltaje y el porcentaje + +/* 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 */ +void pulsadorsito1(); +void contador1(); +DigitalIn pin1(A3,PullUp); +char salida1=0,cuenta1=0, PIN1=0; +Ticker ti1; + +int main() +{ + //ejemplo + g.period(0.0025f); + + /* defino los tickers */ + ti1.attach(&contador1, 0.001); + ti2.attach(&contador2, 0.001); + + /* frecuencia de PWM del cooler */ + velocidad.period(0.0025f); // 400hz + + while(1) { + adcValue=ADC.read_u16(); // ponemos el valor del ADC en la variable tipo uint16_t + voltage=adcValue*3.3 / 65535; // convertimos el valor de ADC a volts + porcentageADC = voltage*100 / 3.3; // con el valor en volts podemos saber el porcentaje del ADC + + probe.convertTemperature(true, DS1820::all_devices); //Start temperature conversion, wait until ready + // probe.temperature() ---> temperatura en Cº + temperatura=probe.temperature(); + porcentajetemperatura=(((float)temperatura-20)*2)/100; + //0.013*(float)temperatura+0.09 + /* llamo a mis funciones */ + pulsadorsito1(); + pulsadorsito2(); + sensorsito(); + pulsos(); + } +} +/* funcion principal------------------------------------------------------------ */ +void sensorsito() +{ + // arranco el cooler + if(arranque==0) + { + g=0.33; + velocidad=0.33; + arranque=1; + printf("Arranque \r\n"); + } + + switch(sensor) { + case abierto: + if(salida1==0 ) { + /* en el caso que quiera controlar el cooler con el potenciometro */ + velocidad=(100-porcentageADC)/100;// el PWM cambia proporcionalmente a la variacion del ADC + g=(100-porcentageADC)/100.0; + printf("PWM : %.2f \r\n",porcentageADC); + /* cada segundo leo la cantidad de vueltas */ + vueltas=hall/4; + printf("La velocidad es de: %d rpm \r\n",vueltas*60); + vueltas=0; + hall=0; + } + else + sensor=minimo; + break; + /* lo siguiente se ejecutara si quiero que el cooler lo controle el sensor de temperatura */ + + case minimo: + if(salida1==1) { + if(temperatura<0) + sensor=error; + else if(temperatura<=20) { + g=1.0; + velocidad=1.0;// PWM ---> 0% + printf("PWM : 0 \r\n"); + printf("temperatura = %d \r\n",temperatura); + } else if(temperatura>20) + sensor=lineal; + } else + sensor=abierto; + break; + + case lineal: + if(salida1==1) { + if(temperatura>20 && temperatura<=70) { + g=1-porcentajetemperatura; + velocidad=1-porcentajetemperatura;// el PWM varia proporcionalmente a ala variacion de temperatura + printf("PWM : %.3f , temperatura = %d \r\n",porcentajetemperatura,temperatura); + } else if(temperatura>70) + sensor=maximo; + else if(temperatura<20) + sensor=minimo; + } else + sensor=abierto; + break; + + case maximo: + if(salida1==1) { + if(temperatura>70) { + g=0.0; + velocidad=0.0;// PWM ---> 100% + printf("PWM : 100 \r\n"); + } else if(temperatura<=70) + sensor=lineal; + } else + sensor=abierto; + break; + + case error: + if(salida1==1) + { + printf("Error \r\n"); + if(temperatura>=0) + sensor=minimo; + } + else + sensor=abierto; + break; + + + } +} +/* cada vez que el efecto hall se activa cuento */ + +void pulsos() +{ + if(salida2==1) + hall++; +} + +//-----------funcion pulsador que invierte------------------------------------------------------------------------- +void pulsadorsito1() +{ + + switch(PIN1) { + default: + case 0: + if(pin1==1) { + cuenta1=0; + } else if(pin1==0) { + PIN1=1; + cuenta1=10; + } + break; + + case 1: + if(cuenta1==0 && pin1==1) { + salida1=!salida1; + PIN1=0; + printf("Toque \r\n "); + } else if( pin1==1 && cuenta1>0) { + PIN1=0; + } break; } - - printf("Found %d device(s)\r\n\n", num_devices); - while(1) { - probe[0]->convertTemperature(true, DS1820::all_devices); //Start temperature conversion, wait until ready - for (int i = 0; i<num_devices; i++) - printf("Device %d returns %3.1foC\r\n", i, probe[i]->temperature()); - printf("\r\n"); - wait(1); - } - + +} + +void contador1() +{ + if(cuenta1) + cuenta1--; } -#else -#include "mbed.h" -#include "DS1820.h" - -DS1820 probe(DATA_PIN); - -int main() { - while(1) { - probe.convertTemperature(true, DS1820::all_devices); //Start temperature conversion, wait until ready - printf("It is %3.1foC\r\n", probe.temperature()); - wait(1); +//--------------funcion de pulsador por pulsos----------------------------------------------------------------- + +void pulsadorsito2() +{ + switch(PIN2) { + default: + case 0: + if(pin2==1) { + salida2=0; + cuenta2=0; + } else if(pin2==0) { + PIN2=1; + cuenta2=10; + } + break; + + case 1: + if(cuenta2==0 && pin2==0) + salida2=1; + else if(cuenta2==0 && pin2==1) + PIN2=0; + else if( pin2==1 && cuenta2>0) + PIN2=0; + break; } } -#endif \ No newline at end of file +void contador2() +{ + if(cuenta2) + cuenta2--; +}