LoginSignup
11
4

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-10-20

お父さんは今夜も仕事するんだって-(-_-;)冷

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

 ↓勉強といいつつすごく楽しんでいる証拠ツイート
マイオブ.PNG

チカチカ・メロディー・ダンシング!!

 試してみた結果、5歳児を引き付けるのはやっぱり
 チカチカ(LEDライト)・メロディー・ダンシング(動き)だったので
 ①LED ②スピーカー ③サーボモータ を使用し、obnizダンスLIVEを娘と共同開催。
 光と音だけでは娘の反応が薄かったので、モータを活用して「ダンス=動き」の要素を追加。
 パーツ.PNG

娘work ライブ会場づくり

 だいたいのイメージを伝えて、100均グッズでライブハウス設営と装飾を依頼。
 もちろん次女1歳は邪魔ばかり。
 フェルトレザートレイ×2  押しピン  両面テープ  折り紙  マスキングテープ
100きんいつ.PNG

父work obniz設定

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

 

コードはこちら (クリックで表示)



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

}

完成品はこちら

 次女のお友達フィギアにエキストラを依頼 ホラーマンがハロウィンぽい
感性.PNG

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

工夫・できなかったこと

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

 ③メロディーに合わせてモータを自動で動かし アンパンマンを躍らせる
  モータの角度を10(左)・50(右)・180(ターン)の3パターンから組み合わせて、
  50回のすべての動きをあらかじめ指定。メロディーに合わせてダンスするように工夫。
  アンパンマンが「ターン」した時には 娘が「おぉ!」と声を上げましたよ(やった!)
  参考: テレワーク中の旦那さんに「お昼だよ!」を間接的に伝えるためのしかけを作ってみた!
   

コードはこちら(クリックで表示)


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の感覚でダンス


 ④Node.jsでサーボモータスライダを起動させたい(未解決)
  スライダを使い、音に合わせて「手動」でモータを動かしたかったので、
  いろいろと画策した結果断念。Qiitaでも質問し回答もいただいたのですが、
  今回は実装することができませんでした。引き続きトライします

さて娘の反応は?

 おとうさんすごい~
 わたしの作った家の中でだんすしてる~
 こんどはもっともっとピカピカさせてみたい~
 でもなんでアンパンマンの歌じゃないの?わたしアンパンマンの歌がいい。これしらん。

 喜んでくれたみたいで父はとてもうれしいです。 (アンパンマンの曲はメロディー鬼ムズ)
あん.PNG

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