概要
イルミネーションを見て、光る何かを作りたい衝動にかられ光るサンタ帽子を作りました!サンタ帽子を作るにあたり、光り方を自分で制御できたら面白いのでobniz(マイコンボード)をから点灯制御してみました。
【実際の様子】
obnizからの制御に成功!#obniz pic.twitter.com/bgsiD7vrFS
— まえぷー (@kmaepu) December 5, 2019
ゆるメカトロ入門できました!🎅#ゆるメカトロ pic.twitter.com/yxgRKAbEde
— まえぷー (@kmaepu) December 6, 2019
今日の成果!
— まえぷー (@kmaepu) December 10, 2019
光るIoTサンタ帽子!#enebular #obniz #Noodl #クリスマス pic.twitter.com/IuMDmFXGLO
構成
NeoPixel LEDテープの電源を直接モバイルバッテリから取る事により、点灯可能なLEDの個数を増やしています。LED個数や電力の計算は後述の「技術的なところ」で解説します。
部材一覧
- NeoPixel LEDテープ
ピカリ館
今回使用したのはこちら
-
obniz board
obniz Board
-
microUSBケーブル
ダイソー 110円
技術的なところ
回路
電源供給についてこちらに記述していきます。obniz boardは各端子から電源供給可能です。供給可能な電源は5V1A。つまり**5Wまで駆動できます。
Neo Pixel LEDテープの仕様を見ると最大10W**。単純計算で、50cmまでしか駆動できません。
サンタ帽子に巻き付けるとすると、LEDテープの長さは人の頭のサイズ(頭囲)が関係してきます。頭囲についてはこちらを参考にしました。
頭囲の平均は男性で57cm、女性で55cm。ということで、obnizから駆動可能な長さ50cmを超えてしまっています。
obniz boardの端子からの供給では駆動できないので、USBケーブルから直接電源を取るようにしています。こうすることで、駆動可能なLEDの個数を外部電源依存にできます。
プログラム
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.5.0/obniz.js" crossorigin="anonymous"></script>
</head>
<body>
<div id="obniz-debug"></div>
<div class="led">
<h3 class="text-center">Turning on a LED</h3>
<button class="btn btn-primary" id="yellow">Yellow</button>
<button class="btn btn-outline-primary" id="blue">Blue</button>
<button class="btn btn-outline-primary" id="stop">stop</button>
</div>
<script>
var obniz = new Obniz("OBNIZ-ID");
obniz.onconnect = async function () {
obniz.display.clear();
obniz.display.print("Hello World");
var led = obniz.wired("WS2812B", {din: 3});
const max_num = 80;
var ledarry = new Array(max_num);
var f_color = 0;
$('#yellow').click(function () {
for(i=0; i< max_num; i++){
ledarry[i] = [0xFF, 0xFF, 0x00];
}
obniz.display.clear();
obniz.display.print("ON");
led.rgbs(ledarry);
});
$('#blue').click(function () {
for(i=0; i< max_num; i++){
ledarry[i] = [0x00, 0x00, 0xFF];
}
obniz.display.clear();
obniz.display.print("OFF");
led.rgbs(ledarry);
});
$('#stop').click(function () {
for(i=0; i< max_num; i++){
ledarry[i] = [0x00, 0x00, 0x00];
}
obniz.display.clear();
obniz.display.print("OFF");
led.rgbs(ledarry);
});
};
</script>
</body>
</html>
次の行でLEDテープの信号線を接続する端子を設定しています
var led = obniz.wired("WS2812B", {din: 3});
次の行でLEDの個数と配列を定義しています
const max_num = 80;
var ledarry = new Array(max_num);
var f_color = 0;
次の行で押したボタンに応じた色に点灯させています
$('#yellow').click(function () {
for(i=0; i< max_num; i++){
ledarry[i] = [0xFF, 0xFF, 0x00];
}
obniz.display.clear();
obniz.display.print("ON");
led.rgbs(ledarry);
});
$('#blue').click(function () {
for(i=0; i< max_num; i++){
ledarry[i] = [0x00, 0x00, 0xFF];
}
obniz.display.clear();
obniz.display.print("OFF");
led.rgbs(ledarry);
});
$('#stop').click(function () {
for(i=0; i< max_num; i++){
ledarry[i] = [0x00, 0x00, 0x00];
}
obniz.display.clear();
obniz.display.print("OFF");
led.rgbs(ledarry);
});
LEDの配列に色データ(赤、緑、青)を指定することでLED1つ1つの色を指定できます。
終わりに
ピカリ館はいいぞ。