Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Recenzii
  • Facem un ceas electronic pe Arduino cu propriile noastre mâini. Crearea unui ceas electronic pe Arduino cu propriile mâini Ceasuri gata făcute pe Arduino

Facem un ceas electronic pe Arduino cu propriile noastre mâini. Crearea unui ceas electronic pe Arduino cu propriile mâini Ceasuri gata făcute pe Arduino

Unul dintre primele proiecte pe care începătorii le construiesc folosind o placă Arduino este un ceas simplu care ține timpul. Practic, astfel de ceasuri se bazează pe un modul RTC (Real Time Clock) conectat la Arduino. Astăzi, pe piața componentelor electronice sunt disponibile diferite modele RTC, variind 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 în acest caz va fi scăzută, 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 orice ceas analogic. Cu siguranță este mai bine să nu folosiți un astfel de ceas în viața de zi cu zi dacă este activ pentru o perioadă lungă de timp fără repornire și ajustare ulterioară, deoarece desincronizarea cu ora curentă în timpul utiliză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 placa 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 pentru toate aceste 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 LCD cristal lichid(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(m); lcd.print(":"); lcd.print(e); if(steagul<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)lcd.print("PM"); dacă(steagul==24)steagul=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"); dacă(steagul==24)steagul=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ă doriți ca materiale interesante și utile să fie publicate mai des și cu mai puțină publicitate,
   Puteți susține proiectul nostru donând orice sumă pentru dezvoltarea lui.

Am decis să fac un ceas electronic de casă pe o bandă LED folosind un Arduino cu un modul în timp real, este atașată o fotografie a producției și o descriere detaliată.

Materiale folosite:

  • - Banda de diode pe microcircuite ws2811 (RGB, sursă de alimentare 12V) 5 metri - 700 de ruble;
  • - Arduino nano - 200 de ruble;
  • - senzor de lumină - 28 de ruble;
  • - modul în timp real RTC DS1307 AT24C32 - 37 de ruble;
  • - convertor de putere LM2596 - 41 de ruble;
  • - alimentare 12 V 1A;
  • - senzor de temperatură DALLAS DS18B20 - 48 de ruble;
  • - o bucată de placă, doi astfel de nasturi, fire.
  • - carton dur.
  • - hârtie whatman (2 bucăți).
  • - bandă cu două fețe (3M).
  • - bandă obișnuită.
  • - foi de polietilena spumata (preluate din ambalajul de protectie al echipamentului).

1. Instalați fontul în MS Office și tipăriți caracterul 8 pe întreaga dimensiune a foii A4. Am făcut asta în Visio. Dungile interioare sunt limite pentru marcarea sub bucăți de bandă de diodă. Granițele exterioare sunt contururile numerelor.

2. Desenarea limitelor bucăților de bandă de diodă pe carton

3. Folosind următorul șablon, facem marcaje pe polietilenă spumă, grosime 15 mm, apoi decupăm conform marcajelor.

Pentru tăiere am folosit o mașină de casă făcută din trei bucăți de lemn, o foaie de PAL și sârmă nicrom întinsă pe verticală. Alimentat de o sursă de alimentare reglată.

4. Lipiți bucăți de bandă de diodă de-a lungul limitelor marcate pe carton și conectați-le prin lipire de-a lungul unui lanț.

Am pus circuitul principal într-o cutie separată, deoarece o astfel de carcasă este slabă.

Ca urmare, un cablu este potrivit pentru ceas, în care:

  • +12V - pentru alimentarea benzii de diode;
  • +5V - pentru alimentarea modulului de iluminat;
  • 0 - fir comun (minus);
  • date de ieșire de la Arduino la banda de diode;
  • semnal de ieșire de la senzorul de lumină către Arduino;

Schema de conectare Arduino.

Convertor de putere, Arduino nano și modul de ceas în timp real.

Placa de comutare cu butoane de corectare.

Algoritmul de operare este următorul:
Ceasul arata ora, data si temperatura camerei: primele 15 secunde - ora, apoi 3 secunde - data, alte 3 secunde - temperatura, apoi din nou ora. Din a 45-a secundă data este din nou de 3 secunde, temperatura este de 3 secunde și din nou timpul.
Când camera este luminoasă, luminozitatea afișajului este mare, când este întuneric, este redusă la minim.

Așadar, echipa noastră de trei persoane s-a confruntat cu o sarcină: să asambleze un mic proiect hardware, de preferință pe platforma Arduino, într-un timp foarte scurt. Merită menționat că până în acel moment eram familiarizați cu circuitele, în cea mai mare parte, în teorie. Și asta înseamnă - nicio experiență cu un fier de lipit (practic), nici, mai ales, experiență cu Arduino.

În mod neașteptat, am dat peste o pagină dedicată proiectului Shadowplay Clock. Acesta este un ceas de perete conceput de o echipă de designeri vienezi, a cărui oră poate fi văzută atingându-și centrul cu degetul. LED-urile se aprind într-o astfel de ordine încât umbra degetului din centru arată ora. S-a decis să se creeze aceleași (sau foarte asemănătoare), dar acasă. Articolul de mai sus, după cum puteți vedea, nu conține o descriere detaliată a proiectului. Din toate acestea a rezultat că noi înșine a trebuit să ne dăm seama cum funcționează acest dispozitiv și să-l aducem la viață. Ceea ce este exact ceea ce am făcut.

Materiale

Pentru a crea un ceas aveți nevoie de:
  • semifabricate din fibră
  • Bandă LED pentru 60 de diode
  • Arduino Uno
  • modul de ceas în timp real RTC DS1307
  • buton
  • tabla de paine
  • registru de deplasare 74HC595 (x2)
  • Registrul de blocare pe 8 biți 74HC573N (x8)
  • decodor 4-16 K155ID3
  • invertor de scurgere deschis IN74HC05AN (x10)
  • unitate de putere

Să începem

Deci, algoritmul de funcționare a dispozitivului:
  1. Când este aplicată alimentarea, LED-urile se aprind în combinația specificată. În Shadowplay original, toate LED-urile s-au aprins, dar ne-am gândit că ar fi mai interesant să lansăm o combinație ca screensaver.
  2. Când apăsați un buton (da, ne-am îndepărtat și de original și am introdus un mic buton în centru), ora se citește din modulul RTC.
  3. Timpul de citire este convertit în cod binar (mască) și introdus în registre.
  4. În funcție de mască, dioda necesară se aprinde.

Hardware

Când ne-am hotărât în ​​sfârșit asupra ideii proiectului, primul lucru pe care l-am făcut a fost să încercăm să schițăm mental scheme aproximative pentru implementarea lui. Principala întrebare a fost cum să se adreseze 60 de LED-uri. De fapt, răspunsul la această întrebare a determinat metoda de construire a aproape întregului circuit.

Prima variantă care mi-a venit în minte a fost legată de utilizarea decriptoarelor. Circuitul construit a fost o cascadă de patru decodore 4 - 16 și un decodor 2 - 4, ambele cu intrări de activare a decodării. O astfel de cascadă a făcut posibilă furnizarea de adrese la 64 de ieșiri, ceea ce a fost mai mult decât suficient pentru a conecta 60 de LED-uri.

Cu toate acestea, atunci a apărut întrebarea cu privire la modul de a face (adresa) simultan mai mult de un LED să funcționeze (adresă) cu această schemă (la urma urmei, trebuia să furnizăm ceasului cel puțin un minut și o oră). Aici se manifestă principalul dezavantaj al acestei scheme - decodorul nu poate, prin definiție, să adreseze mai mult de o ieșire în același timp.

Acest dezavantaj ne-a forțat să renunțăm la ideea unei cascade de decriptoare. În plus, acum avem o altă cerință pentru viitorul circuit - suport pentru funcționarea simultană a diferitelor numere de LED-uri.

Pentru a satisface această cerință, ne-am gândit că am putea permite fiecărui LED să-și memoreze propria stare. Registrele sunt potrivite pentru acest scop, unde fiecare cifră individuală corespunde stării unuia dintre LED-uri. Am decis să folosim registre pe 8 biți, deoarece sunt mai comune și mai practice. În consecință, în circuitul nostru vom avea nevoie de 8 astfel de registre pentru a oferi suport pentru 60 de LED-uri.

În continuare ne-am gândit cum să controlăm starea LED-urilor de la Arduino prin registre. Fiecare registru trebuie să primească toți cei 8 biți pentru a funcționa corect. Arduino Uno, desigur, oferă suficiente ieșiri pentru a transmite mai mulți biți în același timp, dar această abordare nu va fi rațională. În plus, există doar 8 registre în circuit, ceea ce înseamnă că trebuie abordate cumva. În acest scop, am adăugat un decodor și două registre de deplasare de 8 biți conectate în cascadă la circuit. Un registru cu deplasare stochează o mască de stare de 8 biți, care va fi încărcată într-unul dintre cele 8 registre obișnuite, al căror număr este stocat în al doilea registru de deplasare. În consecință, un decodor este conectat la al doilea registru de deplasare. În aceste scopuri, un decodor 3 pe 8 este destul de suficient.

Pentru a elimina inversarea numărului de ieșiri de care aveam nevoie, am folosit două microcircuite invertor KR1533LN1. Acest lucru, desigur, a complicat oarecum schema.

O altă provocare a fost tensiunea de funcționare a LED-urilor, care este de 12 volți față de 5 volți pentru cipurile logice. Soluția propusă a fost utilizarea unui invertor de scurgere deschisă. Un astfel de microcircuit acționează ca o cheie care închide (la 1 logic) sau deschide (la 0 logic) unul dintre contactele LED-ului la masă, pornind sau oprind astfel LED-ul. Circuitul presupune funcționarea de la 12 volți, în conformitate cu tensiunea de funcționare a LED-urilor, prin urmare, pentru a obține 5 volți pentru cipurile logice, la circuit a fost adăugat un stabilizator KR142EN5A cu doi condensatori.

Unele intrări ale anumitor microcircuite implică o valoare de intrare constantă, deci au fost conectate la masă sau la o sursă de alimentare. În acest caz, acestea sunt următoarele intrări:

  • Intrarea de resetare inversă MR în ambele registre de deplasare este conectată prin registrul de sarcină la ieșirea de 5 volți a stabilizatorului.
  • Intrarea de activare inversă a ieșirii OE în ambele registre de deplasare este conectată direct la masă.
  • Intrarea de activare inversă a decodorului E0 este conectată la masă

Circuitul este controlat de patru intrări (E1, SH, ST, DS). Scopul și nivelurile de semnal ale fiecăruia dintre ele vor fi discutate mai detaliat mai jos:

Intrarea E1 este destinată să pornească decodorul. În cazul nostru, inițial decodorul are două intrări de control E1, E0 și ambele sunt inverse. O ieșire va fi suficientă, astfel încât a doua (E0) poate fi conectată la pământ. Starea „implicit” a decodorului funcționează până când la E1 se aplică un nivel ridicat de semnal. Pentru a face invers, am conectat această intrare la un invertor. Fără aceasta, decodorul poate emite semnale de control incorecte către registre, de exemplu, la actualizarea datelor într-un registru de deplasare. După cum sa menționat deja, în circuit puteți folosi un decodor 3 pe 8, care poate avea o singură intrare de control non-inversă, ceea ce vă va permite să rezolvați cu ușurință toate problemele descrise mai sus fără fire inutile și un fier de lipit.

Când un singur nivel de semnal este aplicat la E1, decodorul decodifică adresa de registru situată în registrul de deplasare corespunzător și trimite semnalul la ieșirea dorită. După aceasta, decodorul este oprit din nou prin aplicarea unui nivel scăzut de semnal la E1. Această comutare a decodorului generează un semnal la ieșirea dorită, a cărui creștere și scădere servesc ca un impuls de ceas pentru ca registrul să blocheze datele stocate pe magistrală.

Următoarele trei intrări sunt menite să controleze registrele de deplasare. Merită să începeți cu cel mai simplu lucru - intrarea datelor DS. Această intrare, după cum sugerează și numele, este destinată transmiterii de date. Deoarece registrele de deplasare din circuit sunt conectate în cascadă, DS reprezintă pinul corespunzător al unuia dintre ele. Intrarea celui de-al doilea registru de deplasare este conectată la ieșirea ultimei cifre a primului registru. Rezultatul este un registru de deplasare de 16 biți, din care sunt utilizați doar 12 biți.

Intrarea SH este o intrare de ceas. La această intrare este furnizată o undă pătrată, care este responsabilă pentru încărcarea și deplasarea datelor în fiecare dintre registre; în consecință, acest contact al circuitului este conectat la pinii SHCP ai ambelor registre.

Ultimul pin ST servește ca un bloc de date pe ieșirile registrului. La această intrare i se aplică un impuls, dar se aplică numai atunci când datele din registrul de deplasare sunt în cele din urmă încărcate și este necesară fixarea lui la ieșirea registrelor. Abia după ce este dat acest semnal, datele încărcate în interiorul registrului de pe primul rând de flip-flops ajung la al doilea rând de flip-flops și devin disponibile pe magistrală. ST este un contact conectat la pinii STcp ai ambelor registre.

Rămâne de explicat cablarea celor doi pini ai registrelor de deplasare MR și OE. Prima intrare (MR) este responsabilă pentru resetarea datelor din registru. În acest circuit, această caracteristică nu este necesară, așa că un nivel ridicat de semnal este furnizat acestui pin prin sarcină.

A doua intrare de registru (OE) este responsabilă pentru deconectarea celui de-al doilea rând de bistabile din interiorul registrului de deplasare de la magistrală, adică intrarea de activare. Nici această funcție nu este necesară, astfel încât ieșirea este conectată la masă.

Un alt contact nedescris mai sus este conceput pentru a elimina nivelul semnalului de la butonul din centrul ceasului; circuitul butonului este tipic și reprezintă o sarcină și un comutator, în funcție de poziția căruia îi este furnizat un nivel de semnal scăzut sau ridicat. Arduino. În funcție de starea butonului, ceasul funcționează fie în modul de economizor de ecran, fie în modul de afișare a timpului.
Conectarea la Arduino nu are caracteristici speciale, cu excepția faptului că pinul SH ar trebui să fie în mod ideal conectat la pinul digital SCK. Pinii rămași ai circuitului pot fi conectați la oricare dintre intrările digitale disponibile pentru uz general. În cazul nostru, conexiunea arată astfel:

  • Arduino pin13 (SCK) – ieșirea circuitului SH
  • Pinul Arduino 11 – Pinul circuitului ST Pinul Arduino 8 – Pinul circuitului DS Pinul Arduino 5 – Pinul circuitului E1 Pinul 3 Arduino – Pinul butonului Arduino GND – Masa circuitului (conectat și la masa de alimentare)
    După ce proiectarea circuitului a fost finalizată, au început lucrările la baza ceasului.

    Blank-urile au fost realizate din fibră: un cerc cu diametrul de 36 cm - spatele ceasului; și un inel de 36 cm (diametrul exterior) \ 26 cm (diametrul interior) - partea din față. În original, Shadowplay are un diametru de cerc de 72 cm, dar ne-a fost suficient 36. O bandă LED, tăiată anterior în 60 de părți (diodă + rezistor), este lipită de cerc. Au fost forate găuri de-a lungul marginii cercului. Prin intermediul acestora, firele conectate la LED-uri vor fi conectate la placa de breadboard, care se află pe partea din spate a cercului.

    De fapt, LED-urile au cauzat destul de multe batai de cap. Pur și simplu lipindu-le pe suprafața cercului, am calculat ușor greșit. Drept urmare, s-a dovedit că umbra creată de LED-urile nu era suficient de strălucitoare. Prin urmare, a trebuit să petrecem mult timp pentru a le „ridica” cu 50 - 60 de grade, plasând tampoane triunghiulare de carton sub fiecare dintre ele. Da, 60 de triunghiuri mici de carton. Prin urmare, o notă: nu repetați experiența noastră amară - aprovizionați-vă cu tampoane în avans.

    Eram fără timp și nu aveam timp să gravam PCB-ul. Prin urmare, a fost luată o decizie puternică - de a asambla proiectul pe o placă. Am aflat mult mai târziu că un astfel de circuit este destul de dificil de asamblat pe o placă. Ei bine, experiența negativă este și experiență.

    Breadboard și vedere generală din spate a dispozitivului.



    Da, da, ne este rușine.

    Planul inițial a fost să facă o copie exactă a Shadowplay. Cu toate acestea, modul în care degetul utilizatorului este detectat în centrul dispozitivului nu a fost descris în articol. După câteva gânduri, am ajuns la concluzia că un fotorezistor ar putea fi folosit în aceste scopuri. Cu toate acestea, această idee a fost curând abandonată, deoarece Fotorezistorul poate avea operații aleatorii. Dispozitivul poate fi amplasat în condiții de diferite grade de iluminare, ceea ce înseamnă că nu va fi întotdeauna capabil să detecteze un deget cu o probabilitate de 100%. Preferința s-a dat butonului, pe care l-am plasat în centrul structurii. Are un alt avantaj în afară de fiabilitate. În ciuda dimensiunilor sale mici, umbra sa este ideală pentru rolul unui ceas. Astfel, dacă doriți, puteți programa dispozitivul să funcționeze constant în modul ceas și fără a pune degetul pe el.

    După ce întregul circuit a fost lipit (nopți lungi nedormite de muncă minuțioasă cu un fier de lipit și pensete), cablurile invertorului au fost conectate la LED-uri, a venit momentul solemn - prima încercare de a porni dispozitivul. Și, iată, diodele chiar au ars! Dar nu tot. La început, a apărut părerea că ceva a fost lipit incorect. Cu toate acestea, după cum sa dovedit mai târziu, motivul era în altă parte. Deoarece la prima pornire nu am conectat toate intrările de control ale cipurilor logice, ci doar pe cele mai necesare, a apărut o ambiguitate a nivelurilor de tensiune la intrările rămase neconectate. În plus, circuitul a fost asamblat pe o placă, cu o grămadă mare de fire și negravate.Firurile erau sensibile semnificativ la radiațiile electromagnetice.De aceea, la cea mai mică supratensiune, elementul logic ar putea funcționa din cauza interferenței la intrările neconectate. . Ca urmare, orice obiect situat în imediata apropiere a plăcii a provocat EMR și, în consecință, un comportament imprevizibil al logicii și, odată cu acesta, al LED-urilor.

    Până la urmă, problema a avut o soluție destul de simplă. A fost suficient să inițializați intrările tuturor elementelor logice de pe circuit. Acestea. conectați complet circuitul, astfel încât să nu mai rămână intrări neutilizate (intrarile și ieșirile nu afectează această problemă, deoarece logica microcircuitelor nu depinde de ele) și totul a căzut la loc.

    Partea software

    Deci, partea hardware este terminată (aproape). Acum este timpul să scriem un program pentru Arduino. În primul rând, trebuie să configurați modulul RTC, și anume, să introduceți ora în el. Microcircuitul se bazează pe un modul DS1307 de înaltă precizie, interfața de conectare este I2C. Calendarul intern din acesta este calculat până în 2100, luând în considerare anii bisecți. Datorită încărcării bateriei, modulul poate funcționa autonom aproximativ un an. Mai jos este diagrama de conectare RTC la Arduino găsită pe acest site. O mulțime de informații despre modulul RTC au fost preluate și aici.

    După aceea, tot ce a mai rămas a fost să scrie cod care să citească ora de la RTC, să-l transforme într-o mască și să-l trimită pe placă.

    Cod

    #include #include char REG ; tmElements_t te; int c,resetare=1; void setup() ( pinMode(13, OUTPUT); pinMode(11, OUTPUT); pinMode(8, OUTPUT); pinMode(5, OUTPUT); pinMode(3, INPUT); Serial.begin(57600); //data blocul vă permite să setați ora în RTC folosită o dată //te.Hour = 18; //te.Minute = 50; //te.Second = 0; //te.Day = 20; //day //te .Month = 4 ; // luna //te.Year = CalendarYrToTm(2016); //RTC.write(te); ) void loop() (if(digitalRead(3)) // va funcționa dacă butonul este apăsat (RTC.read(te); SetShadowTime(te.Hour,te.Minute,te.Second,2); // se calculează și se setează ora la întârzierea ceasului (900); reset=1; ) altfel // dacă butonul nu este apăsat, setați economizorul de ecran (wait1 (); reset=1; ) //resetați LED-urile pentru (int j = 0; j<8 ; j++) SetUpLightByMask(j,0); } //=======================================================================Вспомогательные функции void SetUpLightByMask(int RegNum, char LightMask) // функция подсветки светодиодов согласно полученной маске в заданном регистре { digitalWrite(5, LOW); digitalWrite(11, LOW); shiftOut(8, 13, MSBFIRST, LightMask); shiftOut(8, 13, LSBFIRST, RegNum); digitalWrite(11, HIGH); digitalWrite(5, HIGH); } void digitalClockDisplay() { //Функция вывода времени из RTC в консоль, полезна при настройке RTC RTC.read(te); Serial.print(te.Hour); Serial.print(" : "); Serial.print(te.Minute); Serial.print(" :"); Serial.print(te.Second); Serial.print(" "); Serial.print(te.Day); Serial.print(" "); Serial.print(te.Month); Serial.print(" "); Serial.print(tmYearToCalendar(te.Year)); Serial.println(); } //Функция рассчёта теневых стрелок на часах, в качестве параметров принимает часы, минуты, секунды и в качестве последнего параметра комбинацию стрелок: //0 - только часы,1 - часы и минуты, 2 - часы минуты и секунды void SetShadowTime(int Hours, int Minutes, int Seconds, int param){ int h,hshift,m,s; for(int j = 0; j<8 ; j++) REG[j] = 0; if(Hours >= 12) Ore -= 12; h = ore + 6; dacă(h >= 12) h -= 12; hshift = (int) Minute / 12; REG[(int)(((h*5)+hshift)/8)] = REG[(int)(((h*5)+hshift)/8)] | 1<<(((h*5)+hshift)%8); if(param == 1) {m = Minutes + 30; if(m ><<(m%8); } if(param == 2) {m = Minutes + 30; if(m >= 60) m -= 60; REG[(int)(m/8)] = REG[(int)(m/8)] | 1<<(m%8); s = Seconds + 30; if(s >= 60) s -= 60; REG[(int)(s/8)] = REG[(int)(s/8)] | 1<<(s%8); } for(int j = 0; j<8 ; j++) SetUpLightByMask(j,REG[j]); } void wait1() //один из вариантов функций заставки {for(int a = 0; a < 8; a++) {c=0; for(int b = 0; b < 8; b++) {c = c << 1; c = c | 1; SetUpLightByMask(a, c); delay(10); } } for(int a = 0; a < 8; a++) {c=255; for(int b = 0; b < 8; b++) {c = c << 1; SetUpLightByMask(a, c); delay(10); } } }

    Asamblare

    Dispozitivul poate fi considerat aproape gata. Tot ce rămâne este să asamblați toate componentele împreună și să-l lansați. Placa și alte părți (Arduino, RTC) au fost atașate în spatele ceasului. Un inel este atașat deasupra cercului cu LED-uri, ascund detaliile de implementare. Pentru a distrage atenția utilizatorului de la imperfecțiunile designului, inelul a fost vopsit cu un model „a la a microcircuit”. Și în sfârșit - conectat. Rezultatul este mai jos:

    Ne cerem scuze pentru calitatea fotografiei.

    Iată un mic exemplu de combinații care pot fi lansate ca „ecran de deschidere”:

    Și iată, de fapt, ceasul este în stare de funcționare:

    Mișcarea mâinilor de aici este ușor accelerată pentru a arăta că atât acelui minute, cât și cel al orelor se mișcă.

    Și da, anticipând întrebarea pe care probabil vrei să o pui. Cum să distingem orele, minutele și secundele? Au fost multe controverse pe această temă. Au fost propuse diverse soluții la această problemă: de la iluminarea multicoloră a mâinilor până la pornirea alternativă a mâinilor (întâi acul orelor, după o perioadă scurtă de timp acul minutelor etc.). Cu toate acestea, după ce ne-am uitat la original, ne-am dat seama că designerii vienezi, în principiu, nu s-au deranjat cu această problemă. S-a decis să închidă ochii la acest mic defect. Probabil va fi eliminat în viitor.

  • ceas
  • Arduino
Adaugă etichete

Ceas cu iluminare de fundal LED și minute pulsate pe un microcontroler Arduino
Acest ceas unic cu iluminare de fundal LED și minute pulsate a fost realizat folosind cipul de controler TLC5940 PWM. Sarcina sa principală este de a extinde numărul de contacte de modulație PWM. O altă caracteristică a acestui ceas este că a convertit un voltmetru analogic într-un dispozitiv care măsoară minutele. Pentru a face acest lucru, o nouă scară a fost tipărită pe o imprimantă standard și lipită peste cea veche. Ca atare, al 5-lea minut nu este numărat, doar că în timpul celui de-al cincilea minut contorul de timp arată săgeata care indică sfârșitul scalei (în afara scalei). Controlul principal este implementat pe microcontrolerul Arduino Uno.

Pentru a se asigura că lumina de fundal a ceasului nu strălucea prea puternic într-o cameră întunecată, a fost implementat un circuit pentru a regla automat luminozitatea în funcție de iluminare (a fost folosit un fotorezistor).

Pasul 1: Componentele necesare



Iată ce veți avea nevoie:

  • Modul voltmetru analogic 5V DC;
  • microcontroler Arduino UNO sau alt Arduino adecvat;
  • Placa de circuite Arduino (placa proto);
  • Modul DS1307 Real Time Clock (RTC);
  • Modul cu controler PWM TLC5940;
  • Ilumini de fundal LED petal – 12 buc.;
  • Componente pentru asamblarea unui circuit de control automat al luminozității (LDR).

De asemenea, pentru producția altor componente ale proiectului, este de dorit să aveți acces la o imprimantă 3D și o mașină de tăiat cu laser. Se presupune că aveți acest acces, așa că instrucțiunile vor include desene de fabricație în etapele corespunzătoare.

Pasul 2: Apelați




Cadranul este format din trei părți (straturi) tăiate pe o mașină de tăiat cu laser din tablă MDF de 3 mm, care sunt fixate împreună cu șuruburi. O placă fără fante (dreapta jos în imagine) este plasată sub o altă placă pentru a poziționa LED-urile (stânga jos). Apoi, LED-urile individuale sunt plasate în sloturile corespunzătoare, iar panoul frontal este pus deasupra (sus în figură). Patru găuri sunt găurite de-a lungul marginii cadranului, prin care toate cele trei părți sunt prinse împreună.

  • Pentru a testa performanța LED-urilor în această etapă, a fost folosită o baterie tip monedă CR2032;
  • Pentru fixarea LED-urilor au fost folosite mici benzi de bandă adezivă, care au fost lipite de spatele LED-urilor;
  • Toate picioarele LED au fost pre-îndoite în consecință;
  • Au fost reforate găurile de-a lungul marginilor, prin care s-a efectuat șurubul. S-a dovedit că acest lucru era mult mai convenabil.

Desenul tehnic al pieselor cadranului este disponibil la:

Pasul 3: Proiectați circuitul



În această etapă a fost dezvoltat circuitul electric. În acest scop au fost folosite diverse manuale și ghiduri. Nu vom aprofunda acest proces; cele două fișiere de mai jos arată circuitul electric finit care a fost utilizat în acest proiect.

Pasul 4: Conectarea plăcii de circuite Arduino





  1. Primul pas este să dezlipiți toate contactele ac de pe plăcile de circuite și plăcile de secțiune;
  2. În plus, datorită faptului că puterea de 5V și GND sunt folosite de atât de multe plăci și dispozitive periferice, pentru fiabilitate, două fire pentru 5V și GND au fost lipite pe placa de circuite;
  3. Apoi, un controler TLC5940 PWM a fost instalat lângă contactele folosite;
  4. Apoi controlerul TLC5940 este conectat conform schemei de conectare;
  5. Pentru a putea folosi bateria, pe marginea plăcii de circuite a fost instalat un modul RTC. Dacă îl lipiți în mijlocul plăcii, marcajele pinului nu vor fi vizibile;
  6. Modulul RTC a fost conectat conform schemei de conectare;
  7. Un circuit de control automat al luminozității (LDR) a fost asamblat, îl puteți vizualiza la link
  8. Firele pentru voltmetru sunt conectate prin conectarea firelor la pinul 6 și GND.
  9. La sfârșit, au fost lipite 13 fire pentru LED-uri (În practică, s-a dovedit că este mai bine să faceți acest lucru înainte de a trece la pasul 3).

Pasul 5: Cod

Codul de mai jos a fost compilat din diferite componente ale ceasului găsite pe Internet. A fost complet depanat și acum este complet funcțional și au fost adăugate câteva comentarii destul de detaliate. Dar înainte de a încărca în microcontroler, luați în considerare următoarele puncte:

  • Înainte de a flashiza firmware-ul Arduino, trebuie să decomentați linia care setează ora:
    rtc.adjust(DateTime(__DATE__, __TIME__))
    După ce ați afișat intermitent controlerul cu această linie (ora este setată), trebuie să îl comentați din nou și să afișați din nou controlerul. Acest lucru permite modulului RTC să folosească bateria pentru a-și aminti ora în cazul în care se pierde alimentarea principală.
  • De fiecare dată când utilizați „Tlc.set()”, trebuie să utilizați „Tlc.update”

Pasul 6: Inelul exterior

Inelul exterior al ceasului a fost imprimat 3D folosind o imprimantă Replicator Z18. Se atașează la ceas folosind șuruburi pe fața ceasului. Mai jos este un fișier cu un model 3D al inelului pentru imprimare pe o imprimantă 3D.

Pasul 7: Asamblarea ceasului


Microcontrolerul Arduino cu toate celelalte componente electronice a fost fixat pe spatele ceasului folosind șuruburi și piulițe ca distanțiere. Apoi am conectat toate LED-urile, voltmetrul analogic și LDR la firele care au fost lipite anterior la placa de circuit. Toate LED-urile sunt interconectate printr-un picior și conectate la pinul VCC de pe controlerul TLC5940 (o bucată de sârmă este pur și simplu lipită într-un cerc).

Până acum, toate acestea nu sunt foarte bine izolate de scurtcircuite, dar lucrările la acest lucru vor continua și în versiunile viitoare.

Cele mai bune articole pe această temă