Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-23 15:04
Cu toții avem nevoie de ceasuri, așa că de ce să nu-ți creăm propriul în acest instructabil, îți voi arăta cum să faci un ceas de precizie odată ce ai setat, va ține automat evidența orei curente în fundalul tuturor. Deși are nevoie doar de foarte puține consumabile și zero lipiri.
Provizii
În primul rând, veți avea nevoie de un Arduino, dar orice Arduino va funcționa
Apoi, veți avea nevoie de un sortiment de fire jumper generice.
2 comutatoare cu buton Sparkfun de 12 mm
Un panou tradițional
și un ecran LCD 1602 cu 16 pini
Pasul 1: Cablare
Pentru ca acest ceas să funcționeze, trebuie să conectați acest lucru într-un mod foarte specific, altfel veți primi o grămadă de numere aleatorii pe ecran, mai degrabă decât ora.
Pasul 2: Codul
Deoarece nu folosim un RTC, codul va fi puțin lung, dar, din fericire, am făcut toată munca grea pentru dvs. și l-am furnizat aici.
Doar copiați și lipiți acest lucru fie în IDE Arduino, fie în editorul web.
#include „LiquidCrystal.h”
// Aceasta definește cablarea LCD la DIGITALpins const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
// Setare digitală LCD Constrast int cs = 9; // pinul 9 pentru contrast PWM const int contrast = 100; // contrast implicit
// afișarea timpului inițial este 12:59:45 PM int h = 12; int m = 59; int s = 45; int flag = 1; //P. M
// Butoane Setare oră buton int1; buton int2;
// Definirea pinilor pentru butoanele setate de timp int hs = 0; // pinul 0 pentru setarea orelor int ms = 1; // pinul 1 pentru setarea minutelor
// Backlight Time Out const int Time_light = 150; int bl_TO = Time_light; // Backlight Time-Out int bl = 10; // Backlight pin const int backlight = 120; // nu mai mult de 7mA !!!
// Pentru citirea exactă a timpului, utilizați Arduino Real Time Clock și nu doar delay () static uint32_t last_time, now = 0; // RTC
void setup () {lcd.begin (16, 2); pinMode (hs, INPUT_PULLUP); // evitați rezistențele externe Pullup pentru Butonul 1 pinMode (ms, INPUT_PULLUP); // și Butonul 2 analogWrite (cs, contrast); // Reglați contrastul VO analogWrite (bl, lumină de fundal); // Rotiți on Backlight now = millis (); // citiți valoarea inițială RTC}
bucla void () {lcd.begin (16, 2); // la fiecare secundă // Actualizați afișajul LCD // Imprimați TIMP în oră, Min, Sec + AM / PM lcd.setCursor (0, 0); lcd.print („Ora”); if (h <10) lcd.print ("0"); // întotdeauna 2 cifre lcd.print (h); lcd.print (":"); if (m <10) lcd.print ("0"); imprimare lcd (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); // pentru Linia 2 lcd.print ("Ceas de precizie");
// îmbunătățirea înlocuirii întârzierii (1000) // Precizie mult mai bună, nu mai dependentă de timpul de execuție a buclei
for (int i = 0; i <5; i ++) // faceți o buclă de 5 ori 200ms, pentru un răspuns mai rapid al butonului {
while ((now-last_time) <200) // delay200ms {now = millis (); } // bucla interioară de 200 ms last_time = now; // pregătește-te pentru următoarea buclă
// citiți butonul Setare butoane1 = citire digitală (hs); // Buton citire buton2 = citire digitală (ms);
// Timp de iluminare de fundal bl_TO--; if (bl_TO == 0) {analogWrite (bl, 0); // Lumina de fundal OFF bl_TO ++; } // Apăsați pe oricare pentru a activa Lumina de fundal dacă (((butonul1 == 0) | (butonul2 == 0)) & (bl_TO == 1)) {bl_TO = Ora_lumina; analogWrite (bl, lumină de fundal); // așteptați până când butonul este eliberat în timp ce ((buton1 == 0) | (buton2 == 0)) {buton1 = citire digitală (hs); // Butoane citire buton2 = citire digitală (ms); }} else // Procesează butonul 1 sau butonul 2 când este apăsat în timp ce iluminarea de fundal este activată {if (butonul1 == 0) {h = h + 1; bl_TO = Time_light; analogWrite (bl, lumină de fundal); }
if (buton2 == 0) {s = 0; m = m + 1; bl_TO = Time_light; analogWrite (bl, lumină de fundal); }
/ * ---- gestionează depășirea secunde, minute, ore am / pm ---- * / if (s == 60) {s = 0; m = m + 1; } if (m == 60) {m = 0; h = h + 1; } if (h == 13) {h = 1; steag = steag + 1; if (flag == 2) flag = 0; }
if ((buton1 == 0) | (buton2 == 0)) // Actualizați afișajul dacă butonul setat de timp este apăsat {// Actualizați afișajul LCD // Imprimați TIMP în oră, Min, Sec + AM / PM lcd.setCursor (0, 0); lcd.print („Ora”); if (h <10) lcd.print ("0"); // întotdeauna 2 cifre lcd.print (h); lcd.print (":"); if (m <10) lcd.print ("0"); imprimare lcd (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); // pentru Linia 2 lcd.print ("Ceas de precizie"); }
} // terminați dacă altfel} // terminați pentru
// buclă exterioară de 1000 ms
s = s + 1; // increment sec. numărare // ---- gestionează depășirea secunde, minute, ore am / pm ---- if (s == 60) {s = 0; m = m + 1; } if (m == 60) {m = 0; h = h + 1; } if (h == 13) {h = 1; steag = steag + 1; if (flag == 2) flag = 0; }
// sfârșitul buclei}
Pasul 3: Schematic (Acesta nu este cu adevărat un pas)
Dacă cineva care citește acest lucru este un tocilar de tehnologie, aici este, de asemenea, o schemă, o puteți privi înnebunind.
Bucurați-vă și distrați-vă și, mai ales, rămâneți proaspăt.
Recomandat:
Pingo: un lansator de mingi Ping Pong de detectare a mișcării și de înaltă precizie: 8 pași
Pingo: un lansator de mingi Ping Pong cu detecție de mișcare și precizie: Kevin Nitiema, Esteban Poveda, Anthony Mattacchione, Raphael Kay
Arduino Nano - Tutorial senzor de altimetru de precizie MPL3115A2: 4 pași
Arduino Nano - MPL3115A2 Tutorial senzor de altimetru de precizie: MPL3115A2 folosește un senzor de presiune MEMS cu o interfață I2C pentru a furniza date precise de presiune / altitudine și temperatură. Ieșirile senzorului sunt digitalizate printr-un ADC de 24 biți de înaltă rezoluție. Procesarea internă elimină sarcinile de compensare din
Raspberry Pi - Tutorial MPL3115A2 cu senzor de altimetru de precizie Python: 4 pași
Raspberry Pi - Tutorial MPL3115A2 de precizie pentru senzor de altimetru Python: MPL3115A2 folosește un senzor de presiune MEMS cu o interfață I2C pentru a furniza date precise de presiune / altitudine și temperatură. Ieșirile senzorului sunt digitalizate printr-un ADC de 24 biți de înaltă rezoluție. Procesarea internă elimină sarcinile de compensare din
Setarea DS3231 RTC (ceas în timp real) cu precizie, rapiditate și automatizare folosind Java (+ -1s): 3 pași
Setarea DS3231 RTC (ceas în timp real) cu precizie, rapiditate și automatizare folosind Java (+ -1s): acest instructable vă va arăta cum să setați ora pe un ceas DS3231 în timp real folosind un Arduino și o mică aplicație Java care utilizează conexiunea serială a Arduino. Logica de bază a acestui program: 1. Arduino trimite o cerere în serie
Raspberry Pi - Senzor de altimetru de precizie MPL3115A2 Tutorial Java: 4 pași
Raspberry Pi - MPL3115A2 Senzor de altimetru de precizie Tutorial Java: MPL3115A2 utilizează un senzor de presiune MEMS cu o interfață I2C pentru a furniza date precise de presiune / altitudine și temperatură. Ieșirile senzorului sunt digitalizate printr-un ADC de 24 biți de înaltă rezoluție. Procesarea internă elimină sarcinile de compensare din