Cuprins:

DIY Arduino Ceas cu alarmă binară: 14 pași (cu imagini)
DIY Arduino Ceas cu alarmă binară: 14 pași (cu imagini)

Video: DIY Arduino Ceas cu alarmă binară: 14 pași (cu imagini)

Video: DIY Arduino Ceas cu alarmă binară: 14 pași (cu imagini)
Video: LDmicro 14: I2C LCD & DS3231 Real-Time Clock (Microcontroller PLC Ladder Programming with LDmicro) 2024, Noiembrie
Anonim
DIY Arduino Binary Alarm Clock
DIY Arduino Binary Alarm Clock
DIY Arduino Binary Alarm Clock
DIY Arduino Binary Alarm Clock
DIY Arduino Binary Alarm Clock
DIY Arduino Binary Alarm Clock

Este din nou clasicul ceas binar! Dar de data aceasta cu funcție suplimentară și mai mare! În acest instructiv, vă voi arăta cum să construiți un ceas cu alarmă binar cu Arduino care vă poate arăta nu numai ora, ci și data, luna, chiar și cu funcțiile de cronometru și alarmă care pot fi folosite și ca lampă de noptieră! Fără alte întrebări, să începem!

Notă: Acest proiect nu utilizează un modul RTC, deci precizia depinde de placa pe care ați folosit-o. Am inclus un mecanism de corecție care va corecta deriva timpului pe o anumită perioadă de timp, dar va trebui să experimentați pentru a găsi valoarea corectă pentru perioada de timp (Mai multe despre acest lucru mai jos) și chiar și cu mecanismul de corecție, acesta va deriva în continuare pe termen lung (în comparație cu fără unul). Dacă cineva este interesat, nu ezitați să implementați utilizarea modulului RTC în acest proiect

Provizii

LED de 5 mm (de orice culoare, am folosit 13 LED-uri albe cu un LED RGB ca indicator) --- 14 buc

Arduino Nano (alții pot funcționa) --- 1 buc

Micro-comutator --- 1 buc

Bucată mică de folie de aluminiu

Placă de montare (pentru carcasă, dar nu ezitați să vă proiectați propria dvs.)

Bucată de hârtie albă (sau orice altă culoare)

Unele folii de plastic (cea folosită ca copertă a cărții)

O grămadă de fire

Buzzer --- 1 buc

Tranzistor NPN --- 1 buc

Rezistoare 6k8 --- 14 buc, 500R --- 1 buc, 20R (10Rx2) --- 1 buc, 4k7 --- 1buc

Alimentare pentru proiect (am folosit baterie li-on)

Banda LED 5050 și un comutator glisant (opțional)

Pasul 1: Conectați circuitul

Conectați circuitul!
Conectați circuitul!

Voi împărți acest pas în:

1) Partea sonoră

2) Panoul cu LED-uri

3) Comutatorul (butonul)

4) Benzi LED

5) Senzorul de capacitate

6) Alimentare

7) Conectați-le pe toate la Arduino

De cele mai multe ori, acesta este doar un pas „urmați schema”. Deci, verificați schema de mai sus sau chiar descărcați-o și imprimați-o!

Pasul 2: Pregătirea piesei Buzzer

Pregătirea piesei Buzzer
Pregătirea piesei Buzzer
Pregătirea piesei Buzzer
Pregătirea piesei Buzzer
Pregătirea piesei Buzzer
Pregătirea piesei Buzzer

Dacă ați mai folosit buzzer cu Arduino, veți ști că, dacă îl conectăm direct la Arduino, nu va fi suficient de puternic. Deci avem nevoie de un amplificator. Pentru a construi amplificatorul, avem nevoie de un tranzistor NPN (practic orice NPN va funcționa, am folosit S9013 pentru că l-am primit de la proiectul vechi) și un rezistor pentru a limita curentul. Pentru a începe, identificați mai întâi colectorul, emițătorul și baza tranzistorului. Un pic de googling a fișei tehnice va funcționa pentru acest lucru. Apoi, lipiți colectorul tranzistorului la terminalul negativ al sonorului. La terminalul pozitiv al buzzerului, doar lipim o bucată de sârmă pentru a o putea lipi mai târziu la Arduino. După aceasta, lipiți rezistorul 500R (sau orice valoare similară a rezistorului) la baza tranzistorului și din rezistor, lipiți o altă bucată de sârmă pentru utilizare viitoare. În cele din urmă, lipiți cele două rezistențe 10R în serie la emițătorul tranzistorului și conectați un alt fir de la rezistențe.

Într-adevăr, consultați schema.

p / s: încă nu știu cum să aleg rezistorul pentru tranzistor la momentul scrierii acestui lucru. Valoarea pe care am folosit-o este selectată empiric.

Pasul 3: Pregătirea panoului LED

Pregătirea panoului LED
Pregătirea panoului LED
Pregătirea panoului LED
Pregătirea panoului LED
Pregătirea panoului LED
Pregătirea panoului LED

Conectați LED-urile și rezistența la placa de prototipare în mod corespunzător și lipiți. Asta e. Urmați schema. În cazul în care v-a interesat spațiul pe care l-am folosit, cu 3 găuri separate pentru fiecare coloană și două găuri separate pentru fiecare rând (consultați imaginea). Și LED-ul indicator? L-am conectat la întâmplare.

După lipirea LED-urilor și a rezistenței la placă, conectați împreună toate terminalele pozitive ale LED-urilor. Apoi, lipiți firele unul câte unul la fiecare rezistor de la bornele negative ale LED-urilor, astfel încât să le putem lipi mai târziu la Arduino.

NOTĂ: S-ar putea să vă confundați cu acest pas. Amintiți-vă, în loc să conectați toate pământul împreună, conectăm toate terminalele pozitive împreună și terminalul negativ la pinul individual de pe Arduino. Astfel, folosim pinul Arduino GPIO ca sol, nu Vcc. În cazul în care, dacă îl conectați accidental înapoi, nu vă faceți griji. Puteți modifica toate de la HIGH la LOW și LOW la HIGH în funcția ledcontrol.

Pasul 4: Pregătirea comutatorului (butonul efectiv)

Pregătirea comutatorului (butonul efectiv)
Pregătirea comutatorului (butonul efectiv)
Pregătirea comutatorului (butonul efectiv)
Pregătirea comutatorului (butonul efectiv)
Pregătirea comutatorului (butonul efectiv)
Pregătirea comutatorului (butonul efectiv)

Pentru comutator (îl voi numi comutator pentru că am folosit micro-comutator, dar știți că este buton), avem nevoie de un rezistor 4k7 pull-down și, bineînțeles, de comutatorul în sine. Ah, nu uitați să pregătiți niște fire. Începeți prin lipirea rezistorului și a unei bucăți de sârmă la pământul comun (COM) al micro-comutatorului. Apoi, lipiți o altă bucată de sârmă la deschiderea normală (NO) a micro-comutatorului. În cele din urmă, atașați un alt fir la rezistor. Asigurați-l cu un lipici fierbinte.

Colțul cunoștințelor: de ce avem nevoie de un rezistor de tip pull-down?

„Dacă deconectați pinul I / O digital de la toate, LED-ul poate clipi neregulat. Acest lucru se datorează faptului că intrarea este„ plutitoare”- adică va reveni aleatoriu fie HIGH, fie LOW. De aceea aveți nevoie de un pull-up sau rezistență verticală în circuit. - Sursa: site-ul web Arduino

Pasul 5: Pregătirea benzii LED

Pregătirea benzii LED
Pregătirea benzii LED
Pregătirea benzii cu LED-uri
Pregătirea benzii cu LED-uri

Banda LED este pentru lampa laterală a patului, care este opțională. Conectați banda LED și comutatorul glisant împreună în serie, nimic special.

Pasul 6: Pregătirea senzorului de capacitate

Pregătirea senzorului de capacitate
Pregătirea senzorului de capacitate
Pregătirea senzorului de capacitate
Pregătirea senzorului de capacitate
Pregătirea senzorului de capacitate
Pregătirea senzorului de capacitate
Pregătirea senzorului de capacitate
Pregătirea senzorului de capacitate

Ok, consultați imaginea. Practic, doar vom atașa firul la o bucată mică de folie de aluminiu (deoarece folia de aluminiu nu poate fi lipită), apoi fixați-o pe o bucată mică de placă de montare. Memento bun, asigurați-vă că nu lipiți complet folia de aluminiu. Lăsați o parte din ea expusă pentru contact direct.

Pasul 7: Pregătirea sursei de alimentare

Pregătirea sursei de alimentare
Pregătirea sursei de alimentare
Pregătirea sursei de alimentare
Pregătirea sursei de alimentare
Pregătirea sursei de alimentare
Pregătirea sursei de alimentare

Întrucât am folosit baterie li-on ca sursă de alimentare, am nevoie de un modul TP4056 pentru încărcare și protecție și de un convertor de boost pentru a converti tensiunea la 9v. Dacă ați decis să utilizați adaptor de perete de 9V, atunci este posibil să aveți nevoie de o mufă DC sau pur și simplu să o conectați direct. Rețineți că valoarea rezistorului pentru amplificator este proiectată pentru 9V și dacă doriți să utilizați altă tensiune, poate fi necesar să schimbați rezistorul.

Pasul 8: conectarea lor la Arduino

Conectarea lor la Arduino
Conectarea lor la Arduino
Conectarea lor la Arduino
Conectarea lor la Arduino
Conectarea lor la Arduino
Conectarea lor la Arduino

Urmați schema! Urmați schema! Urmați schema!

Nu conectați pinul greșit sau lucrurile vor deveni ciudate.

Pasul 9: incintă

Incintă
Incintă
Incintă
Incintă
Incintă
Incintă
Incintă
Incintă

Dimensiunea designului meu este de 6,5 cm * 6,5 cm * 8 cm, deci este puțin voluminoasă. Constă dintr-o fereastră frontală pentru afișaj cu LED și o fereastră superioară pentru lampa de noptieră. Pentru designul meu, consultați imaginile.

Pasul 10: Timp de programare

Image
Image
Timp de programare!
Timp de programare!

Descărcați schița mea de mai jos și încărcați pe Arduino. Dacă nu știi cum să faci asta, nu te obosi să faci acest proiect! Nu glumesc, iată un tutorial bun despre el: încărcați schița pe arduino

Apoi deschideți monitorul serial și ar trebui să-l vedeți ieșind la ora curentă. Pentru a seta ora, iată cum puteți face acest lucru.

Pentru a seta ora: h, XX - unde xx este ora curentă

Pentru a seta minutul: min, XX - xx este minutul curent

Pentru a seta al doilea: s, XX

Pentru a seta data: d, XX

Pentru a seta luna: luni, XX

Când comentariul de mai sus este executat, acesta ar trebui să vă returneze valoarea pe care tocmai ați stabilit-o. (De exemplu, când setați ora cu h, 15, ar trebui să returneze Ora: 15 în monitorul serial.

Pentru senzorul de capacitate, poate fi necesar să-l calibrați înainte ca acesta să funcționeze. Pentru a face acest lucru, apăsați de două ori pe micro-comutator și priviți monitorul serial. Ar trebui să scoată o grămadă de numere. Acum puneți degetul pe senzorul de capacitate și vedeți să luați notă de intervalul numărului. Apoi modificați variabila „captrigger”. Să presupunem că primiți 20-30 când este apăsat, apoi setați captrigger la 20.

Schița folosește biblioteca ADCTouch, asigurați-vă că ați instalat-o.

Pasul 11: Mecanism corectiv

Perioada de timp pentru mecanismul de corecție din codul meu este setată la cea care este corectă pentru mine. Dacă ora nu este încă precisă, trebuie să modificați valoarea variabilei „corrdur”

Corrdurul este acum implicit la 0 în ultima actualizare.

Valoarea corrdur înseamnă câte milisecunde este nevoie pentru a încetini o secundă

Pentru a afla valoarea lui corrdur, utilizați formula:

2000 / (y-x) / x)

unde x = durata efectivă a timpului scurs și y = durata timpului scurs al ceasului, ambele în secundă

Pentru a găsi valoarea lui x și y, trebuie să faceți un mic experiment.

Setați ora ceasului la ora reală și înregistrați ora inițială (ora inițială reală și ora inițială a ceasului ar trebui să fie aceleași). După un timp (câteva ore), înregistrați ora finală reală și ora finală a ceasului.

x = ora finală efectivă-ora inițială și y = ora finală a ceasului-ora inițială

Apoi modificați valoarea lui corrdur în cod și încărcați din nou în Arduino.

Apoi repetați testul și de data aceasta formula s-a schimbat în:

2000 / ((2 / z) + (y-x / x))

Unde x și y este același lucru ca înainte, în timp ce z este valoarea curdură curentă.

Încărcați din nou și efectuați testul mereu până când este suficient de precis pentru dvs.

În cazul în care ceasul dvs. încă accelerează, chiar și corectura este setată la 0 (înseamnă că nu există mecanism de corecție), trebuie să schimbați al doilea ++ în al doilea - în partea mecanică de corecție a codului (l-am comentat), setați corrdur la 0, apoi găsiți nr. de milisecundă pentru a accelera o secundă.

Pasul 12: Cum se utilizează toate funcțiile

Image
Image

Puteți schimba modul apăsând micro-comutatorul.

În primul mod, acesta afișează pur și simplu ora. Dacă indicatorul luminos clipește o dată pe secundă, alarma este oprită. Dacă de 2 ori pe secundă, alarma este activată. Puteți amâna alarma timp de 10 minute în primul mod apăsând senzorul de capacitate.

În al doilea mod, afișează data. Apăsarea senzorului de capacitate nu face nimic.

În al treilea mod, puteți seta temporizatorul. Apăsarea senzorului de capacitate va porni temporizatorul și ar trebui să vedeți că indicatorul luminos a început să clipească. Senzorul de capacitate este, de asemenea, utilizat pentru a seta timpul cronometrului. Raza de timp este de la 1 minut la 59 de minute.

În al patrulea mod, puteți seta ora de alarmă utilizând senzorul de capacitate

În modul al cincilea, puteți seta minutul de alarmă utilizând senzorul de capacitate.

În modul al șaselea, apăsarea senzorului de capacitate va reseta minutul la 30 și secunda la 0 fără a schimba ora. Asta înseamnă că atâta timp cât ceasul nu se deplasează peste 30 de minute, îl puteți recalibra folosind acest mod.

Cel de-al șaptelea mod este modul de a nu face nimic în cazul în care senzorul de capacitate scapă la încărcare.

Oh, pentru a respinge alarma, trebuie doar să apăsați micro-comutatorul. (ULTIMA ACTUALIZARE PENTRU A INCLUDE ALARMA SNOOZE)

Ei bine, ce zici de citirea ceasului? Este ușor! Citirea ceasului binar - Wikihow S-ar putea să te simți ciudat la început, dar te vei obișnui cu el!

Pasul 13: Concluzie

Concluzie
Concluzie
Concluzie
Concluzie

De ce am început acest proiect. Inițial se datorează faptului că am un ceas digital vechi care zace și vreau să-l transform într-un ceas cu alarmă. Din păcate, ceasul vechi s-a dovedit a fi rupt. Așa că am fost de ce să nu construiesc unul folosind Arduino? Cu un pic de căutare pe google, am găsit acest proiect de ceas binar fără RTC pe care îl poate instrui Cello62. Cu toate acestea, nu are funcția de ceas cu alarmă dorită, așa că iau codul și îl modific eu însumi. Și proiectul se naște. Mai mult decât atât, am văzut concursul de ceasuri care se desfășura pe instructiv recent, ceea ce mi-a dat și mai multă motivație să fac acest lucru. Oricum, acesta este încă primul meu proiect care utilizează Arduino, deci o grămadă de posibile îmbunătățiri.

Îmbunătățiri viitoare:

1) Folosiți RTC

2) Setați wireless alarma sau ora sau cronometrul!

3) Orice caracteristică mă gândesc

Pasul 14: Actualizare: după o săptămână de utilizare

Actualizare: după o săptămână de utilizare
Actualizare: după o săptămână de utilizare
Actualizare: după o săptămână de utilizare
Actualizare: după o săptămână de utilizare
Actualizare: după o săptămână de utilizare
Actualizare: după o săptămână de utilizare

În afară de problema evidentă - deriva timpului, următoarea aș spune că este consumul de energie. În primul rând, intensific tensiunea până la 9v, care apoi va fi redusă de regulatorul liniar din Arduino. Regulatorul liniar este foarte ineficient. Ceasul durează doar O ZI. Asta înseamnă că trebuie să-l reîncarc în fiecare zi. Aceasta nu este cea mai mare afacere până când nu vă dați seama că întregul sistem este eficient doar cu aproximativ 50%. Având în vedere că bateria mea este de 2000mAh, aș putea calcula puterea irosită în fiecare zi.

Putere irosită = (7.4Wh * 10%) + (7.4Wh * 90% * 50%) = 4.07Wh pe zi

Adică 1,486kWh pe an! Poate fi folosit pentru a fierbe, uh, 283g de apă (de la 25 C până la 100 C)? Dar, oricum, voi îmbunătăți eficiența ceasului. Modul de a face acest lucru este să nu folosiți deloc regulatorul liniar. Asta înseamnă că trebuie să reglăm convertorul boost la ieșirea de 5V direct în pinul de 5V de pe Arduino. Apoi, pentru a minimiza puterea irosită și mai mult, trebuie să îndepărtez cele două LED-uri de la bord (pin13 și putere), deoarece vor irosi 0,95Wh pe zi. Din nefericire, nu sunt absolut îndrăzneț la lipirea SMD, așa că singura modalitate de a face acest lucru este tăierea șinei de pe bord. După aceasta, trebuie să scot rezistența emițătorului de pe buzzer și lampa de noptieră (banda LED nu funcționează la 5V). Dar asta înseamnă că trebuie să renunți la acea caracteristică uimitoare? Nu! Aici aveți două opțiuni: utilizați dioda LED normală de 5 mm sau utilizați banda LED de 5 V. Dar pentru mine, deja m-am simțit obosit că am făcut acest proiect săptămâna trecută, așa că am decis să renunț la această funcție. Cu toate acestea, am folosit comutatorul inițial pentru funcția de lumină pentru a porni sau opri panoul de ceas pentru a economisi mai mult energie, dar sfârșesc LED-ul intermitent când îl opresc. Bug devine caracteristică? Nu știu (Oricine știe vă rog să-mi spuneți mai jos).

La sfârșitul modificării, acum ceasul durează mai mult de 2 zile!

În continuare am o problemă mai puțin gravă cu ceasul. În timpul încărcării, senzorul de capacitate ar înnebuni, așa că adaug un alt mod care nu face nimic.

În ceea ce privește deriva timpului, deoarece este foarte incomod să vă conectați la computer în fiecare zi pentru a-l reseta, am adăugat un alt mod care va seta minutul la 30 și al doilea la 0. Asta înseamnă că îl puteți reseta la jumătate de oră!

Recomandat: