Costruire un orologio con un Arduino, un display OLED e il modulo DS1307 in tempo reale (RTC) è un progetto divertente e pratico. Il modulo RTC DS1307 mantiene il tempo accurato anche quando l'Arduino è spento, mentre l'OLED fornisce un'elegante interfaccia per visualizzare l'ora corrente. Questo tutorial ti guiderà attraverso il processo passo dopo passo.
Cosa avrai bisogno
- Arduino Board (ad esempio, uno, mega, nano)
- Display OLED da 0,91 " (Interfaccia I2C)
- Modulo RTC DS1307
- Breadboard e fili jumper
- Un computer con l'IDE Arduino installato
- Biblioteche: Adafruit SSD1306, Adafruit GFX e RTCLIB
Passaggio 1: cablaggio dei componenti
Cablaggio del display OLED (I2C)
Pin oled | Arduino Pin |
---|---|
VCC | 5v |
GND | GND |
SDA | A4 |
SCL | A5 |
Cablaggio del modulo RTC DS1307 (I2C)
Pin RTC | Arduino Pin |
---|---|
VCC | 5v |
GND | GND |
SDA | A4 |
SCL | A5 |
Nota: Se si utilizza una scheda Arduino con pin SDA e SCL dedicati (ad es. Mega), collegare i pin SDA/SCL RTC a quelli invece.
Passaggio 2: installazione delle librerie richieste
Per lavorare con il display OLED e DS1307 RTC, sono necessarie le seguenti librerie:
- Adafruit SSD1306 (per OLED)
- Adafruit GFX (Libreria grafica per OLED)
- Rtclib (per funzionalità RTC)
Installazione di librerie
- Apri l'IDE Arduino.
- Vai a Schizzo> Includi la libreria> Gestisci le biblioteche.
- Cerca e installa:
- "Adafruit SSD1306"
- "Biblioteca Adafruit GFX"
- "RTCLIB"
Passaggio 3: caricamento del codice
Ecco il codice per visualizzare l'ora corrente sull'OLED utilizzando il modulo RTC DS1307:
Codice di esempio
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>
// OLED display width and height
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
// Create an instance of the display
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Create an instance of the RTC
RTC_DS1307 rtc;
void setup() {
Serial.begin(9600);
// Initialize the OLED display
if (!display.begin(SSD1306_I2C_ADDRESS, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
// Initialize the RTC
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
// Check if the RTC is running
if (!rtc.isrunning()) {
Serial.println("RTC is NOT running! Setting the time...");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
DateTime now = rtc.now(); // Get the current time
// Clear the display
display.clearDisplay();
// Display the time
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print(now.hour(), DEC);
display.print(":");
if (now.minute() < 10) {
display.print("0");
}
display.print(now.minute(), DEC);
// Display the date
display.setTextSize(1);
display.setCursor(0, 20);
display.print(now.day(), DEC);
display.print("/");
display.print(now.month(), DEC);
display.print("/");
display.print(now.year(), DEC);
// Show the display buffer
display.display();
delay(1000); // Update every second
}
Passaggio 4: regolare il tempo
Se l'RTC non è in esecuzione o il tempo deve essere aggiornato, la seguente riga in setup()
La funzione imposta RTC sull'ora corrente:
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
-
F(__DATE__)
EF(__TIME__)
sono macro che impostano automaticamente la data e l'ora dal tuo computer durante il caricamento del codice.
Per impostare un tempo specifico manualmente, usa:
rtc.adjust(DateTime(2025, 1, 1, 12, 0, 0)); // YYYY, MM, DD, HH, MM, SS
Passaggio 5: personalizzazione del display
Puoi personalizzare il display dell'orologio da:
-
Modifica delle dimensioni del testo: Utilizzo
display.setTextSize()
Per regolare la dimensione del carattere. - Aggiunta di grafica: Usa la libreria GFX Adafruit per disegnare forme come linee o rettangoli.
- Tempo di formattazione: Aggiungi AM/PM o 24 ore secondo necessità.
Esempio: aggiunta AM/PM
int hour = now.hour();
String period = "AM";
if (hour >= 12) {
period = "PM";
if (hour > 12) hour -= 12;
}
if (hour == 0) hour = 12;
display.print(hour);
display.print(":");
if (now.minute() < 10) {
display.print("0");
}
display.print(now.minute());
display.print(" ");
display.print(period);
Risoluzione dei problemi
-
OLED non visualizzato:
- Assicurati che l'indirizzo I2C corrisponda (comunemente
0x3C
O0x3D
). - Controllare le connessioni di cablaggio.
- Assicurati che l'indirizzo I2C corrisponda (comunemente
-
RTC non trovato:
- Verificare le connessioni SDA e SCL.
- Assicurarsi che la batteria RTC sia inserita correttamente.
-
Tempo errato:
- Utilizzo
rtc.adjust()
per impostare l'ora corretta.
- Utilizzo
Applicazioni
- Orologio da scrivania fai -da -te
- Timer e allarmi
- Orologio abilitato per IoT con sensori aggiuntivi
- Progetti educativi
Conclusione
Combinando Arduino, un OLED da 0,91 "e DS1307 RTC, è possibile creare un orologio accurato e visivamente accattivante. Con alcune modifiche, è possibile personalizzare l'orologio per soddisfare le tue esigenze o integrarlo in progetti più grandi. Esperienza con funzionalità aggiuntive Come allarmi o sincronizzazione su Internet per portare il tuo progetto al livello successivo!