「PC触ってばかりで遊んでくれへん」が悲しいので obnizダンスLIVE を娘と開催【動画有】

## お父さんは今夜も仕事するんだって-(-_-;)冷
　と娘から冷たく毎晩言われ「遊んでるんじゃないの。勉強していて、とっても大変なんだよ。」
　と弁明しつつ、**obnizが机の上で楽しげにチカチカ光っていると信憑性ゼロ**なので、
　「お父さんすごい！」を目標に、一緒に遊びながらobniz創作してみることにしました。

　↓勉強といいつつすごく楽しんでいる証拠ツイート
![マイオブ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1793443/e0c766d4-ddc3-b2c9-abe8-4bcc8501dd11.png)

## チカチカ・メロディー・ダンシング!!
　試してみた結果、5歳児を引き付けるのはやっぱり
　<font color="Red">**チカチカ(LEDライト)・メロディー・ダンシング(動き)**</font>だったので
　①LED　②スピーカー　③サーボモータ　を使用し、obnizダンスLIVEを娘と共同開催。
　光と音だけでは娘の反応が薄かったので、モータを活用して「ダンス＝動き」の要素を追加。
　![パーツ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1793443/bb43d1d6-bb91-360b-10f1-36df785289dc.png)

## 娘work ライブ会場づくり
　だいたいのイメージを伝えて、100均グッズでライブハウス設営と装飾を依頼。
　もちろん次女1歳は邪魔ばかり。
　フェルトレザートレイ×2　 押しピン　　両面テープ　　折り紙　　マスキングテープ
![100きんいつ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1793443/96f0b854-a906-945c-ab78-1ec8809e3a61.png)

## 父work obniz設定
:::note info
　①ライト　　　音楽に合わせ 光り方を変えながら3色LEDが点灯
　②メロディー　「楽んで」をテーマにYUKIのJOYのメロディーを再現
　③ダンシング　音楽に合わせ　サーボモータが回りアンパンマンが躍る
:::

　<details><summary>コードはこちら　<font color="Red">**(クリックで表示)**</font></summary><div><br><br>


```js

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

obniz.onconnect = async function () {

var servo = obniz.wired("ServoMotor", {gnd:9, vcc:10, signal:11});

// LED　赤
var led = obniz.wired("LED", {anode:2, cathode:3});
led.blink(210); // 210msec
// LED　青
var led = obniz.wired("LED", {anode:4, cathode:5});
led.blink(210); // 210msec
// LED　黄
var led = obniz.wired("LED", {anode:6, cathode:7});
led.blink(210); // 210msec

let count = 0;
//　アンパンマンの角度
let angles = [10, 50, 10, 50, 10, 180, 10, 50, 10, 50, 10, 180, 10, 50, 10, 50, 10, 50, 10, 50, 10, 180, 10, 50, 10, 50, 10, 50, 10, 50, 10, 50, 10, 180, 10, 50, 10, 180, 10];
let timer = setInterval(() => {
    count++;
    servo.angle(angles[count]);
    //50回アンパンマンがダンスします
    if (count >= 50) {
     clearInterval(timer);
    let degrees = 90.0;
    }
}, 500);//500msecの感覚でダンス

//JOY 
var speaker = obniz.wired("Speaker", {signal:0, gnd:1});

obniz.display.clear();
obniz.display.print('YUKI live');

speaker.play(3520); //ラ
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3520); //ラ
await obniz.wait(300);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(150);//スタッカート
speaker.stop();

await obniz.wait(50);//間の拍　半拍

speaker.play(3520); //ラ
await obniz.wait(300);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3520); //ラ
await obniz.wait(150);
speaker.stop();

await obniz.wait(50);//間の拍　半拍


speaker.play(3951.066); //シ
await obniz.wait(150);
speaker.stop();

await obniz.wait(300);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(300);
speaker.stop();

await obniz.wait(500);//間の拍

//ライト再定義2

var led = obniz.wired("LED", {anode:2, cathode:3});
led.blink();
led.endBlink();
var led = obniz.wired("LED", {anode:4, cathode:5});
led.blink();
led.endBlink();
var led = obniz.wired("LED", {anode:6, cathode:7});
led.blink();
led.endBlink();

// LED　赤
var led = obniz.wired("LED", {anode:2, cathode:3});
led.blink(105); // 210msec
// LED　青
var led = obniz.wired("LED", {anode:4, cathode:5});
led.blink(105); // 210msec
// LED　黄
var led = obniz.wired("LED", {anode:6, cathode:7});
led.blink(105); // 210msec


//2小説目

speaker.play(3520); //ラ
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3520); //ラ
await obniz.wait(300);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(150);//スタッカート
speaker.stop();

await obniz.wait(50);//間の拍　半拍

speaker.play(3520); //ラ
await obniz.wait(300);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3520); //ラ
await obniz.wait(150);
speaker.stop();

await obniz.wait(50);//間の拍　半拍


speaker.play(3951.066); //シ
await obniz.wait(150);
speaker.stop();

await obniz.wait(300);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(300);
speaker.stop();

await obniz.wait(500);//間の拍

//ライト再定義2

var led = obniz.wired("LED", {anode:2, cathode:3});
led.blink();
led.endBlink();
var led = obniz.wired("LED", {anode:4, cathode:5});
led.blink();
led.endBlink();
var led = obniz.wired("LED", {anode:6, cathode:7});
led.blink();
led.endBlink();

// LED　赤
var led = obniz.wired("LED", {anode:2, cathode:3});
led.blink(420); // 420msec
// LED　青
var led = obniz.wired("LED", {anode:4, cathode:5});
led.blink(420); // 420msec
// LED　黄
var led = obniz.wired("LED", {anode:6, cathode:7});
led.blink(420); // 420msec

//3小説目　死ぬまでわくわく～

speaker.play(2959.955); //ファ#
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(2959.955); //ファ#
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3520); //ラ
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(350);
speaker.stop();



//ライト再定義3

var led = obniz.wired("LED", {anode:2, cathode:3});
led.blink();
led.endBlink();
var led = obniz.wired("LED", {anode:4, cathode:5});
led.blink();
led.endBlink();
var led = obniz.wired("LED", {anode:6, cathode:7});
led.blink();
led.endBlink();

// LED　赤
var led = obniz.wired("LED", {anode:2, cathode:3});
led.blink(210); // 210msec
// LED　青
var led = obniz.wired("LED", {anode:4, cathode:5});
led.blink(210); // 210msec
// LED　黄
var led = obniz.wired("LED", {anode:6, cathode:7});
led.blink(210); // 210msec

//ここまでライト

await obniz.wait(100);//間の拍
speaker.play(3520); //ラ
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3951.066); //シ
await obniz.wait(700);//長い
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(700);//長い
speaker.stop();

await obniz.wait(600);//間の拍

//ライト再定義3

var led = obniz.wired("LED", {anode:2, cathode:3});
led.blink();
led.endBlink();
var led = obniz.wired("LED", {anode:4, cathode:5});
led.blink();
led.endBlink();
var led = obniz.wired("LED", {anode:6, cathode:7});
led.blink();
led.endBlink();

// LED　赤
var led = obniz.wired("LED", {anode:2, cathode:3});
led.blink(105); // 105msec
// LED　青
var led = obniz.wired("LED", {anode:4, cathode:5});
led.blink(210); // 210msec
// LED　黄
var led = obniz.wired("LED", {anode:6, cathode:7});
led.blink(420); // 420msec

//4小説目

speaker.play(2959.955); //ファ#
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(2959.955); //ファ#
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(350);
speaker.stop();

//ライト切り替え
var led = obniz.wired("LED", {anode:2, cathode:3});
led.blink();
led.endBlink();
var led = obniz.wired("LED", {anode:4, cathode:5});
led.blink();
led.endBlink();
var led = obniz.wired("LED", {anode:6, cathode:7});
led.blink();
led.endBlink();

// LED　赤
var led = obniz.wired("LED", {anode:2, cathode:3});
led.blink(105); // 105 msec
// LED　青 
var led = obniz.wired("LED", {anode:4, cathode:5});
led.blink(105); // 105msec
// LED　黄
var led = obniz.wired("LED", {anode:6, cathode:7});
led.blink(420); // 420msec

//ここまでライト

await obniz.wait(100);//間の拍

speaker.play(3520); //ラ
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3520); //ラ
await obniz.wait(350);
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(350);
speaker.stop();

//ライト切り替え
var led = obniz.wired("LED", {anode:2, cathode:3});
led.blink();
led.endBlink();
var led = obniz.wired("LED", {anode:4, cathode:5});
led.blink();
led.endBlink();
var led = obniz.wired("LED", {anode:6, cathode:7});
led.blink();
led.endBlink();

// LED　赤
var led = obniz.wired("LED", {anode:2, cathode:3});
led.blink(105); // 105msec
// LED　青
var led = obniz.wired("LED", {anode:4, cathode:5});
led.blink(105); // 105msec
// LED　黄
var led = obniz.wired("LED", {anode:6, cathode:7});
led.blink(105); // 105msec

//ここまでライト

await obniz.wait(100);//間の拍

speaker.play(3951.066); //シ
await obniz.wait(700);//長い
speaker.stop();

await obniz.wait(100);//間の拍

speaker.play(3135.963); //ソ
await obniz.wait(700);//長い
speaker.stop();

await obniz.wait(500);//間の拍

//ライト終了
var led = obniz.wired("LED", {anode:2, cathode:3});
led.blink();
led.endBlink();
var led = obniz.wired("LED", {anode:4, cathode:5});
led.blink();
led.endBlink();
var led = obniz.wired("LED", {anode:6, cathode:7});
led.blink();

led.endBlink();
speaker.stop();
servo.stop();

}
```
</div></details>

## 完成品はこちら
　次女のお友達フィギアにエキストラを依頼　ホラーマンがハロウィンぽい
![感性.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1793443/b23c1828-c800-6d8f-0930-89df90c9134e.png)

## お待たせしました！　obnizダンスLIVE　へようこそ！

<iframe width="699" height="393" src="https://www.youtube.com/embed/d0mIDI5X7Ww" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

## 工夫・できなかったこと

　**①メロディーの抑揚**
　　音の間の　` await obniz.wait(***)`　を細かく調整し　跳ねる音などを表現した
　
　**②メロディーに変わり目でLED点滅パターン変更**
　　複数のパターンを準備し、小説の変わり目で　`led.blink();`　
　　を挟むことでメロディの節目ごとに次パターンへ移行させた

　**③メロディーに合わせてモータを自動で動かし アンパンマンを躍らせる**
　　モータの角度を10(左)・50(右)・180(ターン)の3パターンから組み合わせて、
　　50回のすべての動きをあらかじめ指定。メロディーに合わせてダンスするように工夫。
　　<font color="Red">**アンパンマンが「ターン」した時には　娘が「おぉ!」と声を上げましたよ(やった!)**</font>
　　参考:　[テレワーク中の旦那さんに「お昼だよ！」を間接的に伝えるためのしかけを作ってみた！](https://qiita.com/watamino/items/438e3f22a86c13c20a86)
　　　<details><summary>コードはこちら**(クリックで表示)**</summary><div><br><br>

```js
let count = 0;
//　アンパンマンの角度
let angles = [10, 50, 10, 50, 10, 180, 10, 50, 10, 50, 10, 180, 10, 50, 10, 50, 10, 50, 10, 50, 10, 180, 10, 50, 10, 50, 10, 50, 10, 50, 10, 50, 10, 180, 10, 50, 10, 180, 10];
let timer = setInterval(() => {
    count++;
    servo.angle(angles[count]);
    //50回アンパンマンがダンスします
    if (count >= 50) {
     clearInterval(timer);
    let degrees = 90.0;
    }
}, 500);//500msecの感覚でダンス
```
</div></details>
　**④Node.jsでサーボモータスライダを起動させたい(未解決)**
　　スライダを使い、音に合わせて「手動」でモータを動かしたかったので、
　　いろいろと画策した結果断念。Qiitaでも質問し回答もいただいたのですが、
　　今回は実装することができませんでした。引き続きトライします

https://qiita.com/okinakamasayoshi/questions/25d859aa2200dbbc8065


## さて娘の反応は？
　おとうさんすごい～
　わたしの作った家の中でだんすしてる～
　こんどはもっともっとピカピカさせてみたい～
　<font color="Red">**でもなんでアンパンマンの歌じゃないの？わたしアンパンマンの歌がいい。これしらん。**</font>

　喜んでくれたみたいで父はとてもうれしいです。　(アンパンマンの曲はメロディー鬼ムズ)
![あん.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1793443/5917536c-6604-e4b5-e205-96067d6da8f8.png)