ビジュアルプログラミングでブルブルブルッ
https://gyazo.com/a36209bc8c6ee6968b8791b497e42f6f
自己紹介
むとうたけし(武藤武士): 専業主夫(51歳)@奈良
610t
https://gyazo.com/ac4b7b80ce5dd4837515d4ba478c7702
所属コミュニティ
アカウント一覧
610t
はじめに
Virtual Reality(VR)での五感の実現
視覚: Head Mount Display
聴覚: ドルビー音声など
味覚,嗅覚: 最近研究中みたい
触覚を扱う方法は?
→音にあわせて振動させるとそれっぽい
hapStakというデバイスで、
ビジュアルプログラミングでブルブルブルッ
おわび:振動なので発表ではあまり伝わらないかも
hapStakってなに?
https://gyazo.com/69bae0be0bcbfffca55df193f4002fb4
(左)組み立て済, (右)全パーツ
触感デバイス開発/体感モジュール"hapStak"
振動アクチュエーターと駆動回路がセット
振動による触感再現を手軽に扱うデバイス
公式情報
振動アクチュエーター
FOSTER ACOUSTICHAPTIC®(仕様一覧) 639897 特徴
広域振動: 広い周波数で安定した出力
低遅延: 入力への応答速度が速い
静粛性: 動作騒音は寝室レベルと静か
https://bit-trade-one.co.jp/wp/wp-content/uploads/2021/09/hapStak-3_Grapht.png
hapStak公式ページより
二つのバージョン
マイコンから使えるデジタル版
音声入力だけで使えるアナログ版
デジタル版の特徴
対応マイコン(刺すだけで利用可)
I2S(Inter-IC Sound)インターフェースを利用
電源供給はマイコンから行う
モバイルバッテリーで駆動可能
MDFのケースが付属
hapStakのデモ例
AtomEcho初期ファームウエアを使う:後述
ADACHACY-hapStak/hapStakDemo/:とても楽しい!!
16種類のブルブルブルッが体験可能
ピストルやテニスや恐竜の足音など
コンパイル方法はおまけ参照
なぜか、いまコンパイルできないorz
ADACHACY-hapStak/Samples/HapstackTest/
ボタンを押すと、銃を撃った音と振動が
鉄腕ATOM
https://gyazo.com/309d562f1273dbab59be0f00569cd9ac
(左上)Matrix, (右上)Lite, (下)Echo
M5Stack社ATOMシリーズ(大きさ24x24mm)
ATOM Echo初期ファームウエア
Bluetoothスピーカー
LiteやMatrixでも利用可能
もちろん、音は出ない
振動だけを出す場合は良いかも!!
書き込み方法(macOSの場合): --portで指定するデバイス名(/dev/cu.usbserial-595267585B)は、適切に変更
code:shell
% esptool.py --port /dev/cu.usbserial-595267585B -b 1500000 write_flash 0x00000 Atom_echo_a2dp_led_0x00.bin
Scratchからブルブルブルッ
hapStakは音を出すと振動
PCなどからBluetoothスピーカーとして使えれば、簡単にブルブルブルッできる
音を出すプログラムは、ScratchでなくてもOK!
Scratchで利用する場合…
"音"に分類されているブロックを使う
低音を出すバスドラムなんかがオススメ
https://gyazo.com/485b7dbf753f83ede19b63720d34759c
準備
ATOM Echoの初期ファームウエアが書かれたATOMシリーズを用意
hapStakにATOMを刺す
PCのスピーカーをATOMのスピーカーに設定
M5-SPEAKER-T1という名前
準備OK!!
ボタンポチりでドラムすこ
https://gyazo.com/a36209bc8c6ee6968b8791b497e42f6f
これまで説明したのは、図の上の部分
PCから音を出すとhapStakがブルブルブルッ
物理的なスイッチを使ってブルブルブルッ
AkaDakoを利用する(斜めの部分)
Groveデバイスを使って操作可能
micro:bitはもちろん使える
AkaDakoってなあに?
https://gyazo.com/1de0e7e1ab1bc913eb63117fef55764b
モニターキャンペーン限定キット
AkaDako情報はここから!!
Scratch用Groveシールド(USBシリアル接続)
デジタル x 2
アナログ x 2
I2C x 2
独自拡張機能入りのScratchで利用可
各種デバイス用のブロックが最初から用意
NeoPixel LEDバー
サーボモーター
光センサー
超音波センサー
環境センサー(温度,湿度,気圧)
加速度計
https://gyazo.com/810ae6857c2da612a7510d3c361ff551
I2Cやワンワイヤーなどの操作も可能
バイトやビット列操作なども提供
https://gyazo.com/164790668ea3d7361f5ec4b64bcbcc4f
予価999円(赤い本体のみ)
AkaDako太鼓
https://gyazo.com/1888d8c50578c4d6c5368f10bde28dbc
バスドラは超音波センサーの接近で鳴らす
シンバルとハイハットは、ボタンスイッチで鳴らす
https://youtu.be/14XXTNr8bvk
オイラはドラマー with micro:bit/M5Stack
https://gyazo.com/19c936d4de7b57a31bc2d8aab499bebc
M5StickC Plusでドラムを鳴らしてブルブルブルッ
hapStakがブルブルブルッと動いている所に注目
Microbit More(とM5bitLess)使用
https://youtu.be/KDa46WqKtyk
おわりに
音でブルブルブルッする感覚はとても面白い!!
AkaDakoやmicro:bit(Microbit More)やM5Stack(M5bitLess)で、 hapStakをブルブルブルッしてくださいね!!]
おまけ:hapStakDemo.inoを動かすために
hapStakDemo.inoをコンパイルすると、以下のようなエラーが出る場合…
code:error_hapStakDemo.ino
(snip)
/Users/mutoh/Documents/Arduino/libraries/ESP8266Audio-master/src/libtinysoundfont/tsf.h: In function 'void tsf_channel_midi_control(tsf*, int, int, int)':
/Users/mutoh/Documents/Arduino/libraries/ESP8266Audio-master/src/libtinysoundfont/tsf.h:2100:1: error: insn does not satisfy its constraints:
}
^
(insn 858 343 344 51 (set (reg:SF 19 f0 407) (mem/u/c:SF (symbol_ref/u:SI ("*.LC248") flags 0x2) 0 S4 A32)) "/Users/mutoh/Documents/Arduino/libraries/ESP8266Audio-master/src/libtinysoundfont/tsf.h":2053 47 {movsf_internal} (nil))
during RTL pass: postreload
/Users/mutoh/Documents/Arduino/libraries/ESP8266Audio-master/src/libtinysoundfont/tsf.h:2100:1: internal compiler error: in extract_constrain_insn, at recog.c:2210
libbacktrace could not find executable to open
Please submit a full bug report,
with preprocessed source if appropriate.
(snip)
以下が問題
本来はGCCのバグ
次のようなパッチを当てると、コンパイル可能
code:ESP8266Audio-master/src/libtinysoundfont/tsf.h.diff
--- tsf.h.org 2022-01-22 23:53:09.000000000 +0900
+++ tsf.h 2022-01-22 23:55:01.000000000 +0900
@@ -190,6 +190,7 @@
TSFDEF int tsf_channel_set_bank_preset(tsf* f, int channel, int bank, int preset_number);
TSFDEF void tsf_channel_set_pan(tsf* f, int channel, float pan);
TSFDEF void tsf_channel_set_volume(tsf* f, int channel, float volume);
+TSFDEF void tsf_channel_set_volume_to_one(tsf* f, int channel);
TSFDEF void tsf_channel_set_pitchwheel(tsf* f, int channel, int pitch_wheel);
TSFDEF void tsf_channel_set_pitchrange(tsf* f, int channel, float pitch_range);
TSFDEF void tsf_channel_set_tuning(tsf* f, int channel, float tuning);
@@ -2054,6 +2055,10 @@
tsf_voice_endquick(v, f->outSampleRate);
}
+TSFDEF void tsf_channel_set_volume_to_one(tsf* f, int channel){
+ tsf_channel_set_volume(f, channel, 1.0f);
+}
+
TSFDEF void tsf_channel_midi_control(tsf* f, int channel, int controller, int control_value)
{
struct tsf_channel* c = tsf_channel_init(f, channel);
@@ -2079,7 +2084,7 @@
c->midiVolume = c->midiExpression = 16383;
c->midiPan = 8192;
c->bank = 0;
- tsf_channel_set_volume(f, channel, 1.0f);
+ tsf_channel_set_volume_to_one(f, channel);
tsf_channel_set_pan(f, channel, 0.5f);
tsf_channel_set_pitchrange(f, channel, 2.0f);
return;
当日の情報へのリンク
https://www.youtube.com/watch?v=o7rJlZmUFo4