In questo tutorial ti mostrerò come trasformare un Arduino in un orologio usando uno schermo LCD 1602, un Arduino, una mano piena di jumper e un chip / modulo Real Time Clock. Ottimo come accessorio per la tua scrivania a casa o al lavoro.
Questo progetto utilizzerà un numero di cavi jumper all'interno di uno spazio molto piccolo, quindi prenditi il tuo tempo per controllare e ricontrollare i tuoi posizionamenti in modo da non produrre alcun fumo magico blu.
Collega lo schermo LCD ad Arduino, solo per verificare che tutto funzioni come dovrebbe. Inizia con i cavi di alimentazione rosso e nero da Arduino alla breadboard, quindi accendi lo schermo LCD. Se la visualizzazione non ha una retroilluminazione, ignora i pin 15 e 16 sullo schermo LCD (i connettori dell'estrema destra).
Lo schermo si basa sul chip HD44780, un chip molto versatile che viene utilizzato in una serie di diverse dimensioni dello schermo, da 16x1 a 40x2. Tutto ciò funzionerà bene, l'unica piccola regolazione richiesta è quella di assicurarsi che tutto sia allineato correttamente all'interno del codice, ma questo è annotato per renderlo facile da soddisfare per le tue esigenze.
Una volta che lo schermo è cablato, è possibile collegare il modulo RTC. Moduli diversi possono avere un diverso ordine di pin, quindi controlla attentamente il modulo prima di passare al passaggio successivo.
Prima di aggiungere un po 'di energia, è meglio ricontrollare il cablaggio, assicurandosi che i cavi di alimentazione e di messa a terra siano nei posti giusti.
Una volta che sei felice, collega l'Arduino. Vedrai una fila di scatole nere sullo schermo. Se non lo fai, prova a regolare il potenziometro finché non appare qualcosa.
Dovresti avere l'IDE Arduino (più recente al momento della scrittura v1.0.5) installato sul tuo computer. In caso contrario, visitare il sito Web di Arduino per scaricare e installare.
All'interno dell'IDE di Arduino, fare clic su File> Esempi> LiquidCrystal> HelloWorld. Si aprirà una nuova finestra piena di codice. Clic File e poi Caricare. In meno di un minuto l'LCD tornerà in vita, mostrando Ciao mondo e contando ogni secondo.
Hai una schermata di lavoro.
Dovrai comunicare al chip RTC l'ora esatta. Poiché il chip utilizza una batteria per mantenere il conto, può farlo solo dopo aver iniziato a contare.
A partire da una nuova schermata di Arduino, copia e incolla il seguente codice, scorrendo leggermente verso il basso per cambiare l'ora e l'ora corrente.
#include "Wire.h" #define DS1307_I2C_ADDRESS 0x68 byte decToBcd (byte val) return ((val / 10 * 16) + (val% 10)); void setDateDs1307 (byte secondo, // 0-59 byte minuto, // 0-59 byte ora, // 1-23 byte dayOfWeek, // 1-7 1 = Lun, 7 = byte Sun dayOfMonth, // 1- 28/29/30/31 byte month, // 1-12 byte anno // 0-99) Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (secondo)); Wire.write (decToBcd (minuto)); Wire.write (decToBcd (ora)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (DayOfMonth)); Wire.write (decToBcd (mese)); Wire.write (decToBcd (anno)); Wire.endTransmission (); void setup () byte secondo, minuto, ora, giorno di settimana, giorno di mese mese, mese, anno; Wire.begin (); pinMode (13, OUTPUT); // Cambia questi valori in ciò a cui vuoi impostare il tuo orologio. // È meglio aggiungere 30 secondi a un minuto per consentire al computer di compilare e caricare l'ora corrente. // Esegui solo questo script una volta, poiché eseguirlo di nuovo sovrascriverà il tempo impostato nel chip RTC! // Le ore sono nel formato 24 ore // Il giorno della settimana inizia con il lunedì = 1 fino alla domenica = 7 // L'anno è nel formato YY, quindi usa solo le ultime 2 cifre dell'anno // // Una volta eseguito il programma, il LED sul pin 13 lampeggerà per dire che è finito, NON SCOLLEGARE O RIPRISTINARE. // Basta seguire il tutorial e caricare il codice LCD per evitare di sovrascrivere l'ora corretta con questa volta di nuovo. // secondo = 0; minuto = 40; ora = 21; dayOfWeek = 3; dayOfMonth = 25; mese = 6; anno = 14; setDateDs1307 (secondo, minuto, ora, giorno di settimana, giorno di mese, mese, anno); // * / void loop () digitalWrite (13, HIGH); // accende il LED acceso (alto è il livello di tensione) ritardo (1000); // aspetta un secondo digitalWrite (13, LOW); // spegne il LED facendo ritardare la tensione LOW (1000);
È necessario aggiungere altri 30 secondi o minuti per tenere conto del tempo di compilazione e caricamento. Clic Caricare per inviare questo ad Arduino. Dovrai eseguire questa operazione solo una volta, ma se il tuo orologio va avanti o indietro di un'ora o se sposti fuso orario / nazione, dovrai eseguire nuovamente lo schizzo di impostazione dell'ora.
L'ultimo passo è lo schizzo vero e proprio che eseguirà l'orologio. Le uniche modifiche che è necessario apportare è impostare la data su come si leggerà normalmente. Lo script corrente mostra la data come GG / MM / 20YY, per cambiare questo scroll fino alla fine del codice, ho segnato le 2 linee che possono essere cambiate così come lo schermo
#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 * secondo, byte * minuto, byte * ora, byte * dayOfWeek, byte * dayOfMonth, byte * month, byte * year) 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 secondo, minuto, ora, giorno di settimana, giorno di mese mese, mese, anno; Wire.begin (); // MODIFICARE SE UTILIZZATE UN DIVERSO SCHERMO LCD // lcd.begin (16, 2); void loop () byte secondo, minuto, ora, giorno di settimana, giorno di mese, mese, anno; Stringa s, m, d, mth, h; getDateDs1307 (& second, & minute, & hour, & dayOfWeek, & dayOfMonth, & month, & year); se (secondo < 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
Quando sei soddisfatto delle modifiche, fai clic su Caricare. Lo schermo mostrerà ora la data e l'ora corrente, anche dopo essere stato scollegato.
Trova una bella scatola in cui nascondere Arduino e fili, aggiungi una batteria o collega l'Arduino a un caricatore USB per l'alimentazione (i caricabatterie per iPhone funzionano bene), e lì ce l'hai, un fantastico piccolo orologio fatto da te.
Avrai un brillante orologio fatto in casa per la tua scrivania o comodino che non richiederanno più l'impostazione. Poiché è realizzato utilizzando un Arduino e dispone di 7 pin aggiuntivi, è possibile aggiungere un cicalino, LED o pulsanti per aggiungere facilmente un allarme.
Espandi ulteriormente controllando la retroilluminazione per accendere e spegnere in determinati orari. Per eseguire questa operazione, è necessario solo collegare il cavo rosso più lontano 15: dallo schermo LCD a un pin digitale e aggiungere un controllo temporale nel codice per impostare il pin in alto o in basso. Una sfida perfetta.