Använda en Arduino som en LCD-klocka

I den här handledningen visar jag hur du gör en Arduino till en klocka med en 1602 LCD-skärm, en Arduino, en handfull hoppare och en Real Time Clock-chip / -modul. Bra som tillbehör till ditt skrivbord hemma eller på jobbet.

Komponenterna

  • Arduino-Idealiskt en uno eller Duemilanove
  • 1602 LCD-skärm - Alla HD44780-baserade skärmverk
  • 1307 RTC Chip-modul
  • Startkablar
  • Dator för att programmera Arduino
  • Box för att hålla den relativt snygg i

Ansluta det hela tillsammans

Detta projekt kommer att använda ett antal jumperkablar inom ett mycket litet utrymme, så ta din tid att kolla och kontrollera dina placeringar för att inte producera någon magisk blå rök.

Anslut LCD-skärmen till Arduino, för att kontrollera att allt fungerar som det ska. Börja med de röda och svarta kraftkablarna från Arduino till brödbräda och sedan ström till LCD-skärmen. Om du inte har bakgrundsbelysning, ignorera tapparna 15 och 16 på LCD-skärmen (de högra högra anslutningarna).

LCD-anslutningar där Pin 1 på LCD-skärmen är långt till vänster:

  • 1 - Järnväg
  • 2 - 5v Rail
  • 3 - Till potentiometer
  • 4 - Digital 12
  • 5 - Järnväg
  • 6 - Digital 11
  • 11 - Digital 5
  • 12 - Digital 4
  • 13 - Digital 3
  • 14 - Digital 2
  • 15 (bakgrundsbelysning) - 5v Rail
  • 16 (bakgrundsbelysning) - Järnväg

Skärmen är baserad på HD44780-chipet, ett mycket mångsidigt chip som används i ett antal olika skärmstorlekar, allt från 16x1 upp till 40x2. Alla dessa kommer att fungera bra, den enda mindre justeringen som krävs är att se till att allt stämmer korrekt inuti koden, men det här är annoterat för att göra det enkelt att passa efter dina behov.

När skärmen är ansluten kan du ansluta RTC-modulen. Olika moduler kan ha en annan ordningsstifta, så kontrollera noga med din modul innan du går vidare till nästa steg.

Anslutning av RTC-modulen:

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

Kontrollera det fungerar

Innan du lägger lite ström, är det bäst att dubbelkontrollera kablarna, så att ström och jordkablar är på rätt plats.

När du är lycklig, anslut Arduino. Du ser en rad svarta lådor på skärmen. Om du inte gör det, försök att justera potentiometern tills något visas.

Du bör ha Arduino IDE (senast vid skrivningstidpunkten v1.0.5) installerad på din dator. Om inte, besök Arduino hemsida för att ladda ner och installera.

Inom Arduino IDE, klicka Fil> Exempel> LiquidCrystal> HelloWorld. Ett nytt fönster fullt med kod öppnas. Klick Fil och då Ladda upp. På mindre än en minut kommer LCD-skärmen att springa till liv och visa Hej världen och räknar upp varje sekund.

Du har en arbetsskärm.

Ställa in tiden i RTC

Du måste berätta för RTC-chipet rätt tid. Eftersom chipet använder ett batteri för att fortsätta räkna kan det bara göra det när det är dags att börja räkna från.

Börja med en ny Arduino-skärm, kopiera och klistra in följande kod, rulla lite för att ändra tiden till den aktuella tiden.

#include "Wire.h" #define DS1307_I2C_ADDRESS 0x68 byte decToBcd (byteval) return ((val / 10 * 16) + (val% 10));  void setDateDs1307 (byte sekund, // 0-59 byte minut, // 0-59 byte timme, // 1-23 byte dayOfWeek, // 1-7 1 = Mån, 7 = Sun byte dayOfMonth, // 1- 28/29/30/31 byte månad, // 1-12 byte år // 0-99) Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (sekund)); Wire.write (decToBcd (minut)); Wire.write (decToBcd (timme)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (månad)); Wire.write (decToBcd (år)); Wire.endTransmission ();  void setup () byte sekund, minut, timme, dagOfWeek, dayOfMonth, månad, år; Wire.begin (); pinMode (13, OUTPUT); // Ändra dessa värden till vad du vill ställa in klockan till. // Det är bäst att lägga till 30 sekunder till en minut för att tillåta tid för datorn att kompilera och ladda upp den aktuella tiden. // Bara kör det här skriptet en gång, eftersom körningen igen kommer att överskriva tiden som ställts in i RTC-chipet! // timmar är i 24-timmarsformat // Veckodag börjar med måndag = 1 upp till söndag = 7 // År är i YY-format, så använd endast de senaste 2 siffrorna i året // // När du har kört program blinkar lysdioden på stift 13 för att säga att den har slutförts, FÅR INTE ANSLUTNING ELLER ÅTERSTÄLL. // Följ bara handledningen och ladda upp LCD-koden för att undvika att skriva över den rätta tiden med den här gången igen. // sekund = 0; minut = 40; timme = 21; dayOfWeek = 3; dayOfMonth = 25; månad = 6; år = 14; setDateDs1307 (andra, minut, timme, dagOfWeek, dagOfMonth, månad, år); // * / void loop () digitalWrite (13, HIGH); // Slå på LED-lampan (HIGH är spänningsnivån) fördröjning (1000); // vänta på en andra digitalWrite (13, LOW); // stäng av lysdioden genom att göra spänningen LOW delay (1000);  

Du bör lägga till ytterligare 30 sekunder eller minuter för att ta hänsyn till kompilering och uppladdningstid. Klick Ladda upp att skicka detta till Arduino. Du behöver bara köra den här en gång, men om klockan går tillbaka eller vidarebefordrar en timme - eller du flyttar tidszon / land - måste du köra tidsinställningsskissen igen.

Överför tidsskissen

Det sista steget är den faktiska skiss som kör klockan. De enda förändringar du behöver göra är att ställa in datumet för hur du normalt läser det. Det aktuella skriptet visar datumet som DD / MM / 20YY, För att ändra denna bläddra ner till slutet av koden har jag markerat de 2 linjer som kan ändras såväl som på skärmen

#include "Wire.h" #include  #define DS1307_I2C_ADDRESS 0x68 LiquidCrystal lcd (12, 11, 5, 4, 3, 2); byte bcdToDec (byte val) return ((val / 16 * 10) + (val% 16));  void getDateDs1307 (byte * sekund, byte * minut, byte * timme, byte * dagOfWeek, byte * dagOfMonth, byte * månad, byte * år) Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission (); Wire.requestFrom (DS1307_I2C_ADDRESS, 7); * second = bcdToDec (Wire.read () & 0x7f); * minut = bcdToDec (Wire.read ()); * timme = bcdToDec (Wire.read () & 0x3f); * dayOfWeek = bcdToDec (Wire.read ()); * dayOfMonth = bcdToDec (Wire.read ()); * månad = bcdToDec (Wire.read ()); * år = bcdToDec (Wire.read ());  void setup () byte sekund, minut, timme, dagOfWeek, dayOfMonth, månad, år; Wire.begin (); // ÄNDRA OM DU ANVÄNDER EN ANNAN LCD-SKÄRM // lcd.begin (16, 2);  tomrumsling () byte sekund, minut, timme, dagOfWeek, dagOfMonth, månad, år; String s, m, d, mth, h; getDateDs1307 (& second, & minut, & timme, & dayOfWeek, & dayOfMonth, & month & year); om (andra < 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 är nöjd med dina ändringar klickar du på Ladda upp. Din skärm visar nu aktuellt datum och tid, även efter att du har kopplat loss den.

Rydda upp det

Hitta en snygg snygg box för att dölja Arduino och ledningar, lägg till ett batteri eller anslut Arduino till en USB-laddare för ström (iPhone laddare fungerar bra), och där har du det, en fantastisk liten klocka gjord av dig.

Slutsats

Du kommer att ha en strålande hemlagad klocka till ditt skrivbord eller nattduksbord som inte kräver inställning igen. Eftersom det är gjort med en Arduino, och med 7 extra stift tillgängliga kan du lägga till en summer, LED eller knappar för att enkelt lägga till ett larm. 

Expandera vidare genom att styra bakgrundsbelysningen för att slå på och av vid specifika tider. För att göra detta krävs endast att du sätter i 15 längsta röda ledningar från LCD-skärmen till en digital stift och lägger till en klocka för att klockan ska vara hög eller låg. En perfekt utmaning.