lunes, 11 de enero de 2016

Cronómetro con display LCD 1602


En este POST os voy a explicar cómo crear un cronómetro mediante Arduino UNO y una serie de componentes electrónicos de una manera muy sencilla. Este cronómetro constará de 2 pulsadores, uno para reiniciar el conteo y otro para pausarlo cuando creamos conveniente.

Además se incluye un display LCD 1602 con comunicación I2C, con el que se muestra el tiempo transcurrido en formato HH:MM:SS.

Bueno pues a partir de ahora ya estamos preparados para continuar con el montaje y la programación de nuestro cronómetro.
 

Lista de Materiales:

 
·         Arduino UNO Rev.3.
 
·         Cable USB tipo A-B.
 
·         Módulo LCM 1602 I2C V1.
 
·         Display 16x2 LCD 1602.
 
·         2 Pulsadores.
 
·         2 Resistencias de 10KΩ.
 
·         Protoboard.
 
·         Cables de conexión.
 

Código del programa:



 
 
Video:
 

13 comentarios:

  1. saludo...este codigo que esta aqui tiene un error tendria la amabilidad de revisarlo y volverlo a subir gracias..el error es el siguiente:

    sketch_apr04b:63: error: 'POSITIVE' was not declared in this scope

    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

    ^

    exit status 1
    'POSITIVE' was not declared in this scope

    ResponderEliminar
    Respuestas
    1. El código está perfecto, porque sino no le hubiera subido...te fallan tus librerías por eso te da error al compilar. En un POST de Diciembre de 2015 de mi BLOG tienes todas las librerías correctas para su descarga y como instalarlas. Saludos

      Eliminar
    2. de hecho, yo tambien tengo el mismo problema y tengo instalada la libreria correctamente. podrias por favor exolicarme como funciona esa linea? segun yo solo la configuracion es la siguiente:

      LiquidCrystal_I2C lcd(0x27,20,4); // seleccionas la direccion 0x27 para 16 caracteres y 2 lineas

      Eliminar
    3. Aquí tienes todo lo necesario para configurar correctamente un LCD 1602
      http://miarduinounotieneunblog.blogspot.com.es/2015/12/display-lcd-16x2-con-comunicacion-i2c.html

      Eliminar
    4. Una pregunta, en el armado de circuito en breadboard usted realmente utilizo un modulo para que este le de la hora o simplemente es con el programa eso?

      Eliminar
    5. Si te fijas en la lista de materiales no hay ningún RTC ... en este programa trabajo con el contador interno de arduino (timer) y mas en concreto con la función millis().

      Eliminar
    6. Muchas gracias. Me ha servido de gran manera

      Eliminar
  2. buenas tardes
    tengo un programa de un sensor de caudal, y me a cuanta cuanto litros an pasado, pero no se como escribir el codigo para que cuando esta sin energia al comenzar no comience desde cero sino en el numeor que estaba ... gracias

    ResponderEliminar
  3. hola te queria preguntar en donde esta el esquema del dibujo , como van conectadas las partes ?

    ResponderEliminar
  4. Muchas gracias, me sirvió bastante, hecho ala perfección.

    ResponderEliminar


  5. // Importar librerías
    #include
    #include
    LiquidCrystal_I2C lcd(0x27,16,2);

    // Variables para los cálculos internos del cronómetro
    int horas = 0;
    int minutos = 0;
    int segundos = 0;
    int decimas = 0;
    long milisegundos = 0;

    int pulsador_inicio = 10; // pulsador_inicio en PIN digital 10
    int pulsador_pausa = 9; // pulsador_pausa en PIN digital 9

    void setup()
    {
    Wire.begin();
    Serial.begin(9600); // Comienzo de la comunicación serie
    pinMode(pulsador_inicio, INPUT); // Pin digital 10 como entrada
    pinMode(pulsador_pausa, INPUT); // Pin digital 9 como entrada

    // Inicializamos el LCD
    lcd.init();
    lcd.clear();
    lcd.begin(16,2);
    lcd.backlight();
    }

    void loop()
    {
    // Si presionamos el pulsador de inicio se pone todo a cero
    if(digitalRead(pulsador_inicio) == HIGH)
    {
    horas = 0;
    minutos = 0;
    segundos = 0;
    decimas = 0;
    lcd.clear();
    }

    // Si presionamos el pulsador de pausa se congela el tiempo hasta que lo volvamos a presionar
    if(digitalRead(pulsador_pausa) == HIGH)
    {
    delay(200);
    while(digitalRead(pulsador_pausa) == LOW);
    delay(200);
    }

    // Se cuentan los milisegundos transcurridos
    milisegundos = millis();

    // Si el tiempo transcurrido es mayor a una décima de segundo
    if(milisegundos % 100 == 0)
    {
    decimas++;
    // Si han pasado 10 décimas de segundo se cuenta un segundo
    if(decimas == 10)
    {
    decimas = 0;
    segundos++;
    }
    // Si han pasado 60 segundos se cuenta un minuto
    if(segundos == 60)
    {
    segundos = 0;
    minutos++;
    }
    // Si han pasado 60 minutos se cuenta una hora
    if(minutos == 60)
    {
    minutos = 0;
    horas++;
    }

    // Mostramos el tiempo a través del LCD
    lcd.setCursor(0,0);
    if(horas < 10)
    {
    lcd.print("0");
    }
    lcd.print(horas);
    lcd.print(":");
    lcd.setCursor(3,0);
    if(minutos < 10)
    {
    lcd.print("0");
    }
    lcd.print(minutos);
    lcd.print(":");
    lcd.setCursor(6,0);
    if(segundos < 10)
    {
    lcd.print("0");
    }
    lcd.print(segundos);
    lcd.print("(");
    lcd.setCursor(9,0);
    lcd.print(decimas);
    lcd.print(")");
    }
    }

    ResponderEliminar
  6. Como seria para ser regressivo esse cronômetro

    ResponderEliminar