Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Vlerësime
  • Ne bëjmë një orë elektronike në Arduino me duart tona. Bërja e një ore elektronike në Arduino me duart tuaja Orë të gatshme në Arduino

Ne bëjmë një orë elektronike në Arduino me duart tona. Bërja e një ore elektronike në Arduino me duart tuaja Orë të gatshme në Arduino

Një nga projektet e para që fillestarët ndërtojnë duke përdorur një tabelë Arduino është një orë e thjeshtë që mban kohën. Në thelb, orët e tilla bazohen në një modul RTC (Ora në kohë reale) të lidhur me Arduino. Sot, modele të ndryshme RTC janë të disponueshme në tregun e komponentëve elektronikë, të ndryshëm në saktësi dhe çmim. Modelet e zakonshme përfshijnë DS1302, DS1307, DS3231.



Por ju mund të bëni një orë në Arduino pa përdorur një RTC, veçanërisht nëse nuk mund të merrni module të tilla. Sigurisht, saktësia në këtë rast do të jetë e ulët, kështu që projekti duhet të konsiderohet më tepër si një projekt trajnimi.


Parimi i funksionimit të orëve të tilla është mjaft i thjeshtë. Sa herë që aktivizoni këtë orë Arduino, do t'ju duhet ta vendosni në orën aktuale, ashtu si çdo orë analoge. Sigurisht që është më mirë të mos përdorni një orë të tillë në jetën tuaj të përditshme nëse është aktive për një kohë të gjatë pa rindezje dhe rregullim të mëtejshëm, pasi desinkronizimi me kohën aktuale gjatë përdorimit afatgjatë mund të jetë i rëndësishëm.


Kjo orë mund të montohet në një dërrasë të zakonshme buke, pasi nuk kërkon shumë komponentë. Lidhja jonë kryesore këtu do të jetë bordi Arduino Uno. Për të shfaqur kohën, mund të merrni një ekran LCD 16x2. Për të ndryshuar cilësimet e kohës, duhet të lidhni dy butona (për orë dhe minuta). Butonat lidhen me Aduino nëpërmjet rezistorëve 10KΩ. Për të ndryshuar ndriçimin e ekranit do t'ju duhet një potenciometër 10 kOhm. Diagrami i lidhjes për të gjithë këta komponentë me bordin Arduino Uno është paraqitur më poshtë.



Tani ju duhet të programoni Arduino. Një kod i thjeshtë (skicë) që ju lejon të shfaqni kohën në ekranin LCD është dhënë më poshtë.


#përfshi LCD Crystal Liquid(12,11,5,4,3,2); int h=12; int m; int s; flamuri int; int KOHA; konst int hs=8; const int ms=9; int gjendje1; int shtet2; 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(s); if(flamur<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)lcd.print("PM"); nëse(flamur==24)flamur=0; vonesë (1000); LCD.clear(); if(s==60)(s=0; m=m+1; ) if(m==60) (m=0; h=h+1; flamur=flamur+1; ) if(h==13 ) ( h=1; ) lcd.setCursor(0,1); lcd.print ("KALË NJË DITË TË KËRSHME"); //-------Koha // vendosja-------// gjendje1=dixhitalLeximi(hs); if(state1==1) (h=h+1; flamur=flamur+1; if(flamur<12)lcd.print("AM"); if(flag==12)lcd.print("PM"); if(flag>12)lcd.print("PM"); nëse(flamur==24)flamur=0; nëse(h==13)h=1; ) shtet2=lexim dixhital(ms); nëse (gjendja 2==1) ( s=0; m=m+1; ) )

   Faleminderit për interesimin tuaj në projektin e informacionit të faqes në internet.
   Nëse dëshironi që materialet interesante dhe të dobishme të publikohen më shpesh dhe me më pak reklama,
   Ju mund ta mbështesni projektin tonë duke dhuruar çdo shumë për zhvillimin e tij.

Vendosa të bëj një orë elektronike të bërë në shtëpi në një shirit LED duke përdorur një Arduino me një modul në kohë reale, një foto të prodhimit dhe një përshkrim të hollësishëm është bashkangjitur.

Materialet e përdorura:

  • - Shirit diodë në mikroqarqet ws2811 (RGB, furnizimi me energji 12V) 5 metra - 700 rubla;
  • - Arduino nano - 200 rubla;
  • - sensori i dritës - 28 rubla;
  • - moduli në kohë reale RTC DS1307 AT24C32 - 37 rubla;
  • - konverteri i fuqisë LM2596 - 41 rubla;
  • - furnizimi me energji elektrike 12 V 1A;
  • - sensori i temperaturës DALLAS DS18B20 - 48 rubla;
  • - një copë dërrasë buke, dy butona të tillë, tela.
  • - karton i fortë.
  • - letër whatman (2 copë).
  • - shirit me dy anë (3M).
  • - shirit i rregullt.
  • - fletë polietileni të shkumëzuar (të marra nga ambalazhi mbrojtës i pajisjes).

1. Instaloni fontin në MS Office dhe printoni karakterin 8 në të gjithë madhësinë e fletës A4. E bëra këtë në Visio. Shiritat e brendshëm janë kufij për shënimin nën copa të shiritit diodë. Kufijtë e jashtëm janë skicat e numrave.

2. Vizatimi i kufijve të pjesëve të shiritit të diodës në karton

3. Duke përdorur shabllonin e mëposhtëm, bëjmë shenja në polietileni të shkumëzuar, trashësi 15 mm, dhe më pas presim sipas shenjave.

Për prerje përdora një makinë të bërë vetë nga tre copa druri, një fletë chipboard dhe tela nikrom të shtrirë vertikalisht. Mundësuar nga një furnizim i rregulluar me energji elektrike.

4. Ngjitni copa të shiritit të diodës përgjatë kufijve të shënuar në karton dhe lidhini ato duke i bashkuar përgjatë një zinxhiri.

E vendosa qarkun kryesor në një kuti të veçantë, pasi një rast i tillë është i dobët.

Si rezultat, një kabllo është e përshtatshme për orën, në të cilën:

  • +12 V - për të fuqizuar shiritin e diodës;
  • +5V - për fuqizimin e modulit të ndriçimit;
  • 0 - tela e përbashkët (minus);
  • Dalja e të dhënave nga Arduino në shiritin e diodës;
  • dalja e sinjalit nga sensori i dritës në Arduino;

Diagrami i lidhjes Arduino.

Konvertuesi i fuqisë, nano Arduino dhe moduli i orës në kohë reale.

Bordi ndërrues me butona korrigjimi.

Algoritmi i funksionimit është si më poshtë:
Ora tregon kohën, datën dhe temperaturën e dhomës: 15 sekondat e para - koha, më pas 3 sekonda - data, 3 sekonda të tjera - temperaturën, pastaj koha përsëri. Nga sekonda e 45-të data është përsëri 3 sekonda, temperatura është 3 sekonda dhe përsëri koha.
Kur dhoma është e lehtë, ndriçimi i ekranit është i lartë, kur është errësirë, zvogëlohet në minimum.

Pra, ekipi ynë prej tre personash u përball me një detyrë: të montonte një projekt të vogël harduerik, mundësisht në platformën Arduino, në një kohë shumë të shkurtër. Vlen të përmendet se deri në atë moment ne ishim të njohur me qarkun, në pjesën më të madhe, në teori. Dhe kjo do të thotë - nuk ka përvojë me një hekur saldimi (praktikisht), as, veçanërisht, përvojë me Arduino.

Pa pritur, hasëm në një faqe kushtuar projektit Shadowplay Clock. Kjo është një orë muri e projektuar nga një ekip dizajnerësh vjenezë, koha e së cilës mund të shihet duke prekur qendrën e saj me gisht. LED-et ndizen në një mënyrë të tillë që hija e gishtit në qendër të tregojë kohën. U vendos që të krijohen të njëjtat (ose shumë të ngjashme), por në shtëpi. Artikulli i mësipërm, siç mund ta shihni, nuk përmban një përshkrim të detajuar të projektit. Nga e gjithë kjo doli që ne vetë duhej të kuptonim se si funksionon kjo pajisje dhe ta sillnim atë në jetë. E cila është pikërisht ajo që bëmë.

Materiale

Për të krijuar një orë ju duhet:
  • boshllëqe prej fiberboard
  • Shirit LED për 60 dioda
  • Arduino Uno
  • Moduli i orës në kohë reale RTC DS1307
  • butonin
  • dërrasë buke
  • regjistri i ndërrimit 74HC595 (x2)
  • Regjistri i fiksimit 8-bit 74HC573N (x8)
  • dekoder 4-16 K155ID3
  • inverter i kullimit të hapur IN74HC05AN (x10)
  • njësia e fuqisë

Le të fillojmë

Pra, algoritmi i funksionimit të pajisjes:
  1. Kur futet energjia, LED-et ndizen në kombinimin e specifikuar. Në Shadowplay origjinal, të gjitha LED-të u ndezën, por menduam se do të ishte më interesante të lëshonim një kombinim si një mbrojtës i ekranit.
  2. Kur shtypni një buton (po, ne gjithashtu u larguam nga origjinali dhe futëm një buton të vogël në qendër), koha lexohet nga moduli RTC.
  3. Koha e leximit shndërrohet në kod binar (maskë) dhe futet në regjistra.
  4. Në varësi të maskës, dioda e kërkuar ndizet.

Hardware

Kur më në fund vendosëm për idenë e projektit, gjëja e parë që bëmë ishte të përpiqeshim të skiconim mendërisht skemat e përafërta për zbatimin e tij. Pyetja kryesore ishte se si të adresohen 60 LED. Në fakt, përgjigja për këtë pyetje përcaktoi metodën e ndërtimit të pothuajse të gjithë qarkut.

Opsioni i parë që erdhi në mendje lidhej me përdorimin e deshifruesve. Qarku i ndërtuar ishte një kaskadë me katër dekoder 4 - 16 dhe një dekoder 2 - 4, të dy me hyrje të mundësuar dekodimi. Një kaskadë e tillë bëri të mundur ofrimin e adresimit në 64 dalje, gjë që ishte më se e mjaftueshme për të lidhur 60 LED.

Sidoqoftë, atëherë lindi pyetja se si të bëjmë (adresojmë) njëkohësisht më shumë se një punë LED (adresa) me këtë skemë (në fund të fundit, na duhej të siguronim orën me të paktën një minutë dhe një akrep ore). Këtu shfaqet pengesa kryesore e kësaj skeme - dekoderi nuk mund të adresojë, sipas përkufizimit, më shumë se një dalje në të njëjtën kohë.

Kjo pengesë na detyroi të braktisnim idenë e një kaskade dekriptuesish. Për më tepër, tani kemi një kërkesë tjetër për qarkun e ardhshëm - mbështetje për funksionimin e njëkohshëm të numrave të ndryshëm LED.

Për të përmbushur këtë kërkesë, ne menduam se mund të lejojmë çdo LED të ruajë gjendjen e vet. Regjistrat janë të përshtatshëm për këtë qëllim, ku çdo shifër individuale korrespondon me gjendjen e një prej LED-ve. Ne vendosëm të përdorim regjistra 8-bit pasi ata janë më të zakonshëm dhe më praktik. Prandaj, në qarkun tonë do të na duhen 8 regjistra të tillë për të siguruar mbështetje për 60 LED.

Më pas menduam se si të kontrollojmë gjendjen e LED-ve nga Arduino përmes regjistrave. Çdo regjistër duhet të marrë të 8 bitët në mënyrë që të funksionojë siç duhet. Arduino Uno, natyrisht, ofron dalje të mjaftueshme për të transmetuar disa bit në të njëjtën kohë, por kjo qasje nuk do të jetë racionale. Përveç kësaj, ka vetëm 8 regjistra në qark, që do të thotë se ata duhet të adresohen disi. Për këtë qëllim, ne shtuam një dekoder dhe dy regjistra zhvendosjeje 8-bitësh të lidhur në kaskadë në qark. Një regjistër ndërrimi ruan një maskë gjendjeje 8-bitëshe që do të ngarkohet në një nga 8 regjistrat e rregullt, numri i të cilëve ruhet në regjistrin e dytë të ndërrimit. Prandaj, një dekoder është i lidhur me regjistrin e ndërrimit të dytë. Për këto qëllime, një dekoder 3 me 8 është mjaft i mjaftueshëm.

Për të hequr përmbysjen nga numri i daljeve që na duheshin, përdorëm dy mikroqarqe inverter KR1533LN1. Kjo, natyrisht, e ndërlikoi disi skemën.

Një sfidë tjetër ishte voltazhi i funksionimit të LED-ve, i cili është 12 volt në krahasim me 5 volt për çipat logjikë. Zgjidhja e propozuar ishte përdorimi i një inverter kullimi të hapur. Një mikroqark i tillë vepron si një çelës që mbyll (në logjikën 1) ose hap (në 0 logjik) një nga kontaktet LED në tokë, duke ndezur ose fikur LED. Qarku supozon funksionimin nga 12 volt, në përputhje me tensionin e funksionimit të LED-ve, prandaj, për të marrë 5 volt për çipat logjikë, në qark u shtua një stabilizues KR142EN5A me dy kondensatorë.

Disa hyrje të mikroqarqeve të caktuara nënkuptojnë një vlerë hyrëse konstante, kështu që ato ishin të lidhura me tokën ose një burim energjie. Në këtë rast, këto janë hyrjet e mëposhtme:

  • Hyrja MR e rivendosjes së kundërt në të dy regjistrat e ndërrimit lidhet përmes një regjistri ngarkese me daljen 5 volt të stabilizatorit.
  • Hyrja e aktivizimit të kundërt të daljes OE në të dy regjistrat e ndërrimit lidhet drejtpërdrejt me tokën.
  • Hyrja e aktivizimit të kundërt të dekoderit E0 është e lidhur me tokën

Qarku kontrollohet nga katër hyrje (E1, SH, ST, DS). Qëllimi dhe nivelet e sinjalit të secilit prej tyre do të diskutohen më në detaje më poshtë:

Hyrja E1 synon të ndezë dekoderin. Në rastin tonë, fillimisht dekoderi ka dy hyrje kontrolli E1, E0 dhe të dyja janë të anasjellta. Një dalje do të jetë e mjaftueshme, kështu që e dyta (E0) mund të lidhet me tokën. Gjendja "e parazgjedhur" e dekoderit funksionon derisa të aplikohet një nivel i lartë sinjali në E1. Për të bërë të kundërtën, ne e lidhëm këtë hyrje me një inverter. Pa këtë, dekoderi mund të lëshojë sinjale të gabuara kontrolli në regjistra, për shembull, kur përditëson të dhënat në një regjistër ndërrimi. Siç u përmend tashmë, në qark mund të përdorni një dekoder 3 nga 8, i cili mund të ketë një hyrje kontrolli jo të kundërt, i cili do t'ju lejojë të zgjidhni me lehtësi të gjitha problemet e përshkruara më lart pa tela të panevojshëm dhe një hekur saldimi.

Kur një nivel i vetëm sinjali aplikohet në E1, dekoderi deshifron adresën e regjistrit të vendosur në regjistrin përkatës të zhvendosjes dhe dërgon sinjalin në daljen e dëshiruar. Pas kësaj, dekoderi fiket përsëri duke aplikuar një nivel të ulët sinjali në E1. Ky ndërrim i dekoderit gjeneron një sinjal në daljen e dëshiruar, ngritja dhe rënia e të cilit shërbejnë si një impuls i orës për regjistrin për të lidhur të dhënat e ruajtura në autobus.

Tre hyrjet e ardhshme synojnë të kontrollojnë regjistrat e ndërrimit. Vlen të filloni me gjënë më të thjeshtë - futjen e të dhënave DS. Kjo hyrje, siç sugjeron emri, është menduar për transmetimin e të dhënave. Meqenëse regjistrat e zhvendosjes në qark janë të lidhur në kaskadë, DS përfaqëson pinin përkatës të njërit prej tyre. Hyrja e regjistrit të ndërrimit të dytë lidhet me daljen e shifrës së fundit të regjistrit të parë. Rezultati është një regjistër i zhvendosjes 16-bit, nga i cili përdoren vetëm 12 bit.

Hyrja SH është një hyrje e orës. Një valë katrore i jepet kësaj hyrjeje, e cila është përgjegjëse për ngarkimin dhe zhvendosjen e të dhënave në secilin prej regjistrave; në përputhje me rrethanat, ky kontakt i qarkut lidhet me kunjat SHCP të të dy regjistrave.

Pini i fundit ST shërben si një mbyllje e të dhënave në daljet e regjistrit. Në këtë hyrje aplikohet një impuls, por ai aplikohet vetëm kur të dhënat në regjistrin e ndërrimit ngarkohen përfundimisht dhe është e nevojshme të rregullohen në daljen e regjistrave. Vetëm pasi të jepet ky sinjal, të dhënat e ngarkuara brenda regjistrit në rreshtin e parë të flip-flopsit arrijnë në rreshtin e dytë të flip-flopsit dhe bëhen të disponueshme në autobus. ST është një kontakt i lidhur me kunjat STcp të të dy regjistrave.

Mbetet për të shpjeguar lidhjen e dy kunjave të regjistrave të ndërrimit MR dhe OE. Hyrja e parë (MR) është përgjegjëse për rivendosjen e të dhënave brenda regjistrit. Në këtë qark, kjo veçori nuk kërkohet, kështu që një nivel i lartë sinjali furnizohet me këtë kunj përmes ngarkesës.

Hyrja e dytë e regjistrit (OE) është përgjegjëse për shkëputjen e rreshtit të dytë të flip-flopsit brenda regjistrit të ndërrimit nga autobusi, d.m.th., hyrjen e aktivizimit. Ky funksion gjithashtu nuk kërkohet, kështu që dalja lidhet me tokën.

Një kontakt tjetër që nuk përshkruhet më sipër është projektuar për të hequr nivelin e sinjalit nga butoni në qendër të orës; qarku i butonit është tipik dhe përfaqëson një ngarkesë dhe një çelës, në varësi të pozicionit të të cilit furnizohet një nivel i ulët ose i lartë sinjali. Arduino. Në varësi të gjendjes së butonit, ora funksionon ose në modalitetin e ruajtësit të ekranit ose në modalitetin e shfaqjes së kohës.
Lidhja me Arduino nuk ka veçori të veçanta, përveç se kunja SH duhet të lidhet në mënyrë ideale me pinin dixhital SCK. Kunjat e mbetura të qarkut mund të lidhen me cilindo nga hyrjet dixhitale të disponueshme për qëllime të përgjithshme. Në rastin tonë, lidhja duket si kjo:

  • Pini Arduino13 (SCK) – dalja e qarkut SH
  • Kunja e Arduino 11 – kunja e qarkut ST Pini Arduino 8 – kunja e qarkut DS kunja Arduino 5 – Kunja e qarkut E1 kunja Arduino 3 – Kunja e butonit Arduino GND – toka e qarkut (e lidhur gjithashtu me tokën e furnizimit me energji elektrike)
    Pas përfundimit të projektimit të qarkut, filloi puna në bazën e orës.

    Boshllëqet u bënë nga kartoni fibër: një rreth me diametër 36 cm - pjesa e pasme e orës; dhe një unazë me përmasa 36 cm (diametri i jashtëm) \ 26 cm (diametri i brendshëm) - pjesa e përparme. Në origjinal Shadowplay ka një diametër rrethi 72 cm, por na mjaftuan 36. Në rreth është ngjitur një shirit LED, i prerë më parë në 60 pjesë (diodë + rezistencë). Vrimat u shpuan përgjatë kufirit të rrethit. Nëpërmjet tyre, telat e lidhur me LED-të do të lidhen me tabelën e bukës, e cila ndodhet në anën e pasme të rrethit.

    Në fakt, LED-et kanë shkaktuar jo pak dhimbje koke. Thjesht duke i ngjitur në sipërfaqen e rrethit, ne kemi llogaritur pak gabim. Si rezultat, doli që hija e krijuar nga LED-të nuk ishte mjaft e ndritshme. Prandaj, na u desh të kalonim shumë kohë për t'i "ngritur" ato me 50 - 60 gradë, duke vendosur jastëkë kartoni trekëndësh nën secilën prej tyre. Po, 60 trekëndësha të vegjël kartoni. Prandaj, një shënim: mos e përsërisni përvojën tonë të hidhur - rezervoni jastëkët paraprakisht.

    Na mbaronte koha dhe nuk kishim kohë për të gravuar PCB-në. Prandaj, u mor një vendim me vullnet të fortë - të mblidhej projekti në një dërrasë buke. Ne zbuluam shumë më vonë se një qark i tillë është mjaft i vështirë për t'u mbledhur në një dërrasë buke. Epo, përvoja negative është gjithashtu përvojë.

    Breadboard dhe pamja e përgjithshme e pasme e pajisjes.



    Po, po, na vjen turp.

    Plani origjinal ishte të krijonte një kopje të saktë të Shadowplay. Megjithatë, mënyra në të cilën gishti i përdoruesit zbulohet në qendër të pajisjes nuk është përshkruar në artikull. Pas disa mendimeve, arritëm në përfundimin se një fotorezistor mund të përdoret për këto qëllime. Megjithatë, kjo ide u braktis shpejt, sepse Fotorezistori mund të ketë operacione të rastësishme. Pajisja mund të vendoset në kushte të shkallëve të ndryshme të ndriçimit, që do të thotë se nuk do të jetë gjithmonë në gjendje të zbulojë një gisht me probabilitet 100%. Preferenca iu dha butonit, të cilin e vendosëm në qendër të strukturës. Ajo ka një avantazh tjetër përveç besueshmërisë. Pavarësisht përmasave të vogla, hija e saj është ideale për rolin e akrepit të orës. Kështu, nëse dëshironi, mund ta programoni pajisjen që të funksionojë vazhdimisht në modalitetin e orës dhe pa e vendosur gishtin mbi të.

    Pasi u bashkua i gjithë qarku (netët e gjata pa gjumë të punës së mundimshme me një saldim dhe piskatore), prizat e inverterit u lidhën me LED, erdhi momenti solemn - përpjekja e parë për të ndezur pajisjen. Dhe, ja, diodat u dogjën vërtet! Por jo të gjitha. Në fillim lindi mendimi se diçka ishte ngjitur gabimisht. Megjithatë, siç doli më vonë, arsyeja qëndronte diku tjetër. Meqenëse në fillimin e parë nuk lidhëm të gjitha hyrjet e kontrollit të çipave logjikë, por vetëm ato më të nevojshmet, në hyrjet e mbetura të palidhura u shfaq një paqartësi në nivelet e tensionit. Përveç kësaj, qarku u montua në një dërrasë buke, me një grumbull të madh telash dhe jo të gdhendur. Telat ishin dukshëm të ndjeshëm ndaj rrezatimit elektromagnetik. Prandaj, në rritjen më të vogël të tensionit, elementi logjik mund të funksiononte për shkak të ndërhyrjeve në hyrje të palidhura . Si rezultat, çdo objekt i vendosur në afërsi të tabelës shkaktoi EMR dhe, në përputhje me rrethanat, sjellje të paparashikueshme të logjikës, dhe bashkë me të edhe LED.

    Në fund, problemi kishte një zgjidhje mjaft të thjeshtë. Ishte e mjaftueshme për të inicializuar hyrjet e të gjithë elementëve logjikë në qark. ato. lidhni plotësisht qarkun në mënyrë që të mos mbeten hyrje të papërdorura (hyrjet dhe daljet nuk ndikojnë në këtë problem, sepse logjika e mikroqarqeve nuk varet prej tyre), dhe gjithçka ra në vend.

    Pjesa e softuerit

    Pra, pjesa e harduerit ka përfunduar (pothuajse). Tani është koha për të shkruar një program për Arduino. Së pari, duhet të konfiguroni modulin RTC, domethënë, të vendosni kohën në të. Mikroqarku bazohet në një modul DS1307 me precizion të lartë, ndërfaqja e lidhjes është I2C. Kalendari i brendshëm në të llogaritet deri në vitin 2100, duke marrë parasysh vitet e brishtë. Falë karikimit të baterisë, moduli mund të funksionojë në mënyrë autonome për rreth një vit. Më poshtë është diagrami i lidhjes RTC me Arduino që gjendet në këtë faqe. Shumë informacione rreth modulit RTC janë marrë gjithashtu këtu.

    Pas kësaj, gjithçka që mbetej ishte të shkruante kodin që do të lexonte kohën nga RTC, do ta kthente atë në një maskë dhe do ta dërgonte në tabelë.

    Kodi

    #përfshi #përfshi char REG; tmElementet_t te; int c,reset=1; void setup() ( pinMode (13, OUTPUT); pinMode (11, OUTPUT); pinMode (8, OUTPUT); pinMode (5, OUTPUT); pinMode (3, INPUT); Serial.begin (57600); //të dhëna blloku ju lejon të vendosni kohën në RTC të përdorur një herë //te.Ora = 18; //te.Minute = 50; //te.Second = 0; //te.Day = 20; //ditë //te .Muaji = 4 ; // muaj //te.Viti = CalendarYrToTm(2016); //RTC.write(te); ) void loop() ( if(digitalRead(3)) // do të funksionojë nëse shtypet butoni (RTC.read( te); SetShadowTime(te.Hour,te.Minute,te.Second,2); // llogarit dhe cakto kohën në vonesën e orës (900); rivendos =1; ) tjetër // nëse butoni nuk është shtypur, vendosni ruajtësin e ekranit (prit1 (); rivendosni=1; ) //rivendosni LED-të për (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) Orë -= 12; h = Orë + 6; if(h >= 12) h -= 12; hshift = (int) Minuta / 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); } } }

    Kuvendi

    Pajisja mund të konsiderohet pothuajse gati. Mbetet vetëm për të mbledhur të gjithë përbërësit së bashku dhe për ta nisur atë. Pllaka e bukës dhe pjesët e tjera (Arduino, RTC) u ngjitën në pjesën e pasme të orës. Një unazë është ngjitur në krye të rrethit me LED, duke fshehur detajet e zbatimit. Për të shkëputur vëmendjen e përdoruesit nga papërsosmëritë e dizajnit, unaza u pikturua me një model "a la një mikroqark". Dhe së fundi - u fut në prizë. Rezultati është më poshtë:

    Kërkojmë ndjesë për cilësinë e fotos.

    Këtu është një shembull i vogël se cilat kombinime mund të lansohen si "ekran spërkatës":

    Dhe këtu, në fakt, ora është në gjendje pune:

    Lëvizja e akrepave këtu është paksa e përshpejtuar për të treguar se si akrepat e minutave ashtu edhe ato të orës janë në lëvizje.

    Dhe po, duke parashikuar pyetjen që ndoshta dëshironi të bëni. Si të dalloni akrepat e orës, minutës dhe të dytë? Kishte shumë polemika për këtë temë. Për këtë problem janë propozuar zgjidhje të ndryshme: nga ndriçimi shumëngjyrësh i akrepave deri te ndezja e alternuar e akrepave (së pari akrepi i orës, pas një periudhe të shkurtër kohore akrepi i minutave etj.). Sidoqoftë, pasi shikuam origjinalin, kuptuam se dizajnerët vjenezë, në parim, nuk u mërzitën me këtë çështje. U vendos që të mbyllet një sy për këtë të metë të vogël. Me siguri do të eliminohet në të ardhmen.

  • shikojnë
  • Arduino
Shto etiketa

Orë me dritë prapa LED dhe akrep pulsues të minutave në një mikrokontrollues Arduino
Kjo orë unike me dritë të pasme LED dhe akrep pulsues të minutave është bërë duke përdorur çipin e kontrolluesit TLC5940 PWM. Detyra e tij kryesore është të zgjerojë numrin e kontakteve të modulimit PWM. Një veçori tjetër e kësaj ore është se ajo ka kthyer një voltmetër analog në një pajisje që mat minutat. Për ta bërë këtë, një shkallë e re u printua në një printer standard dhe u ngjit në krye të atij të vjetër. Si e tillë, minuta e 5-të nuk llogaritet, thjesht gjatë minutës së pestë, numëruesi i kohës tregon shigjetën që tregon fundin e shkallës (jashtë shkallës). Kontrolli kryesor zbatohet në mikrokontrolluesin Arduino Uno.

Për të siguruar që drita e prapme e orës të mos shkëlqejë shumë në një dhomë të errët, u zbatua një qark për të rregulluar automatikisht ndriçimin në varësi të ndriçimit (u përdor një fotorezistor).

Hapi 1: Komponentët e kërkuar



Ja çfarë do t'ju duhet:

  • Moduli i voltmetrit analog 5V DC;
  • Mikrokontrollues Arduino UNO ose Arduino tjetër i përshtatshëm;
  • Pllakë qarku Arduino (proto bord);
  • Moduli DS1307 Ora në kohë reale (RTC);
  • Modul me kontrollues PWM TLC5940;
  • Dritat e pasme LED me petal - 12 copë;
  • Komponentët për montimin e një qarku të kontrollit automatik të ndriçimit (LDR).

Gjithashtu, për prodhimin e disa komponentëve të tjerë të projektit, është e dëshirueshme të keni akses në një printer 3D dhe një makinë prerëse lazer. Supozohet se ju e keni këtë akses, kështu që udhëzimet do të përfshijnë vizatimet e prodhimit në fazat e duhura.

Hapi 2: Telefono




Zgjedhja përbëhet nga tre pjesë (shtresa) të prera në një makinë prerëse lazer nga fletë MDF 3 mm, të cilat janë të lidhura së bashku me bulona. Një pllakë pa fole (poshtë djathtas në figurë) vendoset nën një pllakë tjetër për të vendosur LED-të (poshtë majtas). Më pas, LED individuale vendosen në foletë e duhura, dhe paneli i përparmë vendoset në krye (sipër në figurë). Katër vrima janë shpuar përgjatë skajit të numrit, përmes së cilës të tre pjesët janë bashkuar me bulona.

  • Për të testuar performancën e LED-ve në këtë fazë, u përdor një bateri me qelizë monetare CR2032;
  • Për të siguruar LED-et, u përdorën shirita të vegjël ngjitës, të cilët u ngjitën në pjesën e pasme të LED-ve;
  • Të gjitha këmbët LED ishin para-përkulur në përputhje me rrethanat;
  • Vrimat përgjatë skajeve u ri-shpuan, përmes të cilave u krye mbyllja. Doli se kjo ishte shumë më e përshtatshme.

Vizatimi teknik i pjesëve të numrit është i disponueshëm në:

Hapi 3: Dizajnoni qarkun



Në këtë fazë u zhvillua qarku elektrik. Për këtë qëllim u përdorën tekste dhe udhëzues të ndryshëm. Ne nuk do të thellohemi shumë në këtë proces; dy skedarët më poshtë tregojnë qarkun e përfunduar elektrik që u përdor në këtë projekt.

Hapi 4: Lidhja e tabelës së qarkut Arduino





  1. Hapi i parë është që të shkrihen të gjitha kontaktet e gjilpërës në bordet e qarkut dhe bordet e seksioneve;
  2. Më tej, për shkak të faktit se fuqia 5V dhe GND përdoren nga kaq shumë borde dhe pajisje periferike, për besueshmëri, dy tela për 5V dhe GND u ngjitën në tabelën e qarkut;
  3. Më pas, një kontrollues TLC5940 PWM u instalua pranë kontakteve të përdorura;
  4. Pastaj kontrolluesi TLC5940 lidhet sipas diagramit të lidhjes;
  5. Për të qenë në gjendje të përdorni baterinë, një modul RTC u instalua në skajin e tabelës së qarkut. Nëse e bashkoni në mes të tabelës, shenjat e kunjave nuk do të duken;
  6. Moduli RTC është lidhur sipas diagramit të lidhjes;
  7. Është mbledhur një qark i kontrollit automatik të ndriçimit (LDR), mund ta shikoni në lidhje
  8. Telat për voltmetrin lidhen duke i lidhur telat me pinin 6 dhe GND.
  9. Në fund, 13 tela për LED u bashkuan (Në praktikë, doli se ishte më mirë ta bënim këtë përpara se të vazhdoni në hapin 3).

Hapi 5: Kodi

Kodi më poshtë është përpiluar nga pjesë të ndryshme të komponentëve të orës që gjenden në internet. Ai është korrigjuar plotësisht dhe tani është plotësisht funksional, dhe janë shtuar disa komente mjaft të detajuara. Por përpara se të ngarkoni në mikrokontrollues, merrni parasysh pikat e mëposhtme:

  • Përpara se të ndezni firmuerin Arduino, duhet të hiqni komentin e linjës që përcakton kohën:
    rtc.adjust(DataOra(__DATE__, __TIME__))
    Pasi të ndizni kontrolluesin me këtë linjë (koha është caktuar), duhet ta komentoni përsëri dhe ta ndezni përsëri kontrolluesin. Kjo lejon modulin RTC të përdorë baterinë për të kujtuar kohën nëse humbet energjia kryesore.
  • Sa herë që përdorni "Tlc.set()" duhet të përdorni "Tlc.update"

Hapi 6: Unaza e jashtme

Unaza e jashtme e orës u printua 3D duke përdorur një printer Replicator Z18. Ajo ngjitet në orë duke përdorur vida në faqen e orës. Më poshtë është një skedar me një model 3D të unazës për printim në një printer 3D.

Hapi 7: Montimi i orës


Mikrokontrolluesi Arduino me të gjitha pajisjet e tjera elektronike u fiksua në pjesën e pasme të orës duke përdorur vida dhe dado si ndarës. Pastaj lidha të gjitha LED-të, voltmetrin analog dhe LDR me telat që ishin ngjitur më parë në bordin e qarkut. Të gjitha LED janë të ndërlidhura nga një këmbë dhe lidhen me kutinë VCC në kontrolluesin TLC5940 (një copë teli thjesht ngjitet në një rreth).

Deri më tani, e gjithë kjo nuk është shumë e izoluar nga qarqet e shkurtra, por puna për këtë do të vazhdojë në versionet e ardhshme.

Artikujt më të mirë mbi këtë temë