Crearea unui ceas cu Arduino, un OLED de 0,91 "și DS1307 RTC

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

Construirea unui ceas cu un Arduino, un ecran OLED și modulul DS1307 Clock în timp real (RTC) este un proiect distractiv și practic. Modulul DS1307 RTC păstrează timp exact chiar și atunci când Arduino este alimentat, în timp ce OLED oferă o interfață elegantă pentru afișarea timpului curent. Acest tutorial vă va ghida prin proces pas cu pas.


Ce vei avea nevoie

  1. Board Arduino (de exemplu, Uno, Mega, Nano)
  2. Afișaj OLED de 0,91 " (Interfață I2C)
  3. DS1307 Modul RTC
  4. Tablă de pâine și jumper
  5. Un computer cu IDE Arduino instalat
  6. Biblioteci: Adafruit SSD1306, Adafruit GFX și RTCLIB

Pasul 1: Cablarea componentelor

OLED Display Cabling (I2C)

Pinul Oled Pinul Arduino
VCC 5V
GND GND
SDA A4
SCL A5

Cablajul modulului DS1307 RTC (I2C)

PIN RTC Pinul Arduino
VCC 5V
GND GND
SDA A4
SCL A5

Nota: Dacă utilizați o placă Arduino cu pini dedicat SDA și SCL (de exemplu, mega), conectați pinii OLED și RTC SDA/SCL la acestea.


Pasul 2: Instalarea bibliotecilor necesare

Pentru a lucra cu afișajul OLED și DS1307 RTC, aveți nevoie de următoarele biblioteci:

  1. Adafruit SSD1306 (pentru OLED)
  2. Adafruit GFX (biblioteca grafică pentru OLED)
  3. Rtclib (pentru funcționalitatea RTC)

Instalarea bibliotecilor

  1. Deschideți IDE Arduino.
  2. Du -te la Schiță> Includeți biblioteca> Gestionați bibliotecile.
  3. Căutați și instalați:
    • "Adafruit SSD1306"
    • "Adafruit GFX Library"
    • "Rtclib"

Pasul 3: Încărcarea codului

Iată codul pentru a afișa timpul curent pe OLED folosind modulul RTC DS1307:

Cod de exemplu

#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
}

Pasul 4: Reglarea timpului

Dacă RTC nu rulează sau timpul trebuie actualizat, următoarea linie din setup() Funcția stabilește RTC la ora curentă:

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  • F(__DATE__) şi F(__TIME__) Sunt macro -uri care setează automat data și ora de pe computer la încărcarea codului.

Pentru a seta un anumit timp manual, utilizați:

rtc.adjust(DateTime(2025, 1, 1, 12, 0, 0)); // YYYY, MM, DD, HH, MM, SS

Pasul 5: Personalizarea afișajului

Puteți personaliza afișarea ceasului de către:

  1. Modificarea dimensiunii textului: Utilizare display.setTextSize() Pentru a regla dimensiunea fontului.
  2. Adăugarea grafică: Utilizați biblioteca Adafruit GFX pentru a desena forme precum linii sau dreptunghiuri.
  3. Timp de formatare: Adăugați format AM/PM sau 24 de ore, după cum este necesar.

Exemplu: Adăugarea 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);

Depanare

  1. OLED nu se afișează:

    • Asigurați -vă că adresa I2C se potrivește (în mod obișnuit 0x3C sau 0x3D).
    • Verificați conexiunile de cablare.
  2. RTC nu a fost găsit:

    • Verificați conexiunile SDA și SCL.
    • Asigurați -vă că bateria RTC este introdusă corect.
  3. Timp incorect:

    • Utilizare rtc.adjust() pentru a seta timpul corect.

Aplicații

  1. Ceas de birou DIY
  2. Cronometre și alarme
  3. Ceas activat IoT cu senzori suplimentari
  4. Proiecte educaționale

Concluzie

Combinând Arduino, un OLED de 0,91 "și DS1307 RTC, puteți crea un ceas precis și atrăgător vizual. Cu câteva modificări, puteți personaliza ceasul pentru a se potrivi nevoilor dvs. sau a -l integra în proiecte mai mari. Experimentați cu funcții suplimentare Cum ar fi alarmele sau sincronizarea internetului pentru a vă duce proiectul la nivelul următor!

Lasă un comentariu

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.