LoginSignup
4
1

More than 1 year has passed since last update.

obniz feat.BAIKIN-MAN!

Last updated at Posted at 2021-10-26

パパの目論見

うちの次女はアンパンマンが大好きでバイキンマンが大嫌いな典型的な2歳児なのですが、

ガチャポンで出てくるのは、決まってバイキンマンだったりします:joy:

今回の企画はバイキンマンを使ったおもちゃを作り、
娘に好きになってもらおうバイキンマンを克服してもらおうというものです。

逃げる者を追いたくなるのは人間の性でしょうから、近づいたら逃げるバイキンマンを作ります。

名付けて、「BYE-BAIKIN-MAN!!」

obnizを手に入れたので、いざトライ!

試作品

超振動距離センサとサーボモーターを組み合わせて、動力にしたいと考えました。

この超振動を使えば、地面を叩いてやつらは動くはずである!これは期待できそうだ!

完成品「BYE-BAIKIN-MAN?」

小刻みに震えるバイキンマンが出来上がった。。。笑

ガチャポン排出品のサイズ感を考えてなかった。。。

番外編

その後タイヤが大きいと、かろうじて前進できることを確認。
ただし、バイキンマンではないので却下!
こっから先は力学?な気がしたので、追い求めるのをやめました。笑

あと、もともとは、動く前にランプが点滅する無駄仕様を取り入れていたのですが、
施行繰り返し過ぎたせいか破壊してしまい、焦げ臭かったのでやめました。

材料

 ●obniz Board 1Y
 ●マイクロサーボ 9G SG90
 ●超音波距離センサモジュール HC-SR04

ソースコード

const Obniz = require('obniz');
const obniz = new Obniz('****-****'); // Obniz_IDに自分のIDを入れます

obniz.onconnect = async function () {
    // 超音波測距センサを利用する
    const servo = obniz.wired('ServoMotor', { gnd: 0, vcc: 1, signal: 2 });
    // サーボモータを利用
    const hcsr04 = obniz.wired('HC-SR04', { gnd: 11, echo: 10, trigger: 9, vcc: 8 });
    // RGB LEDを利用 ➡不使用
    //const rgbled = obniz.wired('WS2811', { gnd: 4, vcc: 5, din: 6 });

    // ディスプレイ
    obniz.display.clear(); // クリア
    obniz.display.print('Ready');

    // setIntervalで一定間隔で処理
    setInterval(async function () {
        // 距離を取得
        let distance = await hcsr04.measureWait();
        // そのままだと小数点以下の桁数がやたら多いので整数に丸めてもよい
        //distance = Math.floor(distance);

        // 距離(mm)をターミナルに表示
        console.log(distance + ' mm');
        // obnizディスプレイに表示
        // 一度消してから距離+mmの単位を表示
        obniz.display.clear();
        obniz.display.print(distance + ' mm');

        // 距離がある程度未満かどうかの判定
        if (distance < 100) { // XXmm = Xcm 以下の場合
            // obnizディスプレイに近接していることを表示
            obniz.display.clear();
            obniz.display.print('GO!BAIKIN-MAN!');
            //rgbled.rgb(255, 0, 0);

            // カウンターで回転回数を制御。180度と0度を繰り返す。
            let cnt = 0;           
            var angle = 0;
            let timerId = setInterval(async function(){
                cnt++
                if(cnt===5){
                  clearInterval(timerId);
                } else {
                  servo.angle(angle);
                  if (angle == 0) {
                      angle = 180;
                    } else {
                      angle = 0;
                    }
                } 
            //rgbled.rgb(0, 0, 0);
            }, 1000);
        }
    }, 1000); // 1000ミリ秒 = 1秒おきに実行
}

実証実験

せっかくなのでこどもに見せてみました。
(妻のNGが出たので画像/動画はナシです。すみません。)

どうやら、小刻みに震えるバイキンマンでも、見慣れないおもちゃは面白いようです。
分解後、もっかい作ってと言われたので、それなりに面白かったのでしょう。

丁重にお断りしました:angel:

次回作るときはちゃんと前進するバイキンマンを作ってあげたいものです:relaxed:

4
1
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
4
1