Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-23 15:03
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
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)
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:
Pingo: um iniciador de bola de pingue-pongue com detecção de movimento e alta precisão: 8 etapas
Pingo: um lançador de bola de pingue-pongue com detecção de movimento e alta precisão: Kevin Nitiema, Esteban Poveda, Anthony Mattacchione, Raphael Kay
Arduino Nano - Tutorial do sensor de altímetro de precisão MPL3115A2: 4 etapas
Arduino Nano - MPL3115A2 Precision Altimeter Sensor Tutorial: O MPL3115A2 emprega um sensor de pressão MEMS com uma interface I2C para fornecer dados precisos de pressão / altitude e temperatura. As saídas do sensor são digitalizadas por um ADC de alta resolução de 24 bits. O processamento interno remove as tarefas de compensação do
Raspberry Pi - Sensor de altímetro de precisão MPL3115A2 Python Tutorial: 4 etapas
Raspberry Pi - Sensor de altímetro de precisão MPL3115A2 Python Tutorial: O MPL3115A2 emprega um sensor de pressão MEMS com uma interface I2C para fornecer dados precisos de pressão / altitude e temperatura. As saídas do sensor são digitalizadas por um ADC de alta resolução de 24 bits. O processamento interno remove as tarefas de compensação do
DropArt - Colisor fotográfico de precisão de duas gotas: 11 etapas (com imagens)
DropArt - Colisor fotográfico de duas gotas de precisão: Olá a todos, Neste instrutível apresento meu projeto para um colisor de duas gotas de líquido controlado por computador. Antes de começarmos com os detalhes do design, acho que faz sentido explicar exatamente qual é o propósito do design.Um divertido, interessante
Configurando o DS3231 RTC (Real Time Clock) com precisão, rapidez e automatização usando Java (+ -1s): 3 etapas
Configurando o DS3231 RTC (Real Time Clock) com precisão, rápido e automatizado usando Java (+ -1s): Este Instructable vai mostrar como configurar a hora em um DS3231 Real Time Clock usando um Arduino e um pequeno aplicativo Java que usa a conexão serial do Arduino. A lógica básica deste programa: 1. O Arduino envia uma solicitação serial