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/14Raspberry Pi 5ほかを注文(357)6/16開封の儀(358)6/17microSDに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/24GPIO17に1ボタンだけ配線して反応を確認(365)6/253ボタンに増やし、playerctlでブラウザ再生を操作(366)6/28Chromiumを捨ててmpvへ移行(
フェーズ4完了)(368)
ブラウザ経由からmpv+Unixソケット制御へ移ったことが、以後すべての土台になりました。この段階で「RSSから音声URLを取り出す」という、現在まで続く基本動作が入っています。
第III期:ラジオの文法を作る(6月29日〜7月12日)
6月29日、フェーズ5を9段階(5A〜5I)に分割する計画を立てました(369)。以後、ほぼ1日1段階のペースで進みます。
日付段階内容6/305ARSS1本からプレイリストを生成(370)7/15B過去3日分を古い順に並べる(371)7/25C複数RSSの統合(372)7/45D3ボタンでプレイリストを操作(374)7/55E「棚」ファイルの導入(5棚)(375)7/65F棚選択ボタン+LED1(376)7/85G再生モードボタン+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/20LED2個を追加。紙箱に載せて「箱ラジオ」に(388)7/21ロータリーエンコーダーを取り付け、
基板化完了(389)
この期間の技術的な山場は、隣り合うランドをハンダでつなぐ作業でした。「抵抗のリード線を長いまま先に固定し、あとから切る」という手順に行き着いたのが7月19日です。手順の発見が、道具の腕前より効いた局面でした。
第V期:ソフトウェアの成熟と操作系の再設計(7月25日〜8月2日)日付段階内容7/255J音量の永続化(棚を変えても音量が戻らない)7/255K内部構造の整理6項目、起動スクリプトのバージョン非依存化7/265LRSS並列取得。棚切り替えが
約20秒→1.7秒7/26―ALSAミキサーを100%へ(音量問題の真因)7/265M棚選択をロータリーエンコーダー化。棚ボタン廃止8/25N再生操作をロータリーエンコーダー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パッド)
#声日記 #TanaRadioPi
LISTENで開く