Índice:

Relógio de precisão: 3 etapas
Relógio de precisão: 3 etapas

Vídeo: Relógio de precisão: 3 etapas

Vídeo: Relógio de precisão: 3 etapas
Vídeo: Apple Watch Series 3 [Review/Análise] 2024, Julho
Anonim
Relógio de Precisão
Relógio de Precisão

Todos nós precisamos de relógios, então por que não fazer o seu próprio neste instrutível? Vou mostrar a você como fazer um relógio de precisão, uma vez que você configurou, irá automaticamente manter o controle da hora atual no fundo de tudo. Ao mesmo tempo, precisando apenas de poucos suprimentos e zero soldas.

Suprimentos

Primeiro, você precisará de um Arduino, mas qualquer trabalho vontade Arduino

Em seguida, você vai precisar de uma variedade de fios jumper genéricos.

2 interruptores tipo botão de pressão Sparkfun de 12 mm

Uma tábua de pão tradicional

e um display LCD 1602 de 16 pinos

Etapa 1: Fiação

Fiação
Fiação

Para que este relógio funcione, você precisa conectá-lo de uma maneira muito específica ou então você obterá um monte de números aleatórios na tela ao invés do tempo.

Etapa 2: O Código

Como não estamos usando um RTC, o código vai ser um pouco longo, mas felizmente eu fiz todo o trabalho duro para você e o forneci aqui.

Basta copiar e colar isso em tanto o Arduino IDE ou o web Editor.

#include "LiquidCrystal.h"

// Isso define a fiação do LCD para DIGITALpins const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);

// Configuração do LCD digital Constrast int cs = 9; // pino 9 para contraste PWM const int contrast = 100; // contraste padrão

// exibe o tempo inicial é 12:59:45 int h = 12; int m = 59; int s = 45; sinalizador int = 1; //PM

// Botões de definição de tempo int button1; int button2;

// Definição de pinos para botões de configuração de tempo int hs = 0; // pino 0 para configuração de horas int ms = 1; // pino 1 para configuração de minutos

// Tempo limite da luz de fundo const int Time_light = 150; int bl_TO = Time_light; // Backlight Time-Out int bl = 10; // Pino da luz de fundo const int backlight = 120; // não mais que 7mA !!!

// Para uma leitura precisa do tempo, use o Arduino Real Time Clock e não apenas delay () static uint32_t last_time, now = 0; // RTC

configuração vazia () {lcd.begin (16, 2); pinMode (hs, INPUT_PULLUP); // evitar resistores pullup externos para o botão 1 pinMode (ms, INPUT_PULLUP); // e botão 2 analogWrite (cs, contrast); // Ajustar contraste VO analogWrite (bl, luz de fundo); // Vire na luz de fundo agora = millis (); // leia o valor inicial RTC}

void loop () {lcd.begin (16, 2); // a cada segundo // Atualizar display LCD // Imprimir HORA em horas, minutos, segundos + AM / PM lcd.setCursor (0, 0); lcd.print ("Tempo"); if (h <10) lcd.print ("0"); // sempre 2 dígitos lcd.print (h); lcd.print (":"); if (m <10) lcd.print ("0"); lcd.print (m); lcd.print (":"); if (s <10) lcd.print ("0"); lcd.print (s);

if (flag == 0) lcd.print ("AM"); if (bandeira == 1) lcd.print ("PM"); lcd.setCursor (0, 1); // para a Linha 2 lcd.print ("Relógio de precisão");

// substituição aprimorada de atraso (1000) // Precisão muito melhor, não mais dependente do tempo de execução do loop

for (int i = 0; i <5; i ++) // faça um loop de 5 vezes 200ms, para uma resposta mais rápida do botão {

while ((now-last_time) <200) // delay200ms {now = millis (); } // loop interno de 200ms last_time = now; // prepare-se para o próximo loop

// Botões de leitura de configuração button1 = digitalRead (hs); // Botões de leitura button2 = digitalRead (ms);

// Tempo limite da luz de fundo bl_TO--; if (bl_TO == 0) {analogWrite (bl, 0); // Luz de fundo desligada bl_TO ++; } // Pressione qualquer para ativar a luz de fundo if (((button1 == 0) | (button2 == 0)) & (bl_TO == 1)) {bl_TO = Time_light; analogWrite (bl, luz de fundo); // aguarde até que o botão seja liberado while ((button1 == 0) | (button2 == 0)) {button1 = digitalRead (hs); // Botões de leitura button2 = digitalRead (ms); }} else // Processar o botão 1 ou o botão 2 quando pressionado enquanto a luz de fundo estiver ligada {if (button1 == 0) {h = h + 1; bl_TO = Time_light; analogWrite (bl, luz de fundo); }

if (button2 == 0) {s = 0; m = m + 1; bl_TO = Time_light; analogWrite (bl, luz de fundo); }

/ * ---- gerenciar segundos, minutos, horas am / pm overflow ---- * / if (s == 60) {s = 0; m = m + 1; } se (m == 60) {m = 0; h = h + 1; } se (h == 13) {h = 1; bandeira = bandeira + 1; if (flag == 2) flag = 0; }

if ((button1 == 0) | (button2 == 0)) // Atualizar a exibição se o botão de definição de hora for pressionado {// Atualizar a exibição de LCD // Imprimir HORA em horas, min, segundos + AM / PM lcd.setCursor (0, 0); lcd.print ("Tempo"); if (h <10) lcd.print ("0"); // sempre 2 dígitos lcd.print (h); lcd.print (":"); if (m <10) lcd.print ("0"); lcd.print (m); lcd.print (":"); if (s 10 <) lcd.print ("0"); lcd.print (s);

if (flag == 0) lcd.print ("AM"); if (flag == 1) lcd.print ("PM"); lcd.setCursor (0, 1); // para a Linha 2 lcd.print ("Relógio de precisão"); }

} // fim se mais} // fim para

// loop externo de 1000ms

s = s + 1; // incremento seg. contagem // ---- gerenciar segundos, minutos, horas am / pm overflow ---- if (s == 60) {s = 0; m = m + 1; } se (m == 60) {m = 0; h = h + 1; } se (h == 13) {h = 1; bandeira = bandeira + 1; if (flag == 2) flag = 0; }

// Fim do loop}

Etapa 3: esquemático (não é realmente uma etapa)

Esquemático (não é realmente uma etapa)
Esquemático (não é realmente uma etapa)

Se alguém lendo isso é um nerd em tecnologia, aqui também é um esquema, você pode olhar para ele ficar louco.

Aproveite e divirta-se e, acima de tudo, mantenha-se atualizado.

Recomendado: