シリアルねずみは、パソコンのシリアルポートを使ってねずみロボットを動かすおもちゃです。 動かすねずみロボットは青い発光ダイオードの目と3mの紅白の長い尻尾が特徴のなかなか可愛いロボットで、 この尻尾の先を回路につないでやると前と左右の3方向に割と機敏に走り回ります。
パソコンで自作回路を動かす構想自体は結構前から考えていたのですが、 パソコンと自作回路の通信についての資料を色々と見てみたところ まともな通信を行うにはPICなどのマイコンを使って、 プログラム的に制御してやらないといけないようだということが分かってきました。
とはいっても、マイコンのプログラム設計にはかなりの時間が必要になります。 さすがに「ただ動くだけ」のねずみにそこまでの時間を割くのは無理だなぁというのが正直なところだったので パソコンとの接続は殆ど諦めていました。
ところが、ある日ふと見たトラ技の2000年4月号に、シリアルポートを通信ポートとしてではなく 汎用ポートとして使う製作例がのっていました!
その記事には、まともな通信ははなっから諦めてお互いの状態を確認し合うための信号線を WindowsAPIで叩けば汎用ポートとして使えるというようなことが書いてありました。 このアイデアは使うしかないと思って、めでたく今回の製作となりました。
ねずみロボットには田宮模型の楽しい工作シリーズ「壁づたいねずみ」を使用しています。 楽しい工作シリーズは田宮模型の小学生向けの工作キットで、大体1000円から1500円位の値段で 尺取り虫が動くものや恐竜が歩くものなど結構色々な種類が出ています。 私も小学生の時にはよく親に買ってもらって作りました。「壁づたいねずみ」は車体に取り付けられたセンサーロッドで壁を感知して壁づたいに進んでいく、という ものでした。良くできているなぁと驚いたのを覚えています。
今回は、この壁づたいねずみに改造を施して有線操作のロボットにしました。
壁づたいねずみの外箱
製作したシリアルねずみの構成は下図のようになっています。
動作の流れこの流れ図によって、ねずみロボットを動かすには「パソコン側プログラム」と 「回路基板」が必要なことが分かりました。あとは2〜6の繰り返し
- 1.パソコン側プログラムがシリアルポートを開く
- ↓
- 2.パソコン側プログラムが制御信号(DTRとRTS;詳しくは後述)を送り出す
- ↓
- 3.ロジックレベル変換部が信号を受け取って5Vレベルに変換
- ↓
- 4.モータードライバのロジック回路に信号が到達
- ↓
- 5.モータードライバのモーター駆動部からロジック入力に従ってねずみロボットのモーターへ電源供給
- ↓
- 6.ねずみロボットのモーターが回転、ねずみロボットが動く
その他にも色々なことが分かります。例えばシリアルポートからの信号が2本しかないので、 制御信号は4種類しか送れません。そこで今回は前と左右と停止の4状態を下図のようにそれぞれ割り当てました。また、制御信号を全てモーター制御に持って行かれたので、シリアルポートを開いたときに目のLEDが点灯するという 格好いい演出が出来なくなってしましました。 個人的にはこのシリアルねずみで、「A10神経接続開きます!云々」という感じの一人遊び(笑)がしたかったので どうしても欲しい機能だったのですが、ねずみの動作が2値制御になるよりはましなので今回は諦めました。
ねずみの状態 DTR信号 RTS信号 停止 0 0 左回転 1 0 右回転 0 1 前進 1 1
それから、上のシステム構成図に発光ダイオード用の部分が入っていないのは制御の対象ではないからです。 発光ダイオードの回路は調整抵抗と発光ダイオードが直列になっているという、 基本回路そのままのものが5VからGND(0V)へ向けて接続されています。
シリアルポートは殆どのパソコンに取り付けられている通信ポートです。COM1、COM2、といった名前が振られているので COMポートといった方が通りがいいかも知れません。パソコンの裏に回ってみれば2cmくらいの大きさの9ピンの端子があると思います。 それがシリアルポートです。
本来は通信用途に使うのですが今回は先述したように通信制御用のピンをWindowsAPIで叩いて汎用のポートとして使用しました。
そのしくみを簡単に説明します。
まずシリアルポートの九つのピンの役割なのですが、注意しなければならないのは9pin全てがI/O (アイオーと読む。入出力(Input/Output)の意) できるわけではないということです。各ピンにはそれぞれ次のような役割があります。今回の製作ではパソコンから回路への出力のみを行い、回路からパソコンへの入力は行わないことにしていたので 使用出来るピンは出力ピンである3(TxD)、4(DTR)、7(RTS)の3ピンです。 ところが、2のRxD、3のTxDは通信用のピンなので規格通りの制御を行ってやらないとうまく機能しません。 そこで今回の製作では4(DTR)、7(RTS)の2ピンを操作してねずみを動かしました。 この2つのピンはWindowsAPIのEscapeCommFunction関数をつかって簡単に状態を変更できます。
ピン番号 入出力 信号名 1 I CD 2 I RxD 3 O TxD 4 O DTR 5 - GND 6 I DSR 7 O RTS 8 I CTS 9 I CI
パソコン側の信号送出は出来るようになったので、続いて回路側での信号の受け取りです。 実は、これがちょっとやっかいなのです。普通、電子回路ではデジタル信号を+5Vと0Vで扱うのですが、 シリアルポートの信号は、信頼性の確保のために+5〜15Vと-5〜15Vで入出力されているのでした。 もちろんこのレベルに変換してくれる専用のレベル変換ICも売られているのですが、 ただの有線ロボットに使うにはもったいない気がします。 そこでインターネットで検索してみたところ、 「えるむ−Electronic Lives Manufacturing」に 一般的なデジタルロジックICである74HC04を使ってシリアルポートとやりとりする方法についての記事がありました!
これでパソコン側とのインターフェースをかなり簡単なものにすることが出来ました。
最後に、参考にしたシリアル通信関係の記事のあるホームページへのリンクを張っておきます。
- ◆Electronic Lives Mfg.
- 「テクニカルノート」内にある「超簡単! RS-232Cインターフェース回路」という記事を参考にしました。
MAX232などの変換ICを使わずに、74HC04で実現しようという内容です。- ◆電子工作の実験室
- 「PICプログラミングテクニック」内の「シリアル通信のプログラミング方法」という記事でRS232C規格が詳しく説明されています。
製作に当たって使用した部品は以下のようなものです。
部品名 数量 役割 一個当たりの購入価格 買った店 モータドライバIC TA7291P 2個 モーターの駆動 280円 デジット ロジックIC 74HC04 1個 パソコンとのインターフェース 30円 シリコンハウス 3端子レギュレータIC 78L05 1個 +9V→+5Vの変換 80円 シリコンハウス D-Sub 9pin-9pin ケーブル(オス・メス) 1本 パソコン回路間の接続 400円 秋月電子通商 D-Sub 9pinはんだ付け用コネクタ(メス) 1個 ケーブルコネクタ 50円 秋月電子通商 マイコン用ピンヘッダ・ソケット 少量 各種コードと回路を接続 50円 秋月電子通商 カーボン抵抗 100kΩ、4.7kΩ 各2個 パソコンとのインターフェース 5円 ニノミヤ カーボン抵抗 2kΩ 2個 発光ダイオードの調整抵抗 5円 ニノミヤ 青色発光ダイオード 2個 ねずみの目 100円 デジット 可変抵抗器 1個 TA7291のVref調整抵抗 40円 エレ工房さくらい 電解コンデンサ 100uF 1個 回路の保険(インピーダンスを下げる) 30円 デジット 積層セラミックコンデンサ 0.1uF 3個 モーターのノイズ低減2個
回路の保険1個(インピーダンスを下げる)10円 エレ工房さくらい すずメッキ線 0.6mm 少量 配線用 120円 ニノミヤ 被覆より線 30mぐらい 回路ねずみ間の接続 350円(10m) シリコンハウス 電池スナップ 2個 電池をつなぐ 10円 秋月電子通商 基板 ICB-90 1枚 ねずみの目を取り付け 160円 ニノミヤ
本当はモーター駆動はパワートランジスタで行う予定だったのですが、 デジットでは型番を控えていったトランジスタを扱っていなかったので 仕方なくモータードライバICの中で店頭価格が一番安かった TA7291Pを選びました。TA7291は実際には4値制御が出来るフルブリッジドライバなので、 今回の回路に使うのは本当は能力過剰なのですが、まあ良しとしましょうか。
信号の送出方法については既に述べたので、続いて実際に作ったプログラムについて説明します。
トラ技の記事では有名なVisualBasicでプログラムしていたのですが、 私は残念ながらDelphiしか使えないのでDelphiでプログラムを行いました。 ちなみに私が有名なVBでなくあえてDelphiを使っているのは、Delphiではコンポーネントが使えるというのが大きいです。 コンポーネントというのは、色々な方が公開されているプログラムの部品のことで、 これを組み合わせて簡単にプログラムを作ることが出来ます。
ということはつまり、自分の実現したい機能のコンポーネントさえ見つかれば、 自力で複雑なコーディングをしなくてもプログラム開発が出来るわけです(^-^;
そこで今回も楽をするべく、シリアル通信用のコンポーネントを探してみました。 色々Delphi関連のページを探してみると、 「TRS232C」 というシリアル通信用コンポーネントを公開されている方がおられました。
……で、これがその完成版です。ちょっと前に流行ったエヴァンゲリオン風の仕上がりです(^^;
ねずみ自体が手元になくてもプログラムを動かすことだけなら出来るので、 どんな感じのプログラムなのか興味のある方はダウンロードしてみてください。
ダウンロードはこちらから。
クリックすると実寸大になります
- ◆プログラムのみ
- ▼NEZUMI232.EXE(NEZMI232.lzh; 195KB)
- シリアルねずみの制御プログラムです。COM2ポートを使用します。
- ▼COM1版(NEZ_COM1.lzh; 195KB)
- 上のプログラムの使用ポートをCOM1に変更したものです。
- ◆ソースのみ(nez_srce.lzh; 41KB)
- Delphi5用プログラムソースと画像ファイルだけのものです。
また、コンパイルの際はTRs232cコンポーネントをDelphiに組み込んでおかないとエラーになりますので ご注意下さい。
完成写真です。簡単な解説も付けてあります。
正面から見たねずみ
デジットで買った日亜化学製青色発光ダイオードの目もくらむような光が特徴です。 この発光ダイオードは何故か楕円形をしています。後ろから見たねずみ
側面から見たねずみ
カバーを取ったねずみ
プラスチックカバーを取った状態です。 ちなみに発光ダイオードの基板はセロハンテープで土台のプラスチックに取り付けられています。モーター部露出状態
モーターに取り付けられている、ノイズ低減用コンデンサ(青い粒のようなもの)が確認できます。 DC(直流)モーターを使用するときには端子間に小容量のコンデンサを取り付けるのが定石だそうです。モーター部拡大
コンデンサの様子です。斜め後方から
ケーブルの引き回し方はこんな風になっています。
このケーブルは3m長の被覆線が7本 (右モーター2本、左モーター2本、発光ダイオード用3本(右1、左1、GND1))束ねられています。 2本づつ組にして編んであるのですが、これを編むのがとても大変でした。発光ダイオード部拡大
こんな感じの発光ダイオードを使いました。基板俯瞰
右側が空き地になっているのは、配置をろくに考えずに作り始めてしまったからです(^_^;
また線を接続しているのは秋月電子通商で扱っているマイコン用ピンヘッダ・ピンソケットです。
ピンヘッダの方は好きなピン数に折って使えるのですが、ソケットの方は20ピンでかたまりになっているので 1列分を無駄にしてPカッターで溝を付けてからラジペンで希望のピン数に折りました。(割りました、かも……(^^;)基板拡大
手前左が3端子レギュレータ関係、手前右がシリアルポートとの接続関係、 そして奥がモータードライバ関係という配置になっています。基板裏面
試行錯誤のあと(迷走する配線、被覆線)が丸見えで少し恥ずかしい(^_^;
まあ、アマチュア回路なんでこんなもんでOKでしょう。
ようやく夢だったパソコンと回路との連携が出来ました。(^-^)
今回の製作で一番しんどかったことといえば、やっぱりコード編みでしょうか。 3mのコードを編むのはホントに大変でした。自分の部屋でコードを編んでいるところを 母に見られて笑われたりもしましたし……。
結局、慣れない作業のせいもあって編み上がるまでに一時間半ほどかかりました。
それから、今回初めてピンヘッダ/ソケットを使用したのですが、とても便利でした。 各種のコードを外しておけるので、はんだ付けの時に邪魔にならないのが良かったです。
それにしても、動くものというのはとても面白いものです。光ったり音が出たりというのもそれなりに面白いのですが、 やはり動くものの圧倒的な面白さの前にはかないませんね。ねずみがうまく動いたときには思わず小躍りしてしまいました。
家族からの評判もとても良かったです。ねずみの形で目が光る、というのも成功の一因かと思っています。 生き物の形をしていると、つい色々想像して感情移入してしまうところがあるようです。