TanaRadio Pi 開発過程まとめ
――思いつきからフェーズ5Nまでの51日間――
作成:2026年8月3日
対象期間:2026年6月13日〜8月2日
0.全体の要約
2026年6月13日、「ポッドキャストをラジオ受信機で聴きたい」という思いつきから始まりました。翌14日に部品を注文し、以後ほぼ毎日、30分程度の作業を積み重ねています。
51日間の到達点は次のとおりです。
- 電源を入れると自動で起動し、スピーカーから声が流れる
- 8つの「棚」を、つまみを回して切り替えられる
- 再生・停止・前後の移動も、つまみ1本で操作できる
- 画面はなく、状態は2つのLEDの点滅で表す
制作過程は声日記として33本配信され、記録そのものが作品の一部になっています。
1.時系列
第I期:小さなパソコンにする(6月13日〜21日)
| 日付 | 出来事 |
|---|---|
| 6/13 | ラジオを作ることを思いつく |
| 6/14 | Raspberry Pi 5ほかを注文(357) |
| 6/16 | 開封の儀(358) |
| 6/17 | microSDにOSを書き込む(359) |
| 6/18 | 起動・Wi-Fi・音出しを確認(フェーズ1・2完了)(360) |
| 6/19 | ボタン・つまみ類を追加注文(361) |
| 6/21 | 電源ONでTanaRadioの画面が自動表示(フェーズ3完了)(362) |
フェーズ3では Unlock keyring のパスワード入力に手こずり、Seahorseでキーリングのパスワードを空にして解決しました。最初の「詰まりどころ」です。
第II期:ボタンで操作する(6月24日〜28日)
| 日付 | 出来事 |
|---|---|
| 6/24 | GPIO17に1ボタンだけ配線して反応を確認(365) |
| 6/25 | 3ボタンに増やし、playerctlでブラウザ再生を操作(366) |
| 6/28 | Chromiumを捨ててmpvへ移行(フェーズ4完了)(368) |
ブラウザ経由からmpv+Unixソケット制御へ移ったことが、以後すべての土台になりました。この段階で「RSSから音声URLを取り出す」という、現在まで続く基本動作が入っています。
第III期:ラジオの文法を作る(6月29日〜7月12日)
6月29日、フェーズ5を9段階(5A〜5I)に分割する計画を立てました(369)。以後、ほぼ1日1段階のペースで進みます。
| 日付 | 段階 | 内容 |
|---|---|---|
| 6/30 | 5A | RSS1本からプレイリストを生成(370) |
| 7/1 | 5B | 過去3日分を古い順に並べる(371) |
| 7/2 | 5C | 複数RSSの統合(372) |
| 7/4 | 5D | 3ボタンでプレイリストを操作(374) |
| 7/5 | 5E | 「棚」ファイルの導入(5棚)(375) |
| 7/6 | 5F | 棚選択ボタン+LED1(376) |
| 7/8 | 5G | 再生モードボタン+LED2(377) |
| 7/9 | ― | 音量ロータリーエンコーダー(378) |
| 7/10 | ― | Raspberry Piをメタルケースへ(379) |
| 7/12 | ― | systemdによる自動起動(380) |
7月5日に導入した**「棚」がこのプロジェクト固有の発明**です。番組やエピソードではなく、複数のRSSをまとめた単位で選ぶ。「声の本棚」という当初からの比喩が、ここでファイル構造として実装されました。
7月12日、電源を入れるだけで音が出るようになり、機械としての基本形が完成しています。
第IV期:基板化と筐体の芽(7月13日〜21日)
| 日付 | 出来事 |
|---|---|
| 7/13 | 実体配線図を作成。ブレッドボードのまま籠に入れた状態を「カゴラジオ」と呼ぶ(381) |
| 7/14 | 基板が想定より小さく、配置を変更(382) |
| 7/15 | ピンヘッダーとグラウンド線をハンダ付け(383) |
| 7/16 | スイッチ1個+抵抗1個。1つずつ動作確認する方式を確立(384) |
| 7/19 | ボタン3個→5個へ(386・387) |
| 7/20 | LED2個を追加。紙箱に載せて「箱ラジオ」に(388) |
| 7/21 | ロータリーエンコーダーを取り付け、基板化完了(389) |
この期間の技術的な山場は、隣り合うランドをハンダでつなぐ作業でした。「抵抗のリード線を長いまま先に固定し、あとから切る」という手順に行き着いたのが7月19日です。手順の発見が、道具の腕前より効いた局面でした。
第V期:ソフトウェアの成熟と操作系の再設計(7月25日〜8月2日)
| 日付 | 段階 | 内容 |
|---|---|---|
| 7/25 | 5J | 音量の永続化(棚を変えても音量が戻らない) |
| 7/25 | 5K | 内部構造の整理6項目、起動スクリプトのバージョン非依存化 |
| 7/26 | 5L | RSS並列取得。棚切り替えが約20秒→1.7秒 |
| 7/26 | ― | ALSAミキサーを100%へ(音量問題の真因) |
| 7/26 | 5M | 棚選択をロータリーエンコーダー化。棚ボタン廃止 |
| 8/2 | 5N | 再生操作をロータリーエンコーダー1本に統合。3ボタン廃止 |
5Mで導入した**「確定の二段構え」**(回転が止まって0.8秒でLED表示、2.5秒でRSS再取得)は、つまみを回して局を探し、手を止めると音が入ってくるという、古いラジオの同調に近い動作を生みました。
5Nでは回転を0.5秒ためて一度で移動する方式とし、playlist-pos を読んで直接飛ぶようにしています。mpvから値を「読む」処理は、5Nで初めて書いた種類のコードです。
2.操作系の変遷
部品の総数は増えているのに、操作の種類は減り続けました。
| 時点 | 構成 |
|---|---|
| 7月19日(5G相当) | 5ボタン・2ランプ・1ダイヤル |
| 7月26日(5M) | 4ボタン・2ランプ・2ダイヤル |
| 8月2日(5N) | 1ボタン・2ランプ・3ダイヤル |
5Nの時点で、操作は次のように整理されています。
- 回すもの=4つの軸:棚(何を)/モード(どの順で)/エピソード(どこを)/音量(どれくらい)
- 押すもの=唯一の動詞:再生/一時停止
残った1つの押しボタン(再生モード選択)も、フェーズ5Oでつまみに置き換える予定です。
3.思想の展開
技術と並行して、「なぜこれを作るのか」の言語化が進みました。
| 日付 | 内容 |
|---|---|
| 6/21 | 363「作る意味とは」 ChatGPTに問い、「音声が現れるまでの過程を、自分の手と場所と機械に取り戻すこと」という答えを得る |
| 6/26 | 367「ほどよいラジオ」 鉱石ラジオ(自作性)・自由ラジオ(場所性)・イリイチのコンヴィヴィアリティ(ほどよさ)の三点で位置づける |
| 7/3 | 373 講義「ほどよい技術」 「科学と技術の社会史」の教材にTanaRadio Piを組み込む。適正技術の実例として提示 |
| 7/13 | 381 「何が出てくるかわからない」聴き方の面白さを語る |
| 7/19 | 385 テックLT 「たまたま聴けるものを聴く」という聴き方の発見と、スモールステップの有効性を報告 |
コンヴィヴィアリティに「ほどよい」という訳語を当てたのが6月26日です。この語は講義にも持ち込まれ、制作が教育実践に折り返しています。
7月26日の総合報告書では、四つの概念に階層をつけました。「声の本棚」だけがこの装置固有の発明であり、鉱石ラジオは「作る過程」、イリイチは「作った後の暮らし方」、自由ラジオは「場所性(TanaFMまで未着手)」という分担です。
4.一貫していた作り方
51日間を通して守られた原則は、次の4つに集約できます。
1. スモールステップ。 1日30分でできる単位に割る。フェーズ5を9段階に分けたのが典型です。「一遍に高機能のものを作ろうとすると大体うまくいかない」(381)。
2. 動いたものは残す。 5Aのスクリプトを消さずに5Bを作る。フェーズごとにファイル名を変える。戻れる場所を必ず用意しています。
3. ハードを増やす前にソフトで仕組みを固める。 5Mの棚エンコーダー化が少ない実装量で済んだのは、連続押しをまとめるタイマー処理をボタン用として先に作ってあったためです。
4. 組み込む前に単体で測る。 棚エンコーダー(7/26)と再生エンコーダー(8/2)は、いずれもブレッドボードで測定してから本体に入れました。1クリック=1ステップであること、押し込みで軸が回らないことは、測って初めて分かっています。
そして全体を通じて、AIが先生役、判断は人間という関係が保たれました。手順書はAIが書きますが、部品を選び、ハンダを当て、仕様を決め、失敗の原因を突き止めるのは人間の側です。
なお7月下旬に、開発支援AIがChatGPTからClaudeへ交代しています。作り方の原則は引き継がれましたが、フェーズ番号の規約だけが落ちました(そのため,フェーズ番号がこのまとめでは途中で飛んでいます:5G→5J)。
5.主な失敗と、そこで分かったこと
| 症状 | 真因 | 教訓 |
|---|---|---|
| 起動時にパスワードを聞かれる | キーリングの仕様 | 自動化は「動いているもの」に対してのみ行う |
| 音量の数値は変わるのに音が変わらない | mpvの内部音量が実出力に届いていない | 音の経路は何段もある |
| 番組によって音が小さすぎる | ALSA側が70%で頭打ち | 同じ症状でも原因の層が違う |
GPIO busy で起動しない | 起動スクリプトが旧版を呼び二重起動 | 手動実行の前に必ずサービスを止める |
| 棚切り替えに20秒の沈黙 | RSSを1本ずつ取得していた | 複雑な仕組みを足す前に単純な原因を疑う |
| LEDが8番を表示中に追従できない | time.sleep は止められない | 世代番号で中断可能にする |
これらの記録は備忘録ではなく、「ブラックボックスが開く瞬間」の一次資料として意識的に残されています。抽象的に「技術は不透明だ」と語るより、具体的な症状と原因の層を示すほうが教材として強い、という判断です。
6.現在地と次
現在地(8月3日)
操作系はほぼ形になり、日常利用による評価の段階です。次の点を観察しています。
PLAY_ACCUM_DELAY(0.5秒)が体に合っているか- 左回し(戻る)を実際に使うか
- モードボタンを何回触ったか(=5Oの設計判断そのもの)
次の予定
- 5O:モード選択のロータリー化+I2S用のGPIO再配線(棚A相 19→17、音量A相 21→22)
- 筐体(木製ケーブルボックス+4mmシナ合板パネル)
- I2Sアンプ(MAX98357A)への移行
- 電源操作(J2パッド)
サマリー
たなは前期の成績評価を終えました。その間、気分転換にTanaRadio Piの製作を進めていました。これまでのボタン操作を、棚選択や再生操作においてロータリーエンコーダーによるつまみ操作へと変更し、より直感的な操作を目指しています。また、今学期の授業では、AIによる安易な回答を防ぐため、毎週の課題を「疑問や違和感」の記述に、ブログディスカッションを「朗読劇台本」の作成に変更しました。台本作成ではAIの活用を認めつつ、意見レポートとプロセスレポートの提出を義務付け、学生が多角的な視点から思考する機会を提供。この新しい試みは学生からも好評で、成功と評価されています。夏休みは学会発表の準備とTanaRadio Pi製作を続ける予定です。