パルスボールの検知について_ver2

どうもです.

先日のパルスボール検知についての記事の

投稿後,直接でないにしても,いろいろ間接的にコメントをもらったのでその件について試してみました.

以下には,コメントをわかりやすくまとめてそれに対する実験を載せます.

一つ目:普通にもっと読めるでしょ.

なるほど....実験が悪いのかな....

確かに読み込んだ後,そのまま遠くへ持っていくと読み続けます.しかし,そのあと読まない位置にづらしてからもとに戻すと,同じ位置でも読まなくなる現象が起きました.この場合,受光部近傍で手を振ることで,もう一度読み直すよくわからんことで改善するようです.試合中はできないですね...

外乱光とか実験条件も多分にあると思うので精密な実験はできませんでした.

二つ目:IRM2121はON直後長距離まで読めるよ.

これは,Gcraud の人がついったで言ってました.

そこで,任意に周期を弄れてかつ簡単なNE555でVCCにパルスを与えて距離を測ってみました.

とても読めたのですが,コメントをくださった方の言うとおり,素子の裏側でも読めたりと,壁をちゃんと作るかなんかしないと使い物にならない状況でした.しかしながら角度によってパルスの間隔は変わるので,距離によれば,問題はなさそうです.

以上二つ試してみました.

前半の実験では,ボールの位置がずれてしまうと検知が不可能になってしまいます.

一方後半の実験では,繰り返し電源をOFFにするため,回路は少しだけ面倒になりますが,長距離まで読むということは可能になりました.

今後は,後半の実験で組んだ回路をもとに壁の作成や,読める距離の調整等を行っていきたいと思います.

パルスボールを検知するためのセンサについて

どうもです.

昨今のジュニアサッカーオープンBでは,パルスボールの赤外線を読むセンサとしてIRM2121が多く出回っているようです.

しかしながら,実際試してみると検知距離が短い.

少しロボットから離れただけで読まなくて辛いーと考えている人も少なくはないんじゃないでしょうか.

ではなぜ,IRM2121を使う人が後をというか....なんというかなのか.

ぶっちゃけ知らないです.ていうかみんな嘘ついてそうですよね.

そこでIRM2121の代わりになるセンサをこれから探していきたいと思います.(近距離においてはIRM2121はとてもいい)

試しにというかバカの一つ覚えで.同じ見た目のものを試してみました.

実験は,リモコン受光モジュールにローパスフィルタでなまらせたものを,オシロスコープで確認の流れで行いました.

・IRM2121 : 近距離しか見えない.壁がなくても何とかなる.距離により割と値が変わる.

・RPM7138-R: 遠くまで見えるが電圧値の変動に乏しい.また壁必須で,周りをしっかりと囲わないと全く意味がないよう.

2個しか試していないので今後追加していきます.

ちなみに受光モジュールは距離に応じたパルスが出るので,デジタルで読んだほうが精度があったりします.(体感)

以下に,デジタルで読むコードを乗せておきます.(mbedですが)

処理的にはC言語使える人なら余裕だと思うので,

実験して報告よろしく!!!(そんな人ならこのコード普通に思いつくくね?てか煩雑じゃね)

書き直すの面倒なのでライブラリだけですが...IRM2121 mbedとかで調べれば出ます.

名前がIRM2121となっていますが,たいていのものは使えるはずです.

/*IRM2121.h*/

#ifndef MBED_IRM_H

#define MBED_IRM_H

#include "mbed.h"

#define NAKATA 833 //周期833us

#define NOT_F 0

/** IRM2121 class, based on an DigitalIn pin, and a timer

* use RoboCup Junior Soccer to find PULSE BALL.

* Example:

* @code

* // Set Digital and read sensor.

* #include "mbed.h"

* #include "IRM2121.h"

* IRM2121 IR(p21);

*

* int main() {

* unsigned int length;

* while(1) {

*

* length = IR.Read();

* }

* }

* @endcode

*/

class IRM2121 {

public:

/** Create a IRM2121 object connected to the specified pin

**/

IRM2121(PinName IRM_PIN);

unsigned int Read (void);

/** Read the result

*

* @param none

*/

private:

DigitalIn _pin;

Timer _timer;

unsigned int _Time;

};

#endif

/*IRM2121.cpp*/

#include "IRM2121.h"

#include "mbed.h"

IRM2121::IRM2121(PinName IRM_PIN)

: _pin(IRM_PIN), _timer()

{

}

unsigned int IRM2121::Read(void)

// 0 means not valid.

{

_timer.reset();

_timer.start();

while(_pin){

if(_timer.read_us() > NAKATA){

_timer.stop();

return NOT_F;

}

}

_timer.reset();

while(!_pin){

if(_timer.read_us() > NAKATA){

_timer.stop();

return NOT_F;

}

}

_Time = _timer.read_us();

while(_pin){

if((_timer.read_us() -_Time) > NAKATA){

_timer.stop();

return NOT_F;

}

}

_Time = _timer.read_us() - _Time;

_timer.stop();

return _Time;

}

メンバーが決まりました!!!

 今日は来年のロボカップに参加するメンバーが決まりました.

といっても今年とメンバーは変わらないんですけどね...(^^)今年残念な負け方をしてしまった悔しさから3人でまた参加することとなりました.なのでチーム名もCat-Potです!

大会まで1年あるので早めに作ってめちゃくちゃ練習して強いロボットにしたいです.

 ところで今回は基盤の何枚かに両面基盤を使うつもりです.

部室でも一応両面基盤も作れるのですが,サイズが大きくなるとカット基盤一枚使う計算に...

そうすると一枚1500円で,3枚作ると4500円.高いなぁ.

外注で有名?なelecrowだと同じ大きさを5枚作って10000円くらいです.どっちがいいんでしょうね(T_T)

サイズがサイズなのでeagleのfreeでは限界がありKiCadに移行を試みているのですが,直感的でない操作が多々あってなかなかなじめません.ライブラリの作り方もいまいちでフットプリントの設定とか...もう心折れました. だれかいろいろ教えてくださいo(TへT)o

今日,明日は全国大会ですね.みなさんがんばです!!!!

来年のロボカップについて

早くも来年の話をしているのは,今年は挑戦の結果負けてしまったからなのですが,今年得たものはすごく大きいです.これを生かせるよう来年もロボカップに出場しようと思います.

さて,来年ですが,まず目標は世界大会で...(最後の年だし)

これから作っていくのですがこれだけは必ず守ろうと考えています.

・かけるべきところにお金をかける.

すべてにお金をかけるのでなく,かけなくてよいところ,ロボカップのロボットの場合ラインセンサとか超音波とかですね.ラインセンサなんかはお金のかからない高性能な回路を作りたいと思います.

最後に,チャレンジした人生のほうが後からみてかっこいいというのが持論です.(受け売りですが)

 諦めたくなった時も諦めずチャレンジしていくことを誓いロボットを作っていきます.