jueves, 15 de octubre de 2015

Reloj digital a base de led's. 2º FPB. Instalación y Mantenimiento de Redes de Transmisión de Datos.

Hola:
Con los alumnos de 2º de FP Básica nos hemos propuestos construir un reloj digital a base de led's. El proyectos entre otras cosas nos servirá para estudiar la transmisión de datos en serie y su salida en paralelo y para eso harémos uso de multiplexor 74HC595 que será el encargado de recibir los datos en serie de un Arduino Nano V3.0 y "atacar" los displays de 7 segmentos construidos de forma "artesanal" a base de led's.
Este post lo iré actualizando con las fotografías de las fases de nuestro proyecto.

1. Estudio y simulación del multiplexor.

Hemos estudiado y simulado las líneas de entrada al multiplexor con salida triestado 74HC595: CLK, Data, Latch.
Simulación del comportamiento de cuatro CI's 74HC595, conectados a displays de 7 segmentos.

2. Plantilla de led's e instalación en el soporte.

Nuestra plantilla y taladrado del soporte.
Instalación de led's. Delante.

Instalación de led's. Detalle de conexionado y soldadura blanda.

16 de octubre de 2015

Conexionado de salida a multiplexor

Disposición de led's.

21 de octubre de 2015

3. Plantilla de codificación y conexionado

4. Placa Prototipo

23 de octubre de 2015

Soldadura en placa prototipo.


6 de noviembre de 2015

Después de varios días dedicados a otros temas: teoría, exámenes, ejercicios... hemos retomado el trabajo con el prototipo del reloj. 
A falta de algunos componentes (varias resistencias y condensadores) y de los pulsadores de puesta en hora, el estado de la placa de prototipos es el siguiente:

Las soldaduras en la cara de las pistas es muy laboriosa pues se deben ir realizando las pistas con estaño, uniendo puntos de igual potencial.


5. Conexión de la placa a las matrices de LED

6 de noviembre de 2015. Por el momento se ha conexionado las señales correspondientes a las decenas de horas, y hemos probado su funcionamiento.

6. Programa código de Arduino.

A falta de alguna depuración en el código, el programa de Arduino está terminado. En los próximos días lo subiremos al blog.
Se ha utilizado como entrono de programación el IDE de Arduino:  https://www.arduino.cc/en/Main/Software
y se ha hecho uso de las librerías:

7. Alimentación del reloj.

12 de noviembre de 2015. Para la alimentación del reloj, hemos utilizado un cargador de un viejo teléfono móvil. Según la placa de característcas es capaz de suministrar a la carga 700mA a 9V. Como necesitamos una tensión constante de 5V para alimentar el arduino, el RTC y los CI 74595, hemos tenido que instalar el la placa un regulador de tensión positiva 7805.

8. Construcción del armazón soporte.

13 de noviembre de 2015. Hoy hemos estado contruyendo el marco soporte del reloj digital a base de led's. En principio pensabamos utilizar algún marco de bajo precio, pero con las premisas de realizar nosotros mismos todas las fases posibles del montaje e instalación e intentando reciclar productos, hemos utilizado unas patas de madera de una vieja silla que hemos encontrado.
Para la parte anterior se ha utilizado una placa de policarbonato liscio transparente que hemos cortado a la medida.
Para la parte porterior, al igual que para la sujección de los led's, hemos utilizado una plancha de cartón prensado reciclada de un viejo mueble de cocina.
Una vez ensambladas las piezas y aisladas procederemos a pintarlas.
Os dejo las fotos.



9. Código para el reloj con LED's con Arduino y RTC DS3231.


10. Ya tenemos el reloj terminado y en la entrada de nuestro Centro.

26 de noviembre de 2015.. El aspecto final de vuestro reloj terminado e instalado en el Centro: http://fpbasicaelectricidad.blogspot.com.es/2015/11/ya-tenemos-el-reloj-terminado-y-en-la.html

BUEN TRABAJO!!!!!!


Un saludo


9 Comentarios:

  1. Apreciados Jóvenes, es un placer felicitarles, motivarles a continuar y comentarles que estaré al pendiente de su proyecto que espero poder replicar en la iglesia donde asisto. Un saludo desde El Salvador

    ResponderEliminar
  2. Muchas gracias por tus comentarios. Verdaderamente nos ha salido un proyecto muy "chulo". Desde ayer tenemos el reloj en la entrada de nuestro Centro.
    Espero que en su construcción te diviertas tanto como nosotros realizándolo.
    Gracias.

    ResponderEliminar
  3. Hola muy buenas.
    Llevo tiempo buscando informacion de como hacer un reloj de led´s con botones y he dado con vuestro blog.
    Me ha parecido genial y muy completo,voy a realizar el reloj como el vuestro,pero me falta el diagrama de conexiones,que no aparecen todas las fotos.
    El codigo lo he compilado y me funciona correctamente,he leido que tambien lleva resistencias y condensadores.
    Me gustaria conocer la informacion para poder realizarlo y os muestro el resultado cuando lo tenga terminado.
    Un saludo y gracias.
    David.

    ResponderEliminar
    Respuestas
    1. Muchas gracias por tus comentarios. Nos alegra que te haya gustado nuestro proyecto de reloj a base de led's. Puedo decirte que aún está funcionando perfectamente y no ha retrasado ni adelantado ni un segundo.
      En cuanto a la dudas que planteabas sobre el diagrama de conexiones, lo único que falta es la conexión de los led's y las resistencias limitadoras de corriente a los led's. Nosotros solucionamos ésto con una única resistencia (50 Ohm) entre todos los cátodos de un mismo dígito de leds. La solución no es la más adecuada pero funciona. La solución mejor es usar transistores para excitar los led's, y en este caso un array de transistores darlington como puede ser ULN2803A. Según este esquema:
      http://embedded-lab.com/blog/wp-content/uploads/2013/04/MatrixCircuit.jpg
      Un saludo

      Eliminar
  4. amigo como seria para un reloj de 12 horas ??

    ResponderEliminar
    Respuestas
    1. Hola:
      Esta parte de código es la encargada de leer el RTC (DS3231) y de escribor los datos en los led's correspondientes:
      //=========================================================
      /* ESCRIBIR LAS HORAS */
      temporal = leer_DS3231(DIR_HORAS); // LEE EL REGISTRO DE LAS HORAS
      if ((temporal & 0b01000000) && (temporal & 0b00100000)){ // SI ESTÁ EN MODO 12 HORAS Y ADEMÁS ES PM --> CONVERTIR
      temporal = ((byte) ((int)(temporal & 0b00011111)+12));
      }
      // ESTÁ EN MODO 24 HORAS O EN MODO 12 HORAS Y ES AM o ya se ha convertido
      shiftOut(pinDatos, pinReloj, LSBFIRST, digitos_LED[(int) (temporal & 0x0F)]);
      if ((temporal>>4) & 0x03){
      shiftOut(pinDatos, pinReloj, LSBFIRST, digitos_LED[(int) ((temporal>>4) & 0x03)]); // SOLO LOS 2 PRIMEROS BITS DESPUÉS DE DESPLAZAR
      }
      else shiftOut(pinDatos, pinReloj, LSBFIRST, 0x00); // Para no escribir el 0 delante de las horas de una cifra
      digitalWrite(pinLatch, HIGH); // ACTIVA LATCH
      }
      //=========================================================

      A mí me interesaba que siempre e independiente de la programación del Reloj en Tiempo Real (DS3231), la presentación de las horas fuese en formato 24 horas.
      Si lo que deseas es que aparezcan los datos siempre en formato 12 horas, solo hay que modificar un poco estas líneas; quedando así:

      //=========================================================

      /* ESCRIBIR LAS HORAS */
      temporal = leer_DS3231(DIR_HORAS); // LEE EL REGISTRO DE LAS HORAS

      //Si temporal es mayor de 12, restar 12 al valor de temporal (además de quitar los 3 MSB)
      temporal &= 0b00011111; // Se quitan los 3 bits MSB
      if ((int)(temporal ) > 12) temporal = ((byte) ((int)(temporal) - 12)); // Se resta 12, a partir de las 13:00 h

      shiftOut(pinDatos, pinReloj, LSBFIRST, digitos_LED[(int) (temporal & 0x0F)]);
      if ((temporal>>4) & 0x03){
      shiftOut(pinDatos, pinReloj, LSBFIRST, digitos_LED[(int) ((temporal>>4) & 0x03)]); // SOLO LOS 2 PRIMEROS BITS DESPUÉS DE DESPLAZAR
      }
      else shiftOut(pinDatos, pinReloj, LSBFIRST, 0x00); // Para no escribir el 0 delante de las horas de una cifra
      digitalWrite(pinLatch, HIGH); // ACTIVA LATCH
      }

      Eliminar
  5. amigo en los displays de las horas siempre me aparece el numero 9, este problema resulto después de la modificación de la programación para 12 horas

    ResponderEliminar
    Respuestas
    1. Disculpa, efectivamente el código tenía un error. Perdona por no haberlo comprobado antes de responderte. Como tantas veces lo que parece obvio es justamente la causa del error. Las líneas de código a modificar para lo que quieres son:

      ========================================================================
      /* ESCRIBIR LAS HORAS */
      temporal = leer_DS3231(DIR_HORAS); // LEE EL REGISTRO DE LAS HORAS

      //Si temporal es mayor de 12, restar 12 al valor de temporal (además de quitar los 3 MSB)

      temporal &= 0b00011111; // Se quitan los 3 bits MSB

      if ((int)(temporal ) > 12) temporal = ((byte) ((int)(temporal) - 12)); // Se resta 12, a partir de las 13:00 h
      =========================================================================
      Otra opción sería programas el DS3231 para funcionar en modo 12 horas.

      Me alegra que te hayas decidido a hacer este proyecto. Te agradecería que adjuntara alguna alguna foto y/o reseña si ha funcionado.
      Nuestro reloj lleva funcionando ya 1 año y sigue dando la hora y la temperatura puntualmente.

      Un abrazo.

      Eliminar
  6. Thanks Admin Nice Post Keep UpDate.Thank You For Awesome Webside

    Top 10 Most Popular Ebook Collection Free Download Please Visit Our Website


    http://get-download-freee-books.blogspot.com/

    ResponderEliminar