Verwenden eines Arduino als LCD-Uhr

In diesem Tutorial zeige ich Ihnen, wie Sie ein Arduino mithilfe eines 1602-LCD-Bildschirms, eines Arduino, einer Hand voll von Jumpern und eines Real Time Clock-Chips / Moduls in eine Uhr verwandeln. Ideal als Zubehör für Ihren Schreibtisch zu Hause oder auf der Arbeit.

Die Komponenten

  • Arduino-Idealerweise ein Uno oder Duemilanove
  • 1602 LCD-Bildschirm - Jeder HD44780-basierte Bildschirm funktioniert
  • 1307 RTC-Chipmodul
  • Überbrückungskabel
  • Computer zur Programmierung des Arduino
  • Box, um es relativ sauber zu halten

Alles miteinander verbinden

Dieses Projekt verwendet eine Reihe von Überbrückungskabeln auf engstem Raum. Nehmen Sie sich also Zeit, Ihre Platzierungen zu überprüfen und erneut zu überprüfen, um keinen magischen blauen Rauch zu erzeugen.

Schließen Sie das LCD-Display an den Arduino an, um zu überprüfen, ob alles ordnungsgemäß funktioniert. Beginnen Sie mit den roten und schwarzen Stromkabeln vom Arduino zum Steckbrett und schalten Sie dann den LCD-Bildschirm ein. Wenn Ihr Bildschirm keine Hintergrundbeleuchtung hat, ignorieren Sie die Pins 15 und 16 auf dem LCD-Bildschirm (die Anschlüsse ganz rechts)..

LCD-Anschlüsse, bei denen Pin 1 auf dem LCD ganz links ist:

  • 1 - Bodenschiene
  • 2 - 5 V Schiene
  • 3 - zum Potentiometer
  • 4 - Digital 12
  • 5 - Bodenschiene
  • 6 - Digital 11
  • 11 - Digital 5
  • 12 - Digital 4
  • 13 - Digital 3
  • 14 - Digital 2
  • 15 (Hintergrundbeleuchtung) - 5V-Schiene
  • 16 (Hintergrundbeleuchtung) - Bodenschiene

Der Bildschirm basiert auf dem HD44780-Chip, einem sehr vielseitigen Chip, der in verschiedenen Bildschirmgrößen von 16x1 bis 40x2 verwendet wird. Alle diese Funktionen funktionieren einwandfrei. Die einzige geringfügige Anpassung besteht darin, sicherzustellen, dass alles innerhalb des Codes korrekt angeordnet ist. Dies ist jedoch mit Anmerkungen versehen, um es leicht an Ihre Bedürfnisse anzupassen.

Sobald der Bildschirm verkabelt ist, können Sie das RTC-Modul anschließen. Bei verschiedenen Modulen kann es zu einer unterschiedlichen Reihenfolge der Pins kommen. Überprüfen Sie daher Ihr Modul genau, bevor Sie mit dem nächsten Schritt fortfahren.

Verdrahtung des RTC-Moduls:

  • SDA - Analog 0
  • SCL - Analog 1
  • 5V / VCC - 5V Schiene
  • GND - Bodenschiene
Verdrahtung des RTC-Moduls

Überprüfen, dass es funktioniert

Bevor Sie etwas Strom hinzufügen, überprüfen Sie die Verdrahtung am besten, und stellen Sie sicher, dass sich die Strom- und Erdungskabel an den richtigen Stellen befinden.

Wenn Sie zufrieden sind, verbinden Sie das Arduino. Sie sehen eine Reihe von schwarzen Kästchen auf dem Bildschirm. Wenn Sie dies nicht tun, stellen Sie das Potentiometer ein, bis etwas erscheint.

Sie sollten die Arduino-IDE (spätestens zum Zeitpunkt der Veröffentlichung v1.0.5) auf Ihrem Computer installiert haben. Wenn nicht, besuchen Sie die Arduino-Website, um sie herunterzuladen und zu installieren.

Klicken Sie in der Arduino IDE auf Datei> Beispiele> LiquidCrystal> HelloWorld. Ein neues Fenster mit Code wird geöffnet. Klicken Datei und dann Hochladen. In weniger als einer Minute wird das LCD zum Leben erweckt und angezeigt Hallo Welt und jede Sekunde hochzählen.

Sie haben einen Arbeitsbildschirm.

Uhrzeit im RTC einstellen

Sie müssen dem RTC-Chip die korrekte Zeit mitteilen. Da der Chip eine Batterie zum Zählen verwendet, kann er dies nur tun, wenn er die Zeit hat, mit der Zählung zu beginnen.

Beginnen Sie mit einem neuen Arduino-Bildschirm, kopieren Sie den folgenden Code, fügen Sie ihn ein und scrollen Sie ein wenig nach unten, um die Uhrzeit auf die aktuelle Uhrzeit umzustellen.

#include "Wire.h" #define DS1307_I2C_ADDRESS 0x68 Byte decToBcd (Byte-Wert) return ((Wert / 10 * 16) + (Wert% 10));  void setDateDs1307 (Byte Sekunde, // 0-59 Byte Minute, // 0-59 Byte Stunde, // 1-23 Byte TagOfWoche, // 1-7 1 = Mo, 7 = Sun Byte TagOfMonth, // 1- 28/29/30/31 Byte Monat, // 1-12 Byte Jahr // 0-99) Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (Sekunde)); Wire.write (decToBcd (Minute)); Wire.write (decToBcd (Stunde)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (Monat)); Wire.write (decToBcd (Jahr)); Wire.endTransmission ();  void setup () Byte Sekunde, Minute, Stunde, Wochentag, Wochentag, Monat, Jahr; Wire.begin (); PinMode (13, OUTPUT); // Ändern Sie diese Werte in das, auf das Sie Ihre Uhr einstellen möchten. // Am besten fügen Sie einer Minute 30 Sekunden hinzu, damit Ihr Computer die aktuelle Uhrzeit kompilieren und hochladen kann. // Führen Sie dieses Skript nur einmal aus, da bei erneuter Ausführung die im RTC-Chip festgelegte Zeit überschrieben wird! // Die Stunden sind im 24-Stunden-Format. // Der Wochentag beginnt mit Montag = 1 bis Sonntag = 7 // Das Jahr ist im YY-Format. Verwenden Sie also nur die letzten 2 Ziffern des Jahres. // // Wenn Sie die Wenn Sie das Programm starten, blinkt die LED an Pin 13 und zeigt an, dass der Vorgang abgeschlossen ist. // Folgen Sie einfach dem Tutorial und laden Sie den LCD-Code hoch, um ein erneutes Überschreiben der korrekten Zeit mit dieser Zeit zu vermeiden. // Sekunde = 0; Minute = 40; Stunde = 21; dayOfWeek = 3; dayOfMonth = 25; Monat = 6; Jahr = 14; setDateDs1307 (Sekunde, Minute, Stunde, Wochentag, Wochentag, Monat, Jahr); // * / void loop () digitalWrite (13, HIGH); // LED einschalten (HIGH ist der Spannungspegel) delay (1000); // Warten auf eine zweite digitalWrite (13, LOW); // schalte die LED aus, indem du die Spannung LOW delay (1000) machst;  

Sie sollten zusätzliche 30 Sekunden oder Minuten hinzufügen, um die Kompilierungs- und Uploadzeit zu berücksichtigen. Klicken Hochladen um dies dem Arduino zu schicken. Sie müssen dies nur einmal ausführen, aber wenn Ihre Uhr um eine Stunde vor- oder zurückgeht oder Sie Zeitzone / Land verschieben, müssen Sie die Zeiteinstellungsskizze erneut ausführen.

Hochladen der Zeitskizze

Der letzte Schritt ist die eigentliche Skizze, mit der die Uhr ausgeführt wird. Die einzige Änderung, die Sie vornehmen müssen, ist, das Datum so einzustellen, wie Sie es normalerweise lesen würden. Das aktuelle Skript zeigt das Datum als an TT / MM / 20JJ, Um diesen Bildlauf bis zum Ende des Codes zu ändern, habe ich die beiden Zeilen, die geändert werden können, sowie den Bildschirm markiert

#include "Wire.h" #include  #define DS1307_I2C_ADDRESS 0x68 LiquidCrystal lcd (12, 11, 5, 4, 3, 2); Byte bcdToDec (Byte-Wert) Rückkehr ((Wert / 16 * 10) + (Wert% 16));  void getDateDs1307 (Byte * Sekunde, Byte * Minute, Byte * Stunde, Byte * DayOfWeek, Byte * DayOfMonth, Byte * Monat, Byte * Jahr) Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission (); Wire.requestFrom (DS1307_I2C_ADDRESS, 7); * second = bcdToDec (Wire.read () & 0x7f); * minute = bcdToDec (Wire.read ()); * hour = bcdToDec (Wire.read () & 0x3f); * dayOfWeek = bcdToDec (Wire.read ()); * dayOfMonth = bcdToDec (Wire.read ()); * month = bcdToDec (Wire.read ()); * year = bcdToDec (Wire.read ());  void setup () Byte Sekunde, Minute, Stunde, Wochentag, Wochentag, Monat, Jahr; Wire.begin (); // ÄNDERN, WENN IHR EINEN VERSCHIEDENEN LCD-BILDSCHIRM VERWENDET // lcd.begin (16, 2);  void loop () Byte Sekunde, Minute, Stunde, Wochentag, Wochentag, Monat, Jahr; String s, m, d, mth, h; getDateDs1307 (& second, & minute, & hour, & dayOfWeek, & dayOfMonth, & Monat & Jahr); wenn (zweitens < 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  

Wenn Sie mit Ihren Änderungen zufrieden sind, klicken Sie auf Hochladen. Ihr Bildschirm zeigt jetzt das aktuelle Datum und die aktuelle Uhrzeit an, auch nachdem Sie den Netzstecker gezogen haben.

Aufräumen

Suchen Sie nach einer gut aussehenden Box, in der Sie das Arduino und die Kabel verstecken, einen Akku hinzufügen oder das Arduino an ein USB-Ladegerät anschließen können (iPhone-Ladegeräte funktionieren gut), und dort haben Sie eine fantastische kleine Uhr.

Fazit

Sie haben eine brillante hausgemachte Uhr für Ihren Schreibtisch oder Nachttisch, die nicht erneut eingestellt werden muss. Da er mit einem Arduino hergestellt wird und 7 zusätzliche Pins zur Verfügung stehen, können Sie einen Summer, LEDs oder Tasten hinzufügen, um einen Alarm hinzuzufügen. 

Erweitern Sie das Bild weiter, indem Sie die Hintergrundbeleuchtung zu bestimmten Zeitpunkten ein- und ausschalten. Dazu müssen Sie nur das 15 am weitesten entfernte rote Kabel von der LCD-Anzeige in einen digitalen Pin stecken und eine Zeitkontrolle im Code hinzufügen, um den Pin auf hoch oder niedrig zu setzen. Eine perfekte Herausforderung.