ロボットのハードウェア

2010年11月28日 (日)

超音波センサー…・・・・・・ ・ ・ ・

超音波センサーを
「はじめてのPSoCマイコン」
という本のサンプルプログラムを用いて作ってみたのですが、どう頑張っても50cmくらいまでしか測定できません…
一瞬であれば80cmくらいも測定できますが、それ以上の長さは無反応なのです・・
ただ、50cmくらいまでの測定の精度はそんなに悪くはありません。

本にはきちんと160cmくらい測定できている(と書いてある)のですが・・・

う~ん
どうしてうまくいかないか分かりません・・・

思いついた原因①
送信用超音波センサーにつなげるためのピンと受信用超音波センサーにつなげるためのピンを1回つないでしまったことがあります。
あとで分かったのですが、その時にAGND(受信用超音波センサーにつなげるためのピン)とVDD,VSS(送信用超音波センサーにつなげるためのピン)がショートしたのではないかと・・
その1回のショートでマイコン内の線が切れて受信もしくは送信が鈍っているのではないかと・・
ただ、50cmくらいまではきちんと測定できていることから考えると、これが原因ではない気がします。

思いついた原因②
本の超音波センサーと自分が使っている超音波センサーが違うから。
この原因は考えられそうです。

 

思いついた解決方法①
PSoCマイコンを交換してみる
ただ今はPSoCマイコンを1つしか持っていないので購入しないとできません。

思いついた解決方法②
本で用いられている超音波センサーと同じものを使う。
ただ、僕は32.8kHzの超音波センサーを作るのを目的としているため、この解決方法だと40kHzしか使えなくなってしまいます。

思いついた解決方法③
遠い距離が認識できないようなので
送信してから一定の時間が経ったらPGAの増幅率を引き上げる

そこでPGAの増幅率だけを上げてみると、送信した超音波の反響を受信してしまうみたいで、ずっと14cmになってしまいました。
そこで不感帯(反響による誤動作を防ぐため、送信してから一定時間受信しないようにする期間)を長くして同じくPGAの増幅率を上げた状態でやってみると、120cmくらいまで測定出来るようになりました^^;ただ不感帯を長くしたために、測定可能な最短距離が18cmになってしまいました。
以上の結果から言うと解決方法③は有効な気がします。

うーん・・
一定の時間が経ったらPGAの増幅率を引き上げるのは難しそうです・・・

2010年11月23日 (火)

モータードライブ回路設計

FETを4個使ったモータードライブ回路を設計してみました。
FETをまだ買っていないので、回路は作っていません。

2011/8/25追記。
この回路図は間違っているので
http://kyoukyou-zero.cocolog-nifty.com/blog/2011/05/25a-6441.html
をご覧ください。

回路図↓(クリックすると拡大します)

Fet_2 

動かし方↓

Fet2
略語の意味
 H:High +5.0Vのこと(モーター駆動用とは別電源)
 L:Low GNDのこと
 PWM;パルス幅変調

モータードライブ回路を今まで自作したことがないので、この回路でうまく動くか不安です。モータードライブ回路を作ったことがある方、できればコメントください。IN1とIN3を同時に(IN2とIN4を同時に)、Highにしてはいけないという事以外で注意すべきこととかこの回路でまずい所とかもお願いします。

部品が届いたら組み上げてみようかなと思います。

2010年11月21日 (日)

IRセンサーのデータ解析

IRセンサーで取ったデータのグラフです(クリックすると拡大します)

Ir

センサーの値の取り方はいたってカンタン!
2000回デジタル入力してそのうち何回HIGHであったかというのがここで言うセンサーの値です。
赤外線リモコンモジュールは受信するとLOWになるので、ボールとの距離が近づけば値は小さくなります。

グラフを見てみると10cm違ってもあまりセンサーの値が変わらないことが分かります。

近似曲線を引いてみました。(7区間平均してみました)

Ir

これで、10cm以上誤差が出る確率は20%くらいに抑えることができました。

これらは処理によって誤差を少なくしようというものですが、それだと限界があり、また、ボールへの反応速度がガクンと落ちてしまうので、ハードウェアでも工夫しようと思います(というかハードの工夫の方が大切です)。

ちなみに前回の記事に書いたPSoCのCPU_Clockですが、SysClk/1にすると電源電圧が4.7Vを下回ったときに動作不可能になるようです。
ブレッドボードが錆び始めていて内部抵抗が高い→電圧が一瞬下がることがある→4.7V以下になったときに動作不可能になる
というのが原因で動作不可能になったと考えられます。

SysClk/2にしたら今のところ順調に動いています。

2010年11月20日 (土)

PSoCマイコンのCPU_Clock

IRセンサーの信号をPSoCマイコンで受け取っていたら、ブレッドボードの線を少し揺らすだけでPSoCマイコンが動作しなくなるという状況が起きました。

結局の原因を率直に言うと、CPU_ClockをSysClk/1にしていたからでした。
デフォルト設定はSysClk/8です。

CPU_ClockをSysClk/1にすると動作が不安定になることを確かめるため、次のような実験を行いました。
PSoCに電源が入ったらLEDを点灯させるだけのプログラムを入れました。デフォルト設定からCPU_ClockだけをSysClk/1に変更しました。電源を入れて、LEDが点灯します。そこで、ブレッドボードの線を少し揺らすといきなりLEDが暗くなりはじめて点灯したり消えたりするのです(大量にリセットがかかっていると考えられます)。
次に他は全く同じプログラムでCPU_Clockだけをデフォルト(SysClk/8)に戻します。電源を入れて、LEDが点灯します。それから、ブレッドボードの線を揺らしてもずっと点灯したままになるのです(正常な証拠)。

これらのことから、CPU_ClockをSysClk/1にするとかなり動作が不安定になる(というか動作不可能になる)ことが分かりました。ただ、なぜCPU_ClockをSysClk/1にすると動作不可能になるかは分かりません。なので、とりあえず、CPU_Clockはデフォルト設定のままにしておこうと思います。

 

今日、LPFやADCなしでIRセンサーの情報を読み取ることができました(今までのアナログブロックでの苦労はなんだったんでしょう・・?)。
IRM-3638を使い、PSoCマイコンでデジタル入力して演算しました。
ボールまで距離の誤差は+/-10cm以内くらいに収められました。(だいたいです)
このくらい正確に距離が分かれば制御もできそうです。
ボールがどこかに存在すればたとえボールがIRセンサー受光部の反対側にあってもIRセンサーは反応してしまいました。
でも、IRセンサー受光部の反対側にボールがあった場合、ボールまでの距離はかなり低く示される(光が弱いということ)ので大丈夫そうです(ちなみにIRセンサーは真正面の光によく反応し横からの光にはあまり反応しません。この性質はけっこう使えます)
まだ1つしかIRM-3638を買っていないので、これからやっていきたいと思います。

2010年11月 8日 (月)

380モーター??

今年のロボカップの世界大会前からタミヤの380ギヤードモーターに目をつけていたのですが、タミヤのギヤヘッド用 380モーターを購入したら、モーターに
STANDARD MOTOR
RP380-ST
という印刷があったので、マブチじゃないの?と思いながら型番を検索してみるとでてきました。
http://www.standardmotor.net/sc_webcat/ecat/product_view.php?lang1&cat=1&id=68&page=1
上のリンクです。
タミヤのホームページに載っているスペックと全然違います。早速タミヤに問い合わせてみるとどうやらきちんと把握できていないようです。でも確実にホームページと実際のスペックが違うということで、返品させてもらうことができました。
STANDARD MOTORというメーカーのスペックは上のリンクとマブチのホームページによると出力がマブチよりもかなり弱いと思われます(最大トルク時の電流は10倍近く異なります)。

さてさて、マブチの380は出力が強いのでいいんですが、マブチのホームページによるとどうやら進角仕様のようです。たぶん逆回転もできるとは思いますが正回転より遅いと思うのでオムニの場合スピードコントロールが大事になってきそうです。
それと380用の金属ピニオンギヤが見つかりません・・

他のギヤードモーターも探してみましたが”これだ!!”というものは見つからず・・
マクソンモーターは予算の関係で厳しいです。
モーターが一番の難関かもしれません。

というわけで来年モーターをどうするか、いまだに検討中です。。

2010年10月 5日 (火)

ダイセン新発売DSR-1005のデーターシート和訳

ダイセンから新しく発売されたDSR-1005の取扱説明書が途中から英語になっています。
I2C通信の部分だけ自分のためにも和訳しましたので、必要な方は参考にしてください。
なお、もしも誤訳があれば教えてください。

I2Cの使い方 Using I²C

I2Cバスに関する詳細な説明は以下を参照してください
For a detailed description of the I²C Bus, please refer to:

そしてiM-3502のデーターシートです
And also the iM-3502 datasheet:

全方向センサーモジュールへの書き込み方法(1バイト):
Write to Omni-Direction Sensor Module (1-Byte) :

1. IICにおいて開始条件を発行します
1. Host issues a START condition on the IIC.

2.クロックを発振しながらセンサーへスレーブアドレス(0x50)を送信します。
2. Transmit the slave address (0x50) to the sensor with generating CLK.
(解説)スレーブとは子機のこと。一方親機はマスタといいます。

3.センサーからACKを受け取ってから、センサーへ命令(レジスターのアドレス)を送信します。
3. After receiving ACK from the sensor, transmit the command(register address) to the
sensor.
(解説)ACKとはアクノリッジ(acknowledge)の略。受信側がきちんと受信できたかを送信側に知らせる信号です。つまり、ACKが帰ってこなかった場合エラーということになります。

4.センサーからACKを受け取ってから、センサーにデータ(8ビット)を送信します。
4. After receiving ACK from the sensor, transmit the data(8bits) to the sensor.

5.データを受信してから、停止条件を発行します。
5. After receiving the data, host issues a STOP condition.

全方向センサーモジュールからの読み取り方法(2バイト):
Read From Omni-Direction Sensor (2-Byte):

1バイトで読むことができないため、"DEV_ID"や"REVNUM"を読み込むときには1ワードで読み込みます。
There is no Single-Byte Read Sequence, so that "DEV_ID" and "REVNUM" should be
read at word length if it would be read.

このような場合には、1ワードの上位バイトが"ゼロ"になり、有効なデータは下位バイトになります。
In this case, upper byte of the word is "zero" and
the valid data is in lower byte.

1.IICにおいて、開始条件を発行します。
1. Host issues a START condition on the IIC.

2.クロックを発振しながらセンサーへスレーブアドレス(0x50)を送信します。
2. Transmit the slave address (0x50) to the sensor with generating CLK.

3.センサーからACKを受け取ってから、センサーへ命令(レジスターのアドレス)を送信します。
3. After receiving ACK from the sensor, transmit the command (register address) to the
sensor.

4.データを受け取ってから、停止条件もしくは反復開始条件を発行します。
4. After receiving ACK from the sensor, host issues a STOP or a REPEATED START
condition.

5.開始条件を発行してから、再びスレーブアドレス(0x51)を送信します。
5. Transmit the slave address(0x51) again after making a START condition.

6.センサーからACKを受け取ってから、センサーからデータ(16ビットで最上位のビットが先)を受信します。
6. After receiving ACK from the sensor, receive the data(16bits – MSB first) from the
sensor.

7.データを受信してから、停止条件を発行します。
7. After receiving the data, host issues a STOP condition.

にほんブログ村 科学ブログ ロボットへ
にほんブログ村

25kHzと32.8kHzの超音波センサーが見つかった~

25kHzと32.8kHzの超音波センサーが見つかりました~!!
送受信それぞれ1050円です。
これでバンドパスフィルターを作らなくてもよくなりそうな予感がします。
増幅回路をがんばってマイコンでなんとかしたらいけそうな気がしてきました。

テスト2週間前に突入しました。こっちもがんばらなくっちゃ。

にほんブログ村 科学ブログ ロボットへ
にほんブログ村

2010年10月 3日 (日)

超音波センサーの干渉しない方法を考え中

現在ロボカップジュニアサッカーで用いられている超音波センサーは40kHzしかぼくは見たことがありません。
みんな40kHzを使えば当然干渉します。

というわけで周波数を変えれないか考え中です。
超音波センサーは送受信回路ともに難しいです(というか全然分かりません)。
35kHzとか45kHzとかができればいいなと思っています(あくまで想像)。

送信の発振回路は、マイコン1つでできそうな気がするのですが、
受信が・・・
どうやらまず増幅してあーだこーだするようです。

そうですよね。増幅しないと!
数mVだそうで、1000倍以上増幅するそうです。

フィルターについても調べてみると、
ある周波数だけを通すフィルターのことを、”バンド・パス・フィルタ(BPF)”というそうで、
OPアンプを使う方法とインダクタ・抵抗等だけを使う方法があるようです。
えーー・・・ちょっと見てみましたが数式だらけでかなり難しそう・・・
アナログ回路設計は大変そうです・・

普通超音波センサーはフィルターは使わないのでしょうか?
村田製作所のデーターシートに載っている回路の例では増幅するだけに見えますが・・・(勘)
もともと圧電素子は40kHzだけ共振するようになってる気がします・・・(これも勘)
アナログ回路とか受信の仕組みとか知っている人がいればコメントしていただければ幸いです

ロボカップサッカーで相手チームの使ってる周波数を聞いて相談して
周波数を変えて使うのが当たり前!
なんて時代がくればいいなと思います(それか画像解析が当たり前になったらすごいですね)。

にほんブログ村 科学ブログ ロボットへ
にほんブログ村

2010年9月20日 (月)

eneloopの容量調べ

今までたくさんあるeneloopをバラバラに使ってきたものですから、何度も使ってきたeneloopとあまり使ってこなかったeneloopがあります。
もちろん、何度も使ってきたら容量も減ってきます。
だから、そのバラバラのeneloopを適当に6本選び直列で放電すれば、1個だけが先に容量がなくなったりします。
残り5本はまだ使えるのにもったいないですよね。

それだけだったらまだいいのですが、これからは6本直列で充電しようと考えているのでそんな電池(先になくなる電池)と一緒に充電すれば、その電池だけ満充電できなくなってしまいます。
すると、もっと使える時間が短くなってしまいます。

そこで・・・容量のできるだけ同じ6本を1セットにしてしまって、直列にしたまま充放電しようと考えたわけです。
つまり、タミヤで売っているような電池パックにしてしまおうと考えたわけです。

そんなわけでeneloopの容量調べをしてみました。

電池を0.3Ωの抵抗をつなぎ、1.000V以下になるまでの時間を測定します。
定電流回路を知らないのとめんどくさいのと抵抗1つの方が安いので、定電流回路でなく抵抗にしてしまいました。
H8でシリアル通信してパソコンにデーターを送りました。

適当に4本取って調べてみると・・・(クリックすると拡大します)

58

横軸は時間で、縦軸は電圧(mV)です。

こうやってみるとNo.8とNo.5では2倍も容量に差があることが分かります。
(なおNo.の数字は適当に背番号をつけただけです)
あとこのギザギザはA-Dコンバータの誤差と思ってください。

一本10~20分で放電が終わりました。

そして、eneloop用充電器で充電して数時間放置し再び測定してみると・・・(クリックすると拡大します)

58_2

ご覧のとおり4本の電池は同じ特性に・・・

ここから分かることは、以下のどちらかがあてはまるだろう・・
予想その①:1番目のグラフの測定の前、それぞれの電池の充電してからの期間が違う。
        つまり、同じときに充電すれば同じ容量になる。ということ
予想その②:同じときに充電しても自己放電の仕方が違う。
        つまり、ほっといたら容量が少なくなる電池とならない電池がある。

これを見分けるために再び充電して今度は数日もしくは数週間放置してから、同じように放電しようと思います。
でも、これは無作為に取った4本なので他の電池でもやってみたいと思います。

2010年9月14日 (火)

パルス波

まだぜんぜん試していませんが、
赤外線のパルス波感知は感度が良すぎても距離が分からなくてダメだし、
感度が悪すぎても反応しないしダメな気がします。

逆に感度が良いやつと悪いやつを組み合わせてやるのもひとつの手かなとも思います。
でも一つのセンサーでやりたいです。

コメントをいただいた方々ありがとうございます。
かなり参考になりました。

まだやっていませんが、とりあえずやってみたいと思います。


ぼく(部長)が文化祭の日に体調不良で欠席・・・
しんどかったです。悲しいです。体調管理は大事です・・・


気を取り直してぼちぼちいろいろやっていきたいと思います。
近々オープンスクールで展示をするのかな?
詳しくはわかりませんが展示ができるようです。

より以前の記事一覧