Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RaspberryPi Picoの表現力の拡張 ~アナログコンピュータとの出会い~
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
すぎうり
July 16, 2026
How-to & DIY
0
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RaspberryPi Picoの表現力の拡張 ~アナログコンピュータとの出会い~
以下の記事の発表スライド版
https://qiita.com/uproad3/items/6a4a7506edc94a446b67
すぎうり
July 16, 2026
More Decks by すぎうり
See All by すぎうり
お前はまだRubyの 型の強さを知らない
uproad3
0
1
Rubyのメソッド解決チェーン
uproad3
0
1
動的型解析器 Ethotrace
uproad3
0
1
お前はまだRubyの 型システムを知らない
uproad3
1
47
UdonRubyの実現可能性について
uproad3
0
18
RubyKaja 2026
uproad3
0
10
VRChatでスライドを 表示する技術
uproad3
0
30
Other Decks in How-to & DIY
See All in How-to & DIY
Burnoutとの「対話」 〜 アジャイルコーチングを活用した、燃え尽き症候群を克服するスキル 〜 / Dialogue with Burnout by Using Agile Coaching Skills
hageyahhoo
0
990
2026.6.27 お誕生日会で配布された透明シェルを交換する際の注意点について
mongonta0716
0
200
人見知りな HUB おじさんが 会話のハードルを超え、 今度は誰かの踏み台になろうとする話/hub-guy-as-a-stepping-stone
aokiplayer
2
580
大量のiOSシミュレータにアプリをインストールする
gurrium
0
150
AWS Community/JAWS-UG Update - JAWS-UG 上越妙高支部リブート
awsjcpm
2
130
なぜJAWS-UGはこんなにも活発なのか?
awsjcpm
1
250
AWS Summit Japan 2025 個人的参加レポート
midnight480
0
450
ネガティブをねじ伏せ、n=1のキャリアに変える技術
subroh0508
1
1.2k
파이썬 토룡신점 운영후기
lqez
0
560
令和なのでVoIP網に参加して電話サービスを作ってみた話
cibmc
0
150
EjecTea 2026 / 20260228-osc26tk-ejectea
akkiesoft
0
980
2026年、書籍をちゃんと読むぞ👊 〜約3万円分の書籍を積読にしないためにやること〜
subroh0508
5
890
Featured
See All Featured
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
340
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
220
Skip the Path - Find Your Career Trail
mkilby
1
170
A Tale of Four Properties
chriscoyier
163
24k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.2k
Discover your Explorer Soul
emna__ayadi
2
1.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Music & Morning Musume
bryan
47
7.3k
New Earth Scene 8
popppiees
3
2.4k
KATA
mclloyd
PRO
35
15k
Transcript
RaspberryPi Picoの表現力の拡張 ~アナログコンピュータとの出会い~ 組み込みエンジニア集会 #7 Vket2026Summer 技術学術WEEK 発表:すぎうり
自己紹介 すぎうり • Twitter:@uproad3 • Ruby歴20年 • VRChat歴7年 • 仕事:Rails |
AWS | LT芸人 • 趣味:アーキテクト | リファクタリング | 電子工作 • 言語:Ruby | C# | C | ほかいろいろ • 技術:Ubuntu | Unity | RaspberryPi Pico • 普段はRubyの森に住んでいます • 実は電子回路とか低レイヤーって結構好きなんだよね • PicoRuby Overflow会議 ショーケースセッション • ながらRuby会議01 サイネージ展示
コンピュータとは 単純な処理をすごい 回数繰り返すことで 結果的に魔法のような ことを実現する装置
アナログコンピュータとは 単純な回路をすごい数 繋ぎ合わせることで 結果的に魔法のような ことを実現する装置
RaspberryPi Picoとは • Raspberry Piのマイコン • OSはなく、機械語を直接実行 • プロセッサー: ARM
Cortex-M0+ • メモリ:264KB SRAM • ストレージ: 2MB Flash • 価格: 約1000円 • GPIO:26(アナログ3) • 他:UARTx2、SPIx2、I2Cx2、 PWMx16 • USB 1.1 micro-B
組み込み向け Rubyの世界(2025年) • mruby:汎用組み込み Ruby VM マイコン内 → Rubyスクリプト +
mrubyコンパイラ + mruby VM • mruby/c:Rubyコンパイラを含まない軽量 VM マイコン内 → コンパイル済み mruby VMバイナリ + 機能削減版 mruby VM • PicoRuby:世界最軽量 mrubyコンパイラ +mruby/c VM マイコン内 → PicoRuby用スクリプト + PicoRubyコンパイラ + mruby/cバーチャルマシン • R2P2:PicoRubyで書かれた Unix風シェル • R2P2配布バイナリ: PicoRubyとR2P2がセットになった .uf2 Raspberry Pi Pico用
組み込み向け Rubyの世界(2026年) • mruby:汎用組み込み Ruby VM マイコン内 → Rubyスクリプト +
mrubyコンパイラ + mruby VM • mruby/c:Rubyコンパイラを含まない軽量 VM マイコン内 → コンパイル済み mruby VMバイナリ + 機能削減版 mruby VM • PicoRuby:世界最軽量 mrubyコンパイラ +mruby VM マイコン内 → PicoRuby用スクリプト + PicoRubyコンパイラ + mruby VM • FemtoRuby:世界最軽量 mrubyコンパイラ +mruby/c VM マイコン内 → PicoRuby用スクリプト + PicoRubyコンパイラ + mruby/c VM • R2P2:PicoRubyで書かれた Unix風シェル • R2P2配布バイナリ: PicoRubyかFemtoRubyとR2P2 セットになった多数のマイコン向けバイナリ
オーディオビジュアライザー / スペクトラムアナライザーとは • 入力音声の周波数解析を行う • 各周波数ごとの強度に応じて出力を行う • WindowsMediaPlayerに搭載されてたやつ •
曲を流すとビカビカ光って楽しい • 写真は「ながら Ruby会議01」の展示→ • PicoRuby Overflow会議でも同様のデモ • お題:PicoRubyで作るなにか
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御 • 音声信号を解析機へ回す前に増幅する回路 • iPadの動画再生のイヤホンコードをミキサーに 入力 •
ミキサーの出力不足で信号が取れなかったの でオペアンプを挟んだ • 電力がUSBなので、単電源駆動 • 後段も単電源駆動なのと、ラズパイ Picoも 0V~3.3Vしか取れないのでプルアップの ままで通す
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御 バンドパスフィルタ
音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御 オーディオビジュアライザーを作るには バンドパスフィルタ • Dual Amplifer Band Pass
Filter(DABPF) • DABPFはQ値(Quality Factor、尖鋭度≒通過周波数幅 )が R1とR2R3で決まるので計算が楽 • 中心周波数も R2R3とC1C2で決まるので考える変数が 格段に少なくて便利 • 信号増幅度が 2倍で固定 • シリコンハウスで 2回路入りのオペアンプが安く売っていたのと、 オペアンプは 1石に2回路か4回路のものしかないのでちょうど 1 回路で1石使えてわかりやすかった
音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御 オーディオビジュアライザーを作るには バンドパスフィルタ • 回路の周波数決定についてはコンデンサの静電容量だけで受 け持つ ◦ 最初は抵抗値のほうが細かく制御できるのでそちらにしようと考えてい
たのが、ブレッドボードに実装しているときに抵抗を置いていたケース をぶちまけてどれがどれかわからなくなったので管理は無理だと悟った • R2~R5は10kΩ固定、R1は10kにQ値を掛け算したものとし、 C1とC2を同値にして狙ったあたりの周波数に近い静電容量のも のを選定
音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御 オーディオビジュアライザーを作るには ターゲット 周波数 15/f C1=C2 R2~R5 Q値
R1 カットオフ 周波数(下) 実装 中心周波数 カットオフ 周波数(上) 80 0.1875 0.18u 10k 3 30k 74 88 103 160 0.0937 0.10u 10k 3 30k 133 159 186 250 0.0600 0.068u 10k 3 30k 195 234 273 500 0.0300 0.027u 10k 2 20k 442 589 737 1000 0.0150 0.015u 10k 2 20k 796 1,061 1,326 2000 0.0075 6800p 10k 2 20k 1,755 2,341 2,926 4000 0.0037 3900p 10k 2 20k 3,061 4,081 5,101 8000 0.0018 1800p 10k 2 20k 6,631 8,842 11,052 15000 0.0010 1000p 10k 2 20k 11,937 15,915 19,894
音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御 オーディオビジュアライザーを作るには アナログコンピュータ基板・スペクトラムアナライザプロセッサー
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御 RaspberryPi Pico + PicoRuby • Picoのアナログ入力は
3端子 • スペアナプロセッサの出力は 9本 • Pico3台で受け取れば OK • やっていることはピーク toピーク検出 • いい感じのビジュアライズ調整 • R2P2は /home/app.rb というファイルが あると電源投入後に直接それを実行するので、 コピペしておけば多数同時運用でも PC制御なしで動かすことができる • コードは GitHubにあるので読んでね https://github.com/uproad/picorubyoverflow2025_tenji/blob/main/app.rb
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御 ピークtoピーク検出 • PicoRubyコードの検出ループは 10msごと • 20周分の読み取り値を配列に保存
• 配列のminmaxを取り、信号差を検出 • 10ms*20周で200ms=0.2秒の取得 • ナイキストの定理的にはダメだが、 PicoRubyが遅すぎて 10msが限界だった • 20周も取ればどっかでラッキー的な山を取れるはず • だいたい取れりゃいいんだよ
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御 ビジュアライズ調整1 • アナログピンの取得値は 0~3.3(float) • 後段のPWMは0~100制御なので正規化
• あえて-10~110に拡大して最大 /最小付近で 点灯レベルが 0%/100%に張り付くようにする ◦ 最初0-100でやっていたら音量が大きいなあと思っていても実際には90%ぐらいで止まっていて100%点灯が ほとんど起きていなかったのに気づいたので入れた • ホントは Bカーブじゃなくてちゃんと対数カーブにすればいいような気もするけど、計算が面倒なの で伸ばしてプッツンしたほうが動作が早いしコーディングも早かったのでこうした • だいたいキレイに見えればいいんだよ
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御 ビジュアライズ調整2 • 音圧のレベル自動調整 • ちょっとづつ過去の最大値を減衰させて 曲ごとやメロ
-サビ間の音量差を吸収する ◦ 連続稼働させていると音圧が高い曲のあとに音圧がカスの曲が来ると光らないことに気づいた ◦ かといって曲の切れ目なんか検出するの面倒だし ◦ せや、常に減らしとけばピークtoピークが高いうちは常に更新されるし、 ピークtoピークが低くなったら減衰してちょうどいい感じになるやん ◦ ついでにサビとメロで音量が違う曲とかも対応できた
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御 LED制御 • みんな大好き PWM • GPIOは3.3VなのでLEDには力不足
◦ GPIOはトランジスタ制御のみ • パワー供給専用 RaspberryPiPico から直接 5Vを給電 • LEDは3.2V高輝度青色 LED ◦ シリコンハウスで100個500円のバルク品 • LEDをピンあたり 3個並列に並べ、追加で輝度を確保 • 計27個、270,000mcd
オーディオビジュアライザーを作るには 音声入力 → 周波数解析 → 信号強度検出 → LED輝度制御
で、これができたってわけ