Skip to the content
×
  • Testers League
  • Comparativas
  • Casos de éxito
  • Arduino
  • Guía de compras
    • Escáners 3D
    • Impresoras 3D
    • Grabadoras Láser
  • Tienda
×

Proyecto Arduino: Reloj y Termómetro Digital

TP3D
enero 2, 2025
0

El proyecto “Reloj y Termómetro Digital Arduino” utiliza un microcontrolador Arduino junto con un registro de desplazamiento 74HC595 para controlar un display de 7 segmentos que muestra la hora en tiempo real y la temperatura (opcional, si se incluye un sensor). Este sistema es ideal para aprender sobre programación de microcontroladores, manejo de displays y aplicaciones prácticas de relojes digitales.

Objetivos del Proyecto

  1. Crear un reloj digital funcional utilizando Arduino.
  2. Mostrar los valores de horas, minutos y segundos en un display de 7 segmentos.
  3. Implementar un termómetro (opcional, con un sensor como DHT11 o LM35).
  4. Dominar el uso del registro de desplazamiento 74HC595 para minimizar los pines requeridos.

Componentes Necesarios

  1. Microcontrolador Arduino Uno/Nano.
  2. Registro de desplazamiento 74HC595.
  3. Displays de 7 segmentos (seis unidades para hh:mm:ss).
  4. Resistencias (para limitar corriente en los LEDs).
  5. Cables de conexión y protoboard.
  6. (Opcional) Sensor de temperatura DHT11 o LM35.
¡Conseguí los materiales!

Funcionamiento Básico

  • Reloj digital: El código utiliza el método micros() para contar el tiempo transcurrido y actualizar los valores de horas, minutos y segundos.
  • Control del display: Los números se despliegan mediante el registro 74HC595, que permite enviar datos binarios secuencialmente y controlar múltiples LEDs con pocos pines del Arduino.
  • Interfaz visual: Cada dígito del reloj se representa en un segmento del display, lo que permite una lectura clara y sencilla.

Aplicación del Código

Código

//Pin connected to ST_CP of 74HC595

int latchPin = 12;

//Pin connected to SH_CP of 74HC595

int clockPin = 8;

////Pin connected to DS of 74HC595

int dataPin = 11;

 

unsigned long currentmicros = 0;

unsigned long nextmicros = 0;

unsigned long interval = 10000; // adjusted for my board

 

byte tens_hours = 0;

byte ones_hours = 9; 

byte tens_minutes = 3;

byte ones_minutes = 5;

byte tens_seconds = 0;

byte ones_seconds = 0;

byte tenths = 0;

byte hundredths= 0;

 

byte prior_seconds = 0;

 

 

int dataArray[11] = {64, 121, 36, 48, 25, 18, 2, 120, 0, 16, 255};

 

void setup() {

  // put your setup code here, to run once:

  //set pins to output so you can control the shift register

  pinMode(latchPin, OUTPUT);

  pinMode(clockPin, OUTPUT);

  pinMode(dataPin, OUTPUT);

  nextmicros = micros();

}

 

void loop() {

  // put your main code here, to run repeatedly:

generateTime();

//displayTime();

  blinkTime(3);

}

 

void displayTime(){

    digitalWrite(latchPin, LOW);

    // shift out the bits:

    shiftOut(dataPin, clockPin, MSBFIRST, dataArray[tens_hours]);

    shiftOut(dataPin, clockPin, MSBFIRST, dataArray[ones_hours]);

    shiftOut(dataPin, clockPin, MSBFIRST, dataArray[tens_minutes]);

    shiftOut(dataPin, clockPin, MSBFIRST, dataArray[ones_minutes]);

    shiftOut(dataPin, clockPin, MSBFIRST, dataArray[tens_seconds]);

    shiftOut(dataPin, clockPin, MSBFIRST, dataArray[ones_seconds]);

    //take the latch pin high so the LEDs will light up:

    digitalWrite(latchPin, HIGH);

    // pause before next value:

}

 

void generateTime(){

  currentmicros = micros(); // read the time.

 

  if ((currentmicros – nextmicros) >= interval) // 10 milliseconds have gone by

 

  {

 

    hundredths = hundredths +1;

 

    if (hundredths == 10){

      hundredths = 0;

      tenths = tenths +1;

    }

 

    if (tenths == 10){

      tenths = 0;

      ones_seconds = ones_seconds +1;

    }

 

    if (ones_seconds == 10){

      ones_seconds = 0;

      tens_seconds = tens_seconds +1;

    }

 

    if (tens_seconds == 6){

      tens_seconds = 0;

      ones_minutes = ones_minutes +1;

    }

 

    if (ones_minutes == 10){

      ones_minutes = 0;

      tens_minutes = tens_minutes +1;

    }

 

    if (tens_minutes == 6){

      tens_minutes = 0;

      ones_hours = ones_hours +1;

    }

 

    if (ones_hours == 10){

      ones_hours = 0;

      tens_hours = tens_hours +1;

    }

    if ((tens_hours == 2) && (ones_hours == 4)){

      ones_hours = 0;

      tens_hours = 0;

      delay(1000);

    }

 

    nextmicros = nextmicros + interval; // update for the next comparison

 

  }  // end time interval check

}

 

void blinkTime(int position){

    // shift out the bits:

    int _second_one = ones_seconds, _second_two = tens_seconds, _minute_one = ones_minutes, _minute_two = tens_minutes,

        _hour_one = ones_hours, _hour_two = tens_hours;

       

    switch(position){

      case 1:

        _hour_two = 10;

        break;

      case 2:

        _hour_one = 10;

        break;

      case 3:

        _minute_two = 10;

        break;

      case 4: 

        _minute_one = 10;

        break;

      case 5:

        _second_two = 10;

        break;

      case 6:

        _second_one = 10;

        break;

    }

    digitalWrite(latchPin, LOW);

    shiftOut(dataPin, clockPin, MSBFIRST, dataArray[_hour_two]);

    shiftOut(dataPin, clockPin, MSBFIRST, dataArray[_hour_one]);

    shiftOut(dataPin, clockPin, MSBFIRST, dataArray[_minute_two]);

    shiftOut(dataPin, clockPin, MSBFIRST, dataArray[_minute_one]);

    shiftOut(dataPin, clockPin, MSBFIRST, dataArray[_second_two]);

    shiftOut(dataPin, clockPin, MSBFIRST, dataArray[_second_one]);

    //take the latch pin high so the LEDs will light up:

    digitalWrite(latchPin, HIGH);

    // pause before next value:

}

El código proporcionado:

  • Define los pines de conexión para el 74HC595 y establece el control de los displays.
  • Calcula los valores del tiempo en centésimas, segundos, minutos y horas.
  • Implementa una función de parpadeo para resaltar valores específicos, ideal para funciones de configuración.

Ampliaciones Futuras

  • Termómetro: Agregar un sensor como DHT11 para medir y mostrar temperatura.
  • Alarma: Integrar un buzzer para alertas configurables.
  • Diseño compacto: Crear una PCB para encapsular todos los componentes.

Encontrá en nuestra web todo lo que buscás para tus proyectos, desde componentes hasta kits completos. ¡Conseguí lo necesario para transformar tus ideas en realidad!

TP3D

No te pierdas nuestras próximas notas, donde vamos a presentar otros proyectos Arduino innovadores. ¡Seguí nuestras publicaciones y descubrí nuevas ideas cada semana!

Hasta la próxima.

blogger Image

TP3D

Publicaciones relacionadas

Proyecto arduino: Válvula Eléctrica para Cultivo

Leer más

Proyecto Arduino: Juego Memotécnico con Keypad

Leer más

Proyecto Arduino: Tarjeta Navideña

Leer más

Agrega tu comentario

Cancel Reply

Main Menu
  • Industria
  • Odontología
  • Joyería
  • Educación
Main Menu
  • Industria
  • Odontología
  • Joyería
  • Educación
Main Menu
  • Industria
  • Odontología
  • Joyería
  • Educación

Social Chat is free, download and try it now here!