Relógio de ponto, XP


Relógio de ponto

descrição

Como de um discussão por Oriolo20, membro do fórum, Eu desenvolvi esse projeto, se quisermos chamar assim. Na verdade, não é realmente um projeto completo, mas apenas a prova de um experimento que deseja demonstrar um programa escrito..
Eu o chamei XP, o que significa eXperimental Project…. De fato, note-se que não é uma edição definitiva, mas apenas para provar o funcionamento de todos os programas e outros materiais utilizados. Em particular, eu pude notar a frequência ideal para manter os LEDs brancos acesos sem perceber a oscilação.

O desenvolvimento é baseado em um esboço que deve gerenciar uma matriz de elementos. No meu caso, eu preferi montar LEDs brancos simples. No entanto, o esboço é orientado a gerenciar sem alterações também os tubos nixie com diferenças.

Em parte para uma supervisão e em parte porque achei mais barato, Montei um decodificador 1 em 10 como o CD4028. De fato, minha supervisão montei os cátodos comuns, em vez dos ânodos que devem conduzir o nixie.

Devo dizer que o esboço não é portátil em outros modelos do Arduino que não montam o ATmega328p. De fato, este esboço trata diretamente dos registros do microcontrolador.

A unidade montada pode funcionar se alimentada pela conexão USB que mostra o monitor serial, mas exclui outras conexões nos pinos D0 e D1, ou com um distribuidor de energia que eu montei.
Havia uma atenção particular de que as linhas de energia eram muito seguras e até múltiplas, como os fios do jumper não são muito capazes e os contatos do conector também podem criar resistências ou contatos falsos.
Uma observação para resolver o problema de conexões que desapareceram. Eu descobri que “saltador” eles não são muito confiáveis ​​e condutores de cobre estanhado. para facilmente.

 

Esquema

Noto os dois conectores que prevêem a expansão da comunicação com as fontes de informação necessárias para manter o cronograma pontual. Pensei em montar jumpers no momento em que você deseja programar ou editar o esboço do Arduino.

Outro desenvolvimento que fiz também para o programa em um módulo ESP-01 que se comunica através do barramento I2C e envia o tempo gasto em um modulo DS3231 e sincronizado via WiFi com um servidor NTP.
Não consegui me comunicar via UART, mas acho melhor no I2C.

Como você pode ver, ele também está conectado à linha serial do Arduino. Para que você possa enviar fontes de tempo adicionais através dessa fonte. O pacote que preparei inclui um exemplo de um esboço que espera dados da série no formato predeterminado. Para poder obter informações de um GPS ou outro, esse anexo deve ser expandido para converter os dados recebidos no formato que explico abaixo.

o formato deve consistir em 6 byte, mas o buffer faz 8. Esses seis bytes descrevem a hora e a data

HH:MILÍMETROS:SS por uma hora e GG:em:AA para a data. Os outros 2 bytes podem ser usados ​​para desenvolvimentos futuros que podem conter os milissegundos de diferença que os dados trafegam. No entanto, isso não está incluído no momento.

Programa

O programa é comentado em inglês. Para quem não está acostumado, Eu poderia fazer uma cópia traduzida, enquanto minha ambição seria poder divulgá-lo mesmo para quem não conhece o italiano também, porque é racional que ele seja escrito internacionalmente.

Na primeira parte, como é meu costume, várias definições são coletadas (definir) que determinam como o esboço pode ser compilado conforme necessário.

  • Para a linha 32, o endereço do Arduino é definido no barramento I2C como um escravo, que no caso pode ser alterado.
  • Para a linha 33, existe o período de atualização da matriz em milissegundos. Eu acho que não é possível aumentar ainda mais, a menos que você altere o parâmetro prescaler do timer 1. Ou mude para o uso da biblioteca TimerOne.
  • Para a linha 38, você pode escolher alguns níveis de depuração, variando de 0 uma 4. Neste método, você pode usar as informações seriais e uma tela de cristal líquido. O dispositivo de cristal líquido possui uma interface serial paralela com 74HC595 integrado. Por esse motivo, você pode escolher entre usar o método Arduino SPI ou ShiftOut.
    Devo dizer que não tive muito tempo para verificar completamente esta fase. Modifiquei as bibliotecas para o modelo de interface que usei, como visto no diagrama. Para isso, eu os unifiquei para usar o mesmo tipo de adaptador serial.
  • Para a linha 39, é esperado se as informações seriais forem endereçadas a um terminal que aceite caracteres de escape ANSI ou se for uma interface serial simples.
  • Para a linha 41, existe o valor de segurança que a hora que você deseja alterar não está de volta no tempo.

Em relação à escolha das conexões do visor de cristal líquido, também implica uma variação para onde você deseja conectar o decodificador 1 em 10. Obviamente, se você deseja um LCD nas saídas D8 ~ D11 (usando SPI), não será possível conectar o decodificador a partir dessa porta, portanto, no programa, as saídas A0 ~ A3 são escolhidas.

Vice-versa, se você quiser o decodificador nas saídas D8 ~ D11, então o display será conectado às saídas A0 ~ A2, mas com a possibilidade de poder escolher outras saídas livres.

O programa é bastante simplificado e espera-se que também possamos adicionar o gerenciamento de outras fontes, onde você pode dedicar um tempo à precisão de um segundo sem correr o risco de perder segundos.

Peças de suporte

o o restante do projeto planeja fornecer as fontes do tempo exato. Para isso, implementei um gerenciamento via micropython (MP, abaixo) instalado no ESP-01.

Explico que a opção de usar o MP foi do fato de que o firmware fornecido com a compra não se mostrou suficientemente estável.

Talvez também devido ao fato de o módulo ter sido montado precariamente em uma placa de ensaio. Em vez disso, deve-se tomar cuidado para que os contatos sejam seguros e permitam os picos atuais que o ESP exige durante a fase de conexão com o roteador. Para isso, montei em uma placa millefori com os acessórios necessários para poder reprogramar o módulo.

Também montei um adaptador de nível para o barramento I2C. Talvez não fosse estritamente necessário, mas entre os muitos testes, Eu não conseguia entender por que o Arduino não recebeu os sinais enviados a ele.

Mas esse circuito é de uma simplicidade alarmante e eu o fiz em alguns minutos. Dado que do lado 5 volts Não coloquei os resistores pull-up porque eles já estão presentes no módulo RTC.

outros testes que eu coloquei no lugar era conectar meu SBC (Tinker Board) para enviar os dados do horário. Tudo funciona muito elegantemente. Se você estiver interessado, poderá encontrar o script python para carregar para executar. Eu tentei com uma instalação Armbian, por que a tentativa com o Archlinuxarm não consegue encontrar o barramento corretamente.
Sobre esses SBCs, não é difícil testar a conexão e enviar os dados. No pacote, há também um script python que pode ser usado com um Raspberry ou computador que pode ser conectado ao barramento I2C.
O comando deve ser enviado com privilégios de administrador, pois ele deve acessar o hardware do barramento I2C, este será um comando como:

sudo ./sendtime02.py 60 europe.pool.ntp.org

Você pode excluir os dois parâmetros após o nome, então os valores padrão serão usados. Esses dois parâmetros definem a pausa entre uma consulta e outra no servidor NTP. Enquanto o segundo parâmetro define a qual servidor conectar-se.

O pacote é disponível no meu disco.
Se houver outras informações necessárias ou anotações, Ficarei feliz em poder dar uma opinião

Se você estiver interessado, eu também fiz uma pequeno vídeo demonstração.

0 respostas

Deixe uma resposta

Quer juntar-se a discussão?
Sinta-se livre para contribuir!

Deixe uma resposta