Sommario:
Video: Orologio con testo a scorrimento Arduino: 3 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
Lo scopo di questo progetto è costruire un orologio di testo scorrevole che mostri l'ora mentre viene pronunciata (ad esempio, "è mezzanotte").
Questo è un progetto veloce: ti diamo abbastanza per iniziare con l'hardware e lo schizzo, e poi puoi portarlo avanti in base alle tue esigenze.
Passaggio 1: hardware
Avrai bisogno di tre elementi principali:
- una scheda compatibile con Arduino Uno
- un circuito o modulo di clock in tempo reale che utilizza un IC DS1307 o DS3231
- e un display LED monocromatico in stile P10
Potresti volere un alimentatore esterno, ma ci arriveremo più avanti.
La prima fase consiste nell'adattare il tuo orologio in tempo reale. Clicca qui per il tutorial se hai bisogno di aiuto.
A questo punto spero che tu stia pensando "come imposti l'ora?".
Ci sono due risposte a questa domanda. Se stai usando il DS3231, impostalo nello schizzo (vedi sotto) poiché la precisione è molto buona, devi solo caricare lo schizzo con il nuovo orario due volte l'anno per coprire l'ora legale.
Altrimenti aggiungi una semplice interfaccia utente: un paio di pulsanti potrebbero farlo. Infine devi solo mettere l'hardware sul retro del DMD. C'è molto spazio per soddisfare le tue esigenze, una soluzione semplice potrebbe essere quella di allineare la scheda di controllo in modo da poter accedere facilmente alla presa USB e poi attaccarla con un po' di Sugru.
Per quanto riguarda l'alimentazione dell'orologio, puoi eseguire UN display LED da Arduino e funziona con una buona luminosità per l'uso in interni. Se si desidera che il DMD funzioni alla massima luminosità, che brucia la retina, è necessario utilizzare un alimentatore CC separato da 5 V 4 A. Se stai usando due DMD, questo va a 8A e così via. Collegare semplicemente l'alimentazione esterna ai terminali di un DMD (collegare il secondo o più DMD a questi terminali).
Se non hai voglia di tagliare l'estremità del cavo di alimentazione, usa un breakout della presa CC.
Passaggio 2: lo schizzo di Arduino
Dovrai installare le seguenti due librerie Arduino: TimerOne e DMD. Quindi carica lo schizzo:
// per RTC#include "Wire.h" #define DS1307_I2C_ADDRESS 0x68 // l'RTC DS1307 è 0x68
// per display a LED
#include "SPI.h" #include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" #define DISPLAYS_ACROSS 1 // potresti avere più di un DMD in un riga #define DISPLAYS_DOWN 1 DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
Stringa finaleStringa; // usato per contenere la frase finale da visualizzare su DMD
void ScanDMD() // richiesto per DMD
{ dmd.scanDisplayBySPI(); }
configurazione nulla()
{ // per DMD Timer1.initialize(5000); Timer1.attachInterrupt(ScanDMD); dmd.clearScreen(true);
// per RTC
Wire.begin(); // avvia il bus I2C byte secondo, minuto, ora, giorno della settimana, giorno del mese, mese, anno; // cambia le variabili e decommenta setDateDs1307 per impostare l'ora // quindi commenta di nuovo la funzione e carica di nuovo lo sketch second = 0; minuto = 13; ora = 23; giornodellasettimana = 4; giorno del mese = 19; mese = 5; anno = 13; // setDateDs1307(secondo, minuto, ora, giorno della settimana, giorno del mese, mese, anno); }
// normali funzioni RTC
// Converte i normali numeri decimali in byte decimale codificato binario decToBcd(byte val) { return ((val/10*16) + (val%10)); }
// Converti i numeri decimali codificati binari in numeri decimali normali
byte bcdToDec(byte val) { return ((val/16*10) + (val%16)); }
void setDateDs1307(byte secondo, // 0-59
byte minuto, // 0-59 byte ora, // 1-23 byte dayOfWeek, // 1-7 byte dayOfMonth, // 1-28/29/byte mese, // 1-12 byte anno) // 0- 99 { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(0); Wire.write(decToBcd(secondo)); // Da 0 al bit 7 avvia l'orologio Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.write(decToBcd(dayOfWeek)); Wire.write(decToBcd(dayOfMonth)); Wire.write(decToBcd(mese)); Wire.write(decToBcd(year)); Wire.write(00010000); // invia 0x10 (hex) 00010000 (binario) al registro di controllo - attiva l'onda quadra Wire.endTransmission(); }
// Ottiene la data e l'ora dal ds1307
void getDateDs1307(byte *secondo, byte *minuto, byte *ora, byte *dayOfWeek, byte *dayOfMonth, byte *mese, byte *anno) { // Reimposta il puntatore del registro Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.write(0); Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
// Alcuni di questi necessitano di maschere perché alcuni bit sono bit di controllo
*secondo = bcdToDec(Wire.read() & 0x7f); *minuto = bcdToDec(Wire.read()); *ora = bcdToDec(Wire.read() & 0x3f); // È necessario modificarlo se 12 ore am/pm *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *mese = bcdToDec(Wire.read()); *anno = bcdToDec(Wire.read()); }
void drawText(String oldString)
{ dmd.clearScreen(true); dmd.selectFont(Arial_Black_16); char nuovaStringa[256]; int sLength = oldString.length(); oldString.toCharArray(newString, sLength+1); dmd.drawMarquee(newString, sLength, (32*DISPLAYS_ACROSS)-1, 0); inizio lungo=millis(); timer lungo=inizio; timer lungo2=inizio; booleano ret=false; while(!ret){ if ((timer+20) < millis()) { ret=dmd.stepMarquee(-1, 0); timer=millimetri(); } } }
void createTextTime(int hh, int mm)
// questo combina tutti i dati temporali in testo come una frase { finalString=" "; // cancella la frase per casi speciali (sotto) finalString=finalString+"It's ";
// ora aggiungi l'ora
if (hh==1 || hh==13) { finalString=finalString+"one"; } if (hh==2 || hh==14) { finalString=finalString+"due"; } if (hh==3 || hh==15) { finalString=finalString+"tre"; } if (hh==4 || hh==16) { finalString=finalString+"quattro"; } if (hh==5 || hh==17) { finalString=finalString+"cinque"; } if (hh==6 || hh==18) { finalString=finalString+"sei"; } if (hh==7 || hh==19) { finalString=finalString+"sette"; } if (hh==8 || hh==20) { finalString=finalString+"otto"; } if (hh==9 || hh==21) { finalString=finalString+"nove"; } if (hh==10 || hh==22) { finalString=finalString+"dieci"; } if (hh==11 || hh==23) { finalString=finalString+"undici"; }
// ora aggiungi i minuti
switch(mm){ case 1: finalString=finalString+"oh one"; rottura; caso 2: finalString=finalString+"oh due"; rottura; caso 3: finalString=finalString+"oh tre"; rottura; caso 4: finalString=finalString+"oh four"; rottura; caso 5: finalString=finalString+"oh five"; rottura; caso 6: finalString=finalString+"oh six"; rottura; caso 7: finalString=finalString+"oh sette"; rottura; caso 8: finalString=finalString+"oh otto"; rottura; caso 9: finalString=finalString+"oh nove"; rottura; caso 10: finalString=finalString+"dieci"; rottura; caso 11: finalString=finalString+"undici"; rottura; caso 12: finalString=finalString+"dodici"; rottura; caso 13: finalString=finalString+"tredici"; rottura; caso 14: finalString=finalString+"quattordici"; rottura; caso 15: finalString=finalString+"quindici"; rottura; caso 16: finalString=finalString+"sedici"; rottura; caso 17: finalString=finalString+"diciassette"; rottura; caso 18: finalString=finalString+"diciotto"; rottura; caso 19: finalString=finalString+"diciannove"; rottura; caso 20: stringafinale=Stringafinale+"venti"; rottura; caso 21: finalString=finalString+"ventuno "; rottura; caso 22: finalString=finalString+"ventidue"; rottura; caso 23: finalString=finalString+"ventitre"; rottura; caso 24: finalString=finalString+"ventiquattro"; rottura; caso 25: finalString=finalString+"venticinque"; rottura; caso 26: finalString=finalString+"ventisei"; rottura; caso 27: finalString=finalString+"ventisette"; rottura; caso 28: finalString=finalString+"ventotto"; rottura; caso 29: finalString=finalString+"ventinove"; rottura; case 30: finalString=finalString+"trenta"; rottura; case 31: finalString=finalString+"trentuno"; rottura; case 32: finalString=finalString+"trentadue"; rottura; case 33: finalString=finalString+"trentatre"; rottura; caso 34: finalString=finalString+"trentaquattro"; rottura; caso 35: finalString=finalString+"trentacinque"; rottura; caso 36: finalString=finalString+"trentasei"; rottura; caso 37: finalString=finalString+"trentasette"; rottura; caso 38: finalString=finalString+"trentotto"; rottura; caso 39: finalString=finalString+"trentanove"; rottura; case 40: finalString=finalString+"quaranta"; rottura; case 41: finalString=finalString+"quarantuno"; rottura; case 42: finalString=finalString+"quarantadue"; rottura; case 43: finalString=finalString+"quarantatre"; rottura; case 44: finalString=finalString+"quarantaquattro"; rottura; case 45: finalString=finalString+"quarantacinque"; rottura; case 46: finalString=finalString+"quarantasei"; rottura; case 47: finalString=finalString+"quarantasette"; rottura; case 48: finalString=finalString+"quarantotto"; rottura; case 49: finalString=finalString+"quarantanove"; rottura; case 50: finalString=finalString+"cinquanta"; rottura; caso 51: finalString=finalString+"cinquantuno"; rottura; caso 52: finalString=finalString+"cinquantadue"; rottura; case 53: finalString=finalString+"cinquantatre"; rottura; case 54: finalString=finalString+"cinquantaquattro"; rottura; caso 55: finalString=finalString+"cinquantacinque"; rottura; caso 56: finalString=finalString+"cinquantasei"; rottura; caso 57: finalString=finalString+"cinquantasette"; rottura; caso 58: finalString=finalString+"cinquantotto"; rottura; case 59: finalString=finalString+"cinquantanove "; rottura; }
// mezzogiorno?
if (hh==12 && mm==0) { finalString=finalString+"mezzogiorno "; } // mezzanotte? if (hh==00 && mm==0) { finalString=finalString+"midnight "; }
}
ciclo vuoto()
{ // ottiene l'ora dall'RTC byte secondo, minuto, ora, giorno della settimana, giorno del mese, mese, anno; getDateDs1307(&secondo, &minuto, &ora, &giornoSettimana, &giornoMese, &mese, &anno);
// converte l'ora in una stringa di frase
createTextTime(ora, minuto);
// ora invia il testo al DMD
drawText(finalString); }
Lo sketch ha le consuete funzioni per impostare e recuperare l'ora dai circuiti integrati dell'orologio in tempo reale DS1307/3232 e, come al solito con tutti i nostri orologi, è possibile inserire le informazioni sull'ora nelle variabili in void setup(), quindi decommentare setDateDs1307(), carica lo schizzo, commenta nuovamente setDateDs1307, quindi carica di nuovo lo schizzo. Ripeti questo processo per reimpostare l'ora se non hai aggiunto alcuna interfaccia utente basata su hardware.
Passaggio 3:
Una volta che l'ora viene recuperata in void loop(), viene passata alla funzione createTextTime(). Questa funzione crea la stringa di testo da visualizzare iniziando con "It's", quindi determina quali parole seguire a seconda dell'ora corrente. Infine la funzione drawText() converte la stringa che contiene il testo da visualizzare in una variabile di caratteri che può essere passata al DMD.
Consigliato:
ESP8266 POV Fan con aggiornamento del testo dell'orologio e della pagina Web: 8 passaggi (con immagini)
ESP8266 POV Fan con aggiornamento del testo dell'orologio e della pagina Web: si tratta di una velocità variabile, POV (Persistence Of Vision), Fan che visualizza a intermittenza l'ora e due messaggi di testo che possono essere aggiornati "al volo". è anche un web server a pagina singola che ti permette di cambiare i due messaggi di testo
Orologio per il pensionamento / Orologio con conteggio su/giù: 4 passaggi (con immagini)
Orologio per la pensione / Orologio per conteggio su/giro: avevo alcuni di questi display a matrice di punti a LED 8x8 nel cassetto e stavo pensando a cosa farne. Ispirato da altre istruzioni, ho avuto l'idea di costruire un display per il conto alla rovescia per il conto alla rovescia per una data/ora futura e se il tempo target p
Creare un orologio con M5stick C usando Arduino IDE - Orologio in tempo reale RTC con M5stack M5stick-C: 4 passaggi
Creare un orologio con M5stick C usando Arduino IDE | Orologio in tempo reale RTC con M5stack M5stick-C: Ciao ragazzi in questo tutorial impareremo come creare un orologio con la scheda di sviluppo m5stick-C di m5stack usando Arduino IDE. Quindi m5stick visualizzerà data, ora e amp; settimana del mese sul display
Display a matrice di LED a scorrimento 48 X 8 utilizzando Arduino e registri a scorrimento.: 6 passaggi (con immagini)
Display a matrice di LED a scorrimento 48 X 8 utilizzando Arduino e registri a scorrimento.: Ciao a tutti! Questo è il mio primo Instructable e si tratta di creare una matrice di LED a scorrimento programmabile 48 x 8 utilizzando un Arduino Uno e registri a scorrimento 74HC595. Questo è stato il mio primo progetto con una scheda di sviluppo Arduino. È stata una sfida lanciata a m
La fastidiosa rotella di scorrimento Eliminatore di clic (scorrimento liscio): 5 passaggi
La fastidiosa rotella di scorrimento Click Eliminator (scorrimento liscio): ti dà fastidio il suono della rotellina di scorrimento? bene, ecco la tua occasione per togliere quel clic da quella pergamena! se ti rompi il mouse, non è colpa mia. sto facendo questa mod con un mouse logitech. non sono sicuro che funzionerà su altri mouse b