Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Word Clock italiano

Componentes e suprimentos

Arduino Nano R3
× 1
NeoPixel strip
144
× 1
Adafruit LCD padrão - 16x2 branco em azul
com módulo I2C
× 1
Relógio em tempo real (RTC)
× 1
SparkFun Botão de pressão 12 mm
× 4
Resistor 10k ohm
× 3
Resistor 475 ohm
× 1
1N4007 - Alta tensão, diodo nominal de alta corrente
× 3
Conversor DC DC Step Down ajustável
× 1
Moldura de parede RIBBA (Ikea)
× 1
Tampa da caixa Gewiss 150 x 110
× 1
tiras de alumínio 230 mm x 10 mm x 1 mm
× 1

Sobre este projeto


Minha paixão por relógios Arduino, me levou a fazer um "Word Clock", já que moro na Itália, falava italiano. Para a realização do projeto, inspirei-me num tutorial “Word Clock Javelin”, fiz algumas pequenas alterações ... e aqui para vocês “Word Clock of Italy”!

Além de "contar o horário" em italiano, queria acrescentar os aniversários da minha família (incluindo o gato). Para a construção do “framework” utilizei um já feito pela IKEA, e as modificações internas utilizei o material que tinha em casa:



Para a realização da tela será mostrado o padrão desenhado com o Inkscape.

Meu painel mede 12 x 12 letras com uma pegada de 200 mm. Como não tenho impressora 3D, fiz a grade com tiras de alumínio, e isolei o contato do LED com a esponja adesiva, isso também serviu para isolar a luz.





Circuito eletrônico










Para manter o tempo, usei um RTC .

Para poder acertar a hora, adicionei botões (P1, P2, P3) e um display 16 x 2. (Veja também o projeto “Clock Set Date Time”). Como pode ser visto no diagrama de fiação, os botões são conectados ao Arduino por meio de um pull-down o circuito.

Como a tela serve apenas para ajustar o tempo, substituí o jumper por um botão , ao fazer isso, ele ilumina apenas para seu uso. O diodo D1 serve como proteção contra polaridade reversa.

O diodo D2 serve para não alimentar a tira de neopixel, quando, por algum motivo, temos que trocar o sketch do Arduino (muita corrente pode danificá-lo). O diodo D3 serve para trazer para 5 volts, a tensão em Neopixel.

Estou anexando o diagrama de circuito, o esquema de Fritzing, o layout do PCB.





Matriz








Para realizar a matriz conectei as várias faixas conforme a imagem. Ziguezagueando do canto superior esquerdo para descer.





Bibliotecas Arduino

  • RTC
  • LiquidCrystal_I2C
  • Adafruit_NeoPixel





Explicação do código


O código é dividido em 5 partes principais:
  • "DisplayDateTime":exibe a data e a hora no display LCD
  • "HourClock":exibe as horas no painel
  • "MinuteClock":exibe os minutos no painel
  • "Auguri":feliz aniversário
  • "Void paintWord (arrWord int [], uint32_t intColor)" é o coração do código para ligar o neopixel, "arrWord int []" são os LEDs que devem acender, "uint32_t intColor" é sua cor

Para obter um relógio mais preciso, adicionei os números 1, 2, 3, 4 correspondentes aos minutos progressivos.

Exemplo :“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)





Montagem



  • Abra a moldura e limpe bem o vidro
  • Impressão de inserção em acetato
  • Insira o papel de impressão
  • Insira a grade
  • Insira o painel com os LEDs
  • Cole um pedaço de madeira compensada, um pouco maior que a caixa de controle
  • Prenda com parafusos auto-roscantes a caixa de controle

Preste muita atenção ao alinhamento das duas impressões





Localização


Coloque na sala de estar atrás dela com bom aspecto.

Código

  • WordClock italiano
WordClock italiano Arduino
 / *:Projeto:WordClock:Autor:Tiziano Bianchettin:Data:25/09/2016:Revisão:1:Licença:Public Domainthanks to: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/ Meu professor de laboratório eletrônico "Perito Carli" * /// ************ bibliotecas ************** // # include  #include  #include  #include  // *********** neopixel ********* ******* // # define PIN 9 // pin neopixel # define NUM_LEDS 144 // 12 x 12 # define GIORNO 255 ​​// completo em # define SERA 25 // um décimo onAdafruit_NeoPixel strip =Adafruit_NeoPixel (NUM_LEDS, PIN , NEO_GRB + NEO_KHZ800); // 144 led, pino 9int intBrightness; // ***************** CORES *********** // uint32_t Red =strip.Color (255, 0, 0); uint32_t Verde =tira.Cor (0, 255, 0); uint32_t Azul =tira.Cor (0, 0, 255); uint32_t Branco =tira.Cor (255, 255, 255); uint32_t Amarelo =tira.Cor (255 , 255, 0); uint32_t Roxo =tira.Cor (60, 0, 255); uint32_t Desligado =tira.Cor (0, 0, 0); LiquidCrystal_I2C lcd (0x27,16,2); // Exibe I2C 16 x 2RTC_DS1307 RTC; int P1 =6; // Botão SET MENU'int P2 =7; // Botão + int P3 =8; // Botão -int oraagg; int minagg; int annoagg; int meseagg; int dayagg; int menu =0; int ora; // ******** Apresentação ********* // 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 aniversário ********* // 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,142,143, -1}; {126,127,128,129,130,131, -1}; configuração de vazio () {strip.begin (); strip.show (); lcd.begin (); lcd.backlight (); lcd.clear (); pinMode (P1, INPUT); pinMode (P2, INPUT); pinMode (P3, INPUT); Serial.begin (9600); Wire.begin (); RTC.begin (); if (! RTC.isrunning ()) {Serial.println ("RTC NÃO está em execução!"); // Define a data e hora no momento da compilação RTC.adjust (DateTime (__ DATE__, __TIME__)); } // RTC.adjust (DateTime (__ DATE__, __TIME__)); // removendo "//" para ajustar a hora // A exibição padrão mostra a data e a hora int menu =0;} void loop () {// verifique se você pressiona o botão SET e aumenta o índice do menu if (digitalRead ( P1)) {menu =menu + 1; } // em qual sub-rotina devemos ir? if (menu ==0) {DisplayDateTime (); // void DisplayDateTime DateTime now =RTC.now (); if ((now.hour ()> =19) || (now.hour () <7)) {// ajusta o brilho dia - noite intBrightness =SERA; } else {intBrightness =GIORNO; } strip.setBrightness (intBrightness); strip.show (); int timeMin =now.minute (); int modMin =timeMin% 5; // https://www.arduino.cc/en/Reference/Modulo if (modMin ==0) {// a cada minuto os LEDs mudam de cor e acendem o número correspondente paintWord (txtSONO, White); paintWord (txtMQUATTRO, OFF); } else if (modMin ==1) {paintWord (txtSONO, amarelo); paintWord (txtMUNO, vermelho); } else if (modMin ==2) {paintWord (txtSONO, Green); paintWord (txtMUNO, Off); paintWord (txtMDUE, azul); } else if (modMin ==3) {paintWord (txtSONO, Blue); paintWord (txtMDUE, Off); paintWord (txtMTRE, verde); } else if (modMin ==4) {paintWord (txtSONO, vermelho); paintWord (txtMTRE, Off); paintWord (txtMQUATTRO, amarelo); } HourClock (); // void HourClock MinuteClock (); // void MinuteClock Auguri (); // vazio Auguri strip.show (); } if (menu ==1) {DisplaySetHour (); } if (menu ==2) {DisplaySetMinute (); } if (menu ==3) {DisplaySetYear (); } if (menu ==4) {DisplaySetMonth (); } if (menu ==5) {DisplaySetDay (); } if (menu ==6) {StoreAgg (); atraso (500); menu =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 vermelho, byte verde, byte azul) {#ifdef ADAFRUIT_NEOPIXEL_H // NeoPixel strip.setPixelColor (Pixel, strip.Color (red, green, blue)); #endif #ifndef ADAFRUIT_NEOPIXEL_H // leds FastLED [Pixel] .r =vermelho; leds [Pixel] .g =verde; leds [Pixel] .b =azul; #endif} void setAll (byte vermelho, byte verde, byte azul) {for (int i =0; i  =40) {// a partir dos 40 minutos, adicione 1 a "hora" ora =ora + 1; } switch (ora) {case 0:case 12:case 24:paintWord (txtUNDICI, Off); strip.show (); if (modMin ==0) {paintWord (txtDODOCI, branco); strip.show (); } else if (modMin ==1) {paintWord (txtDODOCI, Yellow); 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 (); } pausa; caso 1:caso 13:paintWord (txtDODOCI, Off); strip.show (); if (modMin ==0) {paintWord (txtUNA, branco); strip.show (); } else if (modMin ==1) {paintWord (txtUNA, amarelo); 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, vermelho); strip.show (); } pausa; caso 2:caso 14:paintWord (txtUNA, Off); strip.show (); if (modMin ==0) {paintWord (txtDUE, branco); 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 (); }pausa; caso 3:caso 15:paintWord (txtDUE, Off); strip.show (); if (modMin ==0) {paintWord (txtTRE, branco); strip.show (); } else if (modMin ==1) {paintWord (txtTRE, amarelo); 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, vermelho); strip.show (); } pausa; caso 4:caso 16:paintWord (txtTRE, Off); strip.show (); if (modMin ==0) {paintWord (txtQUATTRO, branco); strip.show (); } else if (modMin ==1) {paintWord (txtQUATTRO, amarelo); strip.show (); } else if (modMin ==2) {paintWord (txtQUATTRO, Green); strip.show (); } else if (modMin ==3) {paintWord (txtQUATTRO, Blue); strip.show (); } else if (modMin ==4) {paintWord (txtQUATTRO, vermelho); strip.show (); } pausa; caso 5:caso 17:paintWord (txtQUATTRO, Off); strip.show (); if (modMin ==0) {paintWord (txtCINQUE, branco); 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 (); } pausa; caso 6:caso 18:paintWord (txtCINQUE, Off); strip.show (); if (modMin ==0) {paintWord (txtSEI, branco); strip.show (); } else if (modMin ==1) {paintWord (txtSEI, Yellow); 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 (); } pausa; caso 7:caso 19:paintWord (txtSEI, Off); strip.show (); if (modMin ==0) {paintWord (txtSETTE, branco); strip.show (); } else if (modMin ==1) {paintWord (txtSETTE, Yellow); strip.show (); } else if (modMin ==2) {paintWord (txtSETTE, Green); strip.show (); } else if (modMin ==3) {paintWord (txtSETTE, Blue); strip.show (); } else if (modMin ==4) {paintWord (txtSETTE, Red); strip.show (); } pausa; caso 8:caso 20:paintWord (txtSETTE, Off); strip.show (); if (modMin ==0) {paintWord (txtOTTO, branco); strip.show (); } else if (modMin ==1) {paintWord (txtOTTO, amarelo); 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 (); } pausa; caso 9:caso 21:paintWord (txtOTTO, Off); strip.show (); if (modMin ==0) {paintWord (txtNOVE, branco); 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 (); } pausa; caso 10:caso 22:paintWord (txtNOVE, Off); strip.show (); if (modMin ==0) {paintWord (txtDIECI, branco); strip.show (); } else if (modMin ==1) {paintWord (txtDIECI, Yellow); strip.show (); } else if (modMin ==2) {paintWord (txtDIECI, Green); strip.show (); } else if (modMin ==3) {paintWord (txtDIECI, Blue); strip.show (); } else if (modMin ==4) {paintWord (txtDIECI, vermelho); strip.show (); } pausa; caso 11:caso 23:paintWord (txtDIECI, Off); strip.show (); if (modMin ==0) {paintWord (txtUNDICI, branco); 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(); }break; }}void MinuteClock(){ DateTime now =RTC.now(); int timeMin =now.minute(); int modMin =timeMin % 5; // https://www.arduino.cc/en/Reference/Modulo switch (now.minute()) { case 5:case 6:case 7:case 8:case 9:if ( modMin ==0){ paintWord(txtE, White); paintWord(txtMCINQUE, White); strip.show(); } else if ( modMin ==1){ paintWord(txtE, Yellow); paintWord(txtMCINQUE, Yellow); strip.show(); } else if ( modMin ==2){ paintWord(txtE, Green); paintWord(txtMCINQUE, Green); strip.show(); } else if ( modMin ==3){ paintWord(txtE, Blue); paintWord(txtMCINQUE, Blue); strip.show(); } else if ( modMin ==4){ paintWord(txtE, Red); paintWord(txtMCINQUE, Red); strip.show(); }break; case 10:case 11:case 12:case 13:case 14:paintWord(txtMCINQUE, Off); strip.show(); if ( modMin ==0){ paintWord(txtE, White); paintWord(txtMDIECI, White); strip.show(); } else if ( modMin ==1){ paintWord(txtE, Yellow); paintWord(txtMDIECI, Yellow); strip.show(); } else if ( modMin ==2){ paintWord(txtE, Green); paintWord(txtMDIECI, Green); strip.show(); } else if ( modMin ==3){ paintWord(txtE, Blue); paintWord(txtMDIECI, Blue); strip.show(); } else if ( modMin ==4){ paintWord(txtE, Red); paintWord(txtMDIECI, Red); strip.show(); } pausa; case 15:case 16:case 17:case 18:case 19:paintWord(txtMDIECI, Off); strip.show(); if ( modMin ==0){ paintWord(txtE, White); paintWord(txtQUINDICI, White); strip.show(); } else if ( modMin ==1){ paintWord(txtE, Yellow); paintWord(txtQUINDICI, Yellow); strip.show(); } else if ( modMin ==2){ paintWord(txtE, Green); paintWord(txtQUINDICI, Green); strip.show(); } else if ( modMin ==3){ paintWord(txtE, Blue); paintWord(txtQUINDICI, Blue); strip.show(); } else if ( modMin ==4){ paintWord(txtE, Red); paintWord(txtQUINDICI, Red); strip.show(); }break; case 20:case 21:case 22:case 23:case 24:paintWord(txtQUINDICI, Off); strip.show(); if ( modMin ==0){ paintWord(txtE, White); paintWord(txtVENTI, White); strip.show(); } else if ( modMin ==1){ paintWord(txtE, Yellow); paintWord(txtVENTI, Yellow); strip.show(); } else if ( modMin ==2){ paintWord(txtE, Green); paintWord(txtVENTI, Green); strip.show(); } else if ( modMin ==3){ paintWord(txtE, Blue); paintWord(txtVENTI, Blue); strip.show(); } else if ( modMin ==4){ paintWord(txtE, Red); paintWord(txtVENTI, Red); strip.show(); }break; case 25:case 26:case 27:case 28:case 29:if ( modMin ==0){ paintWord(txtE, White); paintWord(txtVENTI, White); paintWord(txtMCINQUE, White); strip.show(); } else if ( modMin ==1){ paintWord(txtE, Yellow); paintWord(txtVENTI, Yellow); paintWord(txtMCINQUE, Yellow); strip.show(); } else if ( modMin ==2){ paintWord(txtE, Green); paintWord(txtVENTI, Green); paintWord(txtMCINQUE, Green);...This file has been truncated, please download it to see its full contents.
Italian WordClock

Peças personalizadas e gabinetes

wordklock_aWvuaZRw4N.svg

Esquemas

wordklock_JBoZPYrsYr.fzz

Processo de manufatura

  1. Alarme de planta de alerta de sede
  2. Simple Word Clock (Arduino)
  3. Word Clock com resolução de minutos em palavras
  4. Medidor Sigfox kWh
  5. Monitor de temperatura Bluetooth
  6. Bloqueio controlado por gestos
  7. O Companion IC
  8. Adaptador USB MIDI
  9. Uma entrada analógica isolada para Arduino
  10. Meça seu tempo de reação