更新: 2005年9月11日
作成: 2005年9月4日
プラレールの電車に、ワイヤレスマウスの受信機を乗せて、ラジコンを作りました。マウスの動きに従って、前後に走ります。
以前作ったマウスと通信可能な装置をもとに、マウスの動きで、パワーエレクトロニクス回路を制御できるようにしました。制御基板にワイヤレスマウスの受信機をつなぐことで、ラジコンのように使えます。
制御には、PICマイコンのPIC16F628を使いました。4.00MHzで動作します。マウスから読み取った移動速度などを、チョッパ制御の信号に変換してブリッジ回路を駆動し、プラレールの電車を前後に走らせます。
ワイヤレスマウスで操作できるプラレール
パソコンのマウスは、「動かす速さ」というアナログ量をデジタル化できる身近な入力機器です。ふつうは、パソコンにつないで使いますが、通信プロトコルは比較的簡単なので、PICマイコンをホストとして使うこともできます。
つまり、PICで作ったおもちゃをマウスで制御できるのです。
走るおもちゃにふつうのマウスをつなぐと、ケーブルがじゃまになります。そこで、ワイヤレスマウスを使えば、ラジコンみたいに遊べるのでは、ということに気づきました。
ワイヤレスマウスで操作するので、普通のラジコンとはかなり違う操作感を楽しめそうです。
ワイヤレスマウス(Logicool社製)
ちなみに、普通にラジコンを作ろうとすると、電波を出したり受けたりする部分が難しいです。電波を出す部分はとくに、法律でいろいろと規制があるそうなので、私にはよく分かりません。分からないままで、無責任なおもちゃを作ると、まわりに迷惑がかかります。その点、ワイヤレスマウスは、電波の強さや周波数が、あらかじめルールを守るように作られているので、安心しておもちゃを作れます。
とりあえずは、マウスの動きに従い、前後に動くおもちゃを作ることにしました。しかし、ワイヤレスマウスで通信ができるのは、せいぜい2メートルまでです。あまり遠くまで行ってしまうおもちゃには、使いにくいです。
そこで思いついたのが、プラレールです。プラレールは、青いプラスチック製のレールをなぞって走る、おもちゃの電車です。株式会社トミーから発売されています。スピードが比較的遅く、レールを周回にすれば、勝手に遠くまで行ってしまうこともありません。さらに、左右の舵取りが不要なので、1チャンネルしか出力しない制御基板でも、十分使えます。
プラレールの車両(211系)。(株)トミーから発売中
「ワイヤレスマウスで、プラレールを走らせる」という、おそらく誰もやらなかったであろう遊びが、これから始まります。
ちなみに2、プラレールを改造すると、壊れたり、事故が起きたりする可能性があります。トラブルになった場合、このページの作者もメーカーも、責任を取ってはくれません。危険性に対して、ご自分で責任をとれない方は、改造はやめましょう。
曲線レール4本で作った周回コース
3両編成です
基板や電池を乗せて走ります
1両めは動力車
2両めは電池を搭載
3両めは改造なし
デジタルカメラで、走る様子を撮影しました。音は出ませんが、ぎこちなくも前へ後ろへと走る様子が、よく分かります。
走る様子(050904a8.avi)(約1.63MB)です。マウスを前に押すと前進し、後ろに引くと後退します。中ボタンを押しながらでないと、パワーが足りないこともあります。
すんなり走らせるためには、青ボタンを押して感度を2倍にして、さらに左クリックを繰り返して「マウス読み取りあたりのチョッパ回数」を15まで上げる必要がありました。
ひっくりかえる様子(050904a9.avi)(約843KB)です。滑らかに走らせることは、そう簡単ではありません。うっかりマウスを動かしすぎたりすると、ひっくりかえる場合もあります。
車両の動きが回路にフィードバックされているわけではありませんので、よく電車を見て操作する必要があります。例えば、モータの電圧や電流を見て制御するシステムにすれば、もう少しスムーズに走るかもしれません。
ちなみにこちらが、プラレールのモデルになっている211系電車の写真です。JR東海の静岡駅などで、よく見られます。愛知万博で「エキスポシャトル」として走っていたのも、この車両です。
本物の211系電車。JR東海の静岡駅にて
PDF形式のマニュアルを用意しましたので、どうぞご覧ください。
今回製作したのは、マウスで制御するチョッパ回路の基板を、電池で走行可能なおもちゃに接続したものです。まずは、次の準備をします。
制御基板に、ワイヤレスマウスの受信部をつなぎます。
マウスをつなぐための端子
制御基板の出力を、プラレールの車両など、走行可能なおもちゃにつなぎます。動力車の電池ボックスの部分に、制御基板の出力をつなぎます。
動力車の電池ボックス
制御基板を、車体の屋根の上に乗せておきました。
先頭車両の様子
操作の基本はマウス
基板上のスイッチ・ボタン・LED
青ボタンは、マウスの感度と、マウスのY方向とX方向のどちらを利用するかを決めます。押すたびに黄LEDが点滅し、機能の番号を知らせます。機能番号は1から4まであり、押すたびに1ずつ上がり、4のときに押すと1に戻ります。電源投入時は1になっています。
1 | Y軸モード。前後方向の移動を読み取ります。奥に動かす方向が正です。 |
2 | Y軸高感度モード。前後方向の移動を読み取り、移動量を2倍として扱います。 |
3 | X軸モード。左右方向の移動を読み取ります。右方向が正です。 |
4 | X軸高感度モード。左右方向の移動を読み取り、移動量を2倍として扱います。 |
黄ボタンは、マウスの移動方向と、出力の極性などとの関係を決めます。押すたびに黄LEDが点滅し、機能の番号を知らせます。機能番号は1から8まであり、押すたびに1ずつ上がります。8のときに押すと、1に戻ります。電源投入時は1になっています。
1 | 通常モード。正方向に動かすと「正」、負方向に動かすと「負」を出します。 |
2 | 反転モード。正方向に動かすと「負」、負方向に動かすと「正」を出します。 |
3 | 正だけモード。正方向に動かすと「正」、負方向に動かすと「0」を出します。 |
4 | 反転正だけモード。正方向に動かすと「負」、負方向に動かすと「0」を出します。 |
5 | 負だけモード。正方向に動かすと「0」、負方向に動かすと「負」を出します。 |
6 | 反転負だけモード。正方向に動かすと「0」、負方向に動かすと「正」を出します。 |
7 | 絶対値正モード。正方向に動かすと「正」、負方向に動かすと「正」を出します。 |
8 | 絶対値負モード。正方向に動かすと「負」、負方向に動かすと「負」を出します。 |
制御基板の3つのLEDが、動作の様子を知らせます。
青LED | 正常に動作しているときに点灯します。 |
赤LED | エラー発生時に点灯します。リセットボタンを押すと、エラーが解決すれば消えます。 |
黄LED | 電源投入時や設定を変えたとき、マウスを動かしたときなどに点灯します。エラー発生時には、エラーの番号を点滅回数で表示します。 |
マウスと通信できなかったり、マイコンがおかしくなったりすると、赤LEDが点灯してエラーを伝えます。同時に黄LEDが点滅し、点滅回数によってエラー番号を伝えます。エラー番号には、次の種類があります。
点滅回数 | エラーの意味 |
---|---|
1 | マウスにデータを送りたいが、マウスがクロックを引き始めない。 |
2 | マウスのクロックが上がらない。 |
3 | マウスのクロックが下がらない。 |
4 | マウスにデータを送ったが、マウスがACKビットを返さない。 |
5 | マウスにデータを送ったが、マウスが確認応答"0xfa"を返さない。 |
6 | マウスからデータを読みたいが、最初のクロックを下げてこない。 |
7 | マウスから読み取ったデータのパリティーが合わない。 |
8 | マウスから読み取ったデータのストップビットが0になっている。 |
9 | 処理した値が、本来求めている値と異なる値だった。 |
10 | マウスから読み取ったデータのスタートビットが1になっている。 |
11 | マイコンのWDTがオーバーフローして停止した。 |
エラーから復旧させたい場合は、リセットボタン(赤いボタン)を押します。
こちらが、回路図です。
回路は、マイコンとマウスが通信をする部分と、モータを駆動するフルブリッジ回路、動作状況を知らせる表示部分などからなります。
PIC16F628を、4.00MHzで駆動しています。ウオッチドッグタイマをオンにしているため、基板の裏を指でおさえるなどしてクロックを止めると、マイコン自身が停止を検知できるようになっています。
74HC03APは、オープンコレクタの回路です。ベース電流を引き込む部分などで使っています。
電源電圧は5V程度が適切です。ニッケル水素電池などを使い、4.8Vくらいで使うのもよいでしょう。
基板の様子
ちなみに、2両めの屋根の上に電池ボックスを乗せてみました。
2両めの様子
マウスとの通信回路では、弱くプルアップした2つの信号線を用いています。
通信は、クロック線とデータ線を用いたシリアル通信になっています。クロックの周波数は、10kHzより少し高いくらいになる場合が多いようです。クロックは、通信の方向にかかわらず、いつもマウスの側が作る約束になっています。
マウスのインターフェースや通信手順に関する詳しい情報は、http://www.computer-engineering.org/にあります(英語)。
トランジスタを4本用いたフルブリッジ回路を、PICマイコンで制御しています。
PICマイコンから、「1-A」「1-B」という2種類の信号を出し、それぞれに対応するトランジスタをオンにしたりオフにしたりして、モータなどに正や負の出力ができます。
「1-A」「1-B」が、両方同時にオンになると、PNPトランジスタがオフになり、回路に貫通電流が流れないようにしています。
チョッパの周波数は、波形を出している間は、およそ1kHz弱です。マウスとの通信中や、LEDを点滅させている間は、チョッパ回路はオフ状態となります。
パワートランジスタは、コレクタ電流が1.5Aまで流せる品物を使っていますが、発熱には必ずしも強くないので、無理のない使い方をこころがけるべきでしょう。
ブリッジ回路は、直列方向にコイルを持っていません。このため、負荷が十分に誘導的でない場合、出力電流は断続的になります。
出力は、最大でプラスマイナス5V程度が出ます。プラレールのモータは、本来は1.5Vで動くものですので、あまり大きな出力を出すと、故障したり寿命を縮めたりします。
基板には、モータの回転数を把握する仕組みがありません。速度に対してフィードバックをかけられれば、もう少しなめらかに走るかもしれません。
ブリッジ回路と出力のコネクタ
制御基板のPIC16F628に書き込むプログラムを、以下に示します。2つのバージョンを用意しました。新しいほうが、少しだけ安定して走行します。
バージョン1です。操作したとおりにモータに指示を出しますが、安定して走らせるのは、とても難しいです。
バージョン2です。いったん操作を行うと、指令値の最大値を、マウスと16回通信を行うまで保持します。指令値の急な変化を抑えるので、走行が少しだけ安定になります。
このソースコードは、マイクロチップ・テクノロジー社のMPLABという統合開発環境の中で使えます。
プログラムの著作権は、杉原俊雄が持っています。個人的な趣味で作られる場合は、使っていただいて構いません。それ以外の使い方を希望される場合は、作者までお問い合わせください。プログラムに誤りがあった場合、危険な状態になる場合も予想されますが、作者は責任を負いかねます。ご自身の責任において使ってください。
プログラムの中にあるサブルーチンの多くは、マウスとの通信についてのものです。1バイトデータを送ったり受けたりするだけでも、クロックの変化を読んだり、読み取ったビットをシフトしてため込んだりと、いろいろな処理が繰り返されています。
マウスから情報を読んだ後、ブリッジ回路に信号を出力します。オンにする時間とオフにする時間の配分を変数「mvalue」に入れておき、ループの回数を調整することで、波形を作っています。
マウスと1回通信するたびに出力する波形の数を、変えられるようになっています。この波形数は、多くなるほど出力が大きくなります。
パソコンのワイヤレスマウスで、プラレールを走らせるという企画が、見事に成功しました。
マウスを前に動かせば前進、後ろへ動かせば後退するという動作は、新鮮です。
一方で、安定して走行させるのは、そう簡単ではありませんでした。
マウスを動かす速さが一定でも、電車は急に加速したり、あるいは動き出さなかったりで、扱いが難しいです。
プラレールに乾電池を直接セットすれば、安定して走ります。乾電池は、電圧が一定なので、起動時は電流を多く、走行時は電流を少なく流すことができ、走行が安定します。安定して動くものには、何かしらフィードバックがかかっている場合が多いのです。
そこで、フィードバック回路をつければ、扱いをもっと簡単にできるかもしれません。
モータの電圧をフィードバックし、指令値に近づけるような回路を追加できれば、電池を直接セットして走らせた場合に近い、安定した動作が実現できるかもしれません。
そのためには、例えばモータの端子電圧にローパスフィルタをかけてコンパレータに送り、出力指令値と比較して、チョッパの出力を決める、などといった仕組みが必要になりましょう。
幼い頃に親しんだ「プラレール」ですが、コンピュータで制御しようと思うと、おとなになってからでも奥の深さを感じさせるおもちゃだと思います。
この作品は、CQ出版社が主催している「ワンチップ・マイコン・デザイン・コンテスト 2005」に応募する予定です。