După ce am primit câteva tablouri Arduinoși diverse componente radio pentru a face cunoștință cu microcontrolerele, autorul a decis să facă ceva interesant și, în același timp, util. Având în stoc un număr mare de LED-uri, a venit ideea de a crea un ceas binar.
Pe partea electronică, un ceas binar nu este deosebit de complicat, însă autorul a complicat sarcina și a decis să nu salveze butoanele și ledurile. Inițial, proiectul urma să folosească 22 de LED-uri, 6 butoane și un tweeter. De asemenea, a fost o idee să asamblați un ceas pe Arduino Mega datorită unui număr mai mare de pini, dar registrele de schimb 74HC595 s-au dovedit a fi o mântuire.
materiale:
- Arduino Uno
- 2 panouri de dimensiuni complete
- LED-uri roșii 7 buc
- LED-uri verzi 7 buc
- LED-uri albastre 6 buc
- 2 LED-uri galbene și albe
- Rezistori 220 ohmi 25 buc
- Piezo buzzer 1 buc
- 6 butoane butoane tactile
- Shift de ieșire înregistrează 74HC595 în pachetul DIP-16 3 buc
- Cabluri de conectare 90 buc
- Modul de ceas în timp real bazat pe cipul R1 DS1307
Cum va funcționa totul.
Există aproximativ 10 tipuri de ceasuri binare. Unii arată timpul în format bimal zecimal (BCD), alții ca numere binare. Deoarece autorul nu-i place în mod deosebit ceasul BCD, a decis să-și facă binarul pur. Unii oameni le este mai greu să citească, dar diferența nu este mare, deoarece traducerea numerelor de la binar la zecimal este ușoară. De asemenea, o condiție prealabilă pentru creatorul ceasului a fost o indicație a secundelor din ceas.
În plus, ceasul are 6 butoane:
Set - este responsabil pentru modul de setare ceas / alarmă și salvarea parametrului în modul de setare.
Mod - responsabil pentru comutarea între modul de ceas, alarmă și cronometru.
Sus - în setarea de ceas / alarmă / cronometru, crește parametrul cu unu. În ceasul de alarmă și cronometru, acesta este responsabil pentru activarea și dezactivarea modului selectat. Când un semnal este declanșat, acesta va opri semnalul de alarmă / cronometru.
Jos - în setarea de ceas / alarmă / cronometru, acesta va reduce parametrul cu unu. Cronometrul îl va întrerupe fără a reseta numărătoarea inversă. Când alarma se stinge, va transfera semnalul timp de 5 minute.
24/12 - schimbați formatul de timp.
Dim - responsabil pentru pornirea și oprirea LED-urilor (când LED-urile sunt stinse, butoanele rămase nu mai funcționează).
Diagrama de poziționare LED:
Conexiune de componente
Autorul va conecta toate ledurile în serie și cu un rezistor. Rezistența este lipită la unul dintre bornele LED-urilor, nu contează care dintre ele. LED-urile vor fi conectate prin intermediul registrelor de schimb, acest cip are 16 contacte.Acest număr de pini vă permite să utilizați un număr mare de pini, luând doar 3 pini pe Arduino.
Shift Register Pinout 74HC595:
Q0-Q7 sunt concluziile registrului la care vor fi conectate ledurile.
Vcc - i se va aplica un pin de alimentare de 5V.
GND - sol conectat la GND pe Arduino.
OE - știftul este responsabil pentru activarea inversată a pinilor, dar nu va fi folosit, este pur și simplu scurtcircuitat la pământ.
MR este o compensare a registrului inversat, nu trebuie controlată, prin urmare va fi conectată la o sursă de alimentare de 5V.
ST_CP - pinul este responsabil pentru actualizarea stării registrului. La înregistrarea stării, este necesar să se aplice LOW la ea, după înregistrarea - HIGH, pentru a actualiza starea ieșirilor. Trebuie să fie conectat la un știft de pe Arduino. Puteți conecta acest pin în trei registre în paralel.
SH_CP - pin, responsabil pentru schimbarea cu 1 bit din registru. Trebuie să fie conectat la un știft de pe Arduino. Acestea sunt conectate pe microcircuite, de asemenea, în paralel.
DS - datele sunt trimise la acest pin, sunt conectate la pinul de pe Arduino.
Q7 '- acest pin este utilizat pentru conectarea în cascadă cu alte registre 74HC595.
Schema de cablare:
Zgomotul piezo va fi conectat la al treilea știft Arduino în serie cu rezistența. Înainte de a include tweeterul în circuit, autorul a analizat care sunt suporturile pentru PWM, deoarece acest lucru este obligatoriu pentru ea. Pe Arduino Uno, PWM acceptă 3, 5, 6, 9, 10 și 11 pini.
Butoanele sunt conectate folosind rezistențe încorporate în Arduino, cu o parte a butoanelor conectate la pământ și cealaltă cu pinii Arduino.
Deci, designul final arată:
Construiți pe Panou
După ce a dobândit detalii suplimentare, autorul a început să asambleze proiectul pe o panou de pâine conform schemelor. Aspectul era pe punctul de aștepta, deoarece Panoul de bord limitează libertatea în plasarea componentelor, iar firele proeminente nu au creat o plăcere estetică. Dar, până la urmă, placa de bord este destinată modelelor de panou, dar nu și dispozitivelor finite.
Codul programului.
Având o experiență în programare, autorul a decis să scrie codul singur, fără a folosi evoluțiile altor persoane. Primul pas a fost scrierea unei subrutine, este responsabilă pentru a clipi toate diodele și pentru a da semnalul piezo atunci când este pornit. Această funcție ajută la verificarea integrității circuitului, similar cu cea implementată pe mai multe dispozitive.
Schița a ieșit destul de mare, atunci puteți lua în considerare principalele sale caracteristici.
LED de lucru.
Deoarece LED-urile sunt accesate prin registrul de schimburi, în primul rând, a fost necesară implementarea mai multor rutine pentru LED-uri. Pentru o funcționare mai ușoară cu diode, au fost implementate o serie de funcții suplimentare. Sunt implementate diverse efecte ale animării diodelor. Când ceasul nu este setat, diodele responsabile pentru orele și minutele vor începe să clipească (deoarece un ceas normal clipește când nu este setat). LED-urile responsabile de câteva secunde au, de asemenea, propria lor animație, dioda poate rula la stânga și la dreapta în modul de alarmă sau în modul de setare a ceasului.
Bucla principală
Programul este configurat să funcționeze astfel: ceasul afișează informații în funcție de starea curentă și își schimbă starea în funcție de utilizarea butoanelor și evenimentelor. Totul arată ca o cantitate considerabilă de condiții cuibărate. Starea diodelor este actualizată de fiecare dată după verificarea stării cronometrelor și a butoanelor cu un apel către gestionarul lor.
De asemenea, autorul a făcut o treabă excelentă pentru funcționarea corectă a butoanelor de intrare și a cronometrelor. Codul sursă al schiței poate fi descărcat în articol.
Lansați aspectul
După pornirea proiectului, la prima vedere, dispozitivul a funcționat corect și stabil. Însă autorul a găsit un defect, ceasul era în urmă cu o secundă pe oră, pentru o lungă perioadă de timp va fi o mare eroare.
Studiind această problemă, s-a constatat că Arduino Uno original folosește un rezonator ceramic și că nu are precizie pentru măsurarea timpului pe perioade lungi. Cea mai rațională soluție a fost să cumpărați un ceas în timp real, în plus, din cauza acestui modul, timpul din ceas nu va rătăci atunci când este oprit. Autorul a achiziționat modulul Grove RTC de la Seeed Studio. Este o placă finită cu un cip de ceas. Autorul a conectat la pământ pinii modulului SDA și SCL la Arduino pe pinii A4 și A5, GND. Deoarece puterea de 5V este ocupată de placa de ceas, nu a fost nicăieri să conectăm modulul. Autorul a decis să alimenteze modulul de la unul dintre pinii digitali, care va fi alimentat constant.De asemenea, autorul a trebuit să modifice codul sursă și să adauge o bibliotecă de ceasuri în timp real.
Asamblare ceas
După ce a finalizat o lungă lucrare la cod, este timpul să oferiți dispozitivului un aspect complet și să-l transferați de pe panoul de bord pe placa de circuit imprimat. În primul rând, a fost necesar să se facă cablarea pentru tablă. Fritzing a fost folosit pentru asta, deoarece autorul avea deja o idee despre aspectul ceasului, iar el a construit o diagramă a dispozitivului. De asemenea, autorul a trasat manual tabloul, a durat mult timp.
Proiect pentru producerea plăcilor de circuit imprimat:
Fabricarea PCB a fost comandată în China. Seeed Studio are un serviciu de placă PCB Fusion. Prin Fritzing, fișierul a fost exportat în formatul Extended Gerber, mulți producători de plăci lucrează cu acesta. Două săptămâni mai târziu, autorul a primit taxa mult așteptată în e-mail.
A rămas doar pentru a lipi piese deja puțin prăfuite pe tablă. Rezultatul final după lipire arăta mult mai bine decât aspectul de pe panoul de paine.
Autorul proiectului a muncit mult timp și a obținut ceea ce și-a dorit - un ceas binar unic, cu cronometru și ceas deșteptător. Folosind compartimentul bateriei, ceasul poate fi amplasat oriunde. Arduino a îndeplinit așteptările și a făcut față complet sarcinii.