In deze tutorial laat ik je zien hoe je van een Arduino een klok maakt met een 1602 LCD-scherm, een Arduino, een hand vol jumpers en een Real Time Clock-chip / -module. Ideaal als accessoire voor op je bureau thuis of op het werk.
Dit project gebruikt een aantal startkabels binnen een zeer kleine ruimte, dus neem de tijd om uw plaatsingen te controleren en opnieuw te controleren om geen magische blauwe rook te produceren..
Sluit het LCD-scherm aan op de Arduino, gewoon om te controleren of alles werkt zoals het hoort. Begin met de rode en zwarte stroomkabels van de Arduino naar het breadboard en schakel vervolgens het LCD-scherm in. Als je display geen achtergrondverlichting heeft, negeer dan pinnen 15 en 16 op het LCD-scherm (de connectoren uiterst rechts).
Het scherm is gebaseerd op de HD44780-chip, een zeer veelzijdige chip die wordt gebruikt in een aantal verschillende schermformaten, van 16x1 tot 40x2. Al deze functies werken goed, de enige kleine aanpassing die nodig is, is ervoor te zorgen dat alles correct wordt uitgelijnd in de code, maar dit is geannoteerd om het gemakkelijk aan uw behoeften aan te passen.
Nadat het scherm is aangesloten, kunt u de RTC-module aansluiten. Verschillende modules kunnen een verschillende volgorde van pinnen hebben, dus controleer goed met uw module voordat u doorgaat naar de volgende stap.
Voordat u enige stroom toevoegt, kunt u het beste de bedrading controleren door ervoor te zorgen dat de stroom- en aardingskabels op de juiste plaats zitten.
Zodra je tevreden bent, verbind je de Arduino. Je ziet een regel zwarte vakken op het scherm. Als u dit niet doet, probeert u de potentiometer aan te passen totdat iets verschijnt.
Je moet de Arduino IDE (laatst op het moment van schrijven is v1.0.5) op je computer geïnstalleerd hebben. Als dat niet het geval is, gaat u naar de Arduino-website om deze te downloaden en te installeren.
Klik in de Arduino IDE Bestand> Voorbeelden> LiquidCrystal> HelloWorld. Een nieuw venster vol met code wordt geopend. Klik het dossier en dan Uploaden. In minder dan een minuut zal het LCD-scherm tot leven komen Hallo Wereld en elke seconde aftellen.
Je hebt een werkscherm.
Je moet de RTC-chip op de juiste tijd vertellen. Omdat de chip een batterij gebruikt om te blijven tellen, kan dit alleen als het een tijd heeft om vanaf te tellen.
Begin met een nieuw Arduino-scherm, kopieer en plak de volgende code, scroll een beetje naar beneden om de tijd naar de huidige tijd te wijzigen.
# include "Wire.h" #define DS1307_I2C_ADDRESS 0x68 byte decToBcd (byte val) return ((val / 10 * 16) + (val% 10)); void setDateDs1307 (byte seconde, // 0-59 byte minuut, // 0-59 byte uur, // 1-23 byte dayOfWeek, // 1-7 1 = ma, 7 = zon byte dayOfMonth, // 1- 28/29/30/31 byte maand, // 1-12 byte jaar // 0-99) Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (seconde)); Wire.write (decToBcd (minuten)); Wire.write (decToBcd (uur)); Wire.write (decToBcd (dagvandeweek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (maand)); Wire.write (decToBcd (jaar)); Wire.endTransmission (); void setup () byte seconde, minuut, uur, dayOfWeek, dayOfMonth, month, year; Wire.begin (); pinMode (13, OUTPUT); // Wijzig deze waarden in waar u uw klok op wilt instellen. // Het is het beste om 30 seconden per minuut toe te voegen, zodat uw computer tijd heeft om de huidige tijd te compileren en uploaden. // Voer dit script maar één keer uit, omdat het opnieuw uitvoeren de tijd overschrijft die is ingesteld in de RTC-chip! // Uren zijn in 24-uursindeling // Dag van de week begint met maandag = 1 tot zondag = 7 // Het jaar is in YY-indeling, dus gebruik alleen de laatste 2 cijfers van het jaar // // Als u eenmaal de reeks hebt uitgevoerd programma, de LED op pin 13 knippert om te zeggen dat het klaar is, NIET UITTLUITEN OF RESETTEN. // Volg gewoon de zelfstudie en upload de LCD-code om te voorkomen dat de juiste tijd met deze tijd opnieuw wordt overschreven. // tweede = 0; minuut = 40; uur = 21; dayOfWeek = 3; dayOfMonth = 25; maand = 6; jaar = 14; setDateDs1307 (seconde, minuut, uur, dayOfWeek, dayOfMonth, month, year); // * / void loop () digitalWrite (13, HIGH); // zet de LED aan (HOOG is het spanningsniveau) vertraging (1000); // wacht op een tweede digitalWrite (13, LOW); // schakel de LED uit door de spanning LAAG vertraging (1000) te maken;
Je moet een extra 30 seconden of minuut toevoegen om rekening te houden met de compileer- en uploadtijd. Klik Uploaden om dit naar de Arduino te sturen. U hoeft dit slechts één keer uit te voeren, maar als uw klok een uur teruggaat of vooruit gaat - of als u de tijdzone / het land verplaatst - moet u de tijdinstellingsschets opnieuw uitvoeren.
De laatste stap is de eigenlijke schets die de klok zal uitvoeren. De enige wijzigingen die u moet aanbrengen, is om de datum in te stellen op hoe u het normaal zou lezen. Het huidige script toont de datum als DD / MM / 20xx, om dit scrollen helemaal naar het einde van de code te veranderen, heb ik de 2 regels gemarkeerd die zowel als het scherm kunnen worden gewijzigd
# 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 * seconde, byte * minuut, byte * uur, byte * dayOfWeek, byte * dayOfMonth, byte * maand, byte * jaar) 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 seconde, minuut, uur, dayOfWeek, dayOfMonth, month, year; Wire.begin (); // WIJZIG UW GEBRUIK VAN EEN ANDER LCD-SCHERM // lcd.begin (16, 2); void loop () byte seconde, minuut, uur, dayOfWeek, dayOfMonth, month, year; String s, m, d, m, h; getDateDs1307 (& second & & minute, & hour, & dayOfWeek, & dayOfMonth, & month, & year); als (tweede < 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
Als u tevreden bent met uw wijzigingen, klikt u op Uploaden. Uw scherm geeft nu de huidige datum en tijd weer, ook nadat de stekker uit het stopcontact is getrokken.
Zoek een mooi ogend vak waarin je de Arduino en draden verbergt, een batterij toevoegt of de Arduino aansluit op een USB-oplader voor stroomvoorziening (iPhone-opladers werken goed), en daar heb je het, een fantastische kleine klok gemaakt door jou.
Je hebt een schitterende zelfgemaakte klok voor je bureau of nachtkastje die niet opnieuw hoeft te worden ingesteld. Omdat het gemaakt is met een Arduino en er 7 extra pinnen beschikbaar zijn, kunt u een zoemer, LED's of knoppen toevoegen om eenvoudig een alarm toe te voegen.
Breid verder uit door de achtergrondverlichting te regelen om op specifieke tijden in en uit te schakelen. Hiervoor hoeft u alleen de 15-verste rode draad aan te sluiten - van het LCD-scherm in een digitale pen en een tijdcontrole toe te voegen in de code om de pen hoog of laag in te stellen. Een perfecte uitdaging.