fc2ブログ

【センサー】ロータリーエンコーダー Part2

ロータリーエンコーダー解説編

前回の解説です。

ロータリーエンコーダーの原理はこちらのページを参考にしました。
・はじめる電子回路ーロータリーエンコーダを使う
・TekuRobo工作室-113.ロータリーエンコーダを使う


ロータリーエンコーダーには軸が回転すると2つの出力信号を出しています。
ロータリーエンコーダーパルス

この2つの出力信号、ちょっとずれて信号を出します。
そして両方1(HIGH)になる前の信号を見ると、回転方向によってA相とB相にHIGH、LOWの違いがでています。
これを利用してどちらに回転しているか判別できます。

前回のArduinoのプログラムでの回転方向の判別およびデータ送信部分はここです。

if( val1 == HIGH && val2 == HIGH ){
if( val != 3 ){
Serial.print( val, DEC );
}
val = 3;
}
else {
if( val1 == HIGH ){
val = 1;
}
if( val2 == HIGH ){
val = 2;
}
}

A相、B相どちらもHIGHになった時だけ、Processingにデータを送っています。
その手前に変化したvalの値(1 or 2)を送ったあと(Serial.print( val, DEC );)、val=3にすることで、余計なデータを送らないようにする(if( val != 3 ))、つまり回転方向の値だけを送っているということになります。


続いてProcessing側です。
こちらはArduinoにStandardFirmataを入れた時と、少し違っています。
「ArduinoがSerialに変わってる」と思う方もおわれると思いますが、基本的にはそんなに違いはありません。
そういうものだと思ってくれてもいいし、気になる方は直接聞いてください。

さて、説明しておくのはupdate_arduino()の中です。

void update_arduino() {
//////arduino.analogRead();の代わり
if (myPort.available()>0) {
val=myPort.read();
///////////////////////////////////////////////
println(val);
//////// 何回おんなじ{1もしくは2}が来たか数える
if (val==mae) {
count++;
}
else {
count=0;
rflag=-1;
}
mae=val;

if (count>10) {
//////// 動き出すためのフラグを決定
if (val==49) { // 1→49
rflag=0;
}
else if (val==50) { // 2→50
rflag=1;
}
}
}
}

Arduinoが使える状態(myPort.available()>0)になったら、値を読み込んでます。(val=myPort.read();

続いてこの部分。

if (val==mae) {
count++;
}
else {
count=0;
rflag=-1;
}
mae=val;

「いったい何やってるんだ…」と思うかもしれませんが、一応「チャタリング防止」です。
なにそれと思うなら、調べてみましょう。完結に言えば誤作動防止。
同じ値が何回か来たら「やってみましょう、見せましょう」の状態になるだけです。

最後にここ。

if (count>10) {
//////// 動き出すためのフラグを決定
if (val==49) { // 1→49
rflag=0;
}
else if (val==50) { // 2→50
rflag=1;
}
}

四角が右か左か動くのを指定するところです。
「Arduinoで1か2を送ったけど、49か50しか来てない」と思われますが、
実はArduinoから送った値は「ASCII文字」として送られています。
ここ(外部)に対応表が載っているので確認しておいてください。
また、ワンステップとしてArduinoの日本語リファレンス(外部)にSerial.printの基数(進数とか)指定の方法が載っているので、参考にしてください。
ちなみにBYTEはver1.0から非対応のご様子。

少し複雑に見えますが、理解すれば単純です。
わからないことがあれば気軽に聞いてください。

文責:目次護
スポンサーサイト



tag: [ロータリーエンコーダー]

テーマ : ゼミ
ジャンル : 学校・教育

プロフィール

Moonwalkers

Author:Moonwalkers
メディアアート、インタラクティブメディア制作ゼミ

最新記事
タグクラウドとサーチ

カテゴリ
月別アーカイブ
ディクテーション
Polyglot Free Language Lessons Online
リンク
Twitter
検索フォーム
RSSリンクの表示
QRコード
QRコード