LeapmotionとArduinoとCylon.jsでFirmataを利用して連続サーボの回転方向を制御する!俺のフォースを感じろ!

はてなブックマーク - LeapmotionとArduinoとCylon.jsでFirmataを利用して連続サーボの回転方向を制御する!俺のフォースを感じろ!
LINEで送る
Pocket

まずこちらのビデオをご覧ください。

これも、相当の力作のはずです!笑。

と言って、自分中では、色々初めての勉強がたくさんありました!

目次

LeapmotionとArduinoとCylon.jsでFirmataを利用して連続サーボの回転方向を制御する!

Leapmotionは、みなさんご存知ですが

https://developer-archive.leapmotion.com/

手の動作さ、指、ジェスチャーなど様々の特徴量を検出できて、高度なセンサーと言えます。

USBで繋いて、すぐ使えます。

中に二つの赤外線カメラと赤外線照射LEDが内蔵されていて、手の画像を撮って画像解析によって3D空間での手や指の位置を割り出しデータに変換してくれます。

3D空間の手の形や、向き、動きなど様々なデータを取れますので

そのデータを利用して、様々な制御もできるはずです。

こんな高度なセンサーが本当に貴重です。

私も実はLeap Motionはだいぶ前(2年前?)購入していましたが

ずっと触る時間をなかなか作れなくて

今日は、まずその実験の第一弾をご紹介したいと思います!

接続

必要なものはパソコン:一台

Leapmotion:一個

Arduino uno(mini もmegaも動くはずです、もちろん互換機も):一個

連続回転サーボ:一台

LED:一つ

USBハブ(オプション):一台

注意、USBハブで接続する場合は、usbのポートのアドレスが刺すところによって変わりますので、それに合わせて、プログラムを変更する必要があります。後ほど、ご説明します。

ジャンパーワイア:数本

LED

LED GNDとPIN 13に接続します。

すぐ隣なので、LEDをそのままArduinoにさします。

連続サーボのGND  –> Arduino GND

連続サーボのV        –> Arduino 5V

連続サーボのS            –>   Arduino Pin 3

ソフトウェア

今回のプログラムの最大な特徴はCylon.jsです!

https://cylonjs.com/

もちろん、IoTのJavaScript フレームワークと言えばもう一つjohnny-fiveもありますが

johnny-fiveを使っての実験はまた別途実施して記事を書きたいと思います。

http://johnny-five.io/

連続回転サーボの動かし方:

https://cylonjs.com/documentation/drivers/continuous-servo/

連続回転サーボを動かす実験はこの辺の記事もご参照ください。

obnizで連続回転サーボを動かしてみる!

Arduinoとポテンショメーター(可変抵抗)で動かす連続回転サーボ

Leap Motionの使い方:

https://cylonjs.com/documentation/drivers/leapmotion/

手の様々な情報を取得する方法のドキュメントです:

https://developer-archive.leapmotion.com/documentation/v2/javascript/api/Leap.Hand.html#Hand.sphereCenter

Firmata

今回のプログラムは、Arduinoに焼くのではなく

パソコンとArduino通信しながら、Arduinoに動作させる形式なので

全てのプログラムを実行するには

まず、Standard Frimataを一回Arduinoに焼いておく(アップロード)必要があります。

あなたのArduino IDEを起動して、例のスケッチからStandardFirmataを選んで、Arduino本体にアップロードします。

これでArduinoの本体の準備もOKです。

プログラムの準備

まず好きなところで、フォルダーを作ってください。

mkdir leapmotion

package.jsonを用意します。

{
  "name": "leapmotion",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "dependencies": {
    "cylon-firmata": "^0.24.0",
    "cylon": "^1.3.0",
    "cylon-i2c": "^0.26.1",
    "cylon-gpio": "^0.30.1",
    "cylon-leapmotion": "^0.21.0",
    "leapmotion": "^0.0.4"
  },
  "devDependencies": {},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

今回のプログラムが必要なパッケージをインストールします。

npm install

プログラム

今回使うプログラムを作ります。

nano app.js

下記の内容をコピーします。

"use strict";

var Cylon = require("cylon");

Cylon.robot({
  connections: {
    
    arduino: {
      adaptor: "firmata",
      port: "/dev/tty.usbmodem1411"
    },
    leap: {
      adaptor: "leapmotion"
    }
  },

  devices: {
    servo: {
      driver: 'continuous-servo',
      pin: 3
    },
    led: {
      driver: "led",
      pin: 13,
      connection: "arduino"
    },
    leapmotion: {
      driver: "leapmotion",
      connection: "leap"
    }
    

  },

  work: function (my) {
    var type = '';
    my.leapmotion.on("frame", function (frame) {
      //console.log(frame.toString());
      if (frame.hands.length > 0) {
        my.led.turnOn();
      } else {
        my.led.turnOff();
      }
    });
    my.leapmotion.on("hand", function (hand) {
      type=hand.type;
      console.log(type);
    });

    var clockwise = true;

    my.servo.clockwise();

    every((1).second(), function() {
      if (type == "left") {
        my.servo.counterClockwise();
        clockwise = false;
      } else {
        my.servo.clockwise();
        clockwise = true;
      }
    });
  }
}).start();

上にも言いましたが、ここで、一つ注意していただきたいところがありまして

port: “/dev/tty.usbmodem1411”

この一行で、arduinoのusbのポートを指定しますが

あなたの環境と私の環境では、違う名前になっているかもしれませんので

必ず、チェックしてみてください。

あなたの環境のusbポートのアドレスに合わせて修正してください。

(例えば、私がUSBハブに接続した時は、ポートのアドレスが “/dev/tty.usbmodem141111″になっていました。)

実行

保存して、実行します!

node app.js

俺のフォースを感じろ!

このセンサーの上に左手と右手交互にかざしてみてください!

回転サーボの回転方向が変わります!

感動の瞬間です!

ビデオ証拠もあります!ご覧ください!

今回は、leapmotionをJavaScriptで制御することを簡単に検証しましたが

今回、左手、右手の判定データしか使っていなくて、シンプルな動作になっていますが

実際、Leapmotionが取れるデータがとても高度で、それを適用していけば

相当高度な面白いものも作れるはずですので

次回発展系を挑戦してみたいと思います!

ではまた!

パソコンのない人はこれどうぞ!笑

 

はてなブックマーク - LeapmotionとArduinoとCylon.jsでFirmataを利用して連続サーボの回転方向を制御する!俺のフォースを感じろ!
LINEで送る
Pocket

Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close