LoginSignup
4

More than 1 year has passed since last update.

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

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

 と娘から冷たく毎晩言われ「遊んでるんじゃないの。勉強していて、とっても大変なんだよ。」
 と弁明しつつ、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

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
What you can do with signing up
4