obnizを使用したIoTロボットアーム（obniz-ARMS)

#概要
obnizを使用して、遠隔地からロボットアームを操作できる仕組みを構築しました。
<blockquote class="twitter-tweet" data-cards="hidden" data-lang="ja"><p lang="en" dir="ltr">obniz + MeARM = IoT Robot ARM!!!<a href="https://twitter.com/hashtag/obniz?src=hash&amp;ref_src=twsrc%5Etfw">#obniz</a> <a href="https://twitter.com/hashtag/IoT?src=hash&amp;ref_src=twsrc%5Etfw">#IoT</a> <a href="https://twitter.com/hashtag/robot?src=hash&amp;ref_src=twsrc%5Etfw">#robot</a> <a href="https://t.co/j319Nb8ecG">pic.twitter.com/j319Nb8ecG</a></p>&mdash; keicafeblack (@keicafeblack) <a href="https://twitter.com/keicafeblack/status/1047831909777043457?ref_src=twsrc%5Etfw">2018年10月4日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

#材料
・[MeARM](https://www.kickstarter.com/projects/phenoptix/mearm-pocket-sized-industrial-robotics-for-everybo)
　・オープンソースの小型ロボットアーム。自分でレーザーカッターで抜き出すには大変なのでカット済の激安木製タイプのものを購入
・サーボモータ（SG90*4)
・obniz

#組み立て

##１．アームの組上げ
こんなキットを組上げていきます。
![KIMG3762.JPG](https://qiita-image-store.s3.amazonaws.com/0/181708/ea4816eb-e2d6-ec38-6103-6cba48371988.jpeg)
![KIMG3771.JPG](https://qiita-image-store.s3.amazonaws.com/0/181708/bce2d8f5-312f-92ae-79ba-e7c9bf9f9ba3.jpeg)

##２．obnizへの接続
![KIMG3772.JPG](https://qiita-image-store.s3.amazonaws.com/0/181708/7cc29556-7966-2def-af01-05d0ddd90757.jpeg)
・3ケーブル＊4サーボ＝１２本だとすべて埋まってしまうため、GNDはブレッドボード経由で共有化
・なぜかピン０につなげると、[過電流エラー](https://obniz.io/doc/lessons_obnizjs_io_overcurrent?iframe=true)が出てしまうため、ピン１から使用（原因は未確認）

##３．コーディング
```javascript:obnizARMS.thml
<!-- HTML Example -->
<html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
  <script src="https://unpkg.com/obniz@1.11.2/obniz.js"></script>
</head>
<body>

<div id="obniz-debug"></div>
<h3>前後</h3>
<input id="slider" type="range"  min="45" max="70" value="60"/>

  <h3>上下</h3>
<input id="slider1" type="range"  min="30" max="90" value="45" />
  <h3>土台</h3>
<input id="slider2" type="range"  min="0" max="90" value="0" />
  <h3>爪</h3>
<input id="slider3" type="range"  min="0" max="180" value="80" />
  <br>

  <button id="on">ON</button>
  <button id="off">OFF</button>
  
<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
obniz.onconnect = async function () {
    var servo = obniz.wired("ServoMotor", {gnd:1, vcc:2, signal:3});
      var servo1 = obniz.wired("ServoMotor", {gnd:1, vcc:4, signal:5});
      var servo2 = obniz.wired("ServoMotor", {gnd:1, vcc:6, signal:7}); 
        var servo3 = obniz.wired("ServoMotor", {gnd:1, vcc:8, signal:9}); 
 
          $("#on").on("click",function(){
      servo.angle(5.0); // for testing

      });
      $("#off").on("click",function(){
      servo.angle(0.0); // for testing
    });
  
  
  $("#slider").on('input', function() {
    servo.angle($("#slider").val())
  });
  $("#slider1").on('input', function() {
    servo1.angle($("#slider1").val())
  });
  $("#slider2").on('input', function() {
    servo2.angle($("#slider2").val())
  });
    $("#slider3").on('input', function() {
    servo3.angle($("#slider3").val())
  });
};

obniz.onclose = async function(){
   $("#slider").off('input');
};
obniz.onclose = async function(){
   $("#slider1").off('input');
};
 obniz.onclose = async function(){
   $("#slider2").off('input');
};
  obniz.onclose = async function(){
   $("#slider3").off('input');
};
</script>
</body>
</html>

```
■操作画面
![操作画面.JPG](https://qiita-image-store.s3.amazonaws.com/0/181708/28e6732f-a0a9-dd48-fe52-2c3960652b7c.jpeg)

#４．感想
ロボットアームの可動域が限られているため、実際にはサーボのMIN/MAXの調整等が結構大変でした。ベストな調整方法を探っていきたいと思います。