Création d'une horloge avec l'Arduino, un OLED de 0,91 "et le DS1307 RTC

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

Construire une horloge avec un arduino, un affichage OLED et le module DS1307 en temps réel (RTC) est un projet amusant et pratique. Le module RTC DS1307 maintient un temps précis même lorsque l'Arduino est éteint, tandis que l'OLED fournit une interface élégante pour afficher l'heure actuelle. Ce didacticiel vous guidera dans le processus étape par étape.


Ce dont vous aurez besoin

  1. Conseil d'administration d'Arduino (par exemple, uno, mega, nano)
  2. Affichage OLED de 0,91 " (Interface I2C)
  3. Module DS1307 RTC
  4. Fils de planche à pain et de cavalier
  5. Un ordinateur avec l'ide Arduino installé
  6. Bibliothèques: Adafruit SSD1306, Adafruit GFX et RTCLIB

Étape 1: Câblage des composants

Câblage d'affichage OLED (I2C)

Broche Épingle arduino
VCC 5V
GND GND
SDA A4
SCL A5

DS1307 Câblage du module RTC (I2C)

Pin RTC Épingle arduino
VCC 5V
GND GND
SDA A4
SCL A5

Note: Si vous utilisez une carte Arduino avec des broches SDA et SCL dédiées (par exemple, Mega), connectez les broches OLED et RTC SDA / SCL à celles à la place.


Étape 2: Installation des bibliothèques requises

Pour travailler avec l'écran OLED et DS1307 RTC, vous avez besoin des bibliothèques suivantes:

  1. Adafruit SSD1306 (pour OLED)
  2. Adafruit gfx (bibliothèque graphique pour OLED)
  3. Rtclib (pour la fonctionnalité RTC)

Installation de bibliothèques

  1. Ouvrez l'ide Arduino.
  2. Aller à Sketch> Inclure la bibliothèque> Gérer les bibliothèques.
  3. Rechercher et installer:
    • "Adafruit SSD1306"
    • "Bibliothèque Adafruit GFX"
    • "Rtclib"

Étape 3: Téléchargement du code

Voici le code pour afficher l'heure actuelle sur l'OLED à l'aide du module RTC DS1307:

Exemple de code

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

Étape 4: ajuster l'heure

Si le RTC n'est pas en cours d'exécution ou si le temps doit être mis à jour, la ligne suivante dans le setup() La fonction définit le RTC à l'heure actuelle:

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  • F(__DATE__) et F(__TIME__) sont des macros qui définissent automatiquement la date et l'heure de votre ordinateur lors du téléchargement du code.

Pour définir une heure spécifique manuellement, utilisez:

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

Étape 5: Personnalisation de l'écran

Vous pouvez personnaliser l'affichage de l'horloge par:

  1. Modification de la taille du texte: Utiliser display.setTextSize() Pour ajuster la taille de la police.
  2. Ajout de graphiques: Utilisez la bibliothèque Adafruit GFX pour dessiner des formes comme des lignes ou des rectangles.
  3. Temps de formatage: Ajouter AM / PM ou format 24 heures au besoin.

Exemple: ajout de 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);

Dépannage

  1. Oled ne s'affiche pas:

    • Assurer les correspondances d'adresse I2C (généralement 0x3C ou 0x3D).
    • Vérifiez les connexions de câblage.
  2. RTC introuvable:

    • Vérifiez les connexions SDA et SCL.
    • Assurez-vous que la batterie RTC est insérée correctement.
  3. Temps incorrect:

    • Utiliser rtc.adjust() Pour définir l'heure correcte.

Applications

  1. Horloge de bureau de bricolage
  2. Minuteries et alarmes
  3. Horloge compatible IoT avec des capteurs supplémentaires
  4. Projets éducatifs

Conclusion

En combinant l'Arduino, un OLED de 0,91 "et le DS1307 RTC, vous pouvez créer une horloge précise et visuellement attrayante. Avec quelques ajustements, vous pouvez personnaliser l'horloge pour répondre à vos besoins ou l'intégrer dans des projets plus grands. Expérimentez avec des fonctionnalités supplémentaires avec des fonctionnalités supplémentaires Comme des alarmes ou une synchronisation Internet pour faire passer votre projet au niveau supérieur!

Laissez un commentaire

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.