ロボット工作(~0712)

福西です。

IMG_0192

ロボット工作では、春学期は74HC04(NOT回路)というロジック回路を応用して、ライントレーサーを自作しています。

センサー部分には、赤外線LED、フォトトランジスタ、NOT回路を使っています。

その他ハード面には、モーター、モータードライバー、電源、そしてそれらを載せる車体です。

今回、マイコンは使っていません。

そして、マイコンなし(プログラムを書かず)にある程度の目的を達成する、というのが今勉強している内容です。

モーターは、正回転と停止のみで使用するので、その駆動には、最初、FETを単体で使っていたのですが、これが意外な落とし穴でした。電源をめいっぱい(5Vに近い値)で動かすと、逆に勢いがありすぎて、ラインをオーバーして停止してしまうという現象が多々起こりました。

そこで、去年モジュール化して使ったことのあるTA7291Pというモータードライバーをひっぱり出してきて、速度制限(アナログに2~3Vあたりで調節)して使ったところ、それでうまくいきました。

ここで何が課題になったかというと、マイコン代りに使っているロジック回路の動作電圧と、モーターの駆動電圧とが「同じでないこと」です。モーターを3V以下で動作させたいのですが、ロジック回路(74HC04)の動作電圧はあいにく5Vです。なので単純に電源自体を3Vにすることはできません。そこで、モーターにかかる電圧だけを落とすために、TA7291Pというモータードライバーを使って実現したというわけです。

DSC05197

以下、春学期に勉強したことをまとめておきます。

 

1)センサー(入力)

DSC05188

ライントレースのセンサーに使うのは、フォトトランジスタです。これは汎用で使われる2SC1815と同じく、一種のNPN型トランジスタです。

トランジスタはそれだけで奥が深いのですが、ここでは「スイッチ」と理解してもらうだけでよいです。

NPN型トランジスタは、ベース(B)に小さな電流が流れると、それをスイッチONと判断して、コレクタ(C)からエミッタ(E)へと電流を通します。

イメージ的には、部屋の照明をつける際に、スイッチを押す「指」がベース電流で、コレクタからエミッタへと流れる電流が、実際に照明をつけている電流です。

そしてフォトトランジスタは、この「スイッチを押す指」にあたるベース電流が、「赤外線を受けること」に相当します。

NPN型トランジスタの出力は、ふつうコレクタに接続して、反転増幅で使われますが、今回は感度重視でセンサーとして利用するので、エミッタに接続しています。なので出力は反転しないままです。

赤外線は黒色に対しては反射せず(吸収され)、白色に対して反射します。

この性質を利用してライントレースを実現します。

つまり赤外線LEDから床(5mm~1cmすきま)に向けて照射し、はね返ってきた赤外線の有無をフォトトランジスタが検知することで、車体の下にラインがあるかどうかを判断しています。

 

2)制御(入出力関係)

今回追従するラインは黒線、使うフォトトランジスタは2つとします。

ライントレースを実現するためには、

A 「センサーの左右が「黒」を検知」→「車体は道の真ん中にある」→「モーターの左右を正回転させる」=「前進」

B 「センサーの左が「黒」、右が「白」を検知」→「車体は道を右にそれた」→「モーターの左を停止、右を正回転させる」=「左回り」(車体は道の真ん中に復帰)

C Bの逆=「右回り」

D Aの逆=「停止」

以上の4つの入出力関係をおさえる必要があります。

それを74HC04を使って実現したのが、以下の表です。

入出力関係

入力 |出力

左 右 |左 右

A 0 0 |1 1

B 0 1 |1 0

C 1 0 |0 1

D 1 1 |0 0

(入力はセンサー、出力はモーター。1がONで、0がOFFです)

上の表を眺めると、入力の方がちょうど2進数の0~11に相当しています。つまり2ケタの2進数では、4パターンの行動が制御できることになります。

今回はこの表が、マイコン(に書き込まれたプログラム)のかわりです。

上のことを、もう少し絵的に表現してみます。

DSC05286

A)センサー(フォトトランジスタ)が2つともライン上にある時

| |

|●●|

| |

この時は、左右のモーターはともに「正回転」させればいいことになります。(そうすれば車体は「前進」する)

ただし、この時の左右のフォトトランジスタの出力は、赤外線が床の黒色に吸収され反射してこないので、OFF・OFFとなります。

そしてモーターにとっては、このパターンがON・ONになってほしいので、そのために74HC04(NOT回路)で反転します。

B)センサー(フォトトランジスタ)が左はライン上に、右はラインから外れている時

| |

| ●|○

| |

この場合は、車体は左に戻せばいいことになるので、モーターの左は停止させ、右を正回転させればよいことになります。(左回り)

これによって、A)の状態に戻します。

C)は、B)の左右を取りかえた状態です。

そして今回問題となったのは、D)の場合です。

D)センサー(フォトトランジスタ)が左右ともラインから外れている時

| |

| |○○

| |

単に少しコースアウトしただけなら、B)かC)におさまるので制御が利くのですが、たとえばカーブしたりラインが細かったりするところでは、容易にD)の状況が起こります。そして今回の仕様では、「白白」の場合は「停止」としているので、そこでライントレースが終わってしまいます。

そこがゴールならいいのですが、カーブの途中でエンストしてしまっては困ります。

現象を分析し、センサーのエラーや、配線・はんだ付けのミスなども色々と疑って、「どうやらそれらには間違いはない」ということが確かめられた後、残る原因の一つに、スピードがつきすぎている(ためにカーブで車体が飛び出す)ことが分かりました。

そこで対処法として、「モーターの回転をゆっくりにする」ことを考えました。実に、当たり前と言えば当たり前なのですが、そうした泥臭い工夫が、実際に求められるスキルだったりします。

DSC05284

「マイコンを使わずに、ここまでできるって、すごいなあ」と生徒の一言。

(実際に動いているところを撮りました。→「こちら」

 

さて、上の動画では、実はカーブの所ではまだ完璧には至っていません。

ここで、大まかに次の二つの対処法が考えられます。

1)センサーを3つにしてコースアウトに対する精度を細かくする。

2)モーターの「逆転」を実装する。

つまりセンサー2個で「白白」の場合、単に「停止」させるのではなく、それがカーブであるならば、バックする。

1)も2)も、それぞれの難しさがあります。

また、その実現の仕方にも、二通り考えられます。

i)ロジック回路を大規模にする。

つまりNOT回路以外にも、AND、OR、NAND、NORといった他のロジック回路を追加して、先に考えた「入出力関係」の表を作り直す。

ii)マイコンを使ってプログラムを書く。

i)はハード的、ii)はソフト的な解決法です。

授業の流れとしては、上のような困難を通しながら、「それを解決するにはどうすればよいか?」と考えていくうちに、だんだんとマイコンの必要性を感じてもらえればと思っています。また秋学期からもよろしくお願いいたします。

DSC05201

 

おまけ

ロボット工作に来てくれた生徒たちの、2~3年前の写真です(^^)