Ceas mare de perete cu luminozitate automată pe Arduino. Ceas binar DIY bazat pe Arduino

O zi buna. În articolul de astăzi vom face ceasuri binare neobișnuite folosind Bazat pe Arduino al lor mâinile. După ce am înțeles procesul de creare a unui astfel de meşteşuguri, în viitor veți putea repeta ceasurile binare de orice design.

Pasul 1: Ce este un ceas binar?

În primul rând, să ne amintim ce este un număr binar - acesta este un număr reprezentat în sistem binar calcul, valori numerice că sunt folosite doar două caractere: 0 (zero) și 1 (unu).

Un ceas binar este un ceas care afișează ora în format binar. Proiectul folosește 6 coloane de LED-uri pentru a afișa zerouri și unu. Fiecare coloană afișează o cifră/cifră, un format cunoscut ca Numărul BCD(DDC). Fiecare linie reprezintă o putere de doi, de la 2^0 (sau 1), la 2^3 (sau 8). Prin urmare, tot ce trebuie să faceți atunci când citiți informații de pe ceas este să însumați valorile coloanelor cu LED-urile aprinse. De exemplu, în prima coloană, LED-urile 4 și 1 sunt aprinse. Adăugați 8 la 1 și obțineți 9 (numărul de secunde este 9). Următoarea coloană are zecimi de secunde, doar al 3-lea LED este aprins în ea, deci sens general va fi egal cu 49 de secunde, exact la fel cu minutele și orele. Vă rugăm să rețineți că ceasul afișează ora în format de 24 de ore.

Pasul 2: Componente

  • Arduino Pro Mini 328 5 V Am folosit această placă, dar de fapt poți folosi oricare alta. Dacă nu ați folosit niciodată Pro Mini, atunci probabil vei avea nevoie C.P.2102 (programator) pentru a conecta placa la un computer;

  • D.S.1302 - modul de ceas în timp real;

  • 20 LED-uri difuze „cald” de 10 mm(te sfatuiesc sa o iei cu rezerva);

  • 20 de rezistențe cu o valoare a rezistenței de 10Ω;

  • 2 butoane tactile;

  • 2 rezistențe cu o valoare a rezistenței de 10kΩ (utilizate ca rezistențe de sarcină).

Pasul 3: Realizarea unui prototip

Să începem să facem un prototip al viitorului meşteşuguri. Practic, nu este condiție cerută, dar trebuie să vă uitați la modul în care matricea LED, Arduino și modulul de ceas vor funcționa împreună. La prototipare am folosit Arduino Mega și LED-uri roșii simple. Totul funcționează bine conform așteptărilor.

Pasul 4: Corpul

Cadru produse de casă(constă din două jumătăți ) va fi din lemn. Va arăta contrastant pe fundalul ceasurilor binare și va da meşteşuguri stilul retro.

Pasul 5: Contur

LED-urile sunt grupate într-o matrice pentru a reduce numărul de LED-uri implicate pini arduino. În cazul nostru, 9 pini sunt alocați pentru matrice. După realizarea matricei LED, lipim pinii la arduino, apoi modulul ceasului, butoanele pentru setarea orei și, în final, sursa de alimentare.

Pasul 6: Cod

Codul se bazează pe un exemplu din postarea Arduino Playgroud pentru modulul de ceas DS1302. După care s-au făcut modificări pentru afișarea orei pe matricea LED.

Ceas în timp real - un modul care stochează data curentași nu îl resetează când alimentarea este oprită datorită bateriei încorporate. Poate ați auzit despre ceasuri bazate pe cipul DS1307. Acest cip are o precizie extrem de scăzută a ceasului. O întârziere de o oră pe zi este prea mare. Recomand să folosiți un modul bazat pe un cip DS3231 de înaltă precizie, care este echipat cu un termometru pentru a regla frecvența ceasului în funcție de temperatură. Precizia ceasului acestui cip este la un nivel bun ceas de mânăși este de 2 ppm la temperatură mediu inconjurator 0°-40°. În același timp, modulul este compatibil cu toate bibliotecile scrise pentru modul bazat pe cipul DS1307. Articolul vorbește despre conectarea modulului la Arduino și interacțiunea cu ele folosind biblioteca Time. Puteți cumpăra un astfel de modul de la un vânzător pe care l-am verificat.

Conexiune ceas în timp real

Ceasul este conectat folosind protocolul I2C cu doar două fire. Este necesar să strângeți suplimentar bornele la care ceasul este conectat la șina de alimentare folosind rezistențe de 2 KΩ. Ieșirea ceasului arată astfel:

Pinii 32K și SQW pot fi ignorați. Scopul lor nu este discutat în acest articol. SCL și SDA sunt pinii interfeței I2C. Acestea trebuie conectate la controler. VCC și GND sunt +5V și, respectiv, masă.

SCL și SDA activate diferite placi situate pe diferiți pini:

Uno, Nano A4 (SDA), A5 (SCL)
Mega2560 20 (SDA), 21 (SCL)
Leonardo 2 (SDA), 3 (SCL)

Pinul SDA al ceasului este conectat la pinul SDA al controlerului. Ceasul SDL, respectiv, către controlerul SDL. După conectarea firelor, ar trebui să obțineți următoarea imagine:

Cel mai convenabil mod de a lucra cu modulul de ceas în timp real este utilizarea bibliotecii. Cel mai convenabil în acest sens se numește: Timp ( Engleză timp).
Biblioteca este un „înveliș” pentru o altă bibliotecă populară pentru lucrul cu modulul de ceas: DS1307RTC. În ciuda faptului că biblioteca a fost dezvoltată pentru cipul DS1307, funcționează perfect cu DS3231, deoarece protocoalele de comunicare sunt compatibile.

Descărcați ambele biblioteci.

După descărcare, plasați conținutul arhivelor în folderul biblioteci, care se află în folderul de mediu Dezvoltare Arduino. Alerga Mediul Arduino IDE și deschis exemplu standard biblioteci: Exemple->Timp->TimeRTC
Sau doar copiați acest cod:

#include #include #include void setup() ( Serial.begin(9600); while (!Serial) ; // așteptați până când Arduino Monitor serial deschide setSyncProvider(RTC.get); // funcția pentru a obține ora de la RTC if(timeStatus()!= timeSet) Serial.println("Nu se poate sincroniza cu RTC"); else Serial.println("RTC a setat ora sistemului"); ) void loop() ( if (timeStatus() == timeSet) ( digitalClockDisplay(); ) else ( Serial.println("Ora nu a fost setată. Vă rugăm să rulați Ora"); Serial.println("Exemplu TimeRTCSet, sau exemplu DS1307RTC SetTime."); Serial.println(); delay(4000); ) delay(1000); ) void digitalClockDisplay())( // afișarea ceasului digital al orei Serial.print(hour()); printDigits (minut()); printDigits(second()); Serial.print()) void printDigits( // utilitar funcția pentru afișarea ceasului digital: afișează două puncte înainte și înainte 0 Serial.print(":") ;< 10) Serial.print("0"); Serial.print(digits); }

#include

#include

#include

void setup() (

Serial. începe(9600);

în timp ce (! Serial ) ; // așteptați până când se deschide Arduino Serial Monitor

setSyncProvider(RTC.get); // funcția pentru a obține ora de la RTC

if (timeStatus() != timeSet)

Serial. println("Nu se poate sincroniza cu RTC");

altfel

Serial. println("RTC a setat ora sistemului");

buclă goală ()

dacă (timeStatus() == timeSet) (

digitalClockDisplay();

) altfel (

Serial. println( „Ora nu a fost setată. Vă rugăm să rulați Ora”) ;

Serial. println( „Exemplu TimeRTCSet sau exemplu DS1307RTC SetTime.”) ;

Serial. println();

întârziere (4000);

întârziere (1000);

void digitalClockDisplay() (

// Afișarea ceasului digital al orei

Serial. print(ora());

printDigits(minut());

printDigits(second());

Serial. imprimare (" " ) ;

Serial. print(ziua());

Serial. imprimare (" " ) ;

Serial. print(luna());

Serial. imprimare (" " ) ;

Serial. print(an());

Serial. println();

void printDigits(int digits) (

// funcția de utilitate pentru afișarea ceasului digital: afișează două puncte înainte și 0 înainte

Serial. imprimare(":");

dacă (cifre< 10 )

Serial. print("0");

Serial. print(cifre);

După ce ați încărcat schița pe placă, lansați monitorul portului (Tools->port monitor). Veți vedea mesaje din bibliotecă. Ora afișată va fi incorectă sau biblioteca se va plânge că ceasul nu este configurat. Pentru a seta ceasul, încărcați un exemplu din biblioteca „SetTime” DS1307RTC pe placă (Exemple->DS1307RTC->SetTime). Încărcați acest exemplu în tabla dvs. După descărcare, ceasul va fi setat la timpul de compilare a schițelor. Întârziere între compilare și complet încărcat va fi destul de puțin, ceea ce va fi suficient pentru un ceas fin reglat. Dar dacă deconectați și reconectați alimentarea plăcii, chiar și după câteva ore, ora ceasului va fi totuși resetată la momentul compilării și va fi incorectă. Prin urmare, utilizați acest exemplu numai pentru configurare, după configurare, opriți ceasul sau încărcați o altă schiță pe tablă.

Unul dintre primele proiecte pe care începătorii le construiesc folosind o placă Arduino este ceas simplu, numărătoarea inversă. Practic, astfel de ceasuri se bazează pe un modul RTC (Real Time Clock) conectat la Arduino. Pe piață astăzi componente electronice disponibil diferite modele RTC-uri care variază ca precizie și preț. Modelele comune includ DS1302, DS1307, DS3231.



Dar puteți face un ceas pe Arduino fără a utiliza un RTC, mai ales dacă nu puteți obține astfel de module. Desigur, acuratețea este în acest caz, va fi mic, așa că proiectul ar trebui mai degrabă considerat ca un proiect de formare.


Principiul de funcționare al unor astfel de ceasuri este destul de simplu. De fiecare dată când porniți acest ceas Arduino, va trebui să îl setați la ora curentă, la fel ca oricare ceas analogic. Cu siguranță este mai bine să nu folosiți astfel de ceasuri la dvs Viata de zi cu zi când sunt active mult timp fără repornire și personalizare ulterioară, deoarece desincronizarea cu ora curentă în timpul funcționării pe termen lung poate fi semnificativă.


Acest ceas poate fi asamblat pe o placă obișnuită, deoarece nu necesită multe componente. Linkul nostru principal aici va fi taxa Arduino Uno. Pentru a afișa ora, puteți lua un afișaj LCD 16x2. Pentru a modifica setările de timp, trebuie să conectați două butoane (pentru ore și minute). Butoanele sunt conectate la Aduino prin rezistențe de 10KΩ. Pentru a schimba luminozitatea afișajului veți avea nevoie de un potențiometru de 10 kOhm. Schema de conectare a tuturor acestor componente la Placa Arduino Uno este prezentat mai jos.



Acum trebuie să programați Arduino. Un cod simplu (schiță) care vă permite să afișați ora pe ecranul LCD este prezentat mai jos.


#include LiquidCrystal lcd(12,11,5,4,3,2); int h=12; int m; int s; int steag; int TIME; const int hs=8; const int ms=9; int stare1; int stare2; void setup() ( lcd.begin(16,2); ) void loop() ( lcd.setCursor(0,0); s=s+1; lcd.print("TIME:"); lcd.print(h ); lcd.print(":"); lcd.print(":");<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)lcd.print("PM"); if(flag==24)flag=0; întârziere (1000); lcd.clear(); if(s==60)( s=0; m=m+1; ) if(m==60) (m=0; h=h+1; flag=flag+1; ) if(h==13 ) ( h=1; ) lcd.setCursor(0,1); lcd.print("O ZI FRUMOĂ"); //-------Timp // setare-------// state1=digitalRead(hs); dacă(stare1==1) (h=h+1; steag=steag+1; dacă(steagul<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)lcd.print("PM"); if(flag==24)flag=0; dacă(h==13)h=1; ) stare2=digitalRead(ms); dacă(starea2==1)( s=0; m=m+1; ) )

   Vă mulțumim pentru interesul acordat proiectului de informare a site-ului.
   Dacă vrei interesant și materiale utile a apărut mai des și a fost mai puțină publicitate,
   Puteți susține proiectul nostru donând orice sumă pentru dezvoltarea lui.

Trebuia să fac ceva mai mare cumva. Ceas de perete cu luminozitate automată.

Aceste ceasuri sunt perfecte pentru camere mari, cum ar fi un hol de birou sau un apartament mare.

Realizarea unui ceas de perete atât de mare nu este foarte dificilă folosind aceste instrucțiuni.


Pentru a estima dimensiunea ceasului, puteți presupune că un segment al ceasului va fi de dimensiunea hârtiei A4, ceea ce va facilita utilizarea ramelor foto de dimensiunea corespunzătoare.

Pasul 1. Componentele unui ceas de perete mare.

Fire, lipit, fier de lipit, bandă LED Arduino Nano Convertor DC-DC LM2596
4 metri bandă LED WS2811 senzor de lumina ceas în timp real DS3231
microîntrerupătoare

Ce am folosit pentru acest proiect:

Pasul 8. Programați ceasul.

După ce m-am jucat, am reușit să-mi iau un ceas care mi-a satisfăcut complet nevoile. Sunt sigur că te poți descurca mai bine decât mine.

Codul este bine comentat și nu vă va fi greu să-l înțelegeți și mesajele de depanare sunt foarte bine comentate.

Dacă trebuie să schimbați culoarea ceasului de perete folosită, trebuie să schimbați variabila pe linia 22 ( int ledColor = 0x0000FF; // Culoarea folosită (în hex)). Puteți găsi o listă de culori și codurile lor hexadecimale pe pagina: https://github.com/FastLED/FastLED/wiki/Pixel-refe…

Dacă aveți probleme la descărcare, utilizați oglinda: http://bit.ly/1Qjtgg0

Schița mea finală poate fi descărcată.

Pasul 9. Faceți numere folosind polistiren.

Baza tăietorului Corpul de lucru al tăietorului Forma generală tăietor
Rezultatul tăietorului

Tăiați fiecare segment în șablonul imprimat la început.
Polistirenul poate fi tăiat cu un cuțit ascuțit, ceea ce este destul de dificil, sau cu un dispozitiv simplu din fire de nicrom sau coarde de chitară și mai multe bucăți de placă OSB.

Puteți vedea cum am făcut-o în imaginile de mai sus.

Pentru a alimenta tăietorul am folosit o sursă de alimentare de 12v.

Ca rezultat al tăierii, ar trebui să obțineți patru segmente pentru ceas mare, dintre care unul este prezentat în fotografie.

Pasul 10. Lipiți numerele și acoperiți totul cu un difuzor. Ultimul ceas de perete mare.

Străluciți în timpul zilei Străluciți noaptea

După ce ați tăiat toate cele patru numere și puncte ale ceasului de perete, lipiți-le pe toate împreună pe carton Benzi LED(Am folosit bandă cu două fețe pentru a ușura procesul)

Pentru a risipi greu lumina LED Am folosit două coli de hârtie deasupra numerelor de polistiren. Pentru comoditate și estetică, am folosit hârtie de dimensiune A2 împăturită în jumătate.

După ce am finalizat toți acești pași, am plasat ansamblul mare de ceas de perete rezultat într-o ramă foto mare potrivită.

Acest ceas sa dovedit a fi foarte impresionant și atrăgător. Cred că un ceas de perete atât de mare va decora perfect multe camere.

In contact cu


Astfel de ceasuri vor arăta foarte originale pe perete, au acționare cu LED care imită ceas indicator, Ceas LEDîn centru și iluminare RGB frumoasă de fundal. Realizarea unui astfel de proiect de casă cu greu poate fi numită simplă, dar timpul și efortul petrecut nu vor fi irosite.

Materiale carcasei:
- Placi acrilice negre 300x300x3 mm 3buc
- Iluminare de fundal acrilic transparent 300x300x3 mm 1 bucata
- Agent de lustruire pentru plăci acrilice
- Lipici
- Manșoane distanțiere 15 mm cu filet m3 20 buc
- Șuruburi M3 cu șaibe 20 buc
- Rama poza 300x300 mm 1 bucata

Materiale electronice:
- Registrul de deplasare CD74HC595 8 buc
- Driver LED TLC5940 1buc
- Ceas în timp real (RTC) DS1307 1 buc
- Regulator liniar LM317 1 buc
- Tranzistor bipolar BD139 8 buc
- Condensator electrolitic 1 uF 2 buc
- Condensator 0,1 uF 1 buc.
- Rezistoare 120 Ohm 60 buc
- Rezistoare 10 kOhm 9 buc
- Rezistor 2 kOhm 1 bucata
- Rezistoare 1 kOhm 9 buc
- Rezistor 330 Ohm 1 bucata
- LED-uri 480 buc
- LED cu 4 cifre indicator digital(cu anozi comuni) 1 bucată
- Banda LED RGB(cu un anod comun) 1 bucată (lung până la circumferința cadranului)
- Modul Arduino Mega ADK (Rev3) 1buc
- baterie 12V 1buc

Primul pas. Fabricarea corpului.
Pentru început, plăcile acrilice sunt tăiate și găurite conform desenului. Apoi, placa neagră frontală a corpului este lipită de partea de conectare (transparentă) și de placa pentru LED-uri.

Pasul doi. Lucrări de finisare pe corp.
Pentru o mai bună stabilitate, autorul lipește o placă acrilică pe partea din spate a ramei, sticla din cadru este mai întâi îndepărtată și nu va mai fi necesară.
Patru bucșe de 15 mm sunt înșurubate pe placă ca în fotografie. Acum, este posibil să lipiți bucșele de la cadru pe placa frontală. Aceste bucșe lipite sunt apoi deșurubate pentru utilizare ulterioară.

Pasul trei. Inserție LED.
În primul rând, LED-urile sunt introduse în primul rând de găuri (1 rând necesită 60 LED-uri). Catozii sunt lipiți împreună în jurul plăcii folosind sârmă de cupru 0,8 mm, iar anozii sunt îndoiți în lateral. Această procedură se repetă pentru celelalte 7 rânduri. Acum că anozii sunt aranjați într-o coloană, ei sunt, de asemenea, lipiți împreună. Astfel, rezultatul a fost o matrice de 8 rânduri și 60 de coloane.

Pasul patru. Lipirea cablurilor la matrice.
Pentru acest pas, se folosesc conectori de cablu cu 8 fire, dintre care unul este lipit la catozii de pe matrice. Opt astfel de conectori au fost lipiți la 60 de coloane anodice. Întrucât autorul a folosit conectori cu 8 fire, a primit un cablu cu 64 de fire, ceea ce înseamnă că au mai rămas 4, au fost învelite cu bandă electrică. De asemenea, autorul recomandă utilizarea a șapte conectori cu 8 fire și a unui conector cu 4 fire pentru a obține exact 60.

Pasul cinci. Atașarea unui indicator.
Se face o gaură în placa acrilică sub formă de disc și un indicator este lipit cu fire pre-lidate pentru comoditate.

Pasul șase. A plati.
Dintr-o bucată panou dimensiune mai mare orice este necesar, taiati 2 bucati astfel incat sa se incadreze in rama poza. În continuare, ei își fac mai mulți conectori, așa cum se poate vedea în fotografia de mai jos.

Pasul șapte. Asamblare ceas.
Apoi, toate piesele sunt instalate în carcasă conform diagramei atașate mai jos. Autorul a instalat o baterie reîncărcabilă de 1000 mAh în ceas, astfel încât să poată funcționa fără cablu extern. Instalați pe Arduino codul programului, atașat în partea de jos a articolului. Astfel, sunt instalate biblioteci pentru modulul de ceas în timp real și driverul LED TLC5940, care sunt de asemenea atașate sub articol. Diagrama cu rezoluție bună:

  • Serghei Savenkov

    un fel de recenzie „scurtă”... de parcă s-ar grăbi undeva