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
すぎうり
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
ライブ感を生む 巻き込み型スライドの作り方/Create your slide like a heavy metal concert
ikuodanaka
5
1.7k
私がカンファレンスのプロポーザルを書くときに考えていること
kotomin_m
1
780
「無理」を「コントロール」するスキル / Skills to Control "Muri"
hageyahhoo
6
4.4k
JAWS-UG/AWS Community Update - 2026/6/13 JAWS-UG TOHOKU 仙台
awsjcpm
0
1.2k
人見知りな HUB おじさんが 会話のハードルを超え、 今度は誰かの踏み台になろうとする話/hub-guy-as-a-stepping-stone
aokiplayer
2
770
画面の向こうから「気づき」を得る 画面の向こうを「物差し」として捉える
subroh0508
1
410
Node-REDで制御できるエッジカメラのreCameraを触る #iotlt #JLCPCB #recamera
n0bisuke2
0
190
個人制作コンテンツの多言語展開のノウハウを全公開! 〜世界に自分を発信しよう!〜
syotasasaki593876
0
210
ATOMS3R-CAMとClaude SKILLSでタイムラプスチャレンジ #iotlt
n0bisuke2
0
430
파이썬 토룡신점 운영후기
lqez
0
570
2025版 鯖落ちパーツで安価に機械学習用マシンを作ってみる
bobfromjapan
0
960
ときメモは 運営が30年かけて “実プレイ”していた
mzryuka
0
110
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
460
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
260
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
390
The browser strikes back
jonoalderson
0
1.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
690
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
WENDY [Excerpt]
tessaabrams
11
39k
Accessibility Awareness
sabderemane
1
170
30 Presentation Tips
portentint
PRO
1
360
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輝度制御
で、これができたってわけ