作品タイトル:Node.js(Johnny-Five)とGR-ADZUKIでぬいぐるみを動かすよ!
表示名:n0bisuke
コンセプト・作品説明 |
---|
Web言語であるJavaScriptでもマイコンボードを動かすことができます。 今回はNode.jsのライブラリであるJohnny-Fiveを使ってGR-ADZUKIを動かしてみたいと思います。 |
はじめに
はじめまして、 dotstudio株式会社のn0bisukeです。
普段はNode.jsをよく使うWeb系のエンジニアです。今日はGR-ADZUKIがNode.jsで制御できるという話を聞いたので試してみました。
GR-ADZUKI
GR-ADZUKIはDCモーター、サーボ、センサー(距離、加速度、地磁気など)、電池ボックスを接続しやすくしたボードです。
公式サイトはこちら
GR-ADZUKIはDCモーター、サーボ、センサー(距離、加速度、地磁気など)、電池ボックスを接続しやすくしたボードです。子供向けプログラミング言語スクラッチのArduino用派生ソフトS4Aでプログラミングが楽しめます。また、Arduino言語でのスケッチも可能です。出荷時にはS4A用のファームウェアがプリインストールされており、購入してすぐにS4Aでスクラッチでプログラミングができます。(WindowsではFTDI社のUSBドライバインストールが必要)
本ボードは、ロボット覚醒プロジェクトでの工作を効率よく進めるために企画されました。比較的激しく動くロボット工作において、ワイヤーの配線にブレッドボードを使用した場合、ワイヤーが外れて誤動作の原因になることがありました。それを解決するためにきちんとネジ止めできる端子台を搭載しています。
スクラッチでプログラミングを楽しんだ後、Arduino言語でロボット工作などチャレンジできるようにしています。
モーター制御とセンサー制御が行いやすく、ロボット工作に向いています。
Johnny-Five
Johnny-FiveはNode.jsでマイコンボードを制御できるようにするライブラリです。元々はArduinoを制御するためのものでしたが、複数のプラットフォームに対応しています。
GR-ADZUKIでJohnny-Fiveが使える
こちらの記事(Node.jsからGR-ADZUKIを動かそう!)にあるように、GR-ADZUKIでJohnny-Fiveが利用できます。
GR-ADZUKIやArduinoなどのマイコンボードでの利用する際にはFirmataと呼ばれるミドルウェアをボードに書き込んでおく必要があります。
マイコンボードでの制御の場合はPCにNode.jsをインストールしておき、シリアル通信(この場合はUSBケーブル経由)でNode.jsでの命令をマイコンボードに送ります。
Raspberry PiやIntel EdisonのようなLinuxなどのOSが動いているシングルボードコンピュータの場合はNode.jsをインストールしておくだけで利用可能です。
GR-ADZUKIをNode.jsで制御してみよう
それではGR-ADZUKIをNode.jsから制御する方法を紹介します。
- Mac Book Pro (Retina, 13-inch, Early 2015)
- macOS Sierra
- Node.js v8.4
Macユーザー向けに内容になるのでWindowsの人は適宜読み替えて進めて下さい。
GR-ADZUKIにFirmataを書き込む
まずはGR-ADZUKIにFirmataプログラムを書き込みます。
IDE for GRのインストール
こちらからIDE for GRというGRシリーズの開発ツールをパソコンにダウンロードしましょう。
私の環境はMacなのでIDE for GR1.01のMac用をダウンロードしました。
ダウンロードしたdmg
ファイルをダブルクリックして、インストーラを起動します。
IDE4GR
のアイコンを右側のApplications
フォルダにドラッグすればインストール完了です。
インストールが完了したら、アプリケーションフォルダ内のIDE4GRアイコンを選択して起動しましょう。
このような画面が表示されれば起動成功です。
Arduino IDEと似ていますね。
Firmataプログラムを書き込む
GR-ADZUKIをmicro USBでパソコンと接続させます。
次にIDE4GRのツール>マイコンボード>GR-ADZUKI
にチェックを入れます。
次にツール>シリアルポート>/dev/cu.usbserial-XXXXX
というポートを選択します。この表示は環境によってことなりますので、usbという文字を目印に探しましょう。
ポートが見つからない場合は後述するポートが見つからない場合
の項目を参照して下さい。
筆者も初見のときにはポートが見つからず戸惑ったので落ち着いて対応しましょう。
次にファイル>スケッチの例>Firmata>StandardFirmata
を選択します。
このようなファイルが開かれます。
左上の右矢印マークを押して、マイコンボードにFirmataプログラムを書き込みます。
書き込みが始まるので少し待ちましょう。 この時に絶対にUSBケーブルを途中で抜かないで下さいマイコンボードが壊れてしまう可能性があります。
マイコンボードへの書き込みが完了しました。
という表示がでれば成功です。
ポートが見つからない場合
ポートが見つからない場合がたまにあります、落ち着いて以下のことを確認しましょう。
スライドスイッチがSketch
になっているか
GR-ADZUKIは設定用で上と下のスライドスイッチがあります。
上をUSB側(左側)、下をSketch側(左側)にしましょう。
パソコンとGR-ADZUKIがmicro USBケーブルで接続れている
接続が甘くないか、接触不良はないか確認しましょう。
パソコンの別のUSBポートを利用してみる
パソコンのUSBポートとケーブルなどの相性が悪くて接続できない場合がたまにあります。
反対側などの別のUSBポートで試してみましょう。
micro USBケーブルを変えてみる
これも先ほどと同様でケーブルの相性もあります。ケーブルを変えて再度確認してみましょう。
ちなみに筆者の場合はケーブルを変えたらポートを見つけることができました(苦笑)
GR-ADZUKIのLEDを制御してみよう
まずはLチカ(LEDをチカチカと点滅させること)からです。
ここからNode.jsのプログラムを書きますので、まだNode.jsのインストールが完了してない方はこちらの記事(僕がMacを買い換えてすぐにいれるツール&すぐにする初期設定【2016年9月版】)などを元にNode.jsのインストールをして下さい。
2017年9月24日現在の最新はv8.5.0です、公式サイトを見て現状の最新版をインストールすると良いでしょう。
プロジェクトの作成
適当な名前のフォルダを作成します。
$ mkdir myproject
作成したフォルダに移動します。
$ cd myproject
myproject
フォルダ内でNode.jsプロジェクトを作成する際の起点となるpackage.json
を作成します。npm init
コマンドで作ってしまう場合が多いです。
$ npm init -y
これでpackage.json
とpackage-lock.json
というファイルが作成されます。
ライブラリのインストールとプログラムの用意
次にJohnny-fiveのインストールをします。
$ npm i --save johnny-five
これでフォルダ内にnode_modules
というフォルダが新規で作られて、その中にjohnny-fiveや依存するライブラリがインストールされます。
Node.jsのプログラムではrequire()
というメソッドを使ってインストールしたライブラリを利用します。
それでは同じフォルダにled.js
というファイルを作成しましょう。
//led.js
'use strict';
const five = require('johnny-five');
const board = new five.Board({});
board.on('ready', () => {
const led = new five.Led(6);
led.blink(1000);
});
現状でmyprojectフォルダ内にはled.js、package.json、package-lock.json、node_modulesが存在します。
実行
それでは実行してみましょう。実行する前にGR-ADZUKIの下側のスライドスイッチをScratch
側に動かしておいて下さい。
$ node led.js
起動するとパソコンのターミナル側に
1506228306889 Available /dev/cu.usbserial-DQ000DLG
1506228306907 Connected /dev/cu.usbserial-DQ000DLG
1506228311987 Repl Initialized
>>
という表示が出ます。
GR-ADZUKIに組み込まれているLEDの6番が点滅します。
プログラムを終了させるときはConrolキー+cキー
を二回押すと終了します。
応用 - 別のLEDを光らせる
公式ページにあるように、GR-ADZUKIのLEDは6,9,10,11,12,13に割り当てられています。
先ほどのコードのnew five.Led(6)
が6番のLEDを光らせる設定をしている箇所です。
const led = new five.Led(11);
などに変更して再実行してみましょう。
11番のLEDが光れば成功です。
エラーが出る場合
1506227284778 Device or Firmware Error A timeout occurred while connecting to the Board.
Please check that you've properly flashed the board with the correct firmware.
などのエラーが出る場合は次の写真のようにスイッチをScratch
側に切り替えてから再度実行してみましょう。
GR-ADZUKIでサーボモータを動かしてみる
利用するサーボモータは公式サイトにも書いてあるマイクロサーボ9g SG-90です。
写真用にGR-ADZUKIのピンにサーボモータ側のワイヤーを接続します。正面から見た時に左側から黄色、赤、茶色の並びになります。
先ほどのled.jsと同じ階層にservo.jsを作成します。
//servo.js
'use strict';
const five = require('johnny-five');
const board = new five.Board({});
board.on('ready', () => {
const servo = new five.Servo(4);
servo.sweep();
});
公式サイトにありますが、サーボモータ制御のピンは4番になりますので、new five.Servo(4)
としています。
それでは実行してみましょう。
$ node servo.js
無事に動きましたか?
Arduinoなどでサーボモータを動かすときは配線で少し戸惑うのですが、GR-ADZUKIだと専用のピンが出ているのでサーボモータの配線が楽ですね。
まとめ
GR-ADZUKIにFirmataプログラムを書き込むことでNode.jsプログラムでサーボモータの制御をすることができました。GR-ADZUKIはそのほかにも光センサやDCモーターなどをロボット制御をしやすくする機能が最初から搭載されていますので是非試してみて下さい。
Web系の言語であるNode.jsから制御することで、Webサーバーなどとの連携やIoT連携なども簡単に行うことができますし、Web系エンジニアの方でも入門しやすくなると思います。
Web系の方はこれを期に電子工作やロボット工作を、ハードウェア系の方はこれを期にWeb言語への入門をしてもらえたらと嬉しいです。
それでは!
1989年生まれ。岩手県立大学在籍時にITベンチャー企業の役員を務める。
同大学院を卒業後、株式会社LIGにWebエンジニアとして入社し、Web制作に携わる。 2016年7月よりdotstudio株式会社を立ち上げ、IoT領域を中心に活動している。
日本最大規模のIoTコミュニティであるIoTLTや、JavaScript RoboticsコミュニティNodeBotsの主催、IoTバックエンドサービスであるMilkcocoaのエバンジェリストとしても活動中。
Microsoft MVP Visual Studio and Development Technologies (Node.js)