\r\n\r\n
Arduinoボードは、プログラマーがハードウェアハッキングプログラムに参加するための最も簡単な方法の1つです。プログラミングの知識がある人ならほとんど誰でも使えるように、膨大な数の初心者向けプログラムが用意されています。とはいえ、時間がない人にとっては、始めるのは大変なことです。
マイコンを試すために、まったく新しい言語を学ぶのは大変なことのように思えるかもしれません。すでに慣れ親しんだプログラミング言語で自作電子工作を始めたい場合はどうすればいいでしょうか。朗報:できるんです
Pythonを使ってArduinoボードを制御する方法をすでに紹介しましたが、今日はJavaScriptを使って同じことをする方法を紹介します。今日は、最も基本的な点滅するLEDのチュートリアルの代わりに、サーボを制御するためにJohnny Fiveフレームワークを使用し、すべてJavaScriptでプログラミングしていきます。
このプロジェクトに必要なものは、以下の通りです。
本日のチュートリアルでは、Arduino Unoボードを使用します。このプロジェクトで使用するJohnny Five Frameworkは、ほとんどのArduino互換マイコンをサポートしていますが、サーボを満足させるためにPWM機能を持つボードが必要です。
サーボとArduinoを以下のように接続します。
つまり、VCCライン(赤)はArduinoの5Vピンに、GNDライン(黒または茶)はArduinoのGNDピンに、パルスライン(黄またはオレンジ)はArduinoの10ピンに接続します。特に10ピンに接続する必要はありませんが、通常~で示されるPWMピンに接続する必要があることに注意してください。
配線が混ざっていないか再確認し、Arduinoをコンピュータに接続します。今回はWindows 10を使用する予定です。このプロジェクトのすべての要素は、インストール方法が若干異なる場合がありますが、MacやLinuxでも使用することができます。
ArduinoIDEをまだダウンロードしていない場合は、ツールメニューからボードとポートを選択します。初めてこの操作を行う場合は、少し謎が多いので、Arduino初心者ガイドを参考にしながら、このステップを進めてください。
接続したら、StandardFirmataPlusのサンプルスケッチをボードにアップロードしてください。このスケッチは、「ファイル」メニューの「例題」 > Firmata> StandardFirmataPlus で見ることができます。スケッチを修正する必要は全くありません。基本的には、Arduinoが外部からの指示を待つように設定するだけです(これは後で自分で用意します)。
私たちは、ArduinoをJavascriptで制御するフレームワークをJohnny Fiveと呼んでいます。映画のタイトルからして当然ですが、このプロジェクトはロボットとの共同作業に向いています。
ジョニーファイブをインストールするには、まずnode.jsをインストールする必要がある。 node.jsのウェブサイトからインストールすることができる。推奨バージョンとして、本稿執筆時点では8.9.4 LTSを使用しています。
.msiファイルを開き、インストール手順に従い、パスに追加されていることを確認します。current-node.jsのインストーラは、このパスを標準のパスとして追加しますが、これは次のステップに必要なため、インストールプロセス中に確認する価値があります。
インストールが完了したら、Windowsのコマンドライン(CMD)からNode Package Manager(NPM)パッケージマネージャにアクセスします。スタート]をクリックし、「CMD」と入力します。 続ける前に、インストールエラーを防ぐために、NPMを初期化する必要があります。専門的な知識は必要なく、ただ入力するだけ。
npm init今日のプロジェクトでは、何も変更する必要はありません。コマンドプロンプトに戻るまでEnterキーを押して、次のように入力します。
npm install johnny-fiveこれで、Arduinoと対話するための重要なパッケージがすべてインストールされます。もう一つ、このプロジェクトを動かすために必要なのが、キーボードからキーストロークを読み取ることができるKeypressパッケージです。
インストールは、以下のコマンドを入力することで行います。
npm install keypressこれらのパッケージがすべてインストールされたら、コードを書き始めることができます。
インストールに問題がある場合は、キーストロークのインストール後に、もう一度johnny fiveのインストールを実行してみてください。これは、今回使用したNPMのバージョンの癖かもしれませんが、今やっておくことで、今後私が遭遇したような問題を防ぐことができます。
今日は、johnnyfiveのドキュメントに掲載されている、キーボードの矢印キーでサーボを制御するサンプルコードを使用します。完全なコードはjohnnyfive.ioで公開されていますが、ここではその仕組みを十分に理解するために、詳しく説明します。
現在、コーディングにはEclipse IDEを使用していますが、このプロジェクトではどのIDEやテキストエディタを使用してもかまいません。
新しいファイルを作成し、test.jsという名前を付けて、後日コマンドラインから簡単にアクセスできる場所に保存してください。スクリプトは、まず必要なライブラリの変数を作成し、受信データをリッスンするためにKeypressライブラリを初期化し、さらにBoard()メソッドを呼び出してBoardをセットアップしています。
var five = require("johnny-five");var keypress = require("keypress");keypress(process.stdin);var board = new five.Board();なお、ここでのボード設定は自動で行われ、ポートの指定は必要ありません。特定のポートを設定している場合、または自動検出がうまくいかない場合は、明示的にポートを指定する必要があります。
次に、ボードを「起動」させ、サーボコントロールに設定したいと思います。このボードでは、Arduinoのピンが準備できるまで待機するように呼び出し、その後続行します。johnny fiveライブラリは内蔵サーボをサポートしているので、サーボを呼び出しています。10ピンの連続(10)で直接制御が可能です。
board.on("ready", function() { c***ole.log("Use Up and Down arrows for CW and CCW respectively. Space to stop."); var servo = new five.Servo.Continuous(10); process.stdin.resume(); process.stdin.setEncoding("utf8"); process.stdin.setRawMode(true);このプロセス標準の呼び出しによって、キーボードから受け取ったすべてのデータが次のコードのセクションで利用できるようになります。あとは、キー操作を聞き分けて、サーボを時計回り(CW)に動かしたり、反時計回り(CCW)に動かしたり、軌道上で停止させたりするわけです。
process.stdin.on("keypress", function(ch, key) { if (!key) { // if no key is pressed, return i.e do nothing. return; } if (key.name === "q") { c***ole.log("Quitting"); process.exit(); } else if (key.name === "up") { c***ole.log("CW"); servo.cw(); } else if (key.name === "down") { c***ole.log("CCW"); servo.ccw(); } else if (key.name === "space") { c***ole.log("Stopping"); servo.stop(); } });});また、エラーが発生した場合は、上記のリンク先のコードブロック全体を参照してください。このスクリプトを保存して、コマンドプロンプトを開いてください。
ここで、スクリプトを保存したディレクトリに移動し、次のコマンドを入力してスクリプトを実行します。
node test.jsプログラムは、インストラクションに記述されたコードを与える前に、ボードに関連する情報ですぐに開始されるはずです。上下の矢印キー、スペースバー、Qキーを押して終了してみてください。以下のような画面が表示されるはずです。
サーボはキーを踊るはずです!あのクリッターウェーブを見てください。
通常の初心者向け発光ダイオード点滅チュートリアルよりも少し野心的なプロジェクトに挑戦したにもかかわらず、Arduinoボードや同様のマイコンで何ができるかの全容に触れることすらほとんどありませんでした。
経験豊富なJavaScriptユーザーなら、ジョニーファイブパックを直感的に使えると思います。また、このライブラリはRaspberry Piに搭載することも可能で、ロボット作りを志す人に最適なパッケージとなっています。
このライブラリーの素晴らしいところは、ロボットを想定して設計されていますが、同じ入出力データを使って、スマートホームのDIYや家庭用セキュリティシステムの構築も可能なことです。
このようにマイコンと通信することで、全く新しいプログラミング言語を習得することなく、DIYハードウェアの世界への入門となるのです。そして、もしキラーロボットを作ることになったら、私たちが初期のころにお世話になったことを思い出してください。