巷で噂の obniz、スターターセットに入っていたブザーで遊んでみることにしました。
参考ドキュメント
とりあえずチュートリアル的なの
const speaker = obniz.wired("Keyestudio_Buzzer", { signal: 11, vcc: 10, gnd: 9 });
speaker.play(1000) // 1000 Hz
obnizであそんでる pic.twitter.com/g7caIvMJVU
— uma (@umaniel_) September 11, 2020
・・・なんとも言えない音がなりました。
周波数(音程)を変える
こちらを参考に、周波数を指定してみます。
const speaker = obniz.wired("Keyestudio_Buzzer", { signal: 11, vcc: 10, gnd: 9 });
speaker.play(523.23) // C
— uma (@umaniel_) September 11, 2020
Cの音が鳴りました。
連続で音程を変えてみる
const speaker = obniz.wired("Keyestudio_Buzzer", { signal: 11, vcc: 10, gnd: 9 });
const C = 523.23;
const D = 587.34;
const E = 659.25;
const F = 698.45;
const G = 783.98;
const A = 879.99;
const B = 987.75;
const hC = 1046.5;
const score = [C, D, E, F, G, A, B, hC];
score.forEach((note) => {
speaker.play(note);
obniz.wait(500);
});
speaker.stop();
こんな感じでやってみます。
— uma (@umaniel_) September 11, 2020
ドレミファソラシドができました。
演奏したい
これだけでは味気ないので、スターターセットに入っていた距離センサを使い、テルミンのような物を作ってみようと思います。
距離センサのドキュメントはこれ
const hcsr04 = obniz.wired("HC-SR04", { gnd: 0, echo: 1, trigger: 2, vcc: 3 });
const speaker = obniz.wired("Keyestudio_Buzzer", { signal: 11, vcc: 10, gnd: 9 });
while(true) {
const val = await hcsr04.measureWait();
speaker.play(val)
}
— uma (@umaniel_) September 11, 2020
バグったゲームボーイみたいな感じになりました。
とても演奏できそうにありません。
演奏したい(リベンジ)
これっぽいものを買ってきました。
スティックの向きでドレミファソラシドできるようにしようと思います。
なお、私が買ったものは sw のピンがなかったので、ボタンが機能しませんでした・・・
(ボタンでオクターブ上げたかった)
スティックをうごかして出力値をチェックしたところ、ニュートラルが 0 、最大値が 0.5、最小値が-0.5だったので、以下のような感じにしました。
[-5, 5] [0, 5] [5, 5]
hC C D
[-5, 0] [0, 0] [5, 0]
B stop E
[-5, -5] [0, -5] [5, -5]
A G F
コードは以下
const speaker = obniz.wired("Keyestudio_Buzzer", { signal: 11, vcc: 10, gnd: 9 });
const joystick = obniz.wired("JoyStick", { gnd: 3, sw: 4, y: 1, x: 0, vcc: 2 });
const C = 523.23;
const D = 587.34;
const E = 659.25;
const F = 698.45;
const G = 783.98;
const A = 879.99;
const B = 987.75;
const hC = 1046.5;
while (true) {
const x = await joystick.getXWait();
const y = await joystick.getYWait();
switch (true) {
case 0.1 > x && x > -0.1 && y > 0.4:
speaker.play(C);
break;
case x > 0.4 && y > 0.4:
speaker.play(D);
break;
case x > 0.4 && 0.1 > y && y > -0.1:
speaker.play(E);
break;
case x > 0.4 && y < -0.4:
speaker.play(F);
break;
case 0.1 > x && x > -0.1 && y < -0.4:
speaker.play(G);
break;
case x < -0.4 && y < -0.4:
speaker.play(A);
break;
case x < -0.4 && 0.1 > y && y > -0.1:
speaker.play(B);
break;
case x < -0.4 && y > 0.4:
speaker.play(hC);
break;
case 0.1 > x && x > -0.1 && 0.1 > y && y > -0.1:
speaker.stop();
break;
}
}
— uma (@umaniel_) September 11, 2020
満足しました。
傾きの感度は0.4にしましたが、これでもわりと遊びの部分が多いので、もう少し厳しくしてもいいかもしれません。
おわりに
obniz、めっちゃ面白いです。
公式のドキュメントが充実していてとてもいい感じです。
Node.js のライブラリもあって、自分のローカル端末からインターネット経由で実行できるのもよさみです。
パーツリストを見ていると、NFCリーダなんかもあったりして(売ってるところ不明ですが)、なんか色々できそうな気がします。
おしまい