Taula de continguts:

Rellotge de precisió: 3 passos
Rellotge de precisió: 3 passos

Vídeo: Rellotge de precisió: 3 passos

Vídeo: Rellotge de precisió: 3 passos
Vídeo: Падение Яйца Из Космоса 2024, De novembre
Anonim
Rellotge de precisió
Rellotge de precisió

Tots necessitem rellotges, així que, per què no fer-ho vostre en aquest instructiu, us mostraré com fer un rellotge de precisió un cop hàgiu configurat, que farà un seguiment automàtic de l’hora actual al fons de tot. Tot i que només necessita molt pocs subministraments i zero soldadures.

Subministraments

Primer, necessitareu un Arduino, però qualsevol Arduino funcionarà

A continuació, necessitareu un assortiment de cables genèrics de pont.

2 interruptors de polsador Sparkfun de 12 mm

Una taula de pa tradicional

i una pantalla LCD 1602 de 16 pins

Pas 1: cablejat

Cablejat
Cablejat

Per tal que aquest rellotge funcioni, heu de connectar-lo d'una manera molt específica o, en cas contrari, obtindreu un munt de números aleatoris a la pantalla en lloc de l'hora.

Pas 2: el codi

Com que no fem servir un RTC, el codi serà una mica llarg, però, per sort, he fet tot el treball dur per a vosaltres i us el proporciono aquí.

Simplement copieu-lo i enganxeu-lo a l'IDE Arduino o a l'editor web.

#include "LiquidCrystal.h"

// Això defineix el cablejat de la pantalla LCD a la DIGITALpins const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);

// Configuració LCD Constrast digital int cs = 9; // pin 9 per al contrast PWM const int contrast = 100; // contrast per defecte

// la visualització de l’hora inicial és a les 12:59:45 PM int h = 12; int m = 59; int s = 45; int flag = 1; // PM

// Botó de configuració de l'hora int button1; int button2;

// Definició de pins per als botons de temps establerts int hs = 0; // pin 0 per a Configuració d'hores int ms = 1; // pin 1 per a Configuració de minuts

// Temps de retroiluminació const int Time_light = 150; int bl_TO = Time_light; // Backlight Time-Out int bl = 10; // Llum de fons pin const int retroil·luminació = 120; // no més de 7mA !!!

// Per a una lectura exacta del temps, utilitzeu Arduino Real Time Clock i no només delay () static uint32_t last_time, now = 0; // RTC

void setup () {lcd.begin (16, 2); pinMode (hs, INPUT_PULLUP); // evitar les resistències externes Pullup per al botó 1 pinMode (ms, INPUT_PULLUP); // i el botó 2 analogWrite (cs, contrast); // Ajustar el contrast VO analogWrite (bl, contrallum); // Girar a contrallum ara = millis (); // llegir valor inicial RTC}

bucle buit () {lcd.begin (16, 2); // cada segon // Actualització de la pantalla LCD // TEMPS d'impressió en hora, mínim, segon + AM / PM lcd.setCursor (0, 0); lcd.print ("Temps"); if (h <10) lcd.print ("0"); // sempre 2 dígits 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); // per a la línia 2 lcd.print ("Rellotge de precisió");

// millora de la substitució del retard (1000) // Molt millor precisió, ja no depèn del temps d'execució del bucle

for (int i = 0; i <5; i ++) // fa un bucle de 200 ms de 5 temps, per a una resposta més ràpida del botó {

while ((now-last_time) <200) // delay200ms {now = millis (); } // bucle interior de 200 ms last_time = ara; // prepara't per al següent bucle

// llegir botons de configuració botó1 = lectura digital (hs); // botó llegir botons2 = lectura digital (ms);

// Temps d'espera de la il·luminació de fons bl_TO--; if (bl_TO == 0) {analogWrite (bl, 0); // Retroil·luminació OFF bl_TO ++; } // Feu clic a qualsevol per activar la llum de fons si (((botó1 == 0) | (botó2 == 0)) & (bl_TO == 1)) {bl_TO = Llum_hora; analogWrite (bl, llum de fons); // espereu fins que es deixi anar el botó mentre ((botó1 == 0) | (botó2 == 0)) {botó1 = lectura digital (hs); // botons de lectura botó2 = lectura digital (ms); }} else // Procés el botó 1 o el botó 2 quan es prem mentre es controla la llum de fons {if (botó1 == 0) {h = h + 1; bl_TO = Llum_temporal; analogWrite (bl, llum de fons); }

if (botó2 == 0) {s = 0; m = m + 1; bl_TO = Llum_temporal; analogWrite (bl, llum de fons); }

/ * ---- gestiona el desbordament de segons, minuts, hores am / pm ---- * / if (s == 60) {s = 0; m = m + 1; } if (m == 60) {m = 0; h = h + 1; } if (h == 13) {h = 1; bandera = bandera + 1; if (flag == 2) flag = 0; }

if ((botó1 == 0) | (botó2 == 0)) // Actualització de la pantalla si es prem el botó de configuració de l'hora {// Actualització de la pantalla LCD // HORA d'impressió en hora, mínim, segon + AM / PM lcd.setCursor (0, 0); lcd.print ("Temps"); if (h <10) lcd.print ("0"); // sempre 2 dígits 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); // per a la línia 2 lcd.print ("Rellotge de precisió"); }

} // acabar si més} // acabar per

// bucle exterior de 1000 ms

s = s + 1; // increment de seg. comptar // ---- gestionar el desbordament de segons, minuts, hores am / pm ---- if (s == 60) {s = 0; m = m + 1; } if (m == 60) {m = 0; h = h + 1; } if (h == 13) {h = 1; bandera = bandera + 1; if (flag == 2) flag = 0; }

// Final del bucle}

Pas 3: esquema (realment no és un pas)

Esquema (realment no és un pas)
Esquema (realment no és un pas)

Si algú que llegeix això és un nerd tecnològic, aquí també hi ha un esquema que es pot tornar boig.

Gaudeix i diverteix-te i, sobretot, mantén-te fresc.

Recomanat: