În acest tutorial vă voi arăta cum să transformați un Arduino într-un ceas utilizând un ecran LCD 1602, un Arduino, o mână plină de jumperi și un chip / modul Real Clock Clock. Mare ca accesoriu pentru biroul dvs. acasă sau la locul de muncă.
Acest proiect va folosi un număr de cabluri pentru jumperi într-un spațiu foarte mic, astfel încât să aveți timp să vă verificați și să vă reexecutați destinațiile de plasare, astfel încât să nu producă vreun fum albastru.
Conectați LCD-ul la Arduino, doar pentru a verifica dacă totul funcționează așa cum ar trebui. Începeți cu cablurile de alimentare roșii și negre de la Arduino la panourile de bord și apoi activați ecranul LCD. Dacă ecranul nu are iluminare, ignorați pinii 15 și 16 pe ecranul LCD (conectorii de extremă dreaptă).
Ecranul se bazează pe chipul HD44780, un chip foarte versatil, care este utilizat într-un număr de dimensiuni diferite de ecran, variind de la 16x1 până la 40x2. Toate acestea vor funcționa bine, singura ajustare minoră necesară este să vă asigurați că toate liniile sunt corect configurate în cadrul codului, dar acest lucru este adnotat pentru a facilita adaptarea la nevoile dvs..
Odată ce ecranul este conectat în sus, puteți conecta modulul RTC. Module diferite pot avea o ordine diferită de pini, așa că verificați cu atenție modulul înainte de a trece la pasul următor.
Înainte de a adăuga o anumită putere, este mai bine să verificați cablajul, asigurându-vă că cablurile de alimentare și de la sol sunt în locurile potrivite.
Odată ce sunteți fericiți, conectați Arduino. Veți vedea o linie de cutii neagră pe ecran. Dacă nu, încercați să reglați potențiometrul până când apare ceva.
Ar trebui să aveți ID-ul Arduino (cel mai recent la momentul scrisului este v1.0.5) instalat pe computer. Dacă nu, vizitați site-ul web Arduino pentru descărcare și instalare.
În ID-ul Arduino, faceți clic pe Fișier> Exemple> LiquidCrystal> HelloWorld. Se deschide o nouă fereastră plină de cod. Clic Fişier și apoi Încărcați. În mai puțin de un minut, ecranul LCD va ieși la viață, arătând Salut Lume și numărați fiecare secundă.
Aveți un ecran de lucru.
Va trebui să spuneți cipului RTC timpul corect. Deoarece cipul utilizează o baterie pentru a ține cont, poate face acest lucru numai după ce are timp să înceapă să numere.
Începând cu un nou ecran Arduino, copiați și inserați următorul cod, derulând puțin pentru a schimba timpul până la ora curentă.
#include "Wire.h" #define DS1307_I2C_ADDRESS 0x68 octet decToBcd (byte val) retur ((val / 10 * 16) + (val% 10)); void setDateDs1307 (octet secundar, // 0-59 octet minut, // 0-59 octet oră, // 1-23 octet dayOfWeek, // 1-7 1 = Mon, 7 = Soare octet dayOfMonth, // 1- 28/29/30/31 octet lună, // 1-12 octeți an // 0-99) Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (a doua)); Wire.write (decToBcd (minute)); Wire.write (decToBcd (ora)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (luni)); Wire.write (decToBcd (an)); Wire.endTransmission (); void setup () byte al doilea, minut, oră, dayOfWeek, dayOfMonth, month, year; Wire.begin (); pinMode (13, OUTPUT); // Modificați aceste valori la ceea ce doriți să setați ora la. // Cel mai bine este să adăugați 30 de secunde la un minut pentru a permite timp pentru calculatorul dvs. să compileze și să încarce ora curentă. // Rulați doar acest script o dată, din moment ce rularea din nou va suprascrie timpul setat în cipul RTC! // Orele sunt în format 24 de ore // Ziua săptămânii începe cu luni = 1 până duminică = 7 // Anul este în formatul YY, deci utilizați doar ultimele 2 cifre ale anului // După ce ați rulat program, LED-ul de pe pinul 13 va clipi pentru a spune că a terminat, NU DESFĂȘURAȚI SAU RESETE. // Pur și simplu urmați tutorialul și încărcați codul LCD pentru a evita suprascrierea din nou a timpului corect. // secunde = 0; minut = 40; ora = 21; dayOfWeek = 3; dayOfMonth = 25; luna = 6; an = 14; setDateDs1307 (al doilea, minut, oră, ziOfWeek, ziOfMonth, lună, an); // * / buclă void () digitalWrite (13, HIGH); // se aprinde LED-ul (nivelul HIGH este nivelul de tensiune) (1000); // așteptați un al doilea program digitalWrite (13, LOW); // opriți LED-ul făcând întârzierea de tensiune LOW (1000);
Ar trebui să adăugați încă 30 de secunde sau minute pentru a ține cont de timpul de compilare și încărcare. Clic Încărcați pentru a trimite acest lucru Arduino. Va trebui doar să o executați o singură dată, dar dacă ceasul dvs. se întoarce sau se întoarce o oră sau dacă vă deplasați în fusul orar / țară, va trebui să executați schița de setare a timpului.
Ultimul pas este schița reală care va executa ceasul. Singurele modificări pe care trebuie să le faceți sunt să setați data la modul în care ați citit-o în mod normal. Scenarul curent arată data ca fiind ZZ / LL / 20aa, pentru a schimba această defila până la sfârșitul codului, am marcat cele 2 linii care pot fi modificate, precum și ecranul
#include "Wire.h" #include#definiti DS1307_I2C_ADDRESS 0x68 LiquidCrystal lcd (12, 11, 5, 4, 3, 2); byte bcdToDec (byte val) retur ((val / 16 * 10) + (val% 16)); void getDateDs1307 (byte * secundă, octet * minut, byte * oră, byte * dayOfWeek, octet * dayOfMonth, octet * lună, octet * an) Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission (); Wire.requestFrom (DS1307_I2C_ADDRESS, 7); * secunde = bcdToDec (Wire.read () & 0x7f); * minute = bcdToDec (Wire.read ()); * ora = bcdToDec (Wire.read () și 0x3f); * dayOfWeek = bcdToDec (Wire.read ()); * dayOfMonth = bcdToDec (Wire.read ()); * luna = bcdToDec (Wire.read ()); * anul = bcdToDec (Wire.read ()); void setup () byte al doilea, minut, oră, dayOfWeek, dayOfMonth, month, year; Wire.begin (); // MODIFICAREA DACĂ UTILIZAȚI-VĂ UN SCREEN LCD LCD // lcd.begin (16, 2); void loop () byte al doilea, minut, oră, dayOfWeek, dayOfMonth, month, year; Stringul s, m, d, m, h; getDateDs1307 (și al doilea, & minute, & oră, & dayOfWeek, & dayOfMonth, & month, & year); dacă (al doilea < 10) s = "0" + String(second); else s = String(second); if (minute < 10) m = "0" + String(minute); else m = String(minute); h = String(hour); if (dayOfMonth < 10) d = "0" + String(dayOfMonth); else d = String(dayOfMonth); if (month < 10) mth = "0" + String(month); else mth = String(month); char* days[] = "NA", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" ; lcd.clear(); // JUMP TO CENTER ON A 16X2 SCREEN // lcd.setCursor(4,0); // CHANGE THE FOLLOWING TO SET THE DATE IN TO YOUR PREFERED ORDER // lcd.print(h + ":" + m + ":" + s); // NEXT LINE, 1 SPACE IN FROM THE LEFT // lcd.setCursor(1,1); // PREFIX THE 20 AS THE RTC CHIP ONLY USES 2 DIGITS FOR THE YEAR // lcd.print(String(days[dayOfWeek]) + " " + d + "/" + mth + "/20" + year); delay(1000); // Wait 1 second
Când sunteți mulțumit de modificările dvs., faceți clic pe Încărcați. Ecranul va afișa acum data și ora curente, chiar și după ce au fost deconectate.
Găsiți o cutie frumoasă în care să ascundeți arduinul și firele, să adăugați o baterie sau să conectați arduinul la un încărcător USB pentru alimentare (încărcătoarele de iPhone funcționează bine) și acolo aveți un ceas fantastic făcut de dvs..
Veți avea un ceas strălucit de casă pentru birou sau noptieră, care nu va mai necesita setare. Așa cum se face folosind un Arduino și având 7 pini în plus, puteți adăuga un buzzer, LED-uri sau butoane pentru a adăuga ușor o alarmă.
Extindeți în continuare prin controlul luminii de fundal pentru pornire și oprire la momente specifice. Pentru a face acest lucru trebuie doar să conectați firul roșu cu 15 fire de la ecranul LCD într-un pin digital și să adăugați o verificare de timp în cod pentru a seta pinul înalt sau scăzut. O provocare perfectă.