LoginSignup
3
0

More than 3 years have passed since last update.

obniz のブザーで遊んでみる

Posted at

巷で噂の obniz、スターターセットに入っていたブザーで遊んでみることにしました。

参考ドキュメント

これを見ればすべてわかる

とりあえずチュートリアル的なの

1000Hz
const speaker = obniz.wired("Keyestudio_Buzzer", { signal: 11, vcc: 10, gnd: 9 });
speaker.play(1000) // 1000 Hz

・・・なんとも言えない音がなりました。

周波数(音程)を変える

こちらを参考に、周波数を指定してみます。

C
const speaker = obniz.wired("Keyestudio_Buzzer", { signal: 11, vcc: 10, gnd: 9 });
speaker.play(523.23) // C

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();

こんな感じでやってみます。

ドレミファソラシドができました。

演奏したい

これだけでは味気ないので、スターターセットに入っていた距離センサを使い、テルミンのような物を作ってみようと思います。

距離センサのドキュメントはこれ

テルミン
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)
}

バグったゲームボーイみたいな感じになりました。
とても演奏できそうにありません。

演奏したい(リベンジ)

これっぽいものを買ってきました。

スティックの向きでドレミファソラシドできるようにしようと思います。

なお、私が買ったものは 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

コードは以下

joycon
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;
  }
}

満足しました。
傾きの感度は0.4にしましたが、これでもわりと遊びの部分が多いので、もう少し厳しくしてもいいかもしれません。

おわりに

obniz、めっちゃ面白いです。
公式のドキュメントが充実していてとてもいい感じです。
Node.js のライブラリもあって、自分のローカル端末からインターネット経由で実行できるのもよさみです。
パーツリストを見ていると、NFCリーダなんかもあったりして(売ってるところ不明ですが)、なんか色々できそうな気がします。

おしまい

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0