Pegasusのアイコン画像
Pegasus 2021年05月14日作成 (2021年05月14日更新)
製作品 製作品 閲覧数 560
Pegasus 2021年05月14日作成 (2021年05月14日更新) 製作品 製作品 閲覧数 560

私の代わりに自動消灯した室内灯を点けてくれるロボットアームくん

私の代わりに自動消灯した室内灯を点けてくれるロボットアームくん

概要

職場で仕事をしていると,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変更)
ログインしてコメントを投稿する