ロボット設計ヒント集(2000.3/19作成)

PICメーリングリストから

PICメーリングリストは他のメーリングリストに比べて質問が非常に活発です。
本記事はその議論の中でロボット作りのヒントとなるようなトピックを
個人の研究目的のためにノートし、編集したものです。
メーリングリスト運営者の方や記事を書かれた方々に著作権の許諾を得ておりませんのでお取り扱いには注意が必要です。


昆虫に超小型発信機をつけるには?

・誘導波をつかう方法
昆虫に共振コイルを付けて検索する側から電波を出してその共振波を検出する。
(注)狭い通過チェックポイントに発信機・検出器を設置して通過するもののカウントするにはよい方法。

・SAWレゾネーターを使用する。
キーレスエントリーに使うために、キーホルダーに仕込んである発振器。
適切な電圧と変調を掛ければ、発振と個体識別用のIDコードを載せることが可能。
SAWフィルタを作っているメーカー(東洋通信機、富士通、NEC東芝、松下電子部品、他OEM)
周波数が250-400MHz位なら、特注可能。
キーレスエントリーに使用される発振子はそのまま使うことはできない。
アンテナは極細のポリウレタン線か何かを使用する。(外部アンテナの使用は必須)
FMは避けたほうが良い。連続キャリアなので、パワーロスが大きい。
ラジコン送信用で、バースト状の電波にパルス変調を掛けるようなICがある。
74AC04等のインバーター出力をアンテナに繋いでも、結構飛ぶ。
選別すれば100MHz近くまで応答する。
受信は、市販の広帯域受信機で可能。ワイドIFモードで受信する。

・FM送信機を使用する。
昆虫の筋電位を送信している事例がある。(蚕昆研と東大)
2chのFM送信回路を使用。表面実装部品(トランジスタ2石/ch)とフィルム基盤の構成。

・PIC12C508のSOIC版を使用する。
PIC12C508のSOIC版に銀電池を駆動で外付け部品なしで4MHzの発振器。(8ミリ四方のサイズ)
一定のパターンでスリープとウェイクアップを繰り返せば、釣具屋で買えるBR425という電池でも
長時間の使用が可能。
銀電池とは、電極2枚とスポイトで水を入れるだけの物。(食塩水)

・可視光外で発光する塗料を使う。
昆虫に紫外線に発光する塗料を塗り、夜間、紫外線ライトを照射して
CCDカメラで撮影、画像処理し、昆虫の位置を検出する。


昆虫に付ける超小型電池はどうする?

・小型カメラのストロボ用円筒状のインサイドアウト型の円筒タイプのものを使う。

・フィルム状のリチウム電池を使う。

・時計用酸化銀ボタン電池(SW516)を使う。0.4g


人間の関節の位置を知るには?

・モーションキャプチャーの事例
人間の各関節にIDを発信する送信機が付けられていて、
近くに3軸の感知コイルが3個置かれている。(3次元の測位が可能)


計測データ(8CH、100Hz)を無線で遠隔地(100m程度)に送信するには?

・アルインコの2484MHz小電力データ伝送無線ユニット+RS232C接続基板ユニットを使用する。
価格6万円前後

・アマチュア無線用のパケットモデムを使用する。(10年前で9600bps)
最低8ch×100Hz×2byte×8bit+αで16kbps必要。(要免許)

・業務用ユニットを使用する。価格10万円超。
460MHzだとどうしても4800bpsどまり。
2.4GHzの特定小電力モデムで10万円

・組み込み専用ユニットを使用する。
株式会社サーキットデザイン
http://www.circuitdesign.co.jp
特定小電力無線モジュール STD-402
周波数範囲 429.25〜429.7375MHz
チャンネル数 40チャンネル
変調速度 4800bps(FSK)
送信出力 10mW
受信感度 -117dBm/SINAD
到達距離 400m(見通し)
動作電源電圧 ダイレクトモード:2.8〜12V カスケードモード:2.8〜5V
消費電流 36mA(送信時) 26mA(受信時)
外形寸法 53×35×12mm 重量 34g 価格 29,000円


PICを使って音声合成するには?

・ つなげなくはないが、音は小さい。

                           Vcc
                            T
                            |
                            +-----+
                            |     |
                            L    ---
                            L    === 圧電スピーカ
                            L    --- (共鳴ケース入り)
                            |     |
                            +-----+
                            |
                            |C
--> Snd OUT >-----RRR------K     Tr:2SC1815 他
                         B  |E
                            |
                            |
                            V
                           GND

 R:抵抗(1k〜100kΩ)
 L:インダクタ(30m〜300mH?)


 インダクタは、値が大きいほど音が大きくなる。インダクタの代わり
に抵抗でもかまわないのですが、音は小さくなる。

音はポートのON/OFFを繰り返して発生させます。
ON/OFFの周期を変化させることで音程を作ることが出来ます。

・PBシリーズという発振回路内蔵の物を使用する。
http://www.tdk.co.jp/tjfx01/fx01500.htm#005
最大で20mA、電源電圧が5Vだと5-10mA。PICでも問題なく動作する。
ビープ音をプログラムで可変したい場合はPSシリーズにする必要がある。

・そのままD/A出力する。 音声データをA/Dしたデータであるならば、PWM変換する手間が余分に掛かってし まう。 精度は (1÷サンプリング周波数)÷出力サイクル時間 (出力サイクル時間= メモリ読込みからポート出力して次の読込みを開始するまでの時間) メモリは 録再時間(秒)×サンプリング周波数×精度のBit数となる。


PIC16C77のporta RA4のオープンドレインの注意点とは?
 ・RA4は、オープンドレインタイプの出力です。他のピンと違って、L/Hレベルの信
号が直接出力されるわけではない。プルアップするとよい。

RA4ピンだけは内部構造が
        
               +--->RA4の出力
               |
               C
        ---B(Tr)
               E
               |
               GND
のようになっている。たとえば

                  VCC
                   |
                   R
               +---+--->出力
               |
               C
        ---B(Tr)
               E
               |
               GND

ようにすれば、L/Hの信号を出力することができる。

PICをスリープ(低消費電力モード)から復帰させて間欠的に使用するには?

・T1OSO(RC0),T1OSI(RC1)に32.768KHzの水晶をつないで発振回路を構成し、
Timer1の割り込みで間欠的にウェークアップさせる。


・インターバルの間隔の精度が必要ないならRCの充電回路をポートにつないでやる。
WDTも止める。



PICでリアルタイム画像処理を行うには?
・NTSCデコーダを使用する。
                                      ┌───┐
NTSC─→デコーダ─→アンプ─→A/D─→│      │
          │                          │PIC│
          │C.SYNC                    │      │
          └───→アンプ──────→│      │
                                      └───┘

デコーダはV7021(SONY)等がある。
PICではリアルタイム画像処理には向かない。他のChipを使用する。
13.5MHzの転送レートで連続して取り込む必要がある。
画面全体の明暗などを認識させるのならH8でも可能。
映像の色を変えたり、輪郭を抽出したり、
それ以上に複雑なことをさせたい場合は、
専用のハードウェアを組む必要がある。
リアルタイムで処理しなくてもよいなら、
フレームメモリという一画面分のメモリーを作っておく
という手もあるが、それを使うにも専用のハードウェアを組む必要がある。
現在のところ画像を取り込むことができそうなCPUで、
簡単に扱えそうなものは限定されている。
・Pentium系
・DSP系
・SH3、SH4系
画面全体をスキャンして処理するためには、
白黒でも858*525*30=13.5MHzの
(1ライン=858ドット、1フレーム=525ライン、1画面=30フレームとして)
データーの取り込み速度が必要になるので、
処理速度がそれよりもずっと速い石を選ぶことが必要。

・P同期信号をカウント、光った時のカウンタ値を記憶する方法
CCDと可視光カットフィルタを付けたカメラを天井に取り付け、
赤外LEDをつけたロボットを見る。
LEDだけ光って見えるから、NTSCから同期信号と、コンパレータで
2値にした映像信号をPICに入れる。
PICは同期信号をカウント、光った時のカウンタ値を記憶。
結果、ロボットの現在位置ををシリアルで送信。
水平同期って52.7μ秒しかなないので注意すること。FPGAを使った方がよい。

H8Sを使う
 H8Sの内蔵RAMは32ビットバスで接続されており、読み書き
が1クロックで可能なはずです。4kBを内蔵するCPUは存在します。

1.データの入力はDMAを使い内蔵RAM上に転送。
2.データを絶対内蔵RAM上でしかいじらない。
3.画像処理関数は、リロケータブル可能に作り、内蔵RAM上に配置。
4.画像処理関数のループは展開、ワークも内蔵RAMを使用する。
5.画像処理終了後はDMAで外部に転送。

 H8はPreFetchしてくれますし、命令動作クロックも少ないので、
20MHzで動作させれば相当早く動くことが可能です。
MOV.W @ER1++,R0 命令2Byte=Fetch:1 実行3state
MOV.W R0,@ER2 命令2Byte=Fetch:1 実行2state
ADDS.L #1,ER2 命令2Byte=Fetch:1 実行1state
 上記は2つのインデックスレジスタを用いたメモリの正方向のWord転送
の1ブロックですが、Fetchは全て実行stateの中に埋まるので、内蔵RAM
を使えばこの処理は実質6state程度、0.3μSで実行できる。
 また、内蔵RAMと内蔵I/Oに関しては16ビットのアドレッシングモードで
アクセス可能なので、命令コードを小さく処理時間を短くすることが可能。
 小さい領域5*5ぐらいで行列演算、同サイズの像域分離、ガンマ変換、
解像度変換あたりはできる。 H-SYNCを1/2間引く等をすればできそる。

・16C84/4 1個で、ピンポンゲームを作ったトラ技記事を参考にする。
入力ピンにボリュームとコンデンサをつないで時定数からAD変換してパドルの位置
決めをして、出力ピンに外付けトランジスタ(2SC1815)をつないでシリアルデータを
水平信号に使用。

・NTSC−>RGB−>A/Dを行うICを使用する。
沖電気資料
NTSC->RGB->A/DをおこなうIC
http://www.oki.co.jp/OKI/Home/JIS/New/OKI-News/1999/09/z9956.html
データシート
http://www.oki.co.jp/semi/japanese/topics/msm7664.htm
http://www.oki.co.jp/semi/datadocs/doc-jpn/PJDL7664-01.pdf
1MBitのメモリ
http://www.oki.co.jp/semi/datadocs/doc-jpn/msm51v4223c.pdf
MSM7663(64pin 0.8m ピッチのもの)
http://www.oki.co.jp/semi/datadocs/doc-jpn/FJDL7663-01.pdf
(0.5mmピッチのICもスキルがあれば30Wの半田ごててで可能との情報あり)
このMSM7664とメモリを用いれば「NTSC->A/D->RAM」も可能

・NTSCの毎秒30枚の画像を全部あつかう必要はない。

全部あつかうと絶対にH8の容量オーバーなので、
必要なところだけを抽出して使うのがよい。
たとえば、画像を1秒間に1コマだけしかキャプチャせず、
H8の残りの時間を画像処理にまわすのならば、
ロボットのためのリアルタイム制御ならできる。
H8に外部データーバスやアドレス空間を使うと、
内蔵ペリフェラルは徐々に使えなくなる。
ある程度の外部回路は必要。
画像用に使えるADコンバーターは、「ビデオ用AD」として
売られている。8ビット、サンプリングは高速。

・NTSCを使用せず、PICをつかう。
 QuickCam(Connectix → Logitech)というパソコンに接
続して使う小型のカメラは、 PIC が使用されている。
他にデバイスらしいデバイスはない。
 このカメラはモノクロで、解像度は低く、転送はシリアルでスピードも遅い。

・ColorQuickCamと繋がるロボットの画像処理システムがある。
中身はEPROM版711で20MHz。
これで、特定色の追尾から、障害物検出までやっている。
http://www.aai.ca/products/robots/small.html
QuickCam(PC版)の方は、パラレルポート接続なので
つなぐことが可能。

・外付けのカメラを改造する。、(水晶をクロックの遅いものに差し替えてしまう)
スキャン速度を遅くしてしまえば、問題解決。
アマチュア無線のSSTV(Slow Scan TV)みたいにFAX位の速度まで
落とせば、メモリもADもビデオ用の高価なものを使わなくても良い、
PICだけで処理可能か。
人間から見ると、動画にならなくても、判断に使うならOK。
更に、NTSC の信号のうち、インターレース処理している半分(525*1/2=252.5本分)
だけ使うことにすれば、残りの半分は捨てて、その時間を内部処理に使うことができる。

・人工網膜チップを使用する。
三菱電機の人工網膜チップを使用する。 今年のロボコン大学部門で、
使用している大学が有り、H8使用で全画面(128x128画素)を70ms周期で処理を行っている。
画像信号は基準クロックに同期してシリアルの電圧値で出てくる。
代理店経由で入手可能。

・CMOSカメラを使用する。
今はCCDなどを使って、NTSC→AD→マイコンという図式が一般的だが、
今後はCMOSカメラというものが大量に出回ってくる。
CMOSカメラはCCDに比べ消費電力や大きさの点で圧倒的に有利。
次世代の携帯電話などに使われる予定。
CMOSカメラはワンチップでデジタル画像を出力する。
ADの必要も多くの外付け部品も必要としない。
PICやH8ではその速度でそのまま取り込むのは無理。
工夫すればなんとかなる。

CMOSセンサと画像入力装置の将来展望(TOSHIBA)
http://www.toshiba.co.jp/tech/review/1998/10/b02/

シャープ製品のページ
http://www.sharp.co.jp/sc/gaiyou/news/981202.html
http://www.sharp.co.jp/ed/pdf/ic/lz0p3800.pdf
#サンプル価格が4500円
LR38630と一緒に使えばデジカメが作れる。


CCDで1/100秒の瞬間の光を捕らえることは可能か?

・垂直同期信号に同期させてストロボを照射する。
CCDは光を電子に変えて蓄積して転送する素子。
ビデオ信号のひとコマ(1フィールド)は1/60秒なので、その期間に
照射された光はすべてビデオ信号として捕らえることができる。
ただ、一瞬の光を捕らえる(ストロボ等)となると、フィールド
メモリーに蓄えて映像をフリーズしなければ、TVモニターがパッと
光って終わる。
やるとすれば、垂直同期信号に同期させてストロボを照射して、
そのフィールドをフィールドメモリーに蓄えて、メモリーの読み出しを
繰り返す。
工業用のCCDカメラには、「外部トリガー入力端子」というのが付いて
いて、例えばベルトコンベアーを流れる物体(ジュースの缶等)の
ラベルを検査する装置に使われている。


PICでサイコロの目のような乱数を発生させるには?

・カウンタをフリーにまわしておいて,サイコロの目を決定するトリガーがかかったらカウンタの値を読み出す。

・マイクロチップのサイトのapplication note、AN544の中に疑似乱数発生がある。
AN544の中に疑似乱数発生pseudo random number generationというのがある。これを参考にする

・AD入力が使えるなら、ノイズを入力して読ませると、乱数が出せる。
ホワイトノイズを使えば、本当の乱数が発生できる。

・AD入力が使えない場合、外部でノイズでパルス間隔を可変する回路を組んで、パルス幅をPIC内で計測する。




本ページについてのご意見等はメールでお願いします。
電子メール:robocom@interlink.or.jp コバヤロボコムのホームへ