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

Reloj Word en italiano

Componentes y suministros

Arduino Nano R3
× 1
Tira de NeoPixel
144
× 1
LCD estándar Adafruit - 16x2 blanco sobre azul
con módulo I2C
× 1
Reloj en tiempo real (RTC)
× 1
Interruptor de botón SparkFun de 12 mm
× 4
Resistencia de 10k ohmios
× 3
Resistencia 475 ohm
× 1
1N4007 - Diodo nominal de alta tensión y alta corriente
× 3
Convertidor DC DC Reductor ajustable
× 1
Marco de pared RIBBA (Ikea)
× 1
Tapa de caja Gewiss 150 x 110
× 1
tiras de aluminio de 230 mm x 10 mm x 1 mm
× 1

Acerca de este proyecto

Mi pasión por los relojes Arduino, me llevó a hacer un "Word Clock", ya que vivo en Italia, sí hablaba en italiano. Para la realización del proyecto, me inspiré en un tutorial "Word Clock Javelin", hice algunos pequeños cambios ... ¡y aquí para ti "Word Clock of Italy"!

Además de "decir las horas" en italiano, quería agregar los cumpleaños de mi familia (incluido el gato). Para la construcción del "framework" usé uno ya hecho por IKEA, y los cambios internos usé el material que tenía en casa:

Para la realización de la pantalla se mostrará el patrón dibujado con Inkscape.

Mi panel mide 12 x 12 letras con una huella de 200 mm. Como no tengo impresora 3D, hice la rejilla con tiras de aluminio, y he aislado el contacto del LED con una esponja adhesiva, esto también sirvió para aislar la luz.

Circuito electrónico

Para mantener el tiempo, utilicé un RTC .

Para poder ajustar la hora, agregué botones (P1, P2, P3) y una pantalla de 16 x 2. (Ver también el proyecto "Clock Set Date Time"). Como se ve en el diagrama de cableado, los botones están conectados al Arduino a través de un menú desplegable circuito.

Como la pantalla solo sirve para ajustar la hora, reemplacé el puente con un botón , al hacerlo, ilumina solo para su uso. El diodo D1 sirve como protección de polaridad inversa.

El diodo D2 sirve para no alimentar la tira de neopixel, cuando, por el motivo que sea, tenemos que cambiar el boceto de Arduino (demasiada corriente podría dañarlo). El diodo D3 sirve para llevar a 5 voltios, el voltaje en Neopixel.

Adjunto el diagrama de circuito, el esquema de Fritzing, el diseño de PCB.

Matriz

Para realizar la matriz conecté las distintas tiras como en la imagen. Zigzagueando desde arriba a la izquierda para descender.

Bibliotecas Arduino

  • RTC
  • LiquidCrystal_I2C
  • Adafruit_NeoPixel

Explicación del código

El código está dividido en 5 partes principales:

  • "DisplayDateTime":muestra la fecha y la hora en la pantalla LCD
  • "HourClock":muestra las horas en el panel
  • "MinuteClock":muestra los minutos en el panel
  • "Auguri":Feliz cumpleaños
  • "Void paintWord (arrWord int [], uint32_t intColor)" es el corazón del código para encender el neopixel, "arrWord int []" son los LED deben encenderse, "uint32_t intColor" es su color

Para obtener un reloj más preciso, agregué los números 1, 2, 3, 4 correspondientes a los minutos progresivos.

Ejemplo :"SONO LE ORE DIECI E VENTI 4" significa 10:24 (10:20 + 00:04), "SONO LE DIECI MENO QUINDICI 2" significa 09:47 (09:45 + 00:02)

Ensamblaje

  • Abra el marco y limpie bien el vidrio
  • Insertar impresión en acetato
  • Inserte el papel de impresión
  • Inserte la cuadrícula
  • Inserte el panel con los LED
  • Pegue un trozo de madera contrachapada, un poco más grande que la caja de control
  • Asegure con tornillos autorroscantes la caja de control

Preste mucha atención a la alineación de las dos impresiones

Ubicación

Ponlo en la sala de estar hace que se vea bien.

Código

  • WordClock italiano
WordClock italiano Arduino
 / *:Proyecto:WordClock:Autor:Tiziano Bianchettin:Fecha:25/09/2016:Revisión:1:Licencia:Public Domaint gracias a:http://www.instructables.com/id/Javelins-Word-Clock / http://arduinoenonsolo.blogspot.it/2012/12/orologio-con-arduino-e-il-ds1307.html http://www.mauroalfieri.it/ http://www.danielealberti.it/ http://www.maffucci.it/ Mi profesor de laboratorio de electrónica "Perito Carli" * /// Bibliotecas ************ ************* // # incluir  #include  #include  #include  // *********** neopixel ********* ******* // # definir PIN 9 // pin neopixel # definir NUM_LEDS 144 // 12 x 12 # definir GIORNO 255 ​​// completo en # definir SERA 25 // una décima parte de Adafruit_NeoPixel strip =Adafruit_NeoPixel (NUM_LEDS, PIN , NEO_GRB + NEO_KHZ800); // 144 led, pin 9int intBrightness; // **************** COLORES *********** // uint32_t Rojo =strip.Color (255, 0, 0); uint32_t Verde =tira.Color (0, 255, 0); uint32_t Azul =tira.Color (0, 0, 255); uint32_t Blanco =tira.Color (255, 255, 255); uint32_t Amarillo =tira.Color (255 , 255, 0); uint32_t Violeta =strip.Color (60, 0, 255); uint32_t Off =strip.Color (0, 0, 0); LiquidCrystal_I2C lcd (0x27,16,2); // Mostrar I2C 16 x 2RTC_DS1307 RTC; int P1 =6; // Botón SET MENU'int P2 =7; // Botón + int P3 =8; // Botón -int oraagg; int minagg; int annoagg; int meseagg; int dayagg; int menu =0; int ora; // ******** Presentación ********* // int txtSONO [] ={1,2,3,4,6,7,9,10,11, -1}; // ******** Horas ********* // int txtUNA [] ​​={20,21,22, -1}; int txtDUE [] ={17,18,19, -1}; int txtTRE [] ={57,58,59, -1}; int txtQUATTRO [ ] ={96,97,98,99,100,101,102, -1}; int txtCINQUE [] ={30,31,32,33,34,35, -1}; int txtSEI [] ={103,104,105, -1}; int txtSETTE [] ={48,49,50,51,52, -1}; int txtOTTO [] ={72,73,74,75, -1}; int txtNOVE [] ={60,61,62,63 , -1}; int txtDIECI [] ={12,13,14,15,16, -1}; int txtUNDICI [] ={84,85,86,87,88,89, -1}; int txtDODOCI [ ] ={90,91,92,93,94,95, -1}; // ******** Feliz cumpleaños ********* // int txtAUGURI [] ={24, 25,26,27,28,29, -1}; int txtSIMONE [] ={36,37,38,39,40,41, -1}; int txtJACOPO [] ={42,43,44,45, 46,47, -1}; int txtMINU [] ={53,54,55,56, -1}; int txtTIZIANO [] ={65,66,67,68,69,70,71, -1}; int txtMARILENA [] ​​={76,77,78,79,80,81,82,83, -1}; // ******** Minutos ********* // int txtE [] ={107, -1}; int txtMENO [] ={116,117,118,119, -1}; int txtMUN O [] ={5, -1}; int txtMDUE [] ={64, -1}; int txtMTRE [] ={106, -1}; int txtMQUATTRO [] ={125, -1}; int txtMCINQUE [ ] ={132,133,134,135,136,137, -1}; int txtMDIECI [] ={120,121,122,123,124, -1}; int txtQUINDICI [] ={108,109,110,111,112,113,114,115, -1}; int txtVENTI [] ={139,140,141,142,143, -1}; int txtTRENTA {126,127,128,129,130,131, -1}; configuración vacía () {strip.begin (); strip.show (); lcd.begin (); LCD luz de fondo(); lcd.clear (); pinMode (P1, ENTRADA); pinMode (P2, ENTRADA); pinMode (P3, ENTRADA); Serial.begin (9600); Wire.begin (); RTC.begin (); if (! RTC.isrunning ()) {Serial.println ("¡RTC NO se está ejecutando!"); // Establecer la fecha y la hora en el momento de la compilación RTC.adjust (DateTime (__ DATE__, __TIME__)); } // RTC.adjust (DateTime (__ DATE__, __TIME__)); // eliminando "//" para ajustar la hora // La pantalla predeterminada muestra la fecha y la hora int menu =0;} void loop () {// verifica si presionas el botón SET y aumentas el índice del menú if (digitalRead ( P1)) {menú =menú + 1; } // ¿en qué subrutina debemos ir? si (menú ==0) {DisplayDateTime (); // anular DisplayDateTime DateTime ahora =RTC.now (); if ((ahora.hora ()> =19) || (ahora.hora () <7)) {// ajusta el brillo día - noche intBrightness =SERA; } else {intBrightness =GIORNO; } strip.setBrightness (intBrightness); strip.show (); int timeMin =ahora.minuto (); int modMin =timeMin% 5; // https://www.arduino.cc/en/Reference/Modulo if (modMin ==0) {// cada minuto los LED cambian de color y encienden el número correspondiente paintWord (txtSONO, White); paintWord (txtMQUATTRO, APAGADO); } else if (modMin ==1) {paintWord (txtSONO, Amarillo); paintWord (txtMUNO, rojo); } else if (modMin ==2) {paintWord (txtSONO, Green); paintWord (txtMUNO, Desactivado); paintWord (txtMDUE, azul); } else if (modMin ==3) {paintWord (txtSONO, Blue); paintWord (txtMDUE, desactivado); paintWord (txtMTRE, verde); } else if (modMin ==4) {paintWord (txtSONO, Red); paintWord (txtMTRE, desactivado); paintWord (txtMQUATTRO, amarillo); } Reloj de hora (); // anular HourClock MinuteClock (); // anular MinuteClock Auguri (); // anular la tira de Auguri.show (); } if (menú ==1) {DisplaySetHour (); } if (menú ==2) {DisplaySetMinute (); } if (menú ==3) {DisplaySetYear (); } if (menú ==4) {DisplaySetMonth (); } if (menú ==5) {DisplaySetDay (); } si (menú ==6) {StoreAgg (); retraso (500); menú =0; } delay (100);} void showStrip () {#ifdef ADAFRUIT_NEOPIXEL_H // NeoPixel strip.show (); #endif #ifndef ADAFRUIT_NEOPIXEL_H // FastLED FastLED.show (); #endif} void setPixel (int Pixel, byte rojo, byte verde, byte azul) {#ifdef ADAFRUIT_NEOPIXEL_H // NeoPixel strip.setPixelColor (Pixel, strip.Color (rojo, verde, azul)); #endif #ifndef ADAFRUIT_NEOPIXEL_H // LED FastLED [Pixel] .r =rojo; leds [Pixel] .g =verde; leds [Pixel] .b =azul; #endif} void setAll (byte rojo, byte verde, byte azul) {for (int i =0; i  =40) {// de los 40 minutos, agregue 1 a la "hora" ora =ora + 1; } switch (ora) {caso 0:caso 12:caso 24:paintWord (txtUNDICI, Off); strip.show (); if (modMin ==0) {paintWord (txtDODOCI, Blanco); strip.show (); } else if (modMin ==1) {paintWord (txtDODOCI, amarillo); strip.show (); } else if (modMin ==2) {paintWord (txtDODOCI, Green); strip.show (); } else if (modMin ==3) {paintWord (txtDODOCI, Blue); strip.show (); } else if (modMin ==4) {paintWord (txtDODOCI, Red); strip.show (); } descanso; caso 1:caso 13:paintWord (txtDODOCI, Off); strip.show (); if (modMin ==0) {paintWord (txtUNA, Blanco); strip.show (); } else if (modMin ==1) {paintWord (txtUNA, Amarillo); strip.show (); } else if (modMin ==2) {paintWord (txtUNA, Green); strip.show (); } else if (modMin ==3) {paintWord (txtUNA, Blue); strip.show (); } else if (modMin ==4) {paintWord (txtUNA, Red); strip.show (); } descanso; caso 2:caso 14:paintWord (txtUNA, Off); strip.show (); if (modMin ==0) {paintWord (txtDUE, Blanco); strip.show (); } else if (modMin ==1) {paintWord (txtDUE, Yellow); strip.show (); } else if (modMin ==2) {paintWord (txtDUE, Green); strip.show (); } else if (modMin ==3) {paintWord (txtDUE, Blue); strip.show (); } else if (modMin ==4) {paintWord (txtDUE, Red); strip.show (); }descanso; caso 3:caso 15:paintWord (txtDUE, Off); strip.show (); if (modMin ==0) {paintWord (txtTRE, Blanco); strip.show (); } else if (modMin ==1) {paintWord (txtTRE, Yellow); strip.show (); } else if (modMin ==2) {paintWord (txtTRE, Green); strip.show (); } else if (modMin ==3) {paintWord (txtTRE, Blue); strip.show (); } else if (modMin ==4) {paintWord (txtTRE, Red); strip.show (); } descanso; caso 4:caso 16:paintWord (txtTRE, Off); strip.show (); if (modMin ==0) {paintWord (txtQUATTRO, Blanco); strip.show (); } else if (modMin ==1) {paintWord (txtQUATTRO, amarillo); strip.show (); } else if (modMin ==2) {paintWord (txtQUATTRO, Green); strip.show (); } else if (modMin ==3) {paintWord (txtQUATTRO, Azul); strip.show (); } else if (modMin ==4) {paintWord (txtQUATTRO, rojo); strip.show (); } descanso; caso 5:caso 17:paintWord (txtQUATTRO, Off); strip.show (); if (modMin ==0) {paintWord (txtCINQUE, Blanco); strip.show (); } else if (modMin ==1) {paintWord (txtCINQUE, Yellow); strip.show (); } else if (modMin ==2) {paintWord (txtCINQUE, Green); strip.show (); } else if (modMin ==3) {paintWord (txtCINQUE, Blue); strip.show (); } else if (modMin ==4) {paintWord (txtCINQUE, Red); strip.show (); } descanso; caso 6:caso 18:paintWord (txtCINQUE, Off); strip.show (); if (modMin ==0) {paintWord (txtSEI, Blanco); strip.show (); } else if (modMin ==1) {paintWord (txtSEI, amarillo); strip.show (); } else if (modMin ==2) {paintWord (txtSEI, Green); strip.show (); } else if (modMin ==3) {paintWord (txtSEI, Blue); strip.show (); } else if (modMin ==4) {paintWord (txtSEI, Red); strip.show (); } descanso; caso 7:caso 19:paintWord (txtSEI, Off); strip.show (); if (modMin ==0) {paintWord (txtSETTE, Blanco); strip.show (); } else if (modMin ==1) {paintWord (txtSETTE, Amarillo); strip.show (); } else if (modMin ==2) {paintWord (txtSETTE, Green); strip.show (); } else if (modMin ==3) {paintWord (txtSETTE, Azul); strip.show (); } else if (modMin ==4) {paintWord (txtSETTE, Red); strip.show (); } descanso; caso 8:caso 20:paintWord (txtSETTE, Off); strip.show (); if (modMin ==0) {paintWord (txtOTTO, Blanco); strip.show (); } else if (modMin ==1) {paintWord (txtOTTO, amarillo); strip.show (); } else if (modMin ==2) {paintWord (txtOTTO, Green); strip.show (); } else if (modMin ==3) {paintWord (txtOTTO, Blue); strip.show (); } else if (modMin ==4) {paintWord (txtOTTO, Red); strip.show (); } descanso; caso 9:caso 21:paintWord (txtOTTO, Off); strip.show (); if (modMin ==0) {paintWord (txtNOVE, Blanco); strip.show (); } else if (modMin ==1) {paintWord (txtNOVE, Yellow); strip.show (); } else if (modMin ==2) {paintWord (txtNOVE, Green); strip.show (); } else if (modMin ==3) {paintWord (txtNOVE, Blue); strip.show (); } else if (modMin ==4) {paintWord (txtNOVE, Red); strip.show (); } descanso; caso 10:caso 22:paintWord (txtNOVE, Off); strip.show (); if (modMin ==0) {paintWord (txtDIECI, Blanco); strip.show (); } else if (modMin ==1) {paintWord (txtDIECI, amarillo); strip.show (); } else if (modMin ==2) {paintWord (txtDIECI, Green); strip.show (); } else if (modMin ==3) {paintWord (txtDIECI, Azul); strip.show (); } else if (modMin ==4) {paintWord (txtDIECI, rojo); strip.show (); } descanso; caso 11:caso 23:paintWord (txtDIECI, Off); strip.show (); if (modMin ==0) {paintWord (txtUNDICI, Blanco); strip.show (); } else if (modMin ==1) {paintWord (txtUNDICI, Yellow); strip.show (); } else if (modMin ==2) {paintWord (txtUNDICI, Green); strip.show (); } else if (modMin ==3) {paintWord (txtUNDICI, Blue); strip.show (); } else if (modMin ==4) {paintWord (txtUNDICI, Red); strip.show (); }descanso; }} void MinuteClock () {DateTime now =RTC.now (); int timeMin =ahora.minuto (); int modMin =timeMin% 5; // https://www.arduino.cc/en/Reference/Modulo switch (now.minute ()) {caso 5:caso 6:caso 7:caso 8:caso 9:if (modMin ==0) {paintWord (txtE, blanco); paintWord (txtMCINQUE, blanco); strip.show (); } else if (modMin ==1) {paintWord (txtE, amarillo); paintWord (txtMCINQUE, amarillo); strip.show (); } else if (modMin ==2) {paintWord (txtE, Green); paintWord (txtMCINQUE, verde); strip.show (); } else if (modMin ==3) {paintWord (txtE, Blue); paintWord (txtMCINQUE, azul); strip.show (); } else if (modMin ==4) {paintWord (txtE, Red); paintWord (txtMCINQUE, rojo); strip.show (); }descanso; caso 10:caso 11:caso 12:caso 13:caso 14:paintWord (txtMCINQUE, Off); strip.show (); if (modMin ==0) {paintWord (txtE, Blanco); paintWord (txtMDIECI, blanco); strip.show (); } else if (modMin ==1) {paintWord (txtE, amarillo); paintWord (txtMDIECI, amarillo); strip.show (); } else if (modMin ==2) {paintWord (txtE, Green); paintWord (txtMDIECI, verde); strip.show (); } else if (modMin ==3) {paintWord (txtE, Blue); paintWord (txtMDIECI, azul); strip.show (); } else if (modMin ==4) {paintWord (txtE, Red); paintWord (txtMDIECI, rojo); strip.show (); } descanso; caso 15:caso 16:caso 17:caso 18:caso 19:paintWord (txtMDIECI, Off); strip.show (); if (modMin ==0) {paintWord (txtE, Blanco); paintWord (txtQUINDICI, blanco); strip.show (); } else if (modMin ==1) {paintWord (txtE, amarillo); paintWord (txtQUINDICI, amarillo); strip.show (); } else if (modMin ==2) {paintWord (txtE, Green); paintWord (txtQUINDICI, verde); strip.show (); } else if (modMin ==3) {paintWord (txtE, Blue); paintWord (txtQUINDICI, azul); strip.show (); } else if (modMin ==4) {paintWord (txtE, Red); paintWord (txtQUINDICI, rojo); strip.show (); }descanso; caso 20:caso 21:caso 22:caso 23:caso 24:paintWord (txtQUINDICI, Off); strip.show (); if (modMin ==0) {paintWord (txtE, Blanco); paintWord (txtVENTI, blanco); strip.show (); } else if (modMin ==1) {paintWord (txtE, amarillo); paintWord (txtVENTI, amarillo); strip.show (); } else if (modMin ==2) {paintWord (txtE, Green); paintWord (txtVENTI, verde); strip.show (); } else if (modMin ==3) {paintWord (txtE, Blue); paintWord (txtVENTI, azul); strip.show (); } else if (modMin ==4) {paintWord (txtE, Red); paintWord (txtVENTI, rojo); strip.show (); }descanso; caso 25:caso 26:caso 27:caso 28:caso 29:if (modMin ==0) {paintWord (txtE, White); paintWord (txtVENTI, blanco); paintWord (txtMCINQUE, blanco); strip.show (); } else if (modMin ==1) {paintWord (txtE, amarillo); paintWord (txtVENTI, amarillo); paintWord (txtMCINQUE, amarillo); strip.show (); } else if (modMin ==2) {paintWord (txtE, Green); paintWord (txtVENTI, verde); paintWord (txtMCINQUE, Green); ... Este archivo ha sido truncado, descárguelo para ver su contenido completo. 
WordClock italiano

Piezas y carcasas personalizadas

wordklock_aWvuaZRw4N.svg

Esquemas

wordklock_JBoZPYrsYr.fzz

Proceso de manufactura

  1. Alerta de sed Alarma de planta
  2. Reloj de palabras simple (Arduino)
  3. Word Clock con resolución de tiempo mínima en palabras
  4. Medidor de kWh Sigfox
  5. Monitor de temperatura Bluetooth
  6. Bloqueo controlado por gestos
  7. El IC complementario
  8. Adaptador MIDI USB
  9. Una entrada analógica aislada para Arduino
  10. Visualizador de espectro de audio RGB de 32 bandas
  11. Mide tu tiempo de reacción