Arduino Nanoで作る防水シャワーFMラジオ:RDA5807、Nokia LCD、PAM8403搭載
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Nano R3 | 1 | |
| RDA5807 FMラジオモジュール | 1 | RDS、音量制御、バスブースト対応 |
| Nokia 5110 LCD(3V-5V版) | 1 | |
| Tiny RTCモジュール(DS1307 + 24C32 EEPROM) | 1 | |
| PAM8403 2×3W クラスDアンプ | 1 | |
| LM2596 DC-DC 降圧コンバータモジュール | 1 | |
| LIR2032 3.6V 充電池 | 1 | RTCバックアップ用 |
| 100Ω 抵抗 | 1 | |
| 1kΩ 抵抗 | 1 | |
| 10kΩ 抵抗 | 6 | |
| 100kΩ 抵抗 | 1 | |
| IRLZ44 パワーMOSFET | 1 | 照明制御用 |
| PEIYING PY1010C 60W 4Ω スピーカー | 1 | |
| 12V 3A 電源(ジャンク品流用) | 1 | |
| 2200µF 25V コンデンサ | 2 | |
| 100µF コンデンサ | 1 | |
| 3W LED電球(G4 10Wハロゲン替え) | 1 | シャワー照明用 |
プロジェクト概要
きっかけ
数年前、ラジオ内蔵の中国製シャワーキャビン(TR028制御システム)を購入しましたが、ある日突然完全に動作しなくなりました。修理は不可能で、安価なシャワーラジオを買い直しましたが、それも約1年で故障。家族はシャワー中にラジオを聴く習慣があったため、自分で作ることにしました。
TR028内部にはTEA5767という小型FMラジオモジュールがありました。調べると、似た機能でRDS、音量制御、バスブーストを備えたRDA5807の存在を知り、こちらを採用することにしました。
目指した仕様
- タッチパネル操作で防水構造を実現(故障したTR028の筐体とタッチパネルを流用)
- FMラジオ受信
- お気に入り局プリセット(複数)
- 音量調節
- 自動選局(シーク)機能
- 選局した局をプリセット登録可能
- 時計・カレンダー表示
- 電源オン/オフ
- 照明制御
- キャビン内温度、RDS情報などの補助表示
AliExpressでRDA5807、Tiny RTC、PAM8403、Nokia 5110 LCD、LM2596などを10ユーロ以下で調達し、実験を開始しました。
完成した機能
- 2行表示対応のRDS
- お気に入り局プリセット 6局
- 自動/手動選局
- 選局した局を6つのプリセットのいずれかに保存可能
- 音量とバスブースト制御
- シャワーキャビン照明のオン/オフ
- 時計とカレンダー
- RSSI(電波強度表示)
- ステレオ受信インジケータ
- 電源オン/オフ(スタンバイモード)
プロジェクト写真
完成品の各種写真を掲載しています。Nokia 5110表示用ライブラリ、TR028タッチパネル(2列×7行のキーパッド相当)の解析とライブラリ使用、基板実装の様子などが確認できます。USBコネクタを外してケーブルを直付けし、PC接続による将来的なファームウェア更新に備えています。
動作説明
- 電源投入時:ラジオは自動で起動しません(不安定な電源や停電後の誤動作防止)。電源接続後数秒経ってから電源キーを押すと、最後に聴いていた局が音量レベル03で再生開始。操作モードは音量制御になります。電源オフは電源キーを押すだけ。LCD、バックライト、アンプ、LED/ハロゲン照明がオフになります。
- 選局:「Mod」ボタンで自動/手動チューニングを切替。「<」「>」ボタンで周波数を下げ/上げて選局。「Mem」ボタンを押すと4秒以内に6つのプリセットボタン(1-6)のいずれかを押して保存できます。
- 日付表示:「I」(Info)キーで現在日付を4秒間表示。この部分はdelay()を使っているため最適化の余地あり。
- 時刻合わせ:「D」キーを2秒以上長押しし、正確な時刻(時報や正確な時計の秒単位)のタイミングで離すと、時刻が調整されます。遅れが15-1分の場合は分・秒を00にし時間を+1。早まりが1-15分の場合は分・秒のみ00にリセット。
改善したい点
- RTCモジュールの発振子を高精度品に交換(時刻合わせ機能でカバー可能)
- Nokia 5110 LCDをより大型・高輝度なもの(1.8インチ或いは2.0インチカラーLCD等)に変更。現行品は視認性に難あり
- PAM8403アンプをPAM8610(2×15W)やTDA7297等の高出力品に変更
結論
1ヶ月以上問題なく動作しており満足しています(時計精度除く)。プログラミング歴1年程度の独学なのでコードは改善の余地大です。これが私のArduino初の実用プロジェクトかつ初公開作品です。至らない点はご容赦ください。質問はコメントやPMでどうぞ。
アップデート1:12Vラインに2Aヒューズ追加(安全対策)。ソフトウェアで電源キー押下時にモードを音量制御に戻す処理を追加。
アップデート2:残念ながらLCDが寿命に。安価なNokia 5110代替を探していますが、同サイズは視認性が悪いので1.8インチTFT LCDへの移行を検討中。リソース消費増が懸念されます。アドバイス歓迎です。
製造プロセス
- ラジオ技術の進化と工学
- 集積回路(IC):現代エレクトロニクスを支える微小強力チップ
- JX Wave Generator – Arduino互換DDS発振器(OLEDディスプレイ搭載)
- MotionSense: ArduinoとESP8266で作るスマート侵入検知システム
- Arduino MKRバンドルで作るセキュアIoTパズルボックス:ステップバイステップガイド
- スマートシャワーレギュレーター – ソレノイドバルブで精密温度制御
- ワイヤレス非接触温度スキャナー:Arduino Nano+Bluetooth+MLX90614
- 自律走行ビール運搬タンク:Walabot+Arduino+Raspberry Pi+Alexa統合
- 高度なマイクロコントローラー実験:ESP32、Arduino、PIC、センサーモジュール
- MOSMusicプロジェクトキット: MOSFET、Arduinoで音楽同期照明制御
- Arduino MKR GSM 1400で作るスマートリストバンド:Hologram IoT × Azure × Power BIで患者見守り