3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

obnizと友だちになりたい ①光センサーで貧者のテルミン

Last updated at Posted at 2022-04-06

目的

obnizに慣れ、IoT初心者としてその楽しさを知ることを目的に、継続してobnizと触れ合っていきます。

実装目標

最初は、距離センサーで人の動きを感知してライン経由で通知を送ってくれるプログラムを作ろうとしていました。

というのも、私が管理しているオープンスペースがあるのですが、部屋を離れていても、人が来た時に教えてくれると便利だなと思ったからです。そうした生活に根付いた便利さがあると、継続してobnizに興味を持てるのではと思います。

ただ、いきなり距離センサーが不機嫌で、電圧が高いだの何だの連呼しだし、時間がないのもあり路線を変更することになりました。(ハーゲンダッツより高いくせに、まさかこのまま壊れる気じゃないだろうな。)

IMG_20220405_220547_2.jpg

実装目標 (変更)

ということで、光センサーの電圧の値を拾って、それによってスピーカーから出る音色が変わるテルミンのようなプロダクトを作ることにしました。

ちなみに、テルミンとは、1920年にロシアのテルミン博士が作った世界初の電子楽器。楽器に直接触れず、電磁場に手をかざすことで悲しそうな女性の声のような音がなる不思議な楽器です。

90年代後半頃に、よくミュージシャンが使っていた記憶があります。
懐かしの The Jon Spencer Blues Explosion とか。

環境・デバイス

Node.js v17.6.0
obniz v3.19.1

圧電スピーカー(13mm)
Cdsセル 5mmタイプ
超音波距離センサー HC−SR04

完成品

(追記)コードを一部書き換えて、動くものが完成しました。

最終コード

const Obniz = require('obniz');
const obniz = new Obniz('-');


obniz.onconnect = async () => {
    obniz.io0.output(true);  // io0電圧を5Vに(電源+)
    obniz.io2.output(false); // io2電圧を0Vに(電源−)
    const speaker = obniz.wired('Speaker', { signal: 10, gnd: 11 }); //スピーカーの接続端子

    // io1をアナログピンに(センサーの値を取得)
    obniz.ad1.start((voltage) => {
        // センサーの値が変わるたびに実行される
        console.log(voltage);

        //スピーカーに音出力
        speaker.play(voltage*1000);
    });
        // displayに反映
        obniz.display.clear();
        obniz.display.print('theramin');
    }

つまずいたポイント

①voltageをスピーカーのヘルツ数としてこのように、呼び込みたかったのですが…

speaker.play(voltage*7000);

このエラーが表示。

ReferenceError: voltage is not defined

voltageは、この{}の中でしか動かないことがわかり、speakerの位置を移動させることでコードが走るようになりました。

obniz.ad1.start((voltage) => {}

②新たなるエラーの出現

動くには動いたのですが、少し音を鳴らすと強制的にこのエラーが出て落ちるようになってしまいました。

Error: No More pwm Available.

PWMというのは、パルス幅変調を指すらしく、よくわからんが、何かがいっぱいいっぱいと言っていそうなので、インターバルを入れて、電圧の数値を取ってくる頻度を下げてみようと試みていたのですが、タイムアップとなってしまいました。

(後日追記)
どうも、この宣言が、何度もループしていたことで、メモリーのようなものを食って、途中で落ちていたようでした。

const speaker = obniz.wired('Speaker', { signal: 10, gnd: 11 });

そのため、この{}の中からconstを外に出すことで、プログラミンが問題なく走るようになりました。

obniz.ad1.start((voltage) => {}

まとめ

あまり触る時間が取れず、残念な結果になったのですが、obniz自体は、プログラムが実体を伴って実生活にガシガシ侵食してくる感じが面白く。もう少し遊んでみようと思います。

(追記)
とりあえず、最低限のテルミンのようなものを作ることはできました。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?