お父さんは今夜も仕事するんだって-(-_-;)冷
と娘から冷たく毎晩言われ「遊んでるんじゃないの。勉強していて、とっても大変なんだよ。」
と弁明しつつ、obnizが机の上で楽しげにチカチカ光っていると信憑性ゼロなので、
「お父さんすごい!」を目標に、一緒に遊びながらobniz創作してみることにしました。
チカチカ・メロディー・ダンシング!!
試してみた結果、5歳児を引き付けるのはやっぱり
チカチカ(LEDライト)・メロディー・ダンシング(動き)だったので
①LED ②スピーカー ③サーボモータ を使用し、obnizダンスLIVEを娘と共同開催。
光と音だけでは娘の反応が薄かったので、モータを活用して「ダンス=動き」の要素を追加。
娘work ライブ会場づくり
だいたいのイメージを伝えて、100均グッズでライブハウス設営と装飾を依頼。
もちろん次女1歳は邪魔ばかり。
フェルトレザートレイ×2 押しピン 両面テープ 折り紙 マスキングテープ
父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();
}
完成品はこちら
次女のお友達フィギアにエキストラを依頼 ホラーマンがハロウィンぽい
お待たせしました! 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の感覚でダンス
さて娘の反応は?
おとうさんすごい~
わたしの作った家の中でだんすしてる~
こんどはもっともっとピカピカさせてみたい~
でもなんでアンパンマンの歌じゃないの?わたしアンパンマンの歌がいい。これしらん。