Bruke en Arduino som en LCD-klokke

I denne veiledningen vil jeg vise deg hvordan du kan slå en Arduino til en klokke med en 1602 LCD-skjerm, en Arduino, en hånd full av hoppere og en Real Time Clock-chip / -modul. Flott som tilbehør til skrivebordet hjemme eller på jobb.

Komponentene

  • Arduino-Ideelt an uno eller Duemilanove
  • 1602 LCD-skjerm-Alle HD44780-baserte skjermverk
  • 1307 RTC Chip-modul
  • Jumperkabler
  • Datamaskin for å programmere Arduino
  • Boks for å holde den relativt ryddig i

Kobler det sammen

Dette prosjektet vil bruke en rekke jumperkabler innenfor en svært liten plass, så ta deg tid til å sjekke og kontrollere plasseringene dine for ikke å produsere noen magiske blå røyk.

Koble LCD-skjermen til Arduino, for å sjekke alt fungerer som det skal. Start med de røde og svarte strømkablene fra Arduino til brødbrettet, og deretter strøm til LCD-skjermen. Hvis du viser ikke bakgrunnsbelysning, ignorerer pins 15 og 16 på LCD-skjermen (de høyre høyre kontaktene).

LCD-tilkoblinger hvor Pin 1 på LCD er langt til venstre:

  • 1 - Ground Rail
  • 2 - 5v Rail
  • 3 - Til potensiometer
  • 4 - Digital 12
  • 5 - Ground Rail
  • 6 - Digital 11
  • 11 - Digital 5
  • 12 - Digital 4
  • 13 - Digital 3
  • 14 - Digital 2
  • 15 (bakgrunnsbelysning) - 5v Rail
  • 16 (bakgrunnslys) - Ground Rail

Skjermen er basert på HD44780-brikken, en svært allsidig chip som brukes i en rekke forskjellige skjermstørrelser, alt fra 16x1 til 40x2. Alle disse vil fungere bra, den eneste mindre justeringen som kreves er å sikre at alt stemmer riktig inn i koden, men dette er merket for å gjøre det enkelt å passe dine behov.

Når skjermen er koblet til, kan du koble til RTC-modulen. Ulike moduler kan ha en annen rekkefølge av pins, så sjekk nøye med modulen din før du går videre til neste trinn.

Tilkobling av RTC-modulen:

  • SDA - Analog 0
  • SCL - Analog 1
  • 5v / VCC - 5V Rail
  • GND - Ground Rail
Tilkobling av RTC-modulen

Kontrollerer det fungerer

Før du legger litt strøm, er det best å dobbeltsjekke ledningen, slik at strøm og jordkabler er på de riktige stedene.

Når du er glad, koble Arduino. Du ser en linje med svarte bokser på skjermen. Hvis du ikke gjør det, kan du prøve å justere potensiometeret til noe vises.

Du bør ha Arduino IDE (senest ved skrivingstidspunktet v1.0.5) installert på datamaskinen. Hvis ikke, besøk Arduino nettside for å laste ned og installere.

Innenfor Arduino IDE, klikk Fil> Eksempler> LiquidCrystal> HelloWorld. Et nytt vindu fullt av kode åpnes. Klikk Fil og så Laste opp. På mindre enn et minutt vil LCD-skjermen våren bli levende og vise Hei Verden og teller opp hvert sekund.

Du har en arbeidsskjerm.

Innstilling av tiden i RTC

Du må fortelle RTC-brikken riktig tid. Ettersom brikken bruker et batteri for å fortsette å telle, kan det bare gjøre dette når det er tid å begynne å telle fra.

Start med en fersk Arduino-skjerm, kopier og lim inn følgende kode, rull ned litt for å endre tiden til gjeldende tid.

#include "Wire.h" #define DS1307_I2C_ADDRESS 0x68 byte decToBcd (byte val) return ((val / 10 * 16) + (val% 10));  void setDateDs1307 (byte sekund, // 0-59 byte minutt, // 0-59 byte time, // 1-23 byte dayOfWeek, // 1-7 1 = Mån, 7 = Sun byte dayOfMonth, // 1- 28/29/30/31 byte måned, // 1-12 byte år // 0-99) Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (andre)); Wire.write (decToBcd (minutt)); Wire.write (decToBcd (time)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (måned)); Wire.write (decToBcd (år)); Wire.endTransmission ();  tomtoppsett () byte sekund, minutt, time, dagOfWeek, dagOfMonth, måned, år; Wire.begin (); pinMode (13, OUTPUT); // Endre disse verdiene til det du vil sette klokken til. // Det er best å legge til 30 sekunder til et minutt for å tillate tid for datamaskinen din å kompilere og laste opp gjeldende tid. // Bare kjør dette skriptet en gang, da kjører det igjen vil overskrive tiden som er angitt i RTC-brikken! // Timer er i 24-timers format // Dag i uken starter med mandag = 1 til søndag = 7 // År er i YY-format, så bruk bare de siste 2 sifrene i året // // Når du har kjørt program, blinker lysdioden på pin 13 for å si at den er ferdig, IKKE UNPLUG ELLER GJENSTILL. // Bare følg opplæringen og last opp LCD-koden for å unngå å overskrive riktig tid med denne gangen igjen. // sekund = 0; minutt = 40; time = 21; dayOfWeek = 3; dayOfMonth = 25; måned = 6; år = 14; setDateDs1307 (andre, minutt, time, dagOfWeek, dagOfMonth, måned, år); // / / / void loop () digitalWrite (13, HIGH); // slå lysdioden på (høy er spenningsnivået) forsinkelse (1000); // vent på en annen digitalWrite (13, LOW); // Slå av lysdioden ved å gjøre spenningen LOW forsinkelse (1000);  

Du bør legge til ekstra 30 sekunder eller minutt for å ta hensyn til kompilering og opplastingstid. Klikk Laste opp å sende dette til Arduino. Du trenger bare å kjøre dette en gang, men hvis klokken går tilbake eller videresender en time - eller du flytter tidssone / land - du må løpe tidsinnstillingsskissen igjen.

Laster opp tidsskissen

Det siste trinnet er den faktiske skissen som vil utføre klokken. De eneste endringene du må gjøre er å sette datoen til hvordan du normalt vil lese den. Nåværende skript viser datoen som DD / MM / 20YY, For å endre denne rulle ned til helt enden av koden, har jeg merket de 2 linjene som kan endres, så vel som skjermen

#include "Wire.h" #include  #define 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 * sekund, byte * minutt, byte * time, byte * dagOfWeek, byte * dagOfMonth, byte * måned, byte * år) Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission (); Wire.requestFrom (DS1307_I2C_ADDRESS, 7); * andre = bcdToDec (Wire.read () & 0x7f); * minutt = bcdToDec (Wire.read ()); * time = bcdToDec (Wire.read () & 0x3f); * dayOfWeek = bcdToDec (Wire.read ()); * dayOfMonth = bcdToDec (Wire.read ()); * måned = bcdToDec (Wire.read ()); * år = bcdToDec (Wire.read ());  tomtoppsett () byte sekund, minutt, time, dagOfWeek, dagOfMonth, måned, år; Wire.begin (); // ENDRE OM DU BRUKER EN ANNET LCD-SKJERM // lcd.begin (16, 2);  tomgangsløype () byte sekund, minutt, time, dagOfWeek, dagOfMonth, måned, år; String s, m, d, mth, h; getDateDs1307 (& second, & minutt, & time, & dayOfWeek, & dayOfMonth, & month, & year); hvis (andre < 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  

Når du er fornøyd med endringene, klikker du Laste opp. Skjermen vil nå vise gjeldende dato og klokkeslett, selv etter at den ble koblet fra.

Rydde opp det

Finn en fin utseende boks for å skjule Arduino og ledninger, legg til et batteri eller koble Arduino til en USB-lader for strøm (iPhone-ladere fungerer bra), og der har du det, en fantastisk liten klokke laget av deg.

Konklusjon

Du vil ha en strålende hjemmelaget klokke for ditt skrivebord eller nattbord som ikke krever innstilling igjen. Som det er laget med en Arduino, og med 7 ekstra pins tilgjengelig, kan du legge til en summer, LED eller knapper for å legge til en alarm lett. 

Utvid ytterligere ved å kontrollere bakgrunnsbelysningen for å slå på og av ved bestemte tider. For å gjøre dette krever bare at du kobler 15 lengst rødt ledning - fra LCD-skjermen til en digital pinne og legg til en tid for å sjekke inn koden for å sette pinnen høy eller lav. En perfekt utfordring.