Go Down

Topic: Timer para lectura entrada analógica (Read 618 times) previous topic - next topic

cristiansalcedo

Buenas noches

estoy realizando un proyecto en el cual debo medir cuanto tiempo dura una variable analógica, en su máximo valor, y a partir de este registro mover unos actuadores.

La pregunta que tengo es si saben de que manera puedo realizar un contador, el cuál una que se supere  el umbral que tengo para mi variable analógica empiece el conteo y cuando el valor de la variable reduzca el umbral nuevamente se reinicie, para que vuelva a empezar si se cruza el umbral nuevamente

surbyte

#1
Feb 28, 2018, 03:07 pm Last Edit: Feb 28, 2018, 03:07 pm by surbyte
Determinar el valor máximo o que supero un umbral no es complicado.
Comienza con el ejemplo básico del IDE para analogRead(A0) y conectale un potenciometro con los extremos a 5 y GND y el cursor a A0.

Luego puedes definir algo como esto

Code: [Select]
#define UMBRAL ALGO

ALGO qué es ALGO. Bueno hay que establecer si lo que vas a medir son valores de ADC o valores convertidos en volts.
Eso lo dejo a tu criterio.
Si sabes manejarte con Arduino es mas rapido usar valores enteros pero si no, conviertelo a Voltios para poder encontrar su equivalencia real y verificar que todo funciona como lo planeaste.

Supongamos que el umbral fuera 4.0 Voltios.

Code: [Select]
#define UMBRAL 4.0f    // los valores en punto flotante deben ponerse en decimal.
                                          // La f le dice al compilador que es punto flotante.
                                          // modifica el valor 4.0 a tu necesidad.
int valor;
float fvalor;
unsigned long start = 0;
bool flag = true;

void setup() {
    Serial.begin(9600);   // para ver valores en el monitor serie
}

void loop() {
    valor = analogRead(A0);   // supongo potenciómetro o fuente de señal conectada a A0.
    fvalor = 5.0*valor/1023.0;

    if (fvalor > UMBRAL) {
         if (flag) {                   // lo uso para comenzar la cuenta
             start = millis();
             flag = false;           // me aseguro que no pase reinicie el contador de tiempo
             // activo actuadores una vez
             Serial.println("Umbral superado");
         }
    }
    else {
         if (!flag) {
             flag = true;            // primera vez que flag pasa a true de modo que termino el contador
             // supongo que apago actuadores
             char buffer[30];
             sprintf(buffer, "Tiempo %ld seg", (millis()-start)/1000);
             Serial.println(buffer);
          }
   }
}


No esta probado, si da algun error, intenta resolverlo.

Go Up