Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
RaspberryPi Picoの表現力の拡張 ~アナログコンピュータとの出会い~
Search
すぎうり
July 16, 2026
How-to & DIY
39
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 すぎうり
BareRuby ~組み込み向けRubyAOTコンパイラ~
uproad3
0
25
AIコードアポカリプス
uproad3
0
49
負債解消という仕事は儲かる
uproad3
6
4.4k
お前はまだRubyの 型の強さを知らない
uproad3
0
33
Rubyのメソッド解決チェーン
uproad3
0
26
動的型解析器 Ethotrace
uproad3
0
20
お前はまだRubyの 型システムを知らない
uproad3
1
69
UdonRubyの実現可能性について
uproad3
0
37
RubyKaja 2026
uproad3
0
33
Other Decks in How-to & DIY
See All in How-to & DIY
JAWS-UG 山梨 第10回 勉強会 Community Update
awsjcpm
0
1.1k
「変えること」「変わること」を楽しむ力で"敵わない存在"と向き合う
subroh0508
2
3.5k
Rails 8.1.1 × Claude Code
miyakawa2449
1
120
フィールドエンジニア at 多摩川 / Field Engineer at Tamagawa
aokiplayer
0
420
JAWS-UG/AWS Community Update 2026年6月20日JAWS-UG FUKUOKA #26 JAWS DAYS 2026 re:Cap! おつかれせいけしろー
awsjcpm
0
150
LT#9 非線形な物理現象に基づく真性乱数生成器の構築と、暗号学的エントロピー密度の定量的評価について
sakopon
0
140
チームパフォーマンスを高めるための2種類のセルフマネジメント / Two Types of Self-Management for Improving Team Performance
iwashi86
4
1k
エッジで動くNode-REDを作る実験 #noderedjp #noderedcon
n0bisuke2
0
660
OpenClawハンズオンでのトラブルとデバイス向けなんちゃらクロー #IoTLT vol133
n0bisuke2
1
300
画面の向こうから「気づき」を得る 画面の向こうを「物差し」として捉える
subroh0508
1
460
JAWS/AWS Community Updates in JAWS-UG富山 at 富山高専
awsjcpm
0
120
10分de名コミュ “最高の自分”を演じ憧れの同業者と渡り合う
subroh0508
1
680
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
320
The Language of Interfaces
destraynor
162
27k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Raft: Consensus for Rubyists
vanstee
142
7.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Skip the Path - Find Your Career Trail
mkilby
1
230
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Faster Mobile Websites
deanohume
310
32k
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輝度制御
で、これができたってわけ