Arduino、0.91 "OLED、およびDS1307 RTCで時計を作成する

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

Arduino、OLEDディスプレイ、DS1307リアルタイムクロック(RTC)モジュールを使用してクロックを構築することは、楽しく実用的なプロジェクトです。 DS1307 RTCモジュールは、Arduinoの電源が切れている場合でも正確な時間を維持しますが、OLEDは現在の時間を表示するための洗練されたインターフェイスを提供します。このチュートリアルでは、プロセスを段階的にガイドします。


あなたが必要とするもの

  1. Arduino委員会 (例:UNO、MEGA、NANO)
  2. 0.91 "OLEDディスプレイ (I2Cインターフェイス)
  3. DS1307 RTCモジュール
  4. ブレッドボードとジャンパーワイヤ
  5. Arduino IDEがインストールされたコンピューター
  6. 図書館: Adafruit SSD1306、Adafruit GFX、およびRTCLIB

ステップ1:コンポーネントの配線

OLEDディスプレイ配線(I2C)

OLEDピン Arduino Pin
VCC 5V
GND GND
SDA A4
SCL A5

DS1307 RTCモジュール配線(I2C)

RTCピン Arduino Pin
VCC 5V
GND GND
SDA A4
SCL A5

注記: 専用のSDAおよびSCLピン(メガなど)を使用してArduinoボードを使用する場合、OLEDおよびRTC SDA/SCLピンを代わりに接続します。


ステップ2:必要なライブラリのインストール

OLEDディスプレイとDS1307 RTCを使用するには、次のライブラリが必要です。

  1. Adafruit SSD1306 (OLEDの場合)
  2. Adafruit GFX (OLEDのグラフィックライブラリ)
  3. rtclib (RTC機能用)

ライブラリのインストール

  1. Arduino IDEを開きます。
  2. 行きます スケッチ> incluteライブラリ>ライブラリを管理します.
  3. 検索とインストール:
    • 「Adafruit SSD1306」
    • 「Adafruit GFXライブラリ」
    • 「rtclib」

ステップ3:コードのアップロード

DS1307 RTCモジュールを使用してOLEDに現在の時間を表示するコードを次に示します。

例コード

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

ステップ4:時間の調整

RTCが実行されていない場合、または時間を更新する必要がある場合、次の行は setup() 関数は、RTCを現在の時刻に設定します。

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  • F(__DATE__) そして F(__TIME__) コードをアップロードするときにコンピューターから日付と時刻を自動的に設定するマクロです。

特定の時間を手動で設定するには、使用してください。

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

ステップ5:ディスプレイのカスタマイズ

クロックディスプレイを次のようにカスタマイズできます。

  1. テキストサイズの変更: 使用 display.setTextSize() フォントサイズを調整します。
  2. グラフィックの追加: Adafruit GFXライブラリを使用して、線や長方形などの形状を描画します。
  3. フォーマット時間: 必要に応じて、AM/PMまたは24時間形式を追加します。

例: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);

トラブルシューティング

  1. 表示していないOLED:

    • i2cアドレスが一致することを確認します(一般的に 0x3C または 0x3D).
    • 配線接続を確認します。
  2. RTCが見つかりません:

    • SDAおよびSCL接続を確認します。
    • RTCバッテリーが正しく挿入されていることを確認してください。
  3. 間違った時間:

    • 使用 rtc.adjust() 正しい時間を設定します。

アプリケーション

  1. DIYデスク時計
  2. タイマーとアラーム
  3. 追加のセンサーを備えたIoT対応クロック
  4. 教育プロジェクト

結論

Arduino、0.91 "OLED、およびDS1307 RTCを組み合わせることで、正確で視覚的に魅力的なクロックを作成できます。いくつかの微調整を使用すると、ニーズに合わせてクロックをカスタマイズするか、より大きなプロジェクトに統合できます。プロジェクトを次のレベルに引き上げるためのアラームやインターネットの同期のように!

コメントを残す

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.