obnizでラジコンを作る

#当記事の対象者
当記事は、obnizに興味はあるが、周辺機器は何を購入すればいいか分からず、購入を躊躇っている人に向けた記事です。
私が購入した周辺機器から、それらを動かすためのサンプルプログラムをシェアします。
なお、obnizの初期設定については、サイトに記載がある為、そちらを参照してください。
**＜初期設定について記載されたページ＞**
https://obniz.io/doc/quickstart

obnizを見たこともないということは以下のリンク先をまず参照してください。
**＜リンク＞**
[obnizでIoTを実現する為の導入プログラムと購入周辺機器](https://qiita.com/KOJI-YAMAMOTO/items/f92577609e55717b54c3)

なお、当記事は、作成手順ではなく、あくまでも作成に利用したハードやプログラムの紹介です。

#obnizでラジコンを作る
obnizで、スマホを傾けると傾けた方向に走るラジコンを作成したのでその作り方を記載する。

##obnizで作ったラジコン
![IMG_20180909_211854245.jpg](https://qiita-image-store.s3.amazonaws.com/0/204260/8149d82b-f148-f390-ece3-74e8594749e7.jpeg)

##obnizでラジコンを作る為に使用した機材
* [obniz](https://www.amazon.co.jp/obniz-%E3%82%AA%E3%83%96%E3%83%8A%E3%82%A4%E3%82%BA-%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%81%AB%E3%81%A4%E3%81%AA%E3%81%8C%E3%81%A3%E3%81%9FEaaS%E9%96%8B%E7%99%BA%E3%83%9C%E3%83%BC%E3%83%89-%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%81%AE%E6%B0%B8%E4%B9%85%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9%E4%BB%98%E3%81%8D/dp/B07DD6FK8G/ref=sr_1_1?ie=UTF8&qid=1536596612&sr=8-1&keywords=obniz)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/ba87a3fe-20fb-ab2c-b3af-8abe1f9bd0d6.png)
* [400タイポイント ブレッドボード3PCS + 120pcsジャンパーワイヤー ジャンパー線Arduino Raspberry pi用](https://www.amazon.co.jp/gp/product/B07FFWPV95/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/2047704e-db9b-10ff-d095-796accbf491d.png)
* [サンハヤト ジャンプワイヤキット SKS-100 単線タイプでよく使用する短めジャンプワイヤのセット品](https://www.amazon.co.jp/gp/product/B00J3E1206/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/feeeb208-cd11-9541-d559-f3fca14a6503.png)
* [The perseids 2WDロボットスマートカーシャーシ 2輪ロボットスマートカー スピードエンコーダfor Arduino DIY プログラミングカー教材ロボット(2輪)](https://www.amazon.co.jp/gp/product/B07DPLCQN8/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/204260/7af4b62b-4ad3-3d44-88f4-acc2cc0335f6.png)
なお、竹ひごは、子供が持ちやすいようにシャーシの穴に差し込んだだけの為説明は行わない。

##ラジコンの組み立てポイント
###ワイヤーとモータをつなぐ
![IMG_20180909_212012738.jpg](https://qiita-image-store.s3.amazonaws.com/0/204260/232aaad6-5c8b-d180-1c01-0926720c1943.jpeg)
ジャンパーワイヤのメスの方をカットし、ワイヤを露出させてモータと繋ぐ。
その際に、左右のモータで同一の色のワイヤを利用した方が分かりやすい。

###ブレッドボードにモータと繋いだワイヤを差す
![IMG_20180909_211705039.jpg](https://qiita-image-store.s3.amazonaws.com/0/204260/87fdd594-a7b5-0216-8e9b-1ff4e33fa92c.jpeg)
![IMG_20180909_211917672.jpg](https://qiita-image-store.s3.amazonaws.com/0/204260/dd348b84-f9e1-b2a7-4129-a2cb2d82540e.jpeg)
モーターと繋いだワイヤは、ブレッドボードの中心領域に差し、obnizと繋ぐワイヤをブレッドボードの左右の「+」と「-」に差す。
その際に、短いジャンプワイヤで左右の「+,-」と中心部をブリッジする必要がある。

###obnizとブレッドボードの+,-に差したワイヤをつなぐ
![IMG_20180909_212020545.jpg](https://qiita-image-store.s3.amazonaws.com/0/204260/a9d4640c-781c-d065-1921-11999dffc0a8.jpeg)

##ラジコンのプログラム
*注意)プログラム内にある「XXXX-YYYY」は、obnizのIDになる為、適宜obnizのIDに変更すること*
プログラムは、サンプルとして提供されているプログラムをほぼそのまま利用しております。

```JavaScript:qiita.rb
<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.9.5/obniz.js" crossorigin="anonymous"></script>
</head>
<body>

<div id="obniz-debug"></div>
<h1>obniz robot controller </h1>
<div id="print"></div>

<script>

  let obniz = new Obniz("XXXX-YYYY");
  let motorL, motorR;
  let threshold = 1, maxAccel = 5;

  obniz.onconnect = function () {
    motorL = obniz.wired("DCMotor", {forward: 0, back: 1});
    motorR = obniz.wired("DCMotor", {forward: 2, back: 3});
  };

  window.addEventListener("devicemotion", function (event1) {
    let x = event1.accelerationIncludingGravity.x;
    let y = event1.accelerationIncludingGravity.y;

    if (!motorR || !motorL) {
      return;
    }
    if (Math.abs(y) > threshold) {
      let power = Math.min(100 * (Math.abs(y) - threshold) / (maxAccel - threshold), 100);
      motorL.power(power);
      motorR.power(power);

      let direction = y > 0;
      motorL.move(direction);
      motorR.move(direction);


    } else if (Math.abs(x) > threshold) {
      let power = Math.min(100 * (Math.abs(x) - threshold) / (maxAccel - threshold), 100);
      if (x > 0) {
        motorR.power(power);
        motorR.move(true);
        motorL.stop();
      } else {
        motorL.power(power);
        motorL.move(true);
        motorR.stop();
      }
    } else {
      motorL.stop();
      motorR.stop();

    }

  }, true);

</script>
</body>
</html>
```