この記事は IoTLT Advent Calendar 2019 の7日目の記事です。
はじめに
このモニュメント。obniz フルパワーで回すと先ほどの情緒消失されます。動く速度は大事。サンタさんもきっとドン引き!
— Tanaka Seigo (@1ft_seabass) November 30, 2019
⚙️🎄⚙️ 🦌🎅< 怖っ#obniz #GeekServo #LEGO #enebular pic.twitter.com/tXa1oVYQx5
このような仕組みができていたんですが、やはりもっとしっかりしたクリスマスツリーを回して光らせてみたくなりました。
できたぞー!回る速度が上がるとイルミネーションもスピードアップするのでパーティー感が上昇します!#obniz #GeekServo #Lego #クリスマス #Christmas2019 pic.twitter.com/QCdy3D00FS
— Tanaka Seigo (@1ft_seabass) December 5, 2019
このように、回して光らせることが出来ました。
クリスマスツリーを買ってきた
DAISOで買ったクリスマスツリー(ミニ)です。
こんな感じ。
ひとまず分解します。
キリで裏側から穴を開けます。
ぶっすーっと。
LEGOにくっつける
LEGOとくっつけるためにDAISOおゆぷらを使います。色はクリスマスカラーの赤!
これは、ゆるメカトロ というゆるくメカトロニクスで楽しむグループで新井さんから伺った知見です。
お湯で温めて柔らかくします。
柔らかくするぞー!
ジャボン。
くんにゃりしてきました。
キリで穴を開けても穴が小さく実装がしにくいので、もうちょっと掘ります。
うまく空けれました。
おゆプラ1本だけだと量が足りなかったので、2本・3本追加しました。まずは、LEGOのテクニックの軸を結びつけます。
さきほどの、おゆプラましましさせて、ツリーを差し込みました。
良い感じに、つながりました!
先ほどのものに置き換えてみます!
まずは回してみた!良い感じ!#obniz #GeekServo #Lego #クリスマス #Christmas2019 pic.twitter.com/wrfDQSvfIj
— Tanaka Seigo (@1ft_seabass) December 5, 2019
obnizのソースコード
光らせてみるぞ!2個目のobnizとテープLEDを載せる!#obniz #GeekServo #Lego #クリスマス #Christmas2019 pic.twitter.com/g4wl9jHWtE
— Tanaka Seigo (@1ft_seabass) December 5, 2019
obnizのソースコードです。1つのプログラムで、回すobnizと光らせるobnizを同時に動かします。
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<link rel="stylesheet" href="/css/starter-sample.css">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@2.4.0/obniz.js" crossorigin="anonymous"></script>
</head>
<body>
<div class="wrap">
<div class="DCMotor">
<h3 class="text-center">Controling on Chritsmas Tree!</h3>
</div>
<div class="DCMotor">
<button class="btn btn-primary btn-block" id="forward">Forward</button>
<button class="btn btn-primary btn-block" id="reverse">Reverse</button>
<button class="btn btn-primary btn-block" id="rightroll">RightRoll</button>
<button class="btn btn-primary btn-block" id="leftroll">LeftRoll</button>
<button class="btn btn-success btn-block " id="powerup">Power 100</button>
<button class="btn btn-success btn-block" id="powerdown">Power 30</button>
<button class="btn btn-secondary btn-block" id="stop">Stop</button>
</div>
</div>
<script>
var obniz = new Obniz("MY_OBNIZ_1");
var obniz2 = new Obniz("MY_OBNIZ_2");
var timerID;
var leds;
obniz2.onconnect = async function () {
obniz2.display.clear();
obniz2.display.print("Hello LEDTape!!!");
leds = obniz2.wired("WS2812B", {gnd:2, vcc: 0, din: 1});
// Start
var colors = [
[255, 0, 0],
[0, 255, 0],
[0, 0, 255],
[255, 0, 0],
[0, 255, 0],
[0, 0, 255],
[255, 0, 0],
[0, 255, 0],
[0, 0, 255],
[255, 0, 0],
[0, 255, 0],
[0, 0, 255],
[255, 0, 0],
[0, 255, 0],
[0, 0, 255]
];
leds.rgbs(colors);
}
obniz.onconnect = async function () {
var motor = obniz.wired("DCMotor", {forward:0, back:1});
obniz.display.clear();
obniz.display.print("Hello World");
$('#forward').click(function () {
motor.forward();
obniz.display.clear();
obniz.display.print("forward");
});
$('#reverse').click(function () {
motor.reverse();
obniz.display.clear();
obniz.display.print("reverse");
});
$('#powerup').click(function () {
motor.power(100);
obniz.display.clear();
obniz.display.print("powerup");
clearInterval(timerID);
timerID = setInterval(async function(){
// ランダム色変更 100ms だけどそれほど速くはない、処理が少し貯まる
colors = [];
for(var i = 0; i < 15; i++){
colors.push([
Math.floor(Math.floor(Math.random() * 2) * 255), // R
Math.floor(Math.floor(Math.random() * 2) * 255), // G
Math.floor(Math.floor(Math.random() * 2) * 255) // B
])
}
leds.rgbs(colors);
},100);
});
$('#powerdown').click(function () {
motor.power(30);
obniz.display.clear();
obniz.display.print("powerdown");
clearInterval(timerID);
timerID = setInterval(async function(){
// ランダム色変更 2秒くらい 速度を戻すとき
colors = [];
for(var i = 0; i < 15; i++){
colors.push([
Math.floor(Math.floor(Math.random() * 25) * 10), // R
Math.floor(Math.floor(Math.random() * 25) * 10), // G
Math.floor(Math.floor(Math.random() * 25) * 10) // B
])
}
leds.rgbs(colors);
},2000);
});
$('#stop').click(function () {
motor.stop();
obniz.display.clear();
obniz.display.print("stop");
});
timerID = setInterval(async function(){
// ランダム色変更 2秒くらい 初動
colors = [];
for(var i = 0; i < 15; i++){
colors.push([
Math.floor(Math.floor(Math.random() * 25) * 10), // R
Math.floor(Math.floor(Math.random() * 25) * 10), // G
Math.floor(Math.floor(Math.random() * 25) * 10) // B
])
}
leds.rgbs(colors);
},2000);
};
</script>
</body>
</html>
動かしたものがこちらです。
できたぞー!回る速度が上がるとイルミネーションもスピードアップするのでパーティー感が上昇します!#obniz #GeekServo #Lego #クリスマス #Christmas2019 pic.twitter.com/QCdy3D00FS
— Tanaka Seigo (@1ft_seabass) December 5, 2019
学んだ知見「回転物で光らせるときは一緒に載せる」
そういえば、うっかり床にバッテリーを置いたまま動かすと、そのまま一緒に回転してしまいますね。
あー、そうか。床においてしまうと、回ったら引きずられるのか!一緒にツリーに載せないと。#obniz #GeekServo #Lego #クリスマス #Christmas2019 pic.twitter.com/U8oCVPQEw8
— Tanaka Seigo (@1ft_seabass) December 5, 2019
これは一緒に載せる形で解決しました。バッテリーの固定には、ツリーに飾り用のヒモがついてて、かつプラスチックの器がついていてよかったです。
まとめ
ということで「クリスマスツリーを回して光らせたい!」という気持ちで作ってみたところ、手を動かしてみていろいろな学びがありました。
- おゆプラ
- こういうときにLEGOと他の物体の固定に便利だった
- 回転物で光らせるときには一緒に載せる
- もっというと、床にバッテリーを置いたまま、コードが絡まず回るスマート方法が思いつかない
- obniz
- 2つのobnizを同時に動かすのもラクラク
特に「回転物で光らせるときには一緒に載せる」については、一度やってみると身にしみて分かるんですが、最初ビックリしますね。
最後に、暗い部屋で動かしたバージョンもお伝えしておきます!
暗闇モード!クリスマスツリー!#obniz #GeekServo #Lego #クリスマス #Christmas2019 #ゆるメカトロ pic.twitter.com/wIdhGXdrXZ
— Tanaka Seigo (@1ft_seabass) December 5, 2019
明日は
wamisnetさんです!