>100 Views
October 09, 25
スライド概要
Otsuki.なんか #1 Ruby でウィンカー音を出す こにし
自己紹介 ● ● ● 名前:こにし 住所:山梨県甲府市 仕事:ソフトウェアエンジニア(最近は VoIP がメイン)
車のウィンカー音 みなさん、車のウィンカーの音って、どんな音を想像しますか? 昔はこれ一択だった。 ● カッチン、カッチン、カッチン でも、最近だとこんなのもある。 ● ● ピ、ピ、ピ ピコ、ピコ、ピコ 個人的には「カッチン、カッチン、カッチン」の方が好き。
Ruby でウィンカー音を出してみる 材料は ● ● ハードは RP2040-Zero 互換ボード(AliExpress で 300 円くらい) Raspberry Pi Pico と同じ CPU で、Type-C で接続できる。 ソフトは picoruby / R2P2 こいつらで、なるべくリアルな「カッチン」音を出してみる。 では、早速実演します。
ネタがバレたところで もう1つの材料は以下でした。 ● ● リレーモジュール(AliExpress で 600 円くらい) SRD-05VDC-SL-C + ドライバ回路(RP2040 で直接制御できる) プラスチックのコップ というわけで、単に RP2040 で、リレーを ON/OFF しただけでした。
ちょっと技術ネタ ● ● ● このリレーのドライバ制御は、オープンドレイン(コレクタ)で行う。 picoruby には class GPIO の open_drain() メソッドがあった。👍 でも、なんか思ったとおりに動かない。 調べてみると、 ● ● picoruby のソースを見たら、RP2040 の実装は空だった。😨 というか、RP2040 は GPIO にオープンドレインモードがなかった。
RP2040 でオープンドレインを実現する ● しかたないので、それっぽく疑似る。 ○ ○ ○ Hi-Z は、INPUT モードで PULL-UP で代用する(入力モードだけど、出力として利用)。 GND は、OUTPUT モードの LOW を利用する。 OUTPUT の ON / OFF を、I/O モードの切り替えで実現する。 # 初期設定 pin = GPIO.new(0, GPIO::IN | GPIO::PULL_UP) pin.write(0) # 制御 pin.set_dir(GPIO::OUT) pin.set_dir(GPIO::IN) # リレーオン(出力を # リレーオフ(出力を # Hi-Z 相当 = リレーオフ # OUTPUT にした時に GND にする GND に) Hi-Z 相当に)
おまけ ● ● ● そういえば、最近の車のウィンカーって、流れている。 もし、これがリレーで制御されていたら、どんな感じになるんだろう? というわけで、これから試してみます。