Contador de tiempo

Objetivos

  • Hacer un contador de tiempo entre dos interrupciones.
  • Contar tiempos en una carrera de robot

Material requerido

 arduino
  • Arduino Uno o similar. Esta sesión acepta cualquier otro modelo de Arduino.
 Img_3_4
  •  Una Protoboard.
 Img_3_6-300x185
  • Algunos cables de Protoboard.
  • Un display de 7 segmentos y 4 dígitos.
HC-SR04
  • Sensor de distancia

Carrera de robots y contador de tiempos.

En esta entrada vamos a mezclar la utilización dos de los sensores vistos anteriormente, el display de 7 segmentos y 4 dígitos y el sensor de distancia.

Para ello lo vamos a hacer es poner el contador a cero cuando el robot se encuentre a menos de 20 centímetros del sensor (este dato lo puedes cambiar) y empezar a contar en cuanto salga de nuestro alcance. Cuando el robot vuelva a su posición de inicio pararemos el contador, obteniendo el tiempo transcurrido:

El esquema.

Hay que unir los dos esquemas vistos en las entradas:

  1. 7 Segmentos y 4 dígitos con interface.
  2. Sensor de distancia.

El programa:

#include <TM1637.h>

#define CLK 3
#define DIO 2

#define trigPin 13
#define echoPin 12
#define led 4

TM1637 display1(CLK, DIO);
int8_t digitos[] = {3, 2, 1, 2} ;

int conta = 0;

void setup() {

// el display
display1.set();
display1.init();

// el sensor de distancia y el led
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(led, OUTPUT);

}

void loop() {

// put your main code here, to run repeatedly:
int limite = 20;
long duracion, distancia;
boolean carrera = false;

digitalWrite(trigPin, LOW); // trigger desactivado
delayMicroseconds(2);

digitalWrite(trigPin, HIGH); // Activamos el pulso
delayMicroseconds(10); // Esperamos 10µs.
digitalWrite(trigPin, LOW); // Cortamos el pulso

duracion = pulseIn(echoPin, HIGH) ;
distancia = duracion * 0.017 ;

if ( distancia < limite){

        // si esta a menos de 20 cm encendemos led y poner el contador a cero
digitalWrite ( led , HIGH);
conta=0;
}
else{
digitalWrite( led , LOW) ;
conta++;
calculaDigitos(conta);
carrera=true;
}
delay (500) ; // Para limitar el número de mediciones

}

void calculaDigitos(int num){

int8_t digit0 = num % 10 ;
int8_t digit1 = (num % 100) / 10 ;
int8_t digit2 = (num % 1000) / 100 ;
int8_t digit3 = num / 1000 ;

digitos[3] = digit0 ;
digitos[2] = digit1 ;
digitos[1] = digit2 ;
digitos[0] = digit3 ;

          display1.display(digitos);
}