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

Relógio de Berlim

Componentes e suprimentos

Arduino UNO
× 1
Maxim Integrated max7219
Apenas o IC que é usado nas rupturas de matriz led ...
× 1
Relógio em tempo real (RTC)
× 1
LED de 5 mm:amarelo
× 13
LED de 5 mm:Vermelho
× 11
Resistor 10k ohm
× 1

Sobre este projeto


Em primeiro lugar...

Este é um copiar / colar de um tutorial que escrevi no site Instructables. Ainda preciso descobrir como vou de um site para outro. Então talvez isso não seja tão bom quanto deveria ser ... Mas, comece com um relógio não tão diário.





Introdução:Relógio de Berlim


O Relógio de Berlim, BerlinUhr ou Mengenlehreuhr, foi provavelmente o primeiro relógio digital.

Está lá desde 1975 ...

Você pode encontrar muitas informações aqui:https://en.wikipedia.org/wiki/Mengenlehreuhr

Como é feito, como você conta as horas?

Resumindo, existem quatro filas de luzes. A linha superior fornece as horas x 5, a próxima as "horas individuais" de 1 a 4. A terceira linha fornece os "minutos x5", a linha inferior, os minutos.

Na imagem mostrada, (na verdade uma lâmpada está quebrada ...) o tempo é:2x5 horas mais 3 horas + 6x5 minutos + 2 minutos.

Então são 13:32. OK, suponho que nós, europeus, estamos mais acostumados a dizer a hora em 24h. formato, o mesmo acontece com o relógio.

A maior luz no topo pisca a cada segundo.

Achei que esse relógio poderia ser divertido de fazer no Arduino.





Etapa 1:alguns eletrônicos


O que precisamos para este projeto?

Em primeiro lugar, (é claro), nosso Arduino.

Eu uso um dos meus Uno que estão por toda parte perto do meu computador.

Já que falamos sobre um relógio, podemos usar um RTC. Usei um barato com um DS 1307.

Para o "display", precisamos de alguns LEDs. Usei 13 amarelos, 5mm e 11 vermelhos. (Na verdade, usei RGB para os vermelhos, pois não havia vermelhos suficientes por aí ...)

Uma placa de ensaio, uma placa de impressão com apenas orifícios e "ilhas de solda". Acabei de usar uma parte do chamado "formato de cartão Euro".

2 resistores que usei. Um de 220 ohms (o LED de segundos) e outro de 68 k.

E um IC extra:MAX7219.

O MAX é um driver de display LED de 8 dígitos. Muitos de nós o conhecemos porque também é usado em matrizes de LED.

Para facilitar, também usei a biblioteca "LedControl" do Arduino. Se você ainda não o tem, pode baixá-lo aqui:

https://github.com/wayoda/LedControl





Etapa 2:configuração.


Você pode encontrar uma folha de dados muito boa para esse MAX 7219 neste lugar:

https://www.sparkfun.com/datasheets/Components/Gen ...
COM-09622-MAX7219-MAX7221.pdf
Não vou entrar nessa folha de dados mais adiante, mas vale a pena usá-la, é uma espécie de CI "divertido".

Um salto para o Arduino.

Nesse esquema, você vê uma construção muito simples:eu uso SDA e SCL para usar o relógio (A 1307 breakout) e mais quatro saídas:DataIn, Clock e Chipselect que vão para o MAX 7219, e OUT 13 que usamos para nosso LED de "segundos" piscando.





A maioria das coisas acontecem no Arduino:ele lê o relógio, converte-o para os diferentes tipos de saída e, em seguida, envia os dados para o 7219.

Quando você ler o código, verá que apenas uso minha própria língua, holandês, para isso. Por exemplo:o int "vijfuren" que utilizo é a variável que conta "Cinco horas", o mesmo para "vijfminuten" e "vijfminuten1":essas fornecem a saída "Cinco minutos".

No esboço, também uso o ano, mês, dia do mês e dia da semana, neste esboço em particular não preciso deles, mas talvez mais tarde, poderia adicionar um calendário a ele.

No layout Fritzing (c), o IC não é cabeado:fiz isso pela facilidade, pois tem muitas saídas.

Vamos resumir:



os pinos 4 e 9 são conectados ao GND,

19 é VCC

18, ISet, é conectado ao VCC com um resistor:este limita a corrente que vai para as saídas. Primeiro, tentei com um resistor de 20K, mas depois de 10 minutos ou mais, tudo escureceu ... Agora, com um resistor de 68K, o relógio ainda está funcionando (depois de mais de 24 horas). Mas há uma diferença entre o brilho do vermelho e do amarelo, acho que se deve ao fato dos vermelhos serem na verdade Leds RGB. Eu tenho que resolver isso ...

pino 1 é DataIn, este vem do Arduino, pino 12

pino 12 é carga, vindo do pino 10 do Arduino

o pino 13 é Clk, vindo do Arduino 11.

Até agora, para as entradas do 7219.

Dando uma olhada nas saídas:

O 7219 tem a possibilidade de alimentar 8 monitores de 7 seg.

Essas saídas, DIG 0 a DIG 4, são usadas aqui para acionar as "linhas" dos LEDs:como a linha "cinco minutos" tem 11 LEDs, eu uso DIG 1 e DIG 2 para acioná-los.

As outras saídas:Segmentos de A a G e DP (de um display 7Seg normal).

Neste caso (com LedControl), envio Palavras Binárias para eles (byteform, como B01010100).

E aí eu cometi um erro. Alguma lógica me disse que SEG A seria o MSB, B o segundo bit mais significativo e assim por diante, até DP, que eu pensei que seria o bit menos significativo (LSB). Errado ... Por um motivo ou outro, os fabricantes do IC pensaram que o DP seria o MSB. Não consigo ver a lógica disso ...

Isso me fez mudar minha codificação, pois já soldei os leds ...





Etapa 3:os LEDs


Neste esquema, você vê como os LEDs estão conectados entre si. Desenhei apenas os três primeiros, os outros seguem o mesmo caminho.



O LED de segundos é conectado diretamente ao Pino 13.

A imagem mostra "como funciona". São 17:47 ...

Ok, a linha inferior não é tão clara, está em uma placa de ensaio. Espero que você acredite em mim que realmente funciona. (faz!).

Oh, mais um passo para vir ...





Etapa 4:Etapa "por último", o Código.

  #include  #include  const int DS1307 =0x68; // A5 =SCL, A4 =SDA const char * days [] ={"Sunday", "Monday" , "Terça", "quarta-feira", "quinta-feira", "sexta-feira", "sábado"}; const char * meses [] ={"janeiro", "fevereiro", "março", "abril", "maio", "Junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"}; segundo byte =0; byte minuto =0; byte hora =0; byte dia da semana =0; byte mês dia =0; byte mês =0; byte ano =0; byte lastMinute =0; byte últimoSegundo =0; Led int =13; byte nul =B0000000; byte een =B01000000; byte twee =B01100000; byte drie =B01110000; byte vier =B01111000; byte vijf =B01111100; byte zes =B01111110; byte zeven =B01111111; byte acht =B11111111; byte negen =B01000000; byte tien =B01100000; byte elf =B01110000; Int a =0; int b =0; int c =0; int vijfMinTwee =0; int uitgang =LOW; / * o pino 12 está conectado ao DataIn o pino 11 está conectado ao CLK O pino 10 está conectado a LOAD * / LedControl lc =LedControl (12, 11, 10, 1); longo retardo não sinalizado =100; void setup () {Wire.begin (); Serial.begin (9600); pinMode (Led, OUTPUT); lc.shutdown (0, falso); / * Defina o brilho para valores médios * / lc.setIntensity (0, 8); / * e limpar a exibição * / lc.clearDisplay (0);} void loop () {readTime (); digitalWrite (Led, uitgang); if (segundo! =últimoSegundo) {if (uitgang ==LOW) uitgang =HIGH; else uitgang =LOW; digitalWrite (Led, uitgang); últimoSegundo =segundo; } if (minuto! =lastMinute) {printTime (); lastMinute =minuto;}} byte bcdToDec (byte val) {return ((val / 16 * 10) + (val% 16));} void printTime () {char buffer [3]; long minuten =minuto; long uren =hora; int vijfmin =minuten / 5; int eenminuut =minuten - (vijfmin * 5); int vijfuren =uren / 5; int eenuren =uren - (vijfuren * 5); a =vijfmin; digitaal (); vijfmin =b; vijfMinTwee =c; a =eenminuut; digitaal (); eenminuut =b; a =vijfuren; digitaal (); vijfuren =b; a =eenuren; digitaal (); eenuren =b; lc.setRow (0, 4, vijfuren); lc.setRow (0, 3, eenuren); lc.setRow (0, 1, vijfmin); lc.setRow (0, 2, vijfMinTwee); lc.setRow (0, 0, eenminuut);} void readTime () {Wire.beginTransmission (DS1307); Wire.write (byte (0)); Wire.endTransmission (); Wire.requestFrom (DS1307, 7); segundo =bcdToDec (Wire.read ()); minuto =bcdToDec (Wire.read ()); hora =bcdToDec (Wire.read ()); dia da semana =bcdToDec (Wire.read ()); monthday =bcdToDec (Wire.read ()); month =bcdToDec (Wire.read ()); ano =bcdToDec (Wire.read ()); } void digitaal () {switch (a) {case 0:b =nul; c =nul; pausa; caso 1:b =een; c =nul; pausa; caso 2:b =twee; c =nul; pausa; caso 3:b =drie; c =nul; pausa; caso 4:b =vier; c =nul; quebra; caso 5:b =vijf; c =nul; pausa; caso 6:b =zes; c =nul; pausa; caso 7:b =zeven; c =nul; pausa; caso 8:b =acht; c =nul; pausa; caso 9:b =acht; c =negen; pausa; caso 10:b =acht; c =tien; pausa; caso 11:b =acht; c =elfo; pausa; }}  





Muito simples, eu acredito.

Outro benefício desse esboço:agora você aprende a contar em holandês ... De 0 a 11 ...;-)

Espero que gostem!

Marc

Código

Github
https://github.com/wayoda/LedControlhttps://github.com/wayoda/LedControl

Processo de manufatura

  1. Equações da constante de tempo
  2. Relógio de cuco
  3. Ampulheta
  4. Assistir
  5. Python dormir()
  6. Rpibot - Sobre Aprendizado de Robótica
  7. Relógio de visão pov do Arduino
  8. Gerador de Relógio Verilog
  9. Python - Data e hora
  10. Relógio espelho infinito