目覚まし時計は便利だが、夜間に眩しいバックライトが気になる、画一的なアラーム音しか選べない、設定のためにスマホを使う必要があるといった不満もある。そこで、Raspberry Piを使ってE-inkディスプレイと起床時刻に向けて徐々に明るくなる照明を組み合わせた目覚まし時計を自作したエンジニアが、2025年11月初旬に製作過程をRedditで公開した。
deal_with_it_ted氏が恋人の誕生日プレゼントとして製作したこの目覚まし時計は、3つの要件を満たすよう設計された。起床時刻に向けて徐々に明るくなる照明で自然に目覚められること、スマホを使わずに設定可能なこと、一般的な目覚まし音とは異なるユニークなアラーム音を再生できることだ。
時計本体にはWaveshare製のE-inkディスプレイを採用し、夜間のバックライトによる眩しさを解消した。ただし、暗闇での視認性を確保するため、黒いプッシュボタンに小型LEDを配線し、夜間照明として機能させている。照明スイッチはShellyスマート電球を制御し、オンオフの切り替えに加え、セレクトボタンを回すことで調光も可能だ。これにより、日常的な使用や読書時にも対応している。セレクトボタンを押すとメニュー画面に入り、アラームの設定やその他のオプションにアクセスできる。
アラーム音には、Spotifyからspotdl(Spotifyの楽曲をダウンロードするツール)を使って取得した音源を使用し、Adafruit製スピーカーボンネット経由で2つの小型スピーカーから再生する。本体上部にはスヌーズボタンも配置されている。
deal_with_it_ted氏にとって初めてのRaspberry Piプロジェクトだったが、Pythonの経験はあったという。それでも製作過程では4つの大きな課題に直面した。
1つ目は、E-inkディスプレイのリフレッシュの仕組みを理解することだった。時刻を適切に表示し、正しいタイミングで更新しながら、前の表示からのゴーストイング(残像)を最小限に抑える必要があった。
2つ目は、アラームとスヌーズ機能が正しく動作するよう状態管理を実装することだった。アラーム、スヌーズ、徐々に明るくなる照明などの機能が互いに干渉しないよう、最終的にスレッド処理を使って複数の機能を同時実行できるようにした。
3つ目は、GPIOピン(Raspberry Piの汎用入出力端子)の不足だった。複数のボタン、ディスプレイ、スピーカーなどを接続していくうちに、特にボリューム制御用のピンが足りなくなった。そこでMCPチップを使ってポテンシオメータ(可変抵抗器)をデジタル化し、上限と下限を持つ本物のボリュームボタンの感覚を実現した。ディスプレイとMCPチップの両方がSPI(シリアル・ペリフェラル・インターフェース:デバイス間のデータ通信規格)入力を必要としたため、スレッドロックを使用して両者が同時にSPIバスを駆動しないようにした。
4つ目は、時計を堅牢にすることだった。deal_with_it_ted氏は、停電やインターネット接続の喪失にも耐えられる時計を目指した。試行錯誤の末、リアルタイムクロックを追加してオフライン時も時刻を保持できるようにし、コードやログなどの書き込み可能なファイルをすべて外部USBドライブにマウントした。メインファイルシステムは読み取り専用にして、電源が抜かれた際の破損を防いでいる。
同氏は「エンドユーザー(恋人)が日常的に使うのに十分信頼できるものにしたかった」と製作の意図を説明している。多くのRaspberry Piプロジェクトは、問題が発生したら手動で修正することを前提としているが、この時計は日常使用を想定した設計になっている点が特徴だ。
deal_with_it_ted氏は、ソフトウェア、ハードウェア、UI、そして木工作業を組み合わせたこのプロジェクトを楽しんだとし、次のプロジェクトにも意欲を見せている。製作の詳細はGitHubで公開されており、回路図やコードを確認できる。