Arduino、OLEDディスプレイ、DS1307リアルタイムクロック(RTC)モジュールを使用してクロックを構築することは、楽しく実用的なプロジェクトです。 DS1307 RTCモジュールは、Arduinoの電源が切れている場合でも正確な時間を維持しますが、OLEDは現在の時間を表示するための洗練されたインターフェイスを提供します。このチュートリアルでは、プロセスを段階的にガイドします。
あなたが必要とするもの
- Arduino委員会 (例:UNO、MEGA、NANO)
- 0.91 "OLEDディスプレイ (I2Cインターフェイス)
- DS1307 RTCモジュール
- ブレッドボードとジャンパーワイヤ
- Arduino IDEがインストールされたコンピューター
- 図書館: 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を使用するには、次のライブラリが必要です。
- Adafruit SSD1306 (OLEDの場合)
- Adafruit GFX (OLEDのグラフィックライブラリ)
- rtclib (RTC機能用)
ライブラリのインストール
- Arduino IDEを開きます。
- 行きます スケッチ> incluteライブラリ>ライブラリを管理します.
- 検索とインストール:
- 「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:ディスプレイのカスタマイズ
クロックディスプレイを次のようにカスタマイズできます。
-
テキストサイズの変更: 使用
display.setTextSize()
フォントサイズを調整します。 - グラフィックの追加: Adafruit GFXライブラリを使用して、線や長方形などの形状を描画します。
- フォーマット時間: 必要に応じて、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);
トラブルシューティング
-
表示していないOLED:
- i2cアドレスが一致することを確認します(一般的に
0x3C
または0x3D
). - 配線接続を確認します。
- i2cアドレスが一致することを確認します(一般的に
-
RTCが見つかりません:
- SDAおよびSCL接続を確認します。
- RTCバッテリーが正しく挿入されていることを確認してください。
-
間違った時間:
- 使用
rtc.adjust()
正しい時間を設定します。
- 使用
アプリケーション
- DIYデスク時計
- タイマーとアラーム
- 追加のセンサーを備えたIoT対応クロック
- 教育プロジェクト
結論
Arduino、0.91 "OLED、およびDS1307 RTCを組み合わせることで、正確で視覚的に魅力的なクロックを作成できます。いくつかの微調整を使用すると、ニーズに合わせてクロックをカスタマイズするか、より大きなプロジェクトに統合できます。プロジェクトを次のレベルに引き上げるためのアラームやインターネットの同期のように!