小さな画面に夢中!パパDIYで遊べる「OLEDディスプレイ」をマイコン制御してみた

DIY電子工作

こんにちは!
私事ですが、最近めっきり電子工作にハマってしまいました…
今回は、子どもとの遊びにも活用できる「小型ディスプレイ(OLED SSD1306)」をArduino UNO互換機で動かしてみました!

ディスプレイから文字や絵が出るだけで、子どもってテンション爆上がり!!
そんな驚きと、ちょっとした電子工作の達成感を味わえたので、使い方やコードをご紹介します!



OLEDディスプレイとは?

  • 解像度:128×64ピクセル
  • 通信:I2C(配線が少なくてラク)
  • 電源:3.3V〜5Vで動作
  • 表示:青文字と白文字がくっきり光る!

とっても安価なモジュールながら、文字・アイコン・アニメーションまで表示できるスグレモノです。

I2Cとは電子部品同士を少ない配線でつなげるための通信方式のことです。
通信に必要なのはたったの2本(SCLとSDA)‼


今回使ったパーツと価格

部品名価格(目安)メモ
OLEDディスプレイ SSD1306(I2C)約300円Amazonや秋月などで購入
Arduino UNO互換機約800円書込方法はいずれ紹介します。
ジャンパーワイヤー約200円ブレッドボード接続用
USBケーブル Arduino UNO互換機に付属PCとArduinoを接続
ブレッドボード約300円Amazonや秋月などで購入


接続方法(I2C配線)

以下のように4本の配線だけで接続できます👇
とっても簡単!

OLED端子Arduino UNO端子
VCC5V
GNDGND
SCLA5
SDAA4

Arduinoでの設定

🧪ライブラリをインストール(Arduino IDE)

  1. Arduino IDEを開く
  2. メニュー → スケッチライブラリをインクルードライブラリを管理
  3. 検索ボックスで「Adafruit SSD1306」を入力
     → Adafruit SSD1306 を「インストール」
  4. さらに「Adafruit GFX Library」もインストール
  5. 新規スケッチ で 下記のコードをコピペ
  6. 書込みする。
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

// OLEDディスプレイのI2Cアドレス(多くは0x3C)
#define OLED_ADDR 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);

void setup() {
// 初期化
if (!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
Serial.println(F("OLED init failed"));
for (;;); // 停止
}

display.clearDisplay();
display.setTextSize(2); // 文字サイズ
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0); // 表示位置(左上)

display.println(F("Hello, OLED!"));
display.display(); // 表示更新
}

void loop() {
// ループ処理なし
}

下記の画像の様に表示されれば

サンプルコードご紹介

他にも簡単な動きをするサンプルコードをご紹介します。

・カウントダウン

こちらは最初に「Countdown!」と表示されたから10・9・8・7・・・・
とカウントダウンするコードです。
カウントダウン→音楽を鳴らす(DFPlayer mini等)と組み合わせる事が出来るのかな
と思います。

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_ADDR 0x3C

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);

int countdownSeconds = 10;

void setup() {
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Countdown!");
display.display();
delay(1000); // 1秒待ってスタート
}

void loop() {
for (int i = countdownSeconds; i >= 0; i--) {
display.clearDisplay();
display.setCursor(30, 20);
display.setTextSize(3);

// 残り秒数を表示
display.print(i);
display.display();
delay(1000); // 1秒待つ
}

// 終了表示
display.clearDisplay();
display.setTextSize(2);
display.setCursor(10, 20);
display.print("TIME UP!");
display.display();

while (true); // 以後ループ停止(繰り返さない)
}

●が動くアニメーション

●が右から左に永遠に動き続けるアニメーションです。

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // I2Cアドレス
display.clearDisplay();
}

void loop() {
// ●を左から右へ動かすアニメーション
for (int x = 0; x < SCREEN_WIDTH; x += 2) {
display.clearDisplay(); // 前のフレーム消去
display.fillCircle(x, 32, 5, WHITE); // 中央Y=32に半径5の丸
display.display(); // 描画更新
delay(30); // ウェイト(30ms)
}
}

子どもと一緒に使えるアイデア💡

🛍️ ごっこ遊び用「店頭表示」

  • スイッチを押すと「いらっしゃいませ」→「準備中」など表示切替

💰 おこづかいマネージャー

  • ボタンで「+100円」「-100円」
  • 残高をディスプレイに表示

自分お小遣い制度なので、貯金箱にやってみたいです…

⏳ おふろタイマー(今後製作予定)

  • カウントダウン表示+音楽再生
  • 「あと5分!」「おふろの時間だよ!」と出る

トラブルシューティング

現象対処法
画面が真っ暗I2Cアドレス間違い(0x3C or 0x3D)
文字が見切れるsetTextSize()が大きすぎる
エラーで動かないライブラリの導入ミス

私はサンプルコードを書き込んでも画面が真っ暗で困り果てましたが
I2Cアドレス間違い(0x3C or 0x3D)が原因で、修正したら動きました。


まとめ:小さなディスプレイが広げる親子DIYの世界

ディスプレイが動いただけなんですが
始めてArduino UNO(互換機)を動かせたので、ちょっと感動しました。 
●が右から左に動くアニメーションも、それだけの動きなのに
子どもがめちゃくちゃ喜んでくれたのが印象的でした。

今後はこれを活かして、

  • 音が鳴るタイマー
  • しゃべる工作
    などにチャレンジ予定です!

次回予告📣

▶ 「DFPlayer miniと組み合わせた“しゃべるおふろタイマー”」を予定中です!


関連記事

タイトルとURLをコピーしました