ロボットの開発

はじめに

ついにロボットに手を出してしまいました。
とりあえず目標の設定はしていません。
マイクロマウスになるのか、はたまた手足が生えるのか行き当たりばったりでいきます。
何とでもなるように制御系はなるべく柔軟に設計したいと思っています。

駆動系を考える

やはりアマチュアがロボットを作成するのにラジコンサーボ(この世界ではサーボモータとは呼ばないそうです。ラジコンをやっている人はサーボモータでよいのですが、ロボット界では位置決めすることを「サーボをかける」と呼び、でかいモータだろうがマブチモータだろうが位置決めできてしまえればそれはサーボモータになるので。よって以下「RCサーボ」と表記します。)は避けて通れません。
まずPICとRCサーボを直結して動かしてみます。

PICは基本のPIC16F84。
RCサーボは手持ちしていたサンワのSRM-102。(すでに10年以上前のしろもの)
これに20MHzの発振器と、操作用のスイッチをつけてできあがりです。(スイッチはプルアップ抵抗まで考えると毎回組むのが大変なので4個分ひとまとめにしておいたものです。)
RCサーボを制御するのは案外簡単で、決まった幅でパルスを出し続けるとパルスの長さに応じた角度に出力軸が位置決めされます。
具体的には以下の図のようなタイミングで出し続けます。

1.5mS(ミリ秒)がサーボの位置決めになります。
1.5mSを中立とし、1.0〜2.0mSに変化することにより、出力軸を左右に振ることができます。
またパルスを停止するとフリーになります。
これをPICで再現すればよいことになります。
1.5mSの出力が終わったあとは次のパルスまで空いているので通信などに使用します。
写真ではRCサーボは2機しかつながっていませんが、PICのI/Oが余っているのでプログラム上では8機まで個々に制御可能なように組んでいます。

さて、RCサーボの制御に目処がついたので移動用の駆動系もRCサーボでいってしまいます。
とはいえRCサーボはグルグル何回転もするようなものではないので改造が必要です。

まずはRCサーボを分解します。


ファイナルギヤを見るとストッパー(矢印部)が付いているのでニッパーでとばしてしまいます。

次にポテンションメータといういわゆる可変抵抗を動かないようにしておきます。

ポテンションメータはファイナルギヤに直結されていてパルス長に応じた抵抗値になるまでモータが動くという動作をするので中立位置で固定しておきます。
または、しょせん可変抵抗なので、いっそのこと撤去してしまい、中立相当の抵抗値の固定抵抗を付けてもいいでしょう。
ちなみにサンワのSRM-102の可変抵抗を中立にして抵抗値を測ったら約2.15kオームでした。
ので手持ちの2.2kの抵抗を直付けしてみました。
しかし固定抵抗の足から直接リード線がハンダづけしてあるのにはびっくりしました。

ちょっと抵抗値が違ったせいかセンターはちょっとずれたような気がするのでやるときはしっかりした抵抗値でやりましょう。
今回は停止時はサーボオフ(パルスを切ってしまう)で済ませることにします。

車体の製作

さてRCサーボの改造ができたので車体に組み込みます。

サンハヤトのユニバーサル基板をそのままシャシーに見立て、幅いっぱいで組み込みます。
サーボステーは別にプラスチックのダサいので良かったんですが、手持ちがなくってラジコン屋へ行ったらアルミの格好いいのしかなかったのでした。
いや正確には売っていたんだけど、ランナー枠ごとになっていて要らない部品がいっぱい付いていて値段も変わらないんで・・・。

次はタイヤ&ホイールです。
なにせRCサーボなので普通のタイヤは付きません。
付くのはサーボホーンだけですよね。
というわけで、サンワの純正サーボホーンにタミヤの工作セットのプーリー(L)セットを組み合わせてみました。

これがまた丁度いいところに穴があいていて2mmのビスで無加工で取り付けられました。
タイヤ部は適当なサイズのOリングをはめています。

前輪(従輪)にはやはりタミヤの工作セットのボールキャスターを組み込んでいます。

ラジコン部品からすれば安くてよいです。


これで1階部分は出来上がりです。

次は電源部です。

そのまま同じサイズの基板で積み上げます。
4隅のポストは20mmのジュラコンで接続しています。
基板一枚だとかなりふにゃふにゃで心配だったけど、2階を組んだらそこそこ強度が出ました。
電源はRCサーボ用として単3ニッケル水素を4本。
それと2階に搭載場所が無かったので制御用の006Pの乾電池を1階のRCサーボの前のスペースに押し込んでいます。
動力用の電源と共用にしたかったのですが、RCサーボが動くたびに電圧降下でPICにリセットがかかってしまい、泣く泣く別電源にしました。
制御用電源は006Pの9Vをレギュレータで5Vに落として使用しています。
電源のケーブルは極力コネクター化しています。
いや電池交換するときはバラバラにしないとできないので分解しやすいように・・・。
これで車体のベースは完成です。

制御回路

制御回路といってもとりあえずRCサーボが動かせればよいのでパソコンのシリアルポートに接続してコントロールするような回路を考えてみます。
まずはブレッドボードで試験回路を組みます。

見ての通りPICは2個使用し、16F84にはサーボのパルス発生に専念してもらい、別にCPUとして16F877(秋月の基板に載っている版)を使用しました。
今回は基板のサイズも余裕があるし、なにより目的が無いので、なんでもできるように高機能でI/Oピンの多いものを選択しました。

しかし16F877は40ピンのPICであるため、今までのPICライターのソケットに挿すことができません。
そこで40ピンのゼロプレッシャーソケットを増設しました。

それからライター本体は旧版のままですが、ファームウェアはVer4に差し替えています。(秋月のHPを見るとVer4はVer3用のアップデート専用ということになっていますが、よく読むと旧版のライターも基本回路は同じなので使えるだろうけどサポート外と書いてあります。ということは使えると踏んでやってみたら動きました。)
これで新しいデバイスも対応可になりました。

CPUの16F877とサーボドライバの16F84は、3線式シリアルの独自プロトコル(実はI2Cもどき)で通信をします。
I2Cと異なり、3線目で通信確認のフィードバックを取るようにしたので通信速度はPICのクロック数次第になっています。
またCPUとサーボドライバのクロック数が異なっても通信できるはずです。
さらにCPUとパソコンをRS-232Cで接続し、ターミナルソフトでコマンドを叩いてサーボが位置決めするようにプログラムを組んで動作確認しました。
だいたい目処がついたところで車体に組み込む基板を作成しました。

3階の制御回路部分です。
液晶は必要に応じて取り外し可です。(って言うか外さないとPICが外せない。)
お尻に見える3色線がシリアルポートです。
ただし、レベル変換をしていないので、外部で変換が必要です・・・が、ちょうど携帯電話データリンクケーブルの失敗作の1号機が残っていたのでそれを流用しています。

制御アプリケーション

いくら有線とはいえターミナルソフトを叩いていてはスマートではないので、Visual Basicでさらっと組んでみました。

なんでもできる仕様なので、8軸分サポートです。
各軸ごとにスライドバーを割り当てたので、個々に制御できます。
また、一番上の2軸は移動用とし、下のほうのカーソルキーでも連動して操作可能です。
これでとりあえず紐を引きずりながらにしてもコントロールができるようになりました。

無線化その1

実は微弱電波による無線化を予定していたのですが、なかなか思うように進まず、とりあえず赤外線モジュールを付けてみました。

当初はシリアルポートから赤外線LEDを駆動してコントロールしてみようかと思っていたのですが、ふとDigiQが2モータ制御なのを思い出しました。
しかもDigiQの赤外線のデコードルーチンはDigiQライターのときにすでにできているので流用してみました。
これでDigiQの送信機「デジプロポ」でコントロールができるようになりました。
(赤外線モジュールは変調が38kHzと書かれていましたがデジプロポの40kHzも反応しました。)
でっかいDigiQのできあがりです。
さらに液晶部にはリアルタイムに赤外線のデータを表示するようにしてみました。

表示はDigiQコマンダーに合わせてあります。(って言うか流用)
とりあえずロボットには程遠いけど笑えるものはできました。
次は微弱電波に挑戦です。