2016年3月22日火曜日

[Intel Edison]Node.JSでモーター制御 ⑤

〜 配線と簡単な制御 〜

使用するもの
・単三電池4本

今更ですが、はじめて見る人にとっては謎の物体かと思いますので、ブレッドボードについて簡単に説明しておきます。
ブレッドボードは、電子回路の試作・実験用基板の総称です。
詳細は、Wikipediaでも見て下さい。

大きさや機能などマチマチですが、2.54mmピッチ(穴と穴の間隔)である事、下図のオレンジ色の線の様に内部で配線が繋がってるなど、ある程度一定の規格が存在します。
※ミニブレッドボードには、数字、オレンジ色の線は入ってないので、あしからず。


上のミニブレッドボードだと170個の穴がありますが、5個づつが同じ線で繋がっており、それを一つの系統とすると、34系統まで何かを繋げられるって事になります。逆に、同列であれば5本までの配線が出来るとも考える事が出来ます。

今回制作するもでは、34系統中の20系統を使用します。

とりあえず、実際にやってみましょう。

まずは、下図の様にモータードライバの設置をします。
モータードライバ”TA7291P”のピン配置についての詳細は、[Intel Edison]Node.JSでモーター制御①を参照して下さい。

ここから先は、真上から見た図で説明していきます。

各ピン及び、ブレッドボード上の配置、制御するモーター、駆動輪の対応は以下の様になります。図の左側が車両の前方(進行方向)です。


で、ここにさらに電池ボックスやら、Intel Edison Kit for Arduinoまでが絡んでくるわけですが、まとめて書くとわかり辛くなるので、バラバラで配線を解説させてもらいます。

最初に、モーターを駆動させるための外部電源となる電池ボックスの配線を行います。
図では線で繋いでいるだけですが、実際にはジャンパーコードを使用して下さい。

配線の対象は、
・1: GND
・8: Vs   出力側電源端子
の二つ。

電池ボックスのプラス極をTA7291Pの『8: Vs   出力側電源端子』へ、

マイナス極を『1: GND』へ

それぞれ配線します。

それだけだと片側のモータードライバのみに給電される事になるので、さらにもう一方のモータードライバへ繋がる様にブリッジ配線しています。

次に、モーターの配線を行います。
モーターの配線は、スルホール用テストワイヤを使用します。


配線の対象は、
・2: OUT1 出力端子
・10: OUT2 出力端子
の二つ。
モーターの各端子と、モータードライバの左右それぞれの『2: OUT1 出力端子』、『10: OUT2 出力端子』に接続するだけです。

最後は、Intel Edison Kit for Arduino Boardとの接続です。

配線の対象は、
・1: GND
・5: IN1  入力端子
・6: IN2  入力端子
・7: Vcc  ロジック側電源端子
の4つ。

Kit for Arduino Board上の、

GNDを『1: GND』、

5Vを『7: Vcc  ロジック側電源端子』、

IO2とIO7を左側用モータードライバの『5: IN1  入力端子と6: IN2  入力端子』、

IO4とIO8をを右側用モータードライバの『5: IN1  入力端子と6: IN2  入力端子』

にそれぞれ接続します。

5Vは、

右側モータードライバ『7: Vcc  ロジック側電源端子』から
左側モータードライバ『7: Vcc  ロジック側電源端子』へ

ブリッジしておきます。

GNDは、『電源まわりの配線』で既にブリッジしてあるので、片側に接続するだけで大丈夫です。

配線は以上で完了です。

では、実際にNode.JSで動かしてみましょう。

シリアル接続して、Edisonに給電します。
シリアル接続の手順に関しては、[Intel Edison]シリアル接続でログインするまでの手順を参照して下さい。

※以降、Macのターミナルウィンドウでの解説ですが、Tera Term、PuTTYでも同様の操作です。

コンソールが起動したら、




Terminal -- bash -- 80x24
root@edison:~# vi mtr_sample.js
ar mraa = require("mraa");
console.log("TA7291P test\nmraa Version: " + mraa.getVersion());

var L_in1 = new mraa.Gpio(2);
var L_in2 = new mraa.Gpio(7);
var R_in1 = new mraa.Gpio(4);
var R_in2 = new mraa.Gpio(8);
L_in1.dir(mraa.DIR_OUT);
L_in2.dir(mraa.DIR_OUT);
R_in1.dir(mraa.DIR_OUT);
R_in2.dir(mraa.DIR_OUT);

var state = true;
var counter = 20;
var mode = 0;

periodicActivity();

function periodicActivity(){
        state = !state;
        console.log(mode);
        if ( counter < 0 || mode == 0 ) {
                L_in1.write(0);
                L_in2.write(0);          
                R_in1.write(0);          
                R_in2.write(0);          
        } else if ( mode == 1 ) {        
                L_in1.write(1);          
                L_in2.write(0);          
                R_in1.write(1);          
                R_in2.write(0);          
        } else if ( mode == 2 ) {        
                L_in1.write(0);          
                L_in2.write(1);          
                R_in1.write(0);          
                R_in2.write(1);          
        } else if ( mode == 3 ) {        
                L_in1.write(1);          
                L_in2.write(0);          
                R_in1.write(0);          
                R_in2.write(1);          
        } else if ( mode == 4 ) {        
                L_in1.write(0);          
                L_in2.write(1);
                R_in1.write(1);          
                R_in2.write(0);          
        }                                
        mode += (mode >= 4)?-4:1;        
        if(counter--)                    
                setTimeout(periodicActivity, 1000)
}                                                 
- mtr_sample.js 51/51 100%

で、スクリプトを実行させると、




Terminal -- bash -- 80x24
root@edison:~# node mtr_sample.js
TA7291P test
mraa Version: v0.8.0
0
1
2
3
4
0
1
2
3
4
0
1
2
3
4
0
1
2
3
4
0
root@edison:~# 

モーターが回転して、
0 - 停止
1 - 前進
2 - 後退
3 - 右旋回
4 - 左旋回
以上の基本動作を繰り返します。

この時点だと決まった行動パターンのスクリプトを実行しているだけなので、ラジコンとは呼べません。

次回は、この基本動作をブラウザからコントロールしてみたいと思います。

0 件のコメント:

コメントを投稿