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
16
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 すぎうり
AIコードアポカリプス
uproad3
0
29
負債解消という仕事は儲かる
uproad3
6
3.8k
お前はまだRubyの 型の強さを知らない
uproad3
0
18
Rubyのメソッド解決チェーン
uproad3
0
15
動的型解析器 Ethotrace
uproad3
0
9
お前はまだRubyの 型システムを知らない
uproad3
1
56
UdonRubyの実現可能性について
uproad3
0
25
RubyKaja 2026
uproad3
0
19
VRChatでスライドを 表示する技術
uproad3
0
38
Other Decks in How-to & DIY
See All in How-to & DIY
地域コミュニティって いいよね/Local Communities Are Pretty Great
aokiplayer
1
100
餃子コミュニティの活性化/TechGYOZA
nishiuma
2
380
LLMはTRPGのGMができる(確信)
kgmkm
0
3.1k
キャリア科目では教えてくれない、就活を生き抜く法則
logica0419
2
310
とある地方技術勉強会に集うエンジニアたちのこれまでとこれから
pharaohkj
1
170
LLMを「機能」として組み込む技術:「Figma to はてなCMS」におけるプロンプトエンジニアリングからAIエージェント構築にわたる精度向上の軌跡
nanimonodemonai
0
590
10分de名コミュ “最高の自分”を演じ憧れの同業者と渡り合う
subroh0508
1
670
あなたは何故コミュニティに参加するのか?
awsjcpm
3
420
社会人9年目の僕が贈る処世術
coco_se
1
300
Azure PortalのQoLを上げてたら Big Techに怒られた
horihiro
2
620
How to make the Groovebox
asonas
2
2.3k
How to Stylus 20251031
hareyakayuruyaka
0
160
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
340
Mind Mapping
helmedeiros
PRO
1
300
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Embracing the Ebb and Flow
colly
88
5.1k
[SF Ruby Conf 2025] Rails X
palkan
2
1.3k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Speed Design
sergeychernyshev
33
2k
Skip the Path - Find Your Career Trail
mkilby
1
180
My Coaching Mixtape
mlcsv
0
210
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
400
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Practical Orchestrator
shlominoach
191
12k
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輝度制御
で、これができたってわけ