Creazione di un orologio con l'Arduino, un OLED da 0,91 "e il DS1307 RTC

Creating a Clock with the Arduino, a 0.91" OLED, and the DS1307 RTC

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

  1. Arduino Board (ad esempio, uno, mega, nano)
  2. Display OLED da 0,91 " (Interfaccia I2C)
  3. Modulo RTC DS1307
  4. Breadboard e fili jumper
  5. Un computer con l'IDE Arduino installato
  6. 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:

  1. Adafruit SSD1306 (per OLED)
  2. Adafruit GFX (Libreria grafica per OLED)
  3. Rtclib (per funzionalità RTC)

Installazione di librerie

  1. Apri l'IDE Arduino.
  2. Vai a Schizzo> Includi la libreria> Gestisci le biblioteche.
  3. 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__) E F(__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:

  1. Modifica delle dimensioni del testo: Utilizzo display.setTextSize() Per regolare la dimensione del carattere.
  2. Aggiunta di grafica: Usa la libreria GFX Adafruit per disegnare forme come linee o rettangoli.
  3. 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

  1. OLED non visualizzato:

    • Assicurati che l'indirizzo I2C corrisponda (comunemente 0x3C O 0x3D).
    • Controllare le connessioni di cablaggio.
  2. RTC non trovato:

    • Verificare le connessioni SDA e SCL.
    • Assicurarsi che la batteria RTC sia inserita correttamente.
  3. Tempo errato:

    • Utilizzo rtc.adjust() per impostare l'ora corretta.

Applicazioni

  1. Orologio da scrivania fai -da -te
  2. Timer e allarmi
  3. Orologio abilitato per IoT con sensori aggiuntivi
  4. 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!

Lascia un commento

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.