Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

El reloj IV9 Numitron más simple de bricolaje con Arduino

Componentes y suministros

Arduino Nano R3
× 1
Maxim Integrated DS3231M - ± 5ppm, I2C Real-Time Clock
× 1
Registro de desplazamiento TPIC6C595
× 4
Tubo de Numitron IV9
× 4
LED (genérico)
× 2
Condensador 100 nF
× 4
1N4007 - Diodo nominal de alta tensión y alta corriente
× 2
Interruptor deslizante
× 1
Resistencia 1k ohm
× 1

Herramientas y máquinas necesarias

Soldador (genérico)
Alambre de soldadura, sin plomo

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

En esta ocasión te mostraré cómo hacer un bonito reloj de tubos Numitron de estilo retro. Además de la hora correcta, el dispositivo muestra brevemente la fecha, el año y la temperatura actual cada 30 segundos.

Tuve la idea de hacer este reloj desde la página de Github dada:https://github.com/theremotheman/simple_numitron_clock_with_4_shift_registers_and_rtc3231.

Primero hice el proyecto de acuerdo con las instrucciones del sitio y descubrí que contenía muchas fallas.

Así es como se veía el primer prototipo con 74HC595

Para 74HC595 IC La corriente máxima total según la hoja de datos es de 70 miliamperios, que en este caso se supera varias veces (unos 160 miliamperios para el dígito 8), por lo que después de un tiempo el IC se sobrecalienta y no funciona correctamente. Otra falta es que hay demasiados retrasos en el ciclo de código, por lo que el tiempo se lee solo una vez en 60 segundos. En la imagen puede ver el reloj terminado hecho principalmente de acuerdo con las instrucciones en la página de arriba. Al principio, funciona con total normalidad, pero después de un tiempo, se activan segmentos aleatorios y los IC-s, numitrones o el microcontrolador pueden quemarse muy fácilmente. En el primer caso, el problema se resolvió utilizando TPIC6C595 IC en lugar de 74HC595, que se proporciona para corrientes más grandes. También se debe tener cuidado de que estos dos circuitos integrados no sean compatibles con pines.

-------------------------------------------------- --------------------------------

https://www.pcbgogo.com/promo/from_MirkoPavleskiMK

-------------------------------------------------- ---------------------------------

Y el nuevo código se creó usando millis () en lugar de la función delay (), por lo que ahora el reloj en tiempo real se lee constantemente. También agregué un interruptor que cambia la intensidad de la luz de los numitrones y, por lo tanto, la vida útil. Como puede ver, el dispositivo es relativamente simple de construir y creo que esta es la forma más sencilla de hacer un reloj de tubo. Los Numitron son económicos, fáciles de obtener y no utilizan una fuente de alimentación de alto voltaje adicional.

Solo se necesitan algunos componentes para hacer este reloj:

- Cuatro tubos Numitron IV9

- Cuatro circuitos integrados TPIC6C595

- Microcontrolador Arduino

- Módulo de reloj en tiempo real DS3231

- Dos LED por segundos

- Cambiar

- y cuatro condensadores de desacoplamiento

El módulo de tiempo real también contiene un termómetro, por lo que para una visualización más precisa de la temperatura, está ubicado fuera de la caja, protegido por una malla. Primero, es deseable sincronizar el reloj en tiempo real con el reloj de la PC, y lo hacemos con la ayuda de la biblioteca DS1307RTC. Luego cargamos el código y con eso el dispositivo está listo. Queda por modificar el código para que podamos configurar la hora con la ayuda de botones y será en el próximo período como actualización del proyecto.

Finalmente, el reloj está montado en una caja adecuada y es una hermosa decoración en cada vitrina.

Código

  • Código Arduino
Código Arduino C / C ++
 #include  // rtc con temperatura para ds3231RTC_DS3231 rtc; // establecer qué módulo rtc se usa # include  // cableado # include  // time lib # include  // time function # include  // rtc #include  #define led 7const int latchPin =13; // latchconst int clockPin =10; // clockconst int dataPin =11; // dataunsigned long previousMillis =0; // almacena la última vez que el LED parpadeó un intervalo largo =30000; // intervalo en el que parpadear (milisegundos) unsigned long previousMillisDiode =0; // almacena la última vez que el LED parpadeó durante un largo intervaloDiode =500; // intervalo en el que parpadear (milisegundos) const int nums [12] ={// configuración de la matriz de visualización - de acuerdo con los documentos:pin1 es común, pin2 es un punto (no se usa en el boceto), el resto debe conectarse a los registros de desplazamiento uno por uno 0b10111110, // 0 0b00000110, // 1 0b01111010, // 2 0b01101110, // 3 0b11000110, // 4 0b11101100, // 5 0b11111100, // 6 0b00001110, // 7 0b11111110, // 8 0b11101110, // 9 0b11001010, // st. 0b10111000 //celz.};int hora1; // hora primer número en hora2; // hora segundo númeroint minuto1; // minutos primer número en minuto2; // minutos segundo número en el día1; // día primer número en día2; // día segundo número en mes1; // mes primer número en mes2; // mes segundo número en año1; // año primer número - constante 2int año2; // año segundo número - constante 0 (¿quieres vivir tanto tiempo para cambiarlo?) int año3; // año tercer número en año4; // año cuarto numberint hourDecimal; // análisis decimal de hourint minuteDecimal; // análisis decimal de minuteint dayDecimal; // análisis decimal de dayint monthDecimal; // análisis decimal de monthint year70; // año después de unix epochint temp1; // primera temperatura numberint temp2; // segunda temperatura numberint tempDecimal; // análisis decimal de la temperatura (dos primeros números) void setup () {pinMode (led, OUTPUT); pinMode (latchPin, SALIDA); // establece los pines a la salida para que puedas controlar el registro de desplazamiento pinMode (clockPin, OUTPUT); // establece los pines a la salida para que puedas controlar el registro de desplazamiento pinMode (dataPin, OUTPUT); // establece los pines a la salida para que puedas controlar el registro de desplazamiento Serial.begin (9600); // inicializar SPI:SPI.begin (); // tome el pin SS bajo para seleccionar el chip:digitalWrite (clockPin, LOW); } bucle vacío () {tmElements_t tm; // denominación de la biblioteca DS1307RTC RTC.read (tm); // leer rtc hora / fecha / año minuteDecimal =tm.Minute / 10; // analizar la salida para que sea legible (más corta) dividiéndola por diez horasDecimal =tm.Hour / 10; // analizar la salida para que sea legible (más corta) dividiéndola por diez dayDecimal =tm.Day / 10; // analizar la salida para que sea legible (más corta) dividiéndola por diez monthDecimal =tm.Month / 10; // analizar la salida para que sea legible (más corta) dividiéndola por diez year70 =tm.Year - 30; // muestra el año real restando de unix epoch (1970) hour1 =hourDecimal; // tan simple como eso hour2 =tm.Hour - 10 * hourDecimal; // hacer cálculos para mostrar solo el segundo número de dos dígitos string minute1 =minuteDecimal; // simple minuto2 =tm.Minuto - 10 * minutoDecimal; // hacer cálculos para mostrar solo el segundo número de dos dígitos string day1 =dayDecimal; // simple day2 =tm.Day - 10 * dayDecimal; // hacer cálculos para mostrar solo el segundo número de la cadena de dos dígitos month1 =monthDecimal; // mes2 simple =tm.Month - 10 * monthDecimal; // hacer cálculos para mostrar solo el segundo número de la cadena de dos dígitos year1 =2; // número de primer año, ¿realmente necesitas cambiar eso? ¿Tienes coches voladores, etc.? año2 =0; // número de segundo año, si necesitas cambiar que deberías jugar con nietos en lugar de año3 =año70 / 10; // analizar la salida para que sea legible (más corta) dividiéndola por diez año4 =año70 - 10 * año3; // realiza cálculos para mostrar solo el segundo número de la cadena de dos dígitos tempDecimal =rtc.getTemperature () / 10; // analizar la salida para que sea legible (más corta) dividiéndola por diez temp1 =tempDecimal; // simple temp2 =rtc.getTemperature () - 10 * tempDecimal; // hacer cálculos para mostrar solo el segundo número de una cadena de dos dígitos if (millis () - previousMillisDiode> =intervalDiode) {previousMillisDiode =millis (); digitalWrite (led,! digitalRead (led)); // cambia el estado del led} if (millis () - previousMillis> =intervalo) {previousMillis =millis (); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); retraso (500); // el numitrón se apaga durante 0.5 segundos para hacer el efecto de 'respiración' digitalWrite (clockPin, LOW); SPI.transfer (números [mes2]); SPI.transfer (números [mes1]); SPI.transfer (números [día2]); SPI.transfer (números [día1]); digitalWrite (clockPin, HIGH); retraso (1500); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); retraso (500); // el numitrón se apaga durante 0.5 segundos para hacer el efecto de 'respiración' digitalWrite (clockPin, LOW); SPI.transfer (nums [año4]); SPI.transfer (números [año3]); SPI.transfer (números [año2]); SPI.transfer (números [año1]); digitalWrite (clockPin, HIGH); retraso (1500); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); retraso (500); // el numitrón se apaga durante 0.5 segundos para hacer el efecto de 'respiración' digitalWrite (clockPin, LOW); Transferencia SPI (0b10111000); Transferencia SPI (0b11001010); SPI.transfer (nums [temp2]); SPI.transfer (nums [temp1]); digitalWrite (clockPin, HIGH); retraso (1500); digitalWrite (clockPin, LOW); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); SPI.transfer (0b00000000); digitalWrite (clockPin, HIGH); retraso (500); // el numitrón se apaga durante 0.5 segundos para hacer el efecto de 'respiración'} else {digitalWrite (clockPin, LOW); SPI.transfer (números [minuto2]); SPI.transfer (números [minuto1]); SPI.transfer (números [hora2]); SPI.transfer (números [hora1]); digitalWrite (clockPin, HIGH); }} 

Esquemas


Proceso de manufactura

  1. Juego de giroscopio Arduino con MPU-6050
  2. Reloj Arduino con tiempos de oración islámicos
  3. Reloj maestro
  4. Arduino Temp. Monitor y reloj en tiempo real con pantalla 3.2
  5. Voltímetro de bricolaje con Arduino y una pantalla Nokia 5110
  6. MobBob:Robot Arduino DIY controlado por un teléfono inteligente Android
  7. Rueda de medición simple de bricolaje con codificador giratorio
  8. Medidor de IoT con Arduino, Yaler e IFTTT
  9. Reloj Flip Arduino de matriz de un solo LED
  10. Monitor de calidad del aire para bricolaje con sensor Sharp GP2Y1010AU0F
  11. Reloj despertador simple con DS1302 RTC