はじめに
この記事は 電子工作やIoTネタなど!IoTLT - Qiita Advent Calendar 2025 の参加記事です。
カレンダー的にはもう終了してしまってますが、このネタをどうしても形にしたかったので、遅ればせながら投稿します。どうぞお付き合いください。 この記事は「完成報告」じゃなくて、いわば、冬休みの自由研究の製作予告編といったところでしょうか。
ガラスタイルでひかりモノIoTを作りたい
実は、この企画には前日譚がありまして、2023年の夏に作った ガラスタイルと木箱を使って光ものを作る というプロジェクトです。
当時は、ダイソーのガラスタイル(10mm角)と木箱を組み合わせて、ボタンで色が変わるシンプルな光り物を作りました。M5Atom Liteを使って、白→青→赤→緑と色が変化する、それだけのものでしたが、ガラスタイルを通した柔らかな光の美しさに魅了されたんです。
当時作ったものは「ただ光るだけ」でも綺麗だったのですが、ここに 情報(IoT) を載せたいなあと思ってまして。
例えば、部屋の隅で優しく光りながら、今日の天気を教えてくれる。晴れの日はオレンジ色にゆらぎ、雨の日は青い雫が降る...そんな、生活に溶け込むお天気端末ほしいなあと。
今回のコンセプト
今回のコンセプトは、5×5のガラスタイルが天気に合わせて優しく光り、側面のOLEDで詳細を確認できる、生活に溶け込むお天気端末
というものです。結構良さそう。IoTって生活に溶け込むのが理想ですよね。
- 表面:25個(5×5)のガラスタイルが、天気に応じたアニメーションで光る
- 晴れ:オレンジ/黄色のゆらぎ
- 雨:青色の降下アニメーション
- 曇り:グレー/白のモヤモヤ
- 側面:小さなOLEDディスプレイで、気温や降水確率などの詳細情報を表示。インジケータ的な意味合いも兼ねる
- 筐体:130mm角の木箱を使った、インテリアになじむデザイン
ガラスタイルの質感が良いなーと思ってまして、ガラス越しの光は、LEDの直接光とは違う、柔らかくて温かみのある雰囲気を作ってくれます。それに、5×5のマトリクスなら、簡単なアニメーションも表現できそう。
実装を考える
ここからは、具体的な設計内容を公開します。Geminiと壁打ちしながら仕様書を書いてしまいました。妄想を形にするためには、まず設計図が必要ですし。
ハードウェア構成
主なものがこちら。
| 項目 | 部品・規格 | 備考 |
|---|---|---|
| マイコン | M5Atom (Lite or Matrix) | MicroPythonで制御。Wi-Fi通信可能 |
| 表示部(メイン) | WS2812B (NeoPixel) × 25個 | 5x5マトリクス配置。各LED個別制御可能 |
| 表示部(サブ) | OLED (SSD1306/SSD1315) | I2C通信。側面に配置して詳細情報を表示 |
| 筐体 | 130mm角の木製小箱 | 100円ショップやホームセンターで入手可能 |
| 内部構造 | 3Dプリント製グリッド枠 | LEDの光が混ざらないよう遮光 |
| 電源 | USB Type-C (5V) | M5Atomから給電(輝度制限必須) |
内部構造を考える
今回の製作で一番こだわりたいのが、この内部構造です。ただLEDを並べるだけでは、光が混ざってしまってガラスタイル一つ一つが独立して光りません。
そこで、3Dプリンターで「遮光グリッド」を作ります。各タイルの下に壁を立てることで、隣のLEDの光が混ざらないようにするわけです。
内部レイヤー構造(下から順に)
- Bottom: 電子回路エリア(M5Atom、レベルシフタ、配線)
- Base: LED土台プレート(3Dプリント or MDF板)
- Light Source: WS2812B LED(テープを切断し、24mmピッチで再配置。多分これが面倒)
- Spacer: 拡散材(トレーシングペーパー or 乳半アクリル板 100円ショップあたりにあればなー)
- Grid: 3Dプリント遮光枠(5x5マス、壁厚 約1.3〜1.5mm、高さ 10〜15mm)
- Top: ガラスタイル(22mm角)
ソフトウェアの仕組み
基本機能
- Wi-Fi接続: 起動時に自宅のWi-Fiに接続
- 天気取得: 何らかのAPIから天気情報を取得(10分〜1時間間隔)
- マトリクス制御: 天気に応じた色とアニメーションを表示
- 詳細表示: OLEDに気温、降水確率などを表示
制御の工夫:スネーク配置
WS2812Bはシリアル通信で制御するため、LEDを数珠つなぎに接続する必要があります。でも、単純に左から右、上から下と配線すると、配線が長くなってしまいます。
そこで、「スネーク配置」(ジグザグ配線)を採用します。こうすることで、配線長を最短にできます。できるはず?
- 0列目(一番上): 左 → 右(LED 0〜4)
- 1列目: 右 → 左(LED 5〜9)
- 2列目: 左 → 右(LED 10〜14)
- 3列目: 右 → 左(LED 15〜19)
- 4列目: 左 → 右(LED 20〜24)
ただし、プログラム側で座標変換が必要になるので、そこは頑張ります。
側面OLED固定
OLEDディスプレイは、木箱の側面に約28mm角の穴を開けて、そこに3Dプリントした「つば付きの枠(ベゼル)」をはめ込む予定です。これで、切り口も隠せてスッキリ仕上がるはず。
まとめ
やる気だけはあったんだよ!材料は用意できたんだよ!ということをお伝えして、記事を終わりにしたいと思います。
完成したら、またブログで報告します。進捗はSNS(X/Twitter: @hrs_sano645)などでも発信していくので、見守ってください!
そして、IoTLTアドベンドカレンダー2025 お疲れ様でした。皆さんの作品や発表を見るたびに「自分も何か作りたい!」とモチベーションをもらっています。これからも、楽しい光り物IoTを作っていきたいと思います。
それでは、良いお年を!年明けには「完成報告」でお会いしましょう!
2025年1月追記予定: 製作進捗や完成報告はこちらに追記していきます。お楽しみに!