PIC使用 赤外線自動走行車


 

説明

PIC1石にて制御する自動走行ロボットです。
まだ完成度は低いですが、一通り動作していますので公開します。学校での学習用や卒業研究などの
ベースにも使用できるような内容です、採用の際は是非ご一報ください。(笑)
作った物が実際動くという、物づくりの基本と楽しさが体験出来るので、おもしろそうと思ったら
悩まずに作ってみましょう。部品もそれほど苦労せずに集められる物ばかりです。

自走式ロボットとして以下の機能というか特徴を持ちます。
・3輪走行の車であり、左右の車輪を独立制御し回転、前進、後退などを行える
・センサとして赤外線LEDと赤外線センサを持つ
・制御はPIC16F84A 一つで全て行い、電源も5V(電池4本)単一で動作出来る
・その他、モニタ用のLEDと設定用にSWを持つ
赤外線センサからの情報を用いて、車輪を制御することが出来る機構です。
ハードウエアは目と足を持ち、ソフトウエアにてそれらを操る事で、障害物をよけて走る
自走ロボットとして完成しています。ソフトの改良により、まだまだいろいろな事が出来るロボットとなっています。

ロボットを作りたいというのは制御系を学習していると誰もが思うことだと思いますが、
どうして良いかわからない場合がほとんどだと思います。このように簡単に作れて、動くことを体験する事により、
物づくりの楽しさをわかり良いエンジニアを目指すきっかけになれると良いと思います。

有名な梵天丸ににているかもしれませんが、シンプルに作るとどうしても似てきますのでパクリとは
思わないで欲しいです。(^^;) センサ部分などはおもしろい方法を考えたので、体験して実力アップに
つなげて欲しいです。
 

仕様書はこちら

本体回路


 

部品(価格はだいたいの目安です)

  • PIC16F84A  (¥300〜¥1000)

  •  いわずとしれたPICの代名詞、特に説明はいりませんね
     ソフトはこのPIC用になっていますので他機種では注意が必要です。
     
  • 水晶 (¥30〜¥200)

  •  今回はPWM制御や点滅など高速動作が必要なので20MHzのセラロックを使いました。
     
  • ICソケット 18P  (¥20〜¥50)

  •  PIC用のソケットです、なんでもOK
     ソフト変更が多くなると思うので、ちゃんと付けましょう。
     
  • 赤外線LED  (¥50〜¥300)

  •  障害物検知用に使う赤外線LEDです。
     出力などはこだわりませんが、左右は同じ物を使用しないとダメです。
     LEDが故障しているか、人間の目では見えませんがデジカメなどの液晶画面で写してみると
     点灯しているのがわかりますので実験してみてください。
     私はジャンクでまとめて買った物が結構壊れていて苦労しました。
     
  • 赤外線センサ  (¥50〜¥300)

  •  赤外線を検出するセンサです、千石や秋月、ロボコン館などに売っていると思います。 
     誤動作が結構多いので38KHzで同期を取る物が多いです、ソフトはそれに合わせてあります。
     写真と同じ物で無くてもいいですが、物により特性がありますのでセンサ部の実験をよくやってください。
     
  • モータドライバーIC TA7291P  (¥150〜¥500)

  •  DCモータを制御するICです、正転、逆転、ブレーキ、フリーの4つの状態を作れます。
     動作電源が結構高めの製品が多いので、同じ物にする事がおすすめかな。
     パッケージによりピン番号が変わってくるのでデータシートが必要です。
     
  • LED、SWなど

  •  モニタ用と設定用なので、適当な物でかまいません。
     SWはプッシュSW以外ならソフト的に問題はありません。
     電源SWは2回路入りの物を使いましょう。理由は回路図からわかります。
     
  • 車体 (¥800〜)

  •  車のベースとなる車体には”田宮の壁づたいマウス”というキットを使用しました。
     モータの固定や左右タイヤなど、自分で作ると大変なのでキットを流用したほうが簡単です。
     ここは見栄えにも関係するので、各自好きな物を考えてください。
     
  • LED、SW、ダイオードなど

  •  モニタ用と設定用なので、適当な物でかまいません。
     SWはプッシュSW以外ならソフト的に問題はありません。
     ダイオードは1588 を使いました、適当な互換品でOK。
     
  • 電源

  •  電源は単3充電池4本で動作させています、回路的にはモータ用と制御用で分けるようにしていますが、
     別に問題がなかったので一緒にしてしまいました。ノイズなどの問題が出やすいので対策を考慮した
     回路にしておくというのが大事です。
     
  • 線材、抵抗等

  •  普通に配線に使用する物でかまいません

    ハードウエア説明

    ハードウエア機能が多いので少し説明しておきます。

    ・赤外線センサ

     赤外線センサとは受光部に赤外線があたると出力が変化するものです。TVのリモコン受光部なども
     同じ物となります。赤外線を受光するだけだとかなり誤動作するため、ある周波数で同期をとり
     誤検出をしないような部品がほとんどです。
     同期を取るためには赤外線LEDを同期点滅させる事により、自分が必要な信号のみ反応するようになります。
     実験するとわかりますが、LEDを点灯させるだけではなく、38khz(同期周波数)にて点滅させないと
     受光部は反応しません、自然界や蛍光灯などにはたくさん赤外線成分が含まれているので、
     このようにしないとまともに動作しませんので、理解してから作成してください。
     同期点滅をソフトでやっているので、ソフトは少し複雑になっています。

    ・赤外線LED

     上記センサとついになり赤外線を発生させる部分というのは説明の通りです。
     なぜ障害物が検知出来るか書いていませんでしたが、写真のような方向へ赤外線を発光させると
     障害物がある場合、障害物に反射して赤外線センサが検出します。結構単純な回路です。

     今回は2段階に距離を検出するという機能が入っています、回路図を見ればわかると思いますが、
     LEDへの電流として可変抵抗を通してアノードへ入力します、大きな電流を流せば遠くまで届き、
     遠くの障害物の検出ができます。小さい電流だと近くの障害物しか検出しません。
     可変抵抗2ヶで2段階の明るさを作成する事ができます。

     左右に2ヶのLEDを使用しているため、左右の点灯させたい方のLEDに電流が流れるように制御します。
     なぜダイオードが入っているかというのは下記の表にて A:H B:L などの時にA から B へ電流が流れてしまい
     ショート状態となるため必ず入れてください。部品削減と2段階点滅という機能を実現するとこのような
     回路になりました。

    ポート制御の状態と実際の点灯状況です

    A B C D 状態
    H L L H R LED 弱点灯
    H L H L L LED 弱点灯
    L H L H R LED 強点灯
    L H H L L LED 強点灯

    これ以外に2段階というか無段階制御をするために、LEDの点滅周期のDUTY を変更させて距離検出する事も
    可能ですが、ソフト的には難しくなります、不可能ではありません。
    このように1ビットの出力しか持たないセンサでも、有り/無しではなく、距離まで検出できるようになります。
    設計者の腕の見せ所なので、知識として覚えておきましょう。

    ・モータドライバー

     DCモータを回転させるにはどうすれば良いでしょう?子供の時にやったと思いますが、
     電池のプラスとマイナスにモータの線を付ければ回転します。逆回転させるためには
     線を逆に付ければ逆回転する事を覚えていると思います。
     では、この正転逆転を配線を変更せずに実現するにはどうすれば良いでしょう?
     多分わからないと思いますが、それを回路的に行う物がモータドライバーICです。
     入力信号(PICからの指令)により出力(モータへの配線)の電流方向を変更出来るような回路になっています。
     トランジスタで実現できるのですが、自力で組むのは大変なので専用ICを使う方が簡単です。
     でも、内部の等価回路と仕組みは理解して欲しいです、専用ICで問題がある場合は自力で
     組めると本当に問題があるのかなどわかりますから。

     このモータドライバICを利用してソフトウエアPWMルーチンとして前進後退各16段階の速度制御を行っています。
     オンとオフしかないモータに対して高速にオンオフを切り替えて、そのオンしている時間を
     変更する事により速度を変更しています。

    PWM制御は以下のような感じです

    高速:~~~~~~~~~~~~~~~~~~

    速め:|~~~|_|~~~|_|~~~|_

    普通:|~~|__|~~|__|~~|__

    遅い:|~|___|~|___|~|___

    停止:__________________
     

    作り方

    まずは回路図をよく理解して部品の位置を決めます。
    センサの位置と赤外線LEDの位置は重要なので写真を参考にしてください、前方の障害物を
    チェックするための機構と理解できれば、おのずとわかると思います。
    それ以外の部品はそれほど重要ではありませんが、きれいに格好良くが基本です。

    あとは配線確認をしてPICにプログラムを書き込めば完成です。
    ソフトはここにおいておきます。外部マクロを使用していますので、
    このままではコンパイル出来ません、自力で作成するかメールにて質問してください。

    最初に簡単と書きましたが、最初はうまく動かないと思います。
    センサが検出しない、モータが回らないなど、など...
    悪い部分を見つけるために、テストプログラムを書かないとダメかもしれませんが、
    そこは自力でがんばってください。困難を乗り越えてこそ実力となりますので。
     


     


     

    ソフト解説

    ソフトの解説を簡単にします、ソフトはここにあります。

    1.各種内部定義とCPU設定などを行います
     ここを綺麗に書かないと保守性の悪いソフトとなります

    2.割り込み周期を13usにて発生させます
     38KHzの点滅を作るために13usが必要なのでこうなりました。
     メインルーチンは割り込み回数が128回毎に動作するようにしています。
     13us = 1000000us / 38400 / 2 (実際には38.4KHzが同期周波数です)
     13us 毎にオン/オフすれば38.4KHzの点滅となります。

    3.割り込み処理
     左右どちらのLEDを点滅させるのかを判断し点滅させています。
     明るさの選択などは行っていません。
     周期が短いので最低限の事以外行わないようにしています。

    4.メインルーチン
     以下の各ドライバーと自走するためのロジックが動作します。
     各ドライバーにて情報を作成し、それを元に走行するためのデータを作成する感じです。
     細かい説明は省きますが、ソースを穴があくほど眺めるとわかると思います。

     ・ポート入力ドライバー    SWの入力処理です
     ・赤外線LEDドライバー   赤外線の明るさ設定、どちらのLEDを点灯させる、障害物の検出などです
     ・LEDドライバー       モニタ用LEDの点滅ドライバーです
     ・モータドライバー      モータの回転を制御するドライバーです
     ・動作シーケンス       実際どのように走らせるかを演算する所です

    5.その他
     説明が難しくなってきたので後はソースを見てください...(^^;)
     多くのテクニックが含まれていますので、マスターすればかなりのレベルアップが出来るはず。
     タイミングが厳しくて、トリッキーでテクニカルで芸術的なルーチンが多いですが、めげないでください。
     動作シーケンスの部分を作り替えれば、いろいろな動作をさせることが出来ます。

    6.基本動作
     今のソフトはどのように制御しているかです。知らないと動作しない原因になります。

    ・SWのオンオフにて動作モードを切り替えます。モータが回らないモードもあります。
    ・モニタLEDは障害物の検知状況を表示します。
     右LEDは右の障害物状態、左LEDは左の障害物状態を表示します。
     障害物が無い場合、消灯し、遠くに見つけた場合、点滅、近くに見つけた場合、点灯します。
     センサのチェックに使えますし、いろいろ障害物の位置を変えてどのような反応をするか見てみましょう。
    ・電流調整用の可変抵抗はとりあえず、真ん中あたりにして徐々に調整してください。
     調整が変だと近いと遠いが逆になる可能性もあります、適度に2段階の距離検出が
     出来るように調整しましょう。

    下に各技術課題分の説明をします。

    ・モータドライバICの使用

    久しぶりに使いましたが、基本的な部品なのでそれほど苦労はしませんでしたし
    PICとの接続もなにも問題がありませんでした。
    単一電源で使用するために、部品選定と地方在住のため入手が困難でした。
    ソフト的にも良いドライバーが出来たので自由自在の走行が可能となりました。
    ただし、速度を求めるとか大きなモーターを使う場合は、部品選定が難しくなることもわかりました。

    ・赤外線LEDにて2段階の距離検出

    2段階の検出が出来ることにより、遠くの障害物は少しよけて近い場合は急旋回するという
    制御ができ、動きも自然な感じに出来ました。
    回路的には出来てしまえば、シンプルで簡単ですが、可変抵抗を左右各2ヶ使ったのでは
    意味は少なかったと思います。
    ソフト的にも2段階+左右+点滅となかなか難しかったですが、ソフトは専門といい物が
    出来ました、かなりトリッキーになったので解析は難しいかもしれませんが、
    これだけのハードとソース量で機能を実現するのは難しいことだと思います。

    感想

    1年位前に作って、完全な完成とはいえないため公開していませんでしたが、
    改造していないので、現時点で公開する事にしました。

    だれでも一度は作りたいと思うロボット工作の基本でした、自分も学生時の卒業研究で
    よくにたロボットを作りました、そのときは苦労の連続でしたが、完成したときの感動はいつまでも覚えています。
    今現在の知識と実力からは、難しくは無かったですが動いたときの感動はやはりなににも変えられない
    楽しく、うれしい物でした。動くものは動きをどんどん良くしていくという楽しみが多いのも
    作るメリットだと思います。ソースの変更もここまでと思えばそこまでの機能しか出来ませんが、
    変更すれば、どんどんおもしろい動きに変わり、それを体験できます。

    買ってきて動かすだけの遊びとは違い、可能性は自分の中にあるのでどこまでも
    追求する事ができますので、どんどん発展させて欲しいです。PCの画面やゲームでは
    味わえない楽しさが必ずあるはずです。
    最近の子供や学生はこのような物に興味が無いようですが、それを味わえる環境の
    一つにでもなれて、物づくりを目指す楽しみを知る人が少しでも増えてくれるといいなと思います。
    ハードウエアで可能性を作り、ソフトウエアで自由自在に操る、この楽しみは努力しないと
    味わえませんが、お金では買えない楽しさです、興味があれば是非物にしてください。

    免責事項:
     この記事や作品を参考にしたことによる事故等についての責任はいっさい負いませんので、
     各自の判断で作成、使用してください。
     

    HOMETOPページへBACK電子工作コーナーへ