¿Cuando podemos medir el tiempo transcurrido entre dos eventos?.De la siguiente manera podemos crear un cronómetro con un Arduino. Nuestro cronómetro usará dos botones: uno para “iniciar/reiniciar” el conteo y otro para “parar” y mostrar el tiempo transcurrido. La lógica del programa verificará continuamente el estado de los dos botones. Cuando se presiona el botón de inicio, se almacenara en una variable “inicio” el tiempo de millis() , y cuando se presiona el botón parar, un nuevo valor millis() sera almacenado en “finalizado”. La función personalizada MostrarResultado() convertirá el tiempo transcurrido desde milisegundos en horas, minutos , segundos y milisegundos. Finalmente, el tiempo aparecerá en el monitor serial.
Componentes necesarios:
• Arduino UNO y cable USB
• Una protoboard
• Dos resistencias de 10 kW
• Dos pulsadores S1, S2
• Varios cables
Diagrama
Explicación del Sketch:
El proyecto de nuestro cronómetro se realiza de la siguiente manera.En la configuración del los pines decimos que son pines de entrada.
pinMode(2, INPUT);
pinMode (3, INPUT);
En el condicional verificamos si se presiono el botón de Inicio/Reset
if (digitalRead(2) == HIGH);
en el caso de que se pulse el botón de inicio, el Arduino llama la función
millis();
que utilizamos para calcular el tiempo transcurrido.
Cuando se presiona el botón conectado en el pin 3 “Parar” en el condicional lo detecta
if (digitalRead(3) == HIGH);
Después de haber pulsado el botón de parar, el tiempo transcurrido se calcula en la función
MostrarResultado
();
y se muestra la diferencia en el monitor serial.
Ttranscurrido = finalizado - inicio;
Después se muestra detalladamente las horas, minutos, segundos y milisegundos también en el monitor serial.
Sketch completo:
// Cronómetro
unsigned long inicio, finalizado, Ttranscurrido;
void setup()
{
Serial.begin(9600);
pinMode(2, INPUT); // Boton de inicio
pinMode(3, INPUT); // Boton para Parar
Serial.println("Presione 1 para Inicio/reset, 2 para parar tiempo transcurrido");
}
void MostrarResultado()
{
float h, m, s, ms;
unsigned long terminado;
Ttranscurrido = finalizado - inicio;
h = int(Ttranscurrido / 3600000);
terminado = Ttranscurrido % 3600000;
m = int(terminado / 60000);
terminado = terminado % 60000;
s = int(terminado / 1000);
ms = terminado % 1000;
Serial.print("Tiempo transcurrido : ");
Serial.println(Ttranscurrido);
Serial.print("Tiempo transcurrido detallado: ");
Serial.print(h, 0);
Serial.print("h ");
Serial.print(m, 0);
Serial.print("m ");
Serial.print(s, 0);
Serial.print("s ");
Serial.print(ms, 0);
Serial.println("ms");
Serial.println();
}
void loop()
{
if (digitalRead(2) == HIGH)
{
inicio = millis();
delay(300); // por rebote
Serial.println("Inicializar...");
}
if (digitalRead(3) == HIGH)
{
finalizado = millis();
delay(300); // por rebote
MostrarResultado();
}
}
Bueno esperemos cronometrar el termino de este año y comencemos el 2019 mucho mas felices. Saludos Ditecno Digital