概要
職場で仕事をしていると,22時過ぎに自動的に室内の照明が消されてしまう仕組みになっています.毎日この時間に仕事を中断してわざわざ照明を点けるのが面倒なのとモチベーションも下がるので,照明が消えたら自動的に点灯させる仕組みを考えました.本質的には照明設備の設定を変えてもらうべきなのでしょうが,消す側も消す側のポリシーがあろうかと思いますし,ちょっとでも楽しめる仕組みをと考え,敢えてロボットアームでアナログ的なスイッチ投入としました.
デモ動画
https://youtu.be/2xTdCZcHaiA
システム構成
obniz Board 1Yをコントローラーに,光センサと手元にあったLynx motion SSC-32U搭載の6自由度ロボットアームだけで構成しています.
構成図
材料
・obniz Board 1Y
ご提供ありがとうございました!普通のマイコンしか使ったことがなかったので,進化にビックリ!
・光センサ
ELECFREAKSのキットに入っていたもの.型番不明ですが,光量をアナログ出力してくれたので流用しました.
・ロボットアーム
手元にあった Lynxmotion AL5D PLTWをそのまま使いました.いろいろ問題あり.
https://www.robotshop.com/jp/ja/lynxmotion-al5d-pltw-robotic-arm-kit.html
配線
動かし方
PCからアプリを起動するだけです.部屋が暗くなると勝手にロボットアームがスイッチを押します.
ソースコード
見よう見まねでプログラムを書いてしまったため,よい子は絶対に真似をしないで下さい,というレベルです.ごめんなさい.
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.com/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@3.14.0/obniz.js"></script>
</head>
<body>
<div id="obniz-debug"></div>
<h1>obniz instant HTML</h1>
<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function(){
// Position data define
let msg0 = "#0P1500#1P2200#2P2060#3P2000#4P1500#5P2400T2000\r"
let msg1 = "#0P2310#1P1980#2P1360#3P1810#4P1500#5P2400T1000\r"
let msg2 = "#0P2310#1P1850#2P1280#3P1830#4P1500#5P2400T1000\r";
let msg3 = "#0P2310#1P2030#2P1440#3P1810#4P1500#5P2400T1000\r";
let msg4 = "#0P2310#1P1890#2P1340#3P1810#4P1500#5P2400T1000\r";
let msg5 = "#0P2310#1P2010#2P1460#3P1810#4P1500#5P2400T1000\r";
let msg6 = "#0P2310#1P1900#2P1380#3P1790#4P1500#5P2400T1000\r";
var uart = obniz.getFreeUart();
uart.start({ tx: 0, rx: 1, gnd:11, baud:9600});
var pt550 = obniz.wired("PT550", {gnd:2, vcc:3, signal:4});
obniz.onloop = async function(){
const voltage = await pt550.getWait();
if( voltage < 0.7){
//up messages on UART
uart.send(msg1);
await new Promise((resolve) => { setTimeout(resolve, 2000) });
uart.send(msg2);
await new Promise((resolve) => { setTimeout(resolve, 2000) });
uart.send(msg1);
await new Promise((resolve) => { setTimeout(resolve, 2000) });
uart.send(msg3);
await new Promise((resolve) => { setTimeout(resolve, 2000) });
uart.send(msg4);
await new Promise((resolve) => { setTimeout(resolve, 2000) });
uart.send(msg3);
await new Promise((resolve) => { setTimeout(resolve, 2000) });
uart.send(msg5);
await new Promise((resolve) => { setTimeout(resolve, 2000) });
uart.send(msg6);
await new Promise((resolve) => { setTimeout(resolve, 2000) });
uart.send(msg5);
await new Promise((resolve) => { setTimeout(resolve, 2000) });
uart.send(msg0);
}
}
await new Promise((resolve) => { setTimeout(resolve, 20000) });
}
</script>
</body>
</html>
感想
やっつけ感満載ですが,楽しく出来ました.デモの動きは奇跡の1回です.ごめんなさい.
この手のロボットアームはもともと剛性が全く足りていなくて,押すとかある程度の質量を持ち上げる為のものではありません.軽いものをエンドエフェクタで持ち上げて移動させる,もしくは協調動作をする振りをさせるような用途では良いのですが..
敢えてこれを使ったのは,それでもサーボやソレノイドなどで直接スイッチを押すよりは,何か動きがあったほうが単純に楽しい.それだけです.でも個人でいろいろやってみるという観点ではそれで良いと思っています.楽しいのが一番ですから.
-
Pegasus
さんが
2021/05/14
に
編集
をしました。
(メッセージ: 初版)
-
Pegasus
さんが
2021/05/14
に
編集
をしました。
(メッセージ: 見出しの強調文字を通常文字に変更)
-
Pegasus
さんが
2021/05/14
に
編集
をしました。
(メッセージ: 動画URL変更)
ログインしてコメントを投稿する