Um fio para um relógio
UMA LINHA PARA UM RELÓGIO
Aqui estou depois de uma ausência discreta, riproporvi para outro relógio digital: mas agora todo mundo sabe…o meu é uma mania… ou talvez eu não faço nada.
Venha é nascido este relógio ?… mesmo em março girovando a web à procura de algum dispositivo para tentar e experimentar I encontrado em um determinado Futura_Elettronica website levou: semelhante em todos os aspectos, a um LED RGB (quattro pino R,G,B,ânodo / cátodo) mas não foi um LED RGB. Apesar de ter 4 pernas canônicos é na verdade um LED WS212. Parece que este:

Os pés são sempre 4 mas com diferentes definições: ou data_in, VCC,GND,data_out. Um grampo sobre um lado do LED identifica o pino data_out. 5V. o formato de LED: 5milímetros.
A curiosidade matou o gato (famoso ditado….) e assim eu fiz uma primeira ordem 20 levou a experimentar e a testar. Eu disse que foi levado WS2812: ou usar uma série protocolo específico administrado por bibliotecas ADAFRUIT_NEOPIXEL. Não é fácil para descrever este protocolo: praticamente uma sequência de 24 pouco (8 para cada cor) enviou luzes LED em série com a cor definida para o LED R, para o G e B para o LED de acordo com este (ws2812.pdf fonte).

Claro que existem prazos a serem cumpridos, mas não se preocupe muito, porque todo o trabalho de gestão é confiada à biblioteca. A característica especial destes LEDs é dada pelo tipo de conexão: cada LED é ligado em cascata com o anterior, formando assim uma virtualmente sem limites cadeia específica: na verdade, para fazer este relógio eu usei bem 112 conduziu.
Aqui, então, visualizar o resultado final:

tem misericórdia: Eles são um verdadeiro deslizamento de terra em DIY e desta vez eu também passou: Não foi fácil, e apenas esses dias eu, basicamente, correu para fora do teste.
FINAL MAKING:
Antes de atingir o chão Eu realizado um estudo de viabilidade (Hoje está na moda) para decidir como conectar esses LEDs, que o uso RTC, como atualizar os valores de tempo, como atribuir as cores e brilho que pode ser aceitável para a visibilidade e, especialmente, como um alimento de todos, considerando a presença de bem 112 conduziu. Este problema de alimentação e total absorção me custou muito tempo: Eu não quero correr o risco de ser sem fonte de alimentação adequada: a partir de fontes web cada um desses LEDs deve absorver bem 20mA para cada cor. Assim, para um levou à cor branca tem de estar ligado três LEDs com um total de absorção 60. Mas, em seguida, detecta um falso problema, porque este relógio nunca será ativado toda 112 conduziu. Mas, precisamente para evitar inconvenientes preparamos alguns PCB com uma série de LEDs ligados em série com.
De acordo com alguns testes realizados com um aparelho de teste habitual em fluxo 200mA é detectado são as seguintes medidas: (O valor de brilho = 25 e segundo funções da biblioteca é um valor baixo).
Corrente com um LED: levou off: 07,7mamãe; Lit vermelho: 08,6mamãe; idem verde e azul; bianco 10,3ma; roxa: 09,4; amarelo: 09,4.
Corrente com 2 conduziu: desligada: 15,3; Lit vermelho 1: 16,1mamãe; idem verde e azul; 17,8ma branco; roxo 16,9ma / amarelo; Lit vermelho 1+2: 16,9mamãe: ditto com verde e azul. Bianco 20,3ma; roxo / amarelo 18,6.
Corrente com 3 conduziu: desligada: 15,7; Lit vermelho 1: 16,6; verde, blu ir; Lit vermelho 1+2: 17,4; verde, blu ir; branco 20,8; púrpura / vermelho amarelo 19,1ma.Acceso 1+2+3: 18,4; idem verde e azul; 23,6ma branco; roxo 21 / amarelo.
Corrente com 4 conduziu: desligada: 16,2 mamãe; Lit vermelho 1: 17,1; idem verde e azul; branco 18,8; 18 roxo / amarelo; Lit vermelho 1+2: 17,9 mamãe; verde e azul 18,0 mamãe; branco 21,4; roxo / amarelo 19,6; o login vermelho 1+2+3: 18,8mamãe; idem verde e azul; branco 24,2; roxo 21,5ma / amarelo; Lit vermelho 1+2+3+4: 19,8 m; idem verde e azul; branco 26,7; roxo / amarelo 23,3.
Você pode notar que as cores básicas (rosso, verde, blu) sempre têm os mesmos valores, bem como amarelo e roxo. A excepção é dada pela cor branca. A partir de testes realizados com uma amostra de 12 levou e tirar proveito de uma fonte de alimentação separada (1A uma carregador de bateria com energia e, em seguida, separado a partir do micro) você pode encontrar os seguintes valores: (valores medidos com um medidor de comum com a escala total a 200mA).
Valor brilho (como funções Neopixel) = 25
Todos os LEDs off: ~ 34,3 / 35mA,
12 LED vermelho aceso, verde, blu –> 41,9/42,0;
12 LED brilhante amarelo / rosa: –> 51/51,2;
12 cor branca brilhante LED: –> 49,8/49,9
testes com 16 conduziu: off 40º. Vermelho / Verde / Azul 16 49 lit / 50mA;
Com estes valores e arriscar uma hipótese, a absorção total de um mostrador de 28 LEDs deve estar entre 100 e i 150mA. E, em teoria, o conjunto de 4 quadrantes deve ser em torno 400/600 mA. Mas continua a ser um estado teoria da arte ter realizado testes com apenas 16 conduziu.
O resultado final, após esses testes e após a completa realização é que o relógio com um carregador de bateria para celulares (5V,1UMA) tudo funciona de forma constante: o fornecimento de energia após 24 horas de operação contínua permaneceu “FRIO“. No entanto, optei por uma fonte de alimentação específica de 5V,2A fim de ter uma tensão estável a 5V (as baterias de regime de carga tem uma queda de tensão de 0,5 V de tensão quase) e também depois 24 horas manteve- “FRIO“.
Outra peculiaridade que manter em mente: quando o sistema de energia (independentemente do número de LED conectado) todos os LEDs iluminam o máximo de seu brilho e, em seguida, você pode crare um pico de absorção. Deve, portanto, ser fornecida para a interrupção total (via software) inicialização do sistema pós imediato.
Vamos começar com as especificações do projeto finais:
- exibição Quattro (Vou chamar mostradores), para exibir a hora e minuto. Cada quadrante é formada na imagem e semelhança de um visor 7 segmentos: cada segmento está 4 conduziu. Escolha devido a um compromisso entre custo e oneração.
- Dois LEDs com intermitente alternada na base do segundo valor
- RTC DS3231 considerado DS1307 mais estável e precisa
- um podão Analógico para lidar com até 8 níveis de brilho, mesmo editável quente
- um dip_switch uma 8 posições para escolher até 4 cores para cada quadrante editável quente (dois interruptores para cada quadrante).
- Botões para definir a hora e minuto a inicialização se necessário.
- Dois botões para inicialização do sistema e redefinição.
Dadas estas especificações, o hardware utilizado é o seguinte:
- Micro Arduinio Nano escolhido para o seu tamanho e já tem tudo que você precisa: USB para conectar e carregar o software, Power over USB.
- RTC DS3231 como um dispositivo para manter os valores do tempo e data
- PCF8574 8 I2C exapander bit. Este dispositivo permite-me poupar para 8 pin Arduino. Ele é usado para ler os valores definidos na Dip_Swtich.
Agora vamos ver alguns diagramas de circuitos do projeto:
conexão típica dos LEDs:
Este diagrama mostra (parcialmente) como eles estão conectados aos LEDs: cada grupo de 4 forma um segmento do mostrador: em seguida 7 segmentos são formados pela 28 Total liderado. Cada um desses LEDs está ligado em série para a próxima. Será o software selecionar adequadamente qual grupo 4 conduziu (e, em seguida, um segmento) ligar ou desligar. Na entrada do primeiro LED está ligado por um resistor 470 ohm. (como recitar os textos sagrados). Cada quadrante é o grupo em seu próprio direito: a liberação de LED NÃO Ele é conectado com a entrada do primeiro LED do próximo quadrante: há uma razão específica. Durante os testes, notei que esses LEDs são delicadas e aconteceu um “falso“. E’ claro que todo o ser em série é suficiente que a pessoa só tem algum problema para afetar toda a cadeia posterior. Para evitar este tipo de problemas, decidi gerenciar individualmente (as licenças de biblioteca) Eu 4 quadrantes. O resultado é apenas uma complicação programático na escolha de qual usar discagem.
dispositivos de conexão:
Neste esquema que mostra como eles têm sido associados tanto com o pcf8574 que’RTC Ds3231. Na verdade este é um esquema exemplar em que tanto o RTC que foram usadas para os dispositivos PCF já pré-montados: dispositivos são fáceis de instalar e usar o protocolo I2C. No esquema que também foi fornecido um novo PCF8574 para exibir os segundos no modo binário usando 7 pouco. A fim de não complicar ainda mais o sistema de I preferido, em seguida, usar 2 conduzido com piscar alternativo. No diagrama as conexões escolhas também são visíveis para o pino Arduino que conectam botões e aparadores.
PCB de cada quadrante:

Este é o PCB final, válida para cada quadrante. Eu tinha feito um menor, mas na prática, com 5mm LED provou conexão problemática como muito juntos. Infelizmente, como você pode ver na primeira foto abrangente do projeto, exatidão não brilha.
LAYOUT DE cada quadrante:
A título de exemplificação cada quadrante tem a seguinte disposição e lógica numeração de cada LED que compõe. O entalhe de cada LED identifica o data_out pin

o PCB painel de controle:

Este painel casas: o aparador para ajustar o brilho, Eu 2 botões para atualizar-se valores e MINUTOS, o sistema botão START, o botão RESET, a ponte que, dependendo de como ele está configurado permite actualizar mais ou menos valores de tempo e minutos, quando eles têm que ser atualizados, Finalmente, a caixa do dip_swtich para a mudança de cores para quadrantes.
PCB PRINCIPAL:

Este é o PCB definida “A PRINCIPAL” pois abriga o micro Arduino_Nano, os diversos suportes para dispositivos I2C e o painel de controle. E’ Também tem sido fornecida uma entrada separada para alimentar os quadrantes (esperado, mas depois não utilizados). A Micro USB fornece energia para o resto do circuito.
PCB BUS_QUADRI e LED_SECONDS
Estes dois últimos são suporte PCB: BUS_QUADRI Ele permite a conexão de 4 quadrantes em relação à PCB A PRINCIPAL com o sinal de entrada e a alimentação de cada. LED_SECONDS aloja os dois LEDs deve produzir-se à taxa de uma segunda. Este PCB está localizado a três horas dois dos mostradores e os dois minutos; a fonte de alimentação e do sinal são ligados ao terminal BUS_QUADRI.


CONSTRUÇÃO RELÓGIO
Na foto abaixo você pode ver como o alojamento dos quadrantes foi construído:

Com uma armação de 28 centímetros com base e laterais de plexiglass de madeira que foram colados à 4 quadrantes como fotos: os dois LEDs no centro de segundos e à direita do PCB BUS_QUADRI para conexões com o principal. Dado que os LEDs também o brilho mínimo ainda são muito brilhantes, para evitar que o brilho dos LEDs individuais pode cobrir o lado direito e esquerdo, cada quadrante é “coberto” uma máscara preta (plastificado) para destacar os segmentos individuais. Cada segmento foi envolvida com uma banda de cartão preto. Veja como Presena “nu”.:

Com este sistema você ter uma boa vista “separado” o relógio inteiro sem que o brilho de uma marcação não interfere com as laterais. (Lembre-se que a cor vermelha,Verde, Azul no entanto, eles têm um brilho diferente um do outro).
O CORAÇÃO DO SISTEMA:
No quadro abaixo da imagem do painel de controlo que fecha uma caixa de plexiglass onde está alojado o micro Arduino_Nano, E RTC PCF8574 e os conectores para com os mostradores. O painel consiste em aparador (10K) para ajustar o brilho, por botões para atualização hora do Minutos. no botão Iniciar e RESET, finalmente, a ponte para actualizar a valores positivos ou negativos do tempo. No lado direito os dipswitches e a matriz de resistores pull_up.

eu’ IMPLEMENTAÇÃO DO SOFTWARE
Se eu não complicar a vida não está satisfeito: gerenciar um relógio não é difícil se você realmente não é um iniciante. Eu poderia ter feito um esboço muito simples de limitar-me a leitura’ valores de decodificação RTC e a exposição nos mostradores.
Mas, desde então “apetite vem com o comer” Implementei um esboço envolvendo:
- gestão 4 disca através da biblioteca ADAFRUIT_NEOPIXEL.
- Gestão de’ RTC com a atualização dos valores quando necessário. (se comparado com o DS1307 é mais preciso, ocasionalmente ser atualizado se apenas para o horário de verão / inverno).
- Gestão do brilho para variar em uma faixa de 8 valores a partir de um mínimo a um limite máximo (mesmo que não é o máximo suportável) por uma máquina de cortar com mostrador analógico.
- O gerenciamento de cores de mostradores individuais: cada um pode ter uma cor diferente da anterior e a subsequente: através de um dipswitches você pode selecionar um dos 4 cores definidas: ROSSO, VERDE, BLU, ROSA. Escolhi essas cores porque eles são os únicos que “consomem menos energia”.
filosofia de gestão:
Como já indicado, para evitar problemas de conexão ou várias falhas, Eu decidi gerenciar 4 quadrantes individualmente (em seguida, basta 28 levou para discar). Eu, então, definido 4 instâncias da biblioteca ADAFRUIT_NEOPIXEL para obter a administração separada de cada quadrante. Isto resultou definitivamente uma complicação porque o esboço devem ser tomadas para gerir individualmente o ligar e desligar de mostradores individuais para as horas e os minutos.
Todos’ coloque o início do esboço após a inicialização da biblioteca devem ser feitas EMPRESA desligamento dos quadrantes individuais: estes acendem-se com cores aleatórias e brilho máximo. Para ligar necessidade de enviar cada cor cadeia ZERO: basicamente preto. Uma alternativa poderia ser a de trazer o brilho de zero =.
O esboço continua com o início do Protocolo FIO para a gestão de dispositivos I2C, lendo o DIP_SWITCH para determinar as cores, com o aparador para a leitura do brilho, em seguida, começa a ler de valores horários de’ RTC e executa sofreu uma exibição das horas e minutos em seus respectivos 4 quadrantes. Em seguida, ele aguarda a leitura de um dos botões do painel de controle. Se for pressionado o botão de hora atualiza o valor relativo mais ou menos, dependendo da posição do jumper “+/-“. Ele agora exibe o valor alterado. O mesmo acontece para os valores de minutos se o botão correspondente é pressionado. Pressionando o botão “COMEÇAR” dispara o ciclo final do esboço: se houve atualiza essas são recarregados em’ RTC. O ciclo perene lê a posição do trimmer para variar o brilho e as cores Dip_Swtich para efetuar mudanças no caso. Eles são lidos em seguida, os valores horários de’ RTC e só se realiza eles são exibição variada.
CESSÃO ARDUINO PIN:
A tabela abaixo deifinisce como foram atribuídos o pino Arduino:
|
PIN |
CESSÃO |
|
A0 |
aparador de entrada analógica para o brilho |
|
PIN 2 |
discagem DATAIN 1 |
|
PIN 3 |
discagem DATAIN 2 |
|
PIN 4 |
discagem DATAIN 3 |
|
PIN 5 |
discagem DATAIN 4 |
|
PIN 6 |
botão HORAS (Puxar para cima) |
|
PIN 7 |
MINUTOS botão (Puxar para cima) |
|
PIN 8 |
INÍCIO (Puxar para cima) |
|
PIN 9 |
Interruptor +/- (Puxar para cima) |
|
PIN 10 |
Piscando segundos LED |
|
PIN A4 |
SDA por RTC e DS3231 |
|
PIN A5 |
por SCL RTC e DS3231 |
O ADAFRUIT_NEOPIXEL BIBLIOTECA:
Downloads do site homônimo (Há duas versões de um atualizado e outro que trata NEO_PIXEL anel e matrizes Neo_Pixel) esta biblioteca com algumas funções podem lidar com um número quase ilimitado de LEDs WS2812. As principais funções podem ser resumidas como se segue:
Primeiro você precisa para instanciar o objeto com os seguintes parâmetros:
Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_RGB + NEO_KHZ800);
pomba: píxeis é o nome dado para a instância, NUMPIXELS o número de LED conectado (o primeiro da cadeia é identificado com o deslocamento “ZERO” e no total 28 por quadrante), PIN identifica o pino digital Arduino para ligar o primeiro data_in o diodo emissor de luz de cada cadeia. (Veja precednte mesa). NEO_RGB + NEO_KHZ800 Isto indica que a sequência de cores de LEDs são no formato de R-G-B e frequência em 800Hkz. Para alguns exemplos baixado o que for quase padrão. E’ possível instanciar vários objetos, dando a cada um nome diferente (obviamente). Essas definições devem ser inseridos na seção variável.
Na seção CONFIGURAÇÃO para cada instância deve inicializar a biblioteca: nome_istanza.begin(). No esboço, não são tão 4 destas frases.
As seguintes funções de realizar a gestão efectiva de cada instância (e a sua cadeia associada). O brilho é controlado com a função: nome_istanza.setBrightness(valor) e é aplicada a toda a cadeia dos LEDs.
A potência de cada corrente de LED (ricodiamoci são 28 cadeia) Ocorre que indica tanto a posição do LED (seu deslocamento a partir do zero) que a cor a ser atribuído. Segue-se que para cada cadeia de LED pode ser atribuída uma cor diferente. A função tem dois formatos:
instance_name.setPixelColor(Led_Offset,nome_istanza.Color(r,g,b)); com esta biblioteca é transferida para o código de cores de acordo com os valores definidos em R1, G1, B1 (dar o 255), em alternativa, o segundo formato define o código de cor direclty (32 bit sem sinal): nome_istanza.setPixelColor(Led_Offset,codice_colore).
No esboço é realizado um ciclo de 28 iterações para atribuir e, em seguida, ligar um segmento da cadeia dos LEDs de cada quadrante.
Tudo isso não levaria a qualquer resultado se não fosse realizada a função: nome_instanza.show(). Esta função deve ser sempre realizada, se quisermos ver os LEDs ligar ou desligar ou mudar o seu brilho.
Há uma reflexão a ser feito sobre o uso da última função: se se trata de ligar / desligar apenas um LED ou variar o brilho após a função específica, basta executar a função exposição() para executar o programado. mas será (neste caso) os LEDs para ser ligado / desligado são mais do que um pode ser utilizado de duas técnicas: no ciclo para realizar a função específica de ligar / desligar e, no fim do ciclo para executar a função de apresentação() ou durante o mesmo ciclo de execução abaixo mostram a função().
Aqui está um exemplo (trato ao esboço). A rotina que desliga os LEDs: NQ número da cadeia de 1 uma 4 como é a rotina inclui o Power Off para um quadrante ou todos (NQ = 0).
desligamento vazio(byte NQ)
{ int kl;
E se (NQ == 0 || NQ == 1)
{ para (kL = 0; em < NUMPIXELS; pm ++) QDR_DEC_ORE.setPixelColor(em,0);
QDR_DEC_ORE.show(); }
Neste caso, a função show de() é realizada no final do loop for.
Neste exemplo, o lumimosità só é alterado se após a função show é executado():
QDR_DEC_ORE.setBrightness(Lumen_Value);
QDR_DEC_ORE.show();
Outra função da biblioteca detecta a cor atribuída a LED: retorna o código de cor no formato 32 bit sem sinal: nome_istanza.getPixelColor(Led_Offset).
CONCLUSÃO:
Espero ter suficientemente explicado este projecto de março a agora ocupado o pouco tempo livre. Eu normalmente não dedicar mais do que 2 horas para este passatempo: Tenho alguma experiência em programação por isso é difícil ter problemas de programação. Estou pensando em um projeto upgrandig: também introduzir a indicação da temperatura visto que o DS3231 também abriga o sensor e a alteração aleatória das cores. Vamos ver….
Agradeço a todos de qualquer maneira ElettroAmici para o tempo que passaram ler este artigo. Eu sei que estou repetindo…..este é mais um relógio. Em qualquer caso, eles estão disponíveis para aqueles que desejam documentação ou outra sobre este projeto.
obrigado
Gvsoft Gugno 2019
gvsoft75@hotmail.com



Excelente como agora você se acostumaram.
Eu adicionei para o seu artigo à medida que expandem um pouco diagramas embora muito não é possível visualizar a baixa resolução das próprias imagens, melhor do que nada o fará
obrigado, Amilcare, embora com um atraso considerável, mas eu tinha algum problema de saúde que devem ser resolvidos segunda-feira 15 cm.
Eu queria comentar, mas, obviamente, eu não posso comentar sobre o meu artigo. Então eu aproveitar esta oportunidade nesta resposta para fornecer algumas sugestões para aqueles que possam estar interessados em usar esses LEDs. Proporcionar uma boa fonte de alimentação de 5V ou 3V de almento 2A. Coloque um capacitor 1000 uf saída da fonte de alimentação. Verificar um por um todos os LEDs de usar: Eu tinha uma pequena PCB para tentar cadeia Uina 8 levou a descobrir que de algum LED “falso” e aqueles que o seguem “louco”. Se você não tem a chance de fazer um bom teste PCB profissional acompanha especialmente um que se conecta com DIN DOUT. No final da cadeia (ou início) inserir um consensatore cerâmica (código 104). Tenha em mente que, no momento da alimentação no sistema, todos os LEDs acendem-se no brilho máximo geralmente de cor azul e algum branco: isto implica um pico de consumo de energia. Então a primeira coisa a fazer depois da função começar() É desligado da cadeia com a função de apresentação() ou com um loop que envia para cada cor preta LED (rgb: 0,0,0).
Não há limitações para o número de LEDs na cadeia, mamãe, como você pode ser visto no artigo, Eu 112 LEDs são geridos por 4 diferentes cadeias. Isto implica uma complicação na programação, mas pode simplificar e melhor resolver algumas avarias: neste caso, o primeiro quadrante (dezenas de horas) depois de algum tempo começou a dar problemas e eu tive que fazer um novo: Havia provavelmente uma liderada “falso” Mas quando ele queria !!!!.
Obrigado novamente Amilcare