Re: The history of "M&Y"

Team "M&Y" and "花鳥風月"
the soliloquy of the father
毎日更新!

Arduinoねた その32 測距センサー 続き

2011-09-24 | Arduinoねた

Arduinoに接続した、赤外線測距センサー(通称SHARPセンサー)の実験を続けます。

センサーの出力を、そのままアナログ値として読み出したものを表示しても、良く判らないので・・・

5cm、10cm、15cm、20cm、25cmの5点について値を計測して、その間を線形に補完することにしました。

5cm未満は0、25cm以上は100と表示することにしました。


実際にやってみると・・・

結構値がふらつくように感じます。

でも、まあ、そこそこ正しい値を示しているようですね。


それでは、懸念していた、透明な板ではどうでしょうか?

このために!? わざわざ100円ショップで透明な下敷きを買ってきました。

予想では、透明なプラスチックの板は感知できない・・・ハズなのですが・・・

予想反して、普通に検知します。

えっ~ そうなの?


これは、素材によるのかもしれません。

原理的には、赤外線の反射を見ていると思うので、赤外線を反射しない(し難いような)素材であれば検知できないのかも・・・


追補

この透明の下敷きですが・・・

センサーとの角度で、検知できたりできなかったりするみたいです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その31 測距センサー

2011-09-20 | Arduinoねた

会社の帰りに、秋月電子に寄って、測距モジュールなるものを買ってきました。

GP2Y0A21YK0F という長い型番です。

私は、この測距モジュール自体をPSD(position sensitive detector)というのかと思っていました。 そうではなくて、赤外線LEDとPSDの組み合わせがこのモジュールだそうです。

1個400円 ・・・ 安い!

同じ、距離を測る超音波センサーに比べると・・・1桁違います。


じゃあ、早速接続してみますかねぇ。

購入したモジュールには、ごていねいにも接続用のケーブルが添付されています。

3本の線が出ていて、Vcc、GND、Output というのは直感的に分かります。

3本の線の色が、白、黒、赤なのですが・・・

普通なら 赤:Vcc、黒:GND、白:Output と考えますが・・・

そうではなく

黒:Vcc、赤:GND、白:Output が正解です。

いやっ、これ、絶対人間工学に逆らってる!


まあ、線の色に気をつければ、全然問題ありません。

普通にアナログ入力で、値が簡単に読めます。

ただ、読み取った値を距離に換算するのが、結構大変です。

まず、出力の値が線形で無い!

いくつかの直線に分割して、近似値を求めるしかないのか・・・

荒い換算表を持つのか・・・


でも、とにかく・・・距離の測定はできそうです。

しかも、検知範囲が狭いのが、なんか役に立ちそうです。

ただし、赤外線を使用しているので、透明なものは感知できないとか・・・本当かなぁ。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その30 暗いLED

2011-06-11 | Arduinoねた

Serial通信でのデバックの方法を覚えてから、デバックが楽になりましたが・・・

通信関係など、微妙なタイミングが必要な場合には、誤動作の原因になっちゃいますね。

そこで、原始的に、LEDを光らせたりしてます。

(この場所で、光らせ・・・この場所で、消して・・・という感じ・・・)

LEDが点灯したり、消灯したりして、プログラムの動作が目でわかります。


しかし・・・何だかLEDが暗い・・・

確かに点滅しているのだけれど・・・よく見て、やっと点灯が判るくらいに・・・暗い!


いろいろ確認して、やっとその謎が解けました。

一番最初に

pinMode( 2 , OUTPUT );

を忘れてました。

これを書かずに、

digitalWrite( 2 , HIGH );

とやっていました。

これでも、D2ポートのLEDは光るのですが・・・暗い。 (しつこいって!)

pinMode( 2 , OUTPUT );

を追加したら、普通に光るようになりました。


いやっ、単純なミスほど・・・気が付くのに時間が掛かりますねぇ。(笑)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その29 I2Cの・・・

2011-03-26 | Arduinoねた

ここのところ・・・簡易Arduinoの研究をやっています。

CPUはATMEGA168なんですが・・・

センサーをArduino化したATMEGA168に接続したりしてます。


そんな状況で・・・

I2C( Inter-Integrated Circuit のこと、我家では  I-squared-C と発音します)接続の温度センサーを接続して実験してみると・・・

電源を入れて最初の計測がなんか不安定です。 17度と表示したり、25度と表示したり・・・

一旦電源を切り、再度起動すると・・・今度は安定します。 

それ以降は、ずっと安定して計測できるのですが・・・


長い時間電源を切ってから、電源を入れると最初の計測がやっぱり不安定です。


原因不明!


理系でも、数学屋の私には全くのお手上げです。


いかし、本やインターネットを調べながら、いろいろやっていると解決しました。

原因は、I2Cの2本の信号線のプルアップ抵抗が合っていなかったようです。

私の記憶には・・・ I2Cのプルアップ抵抗=10kΩ ・・・と、刷り込まれて居るのですが、これがダメでした。 プルアップ抵抗を1kΩにしたら・・・あっさり不安定が解決しました。

そんなときに、都合よく(長野方面から)救世主が我家に来てくれました。

電子回路に詳しい彼の説明で、原因と対応が判りました。

ありがとう RAIN

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その28 Arduinoを作る3

2011-03-25 | Arduinoねた

作成したArduino(って言えるのか?)

本当に動くのか・・・いろいろ試してみると・・・

A0ピンに接続したLEDが光りません。

プログラムは


#define LED 14

void setup()
{
  pinMode( LED,OUTPUT );
}

void loop()
{
  digitalWrite( LED,HIGH );
  delay( 500 );
  digitalWrite( LED,LOW );
  delay( 500 );
}


こんな、単純なものなので、間違いようが無い・・・と、思うのですが。

A0ピンの代わりにA1ピンにしてみると・・・ちゃんと光ります。

A0ピンって、なんか特殊なのでしたっけ?

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その27 Arduinoを作る2

2011-03-22 | Arduinoねた

昨日は、なんだか疲れて寝てしまったので・・・続きです。


秋月の「USB-シリアル変換モジュール」を使って、USBポートを作ります。

と言っても、超簡単です。

接続するのは・・・

TXD(1) に1KΩの抵抗 ⇒ AVRのrxd(2) へ

DTR(2) に0.1μFのコンデンサ ⇒ AVRのrst(1) へ

RXD(5) に1KΩの抵抗 ⇒ AVRのtxd(3) へ

後は、GND(7) と VCC(20) だけ。

配線するのはこの5つのピンだけです。


で、AVR側にはさっきの3本をジャンパー線で飛ばします。

Img_4666


パソコンとUSBケーブルで接続すると・・・

新しいハードウェアがどうのこうの・・・と表示されますが・・・少しするとそのまま認識しました。

IDEを起動して、ボードとして

Arduino Pro or Pro Mini (3.3V, 8MHz) w/ ATmega168

を選択して・・・

簡単なプログラム(お得意のLEDの点滅!)を作成して・・・いざ転送!


はいっ、あっさりと完成!

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その26 Arduinoを作る

2011-03-21 | Arduinoねた

Arduinoって、そんなに高価でないし、使いやすいので気に入っているのですが・・・

唯一・・・実験するときのボレッドボードとの親和性が低いなぁ。

と思っています。

これは、Arduino自体の大きさの問題でしょうか?

そこで、我家ではArduino nano を好んで使用していますが・・高い!

いやっ、精密機械みたいで小さくてカッコイイんですがねぇ。

あと、青いLEDが眩しくて・・・(笑)


で・・・


自作のArduinoに挑戦してみました。

参考にしたのは、Arduino/Arduino の自作  です。

大変参考になりました、ありがとうございます。


まずは、ブートローダーを書き込まなければなりません。

そのためには、素のAVRに書き込みをする環境が必要です。

幸いにも? 我家には AVRISP-MKII なるものが死蔵されていました。 (てへっ)

かって、AVRの研究をしたときに使っていたのですが・・・箱の奥底に眠っていましたので、眠りから覚めてもらいました。(笑)

さらに、このライタを使うためのソフトである  AVR Studio なるものをインストールしなければなりません。 勿論これもかつては使っていたのですが、パソコンを確認したところ、既に削除されたようでした。

とにかく、パソコンに AVR studio をインストールし、最低限AVRへの書き込みが出来る環境ができました。

久しぶりに、AVR studio を使用して「さて、やるぞ!」というところまで行ったのですが・・・

なぜか、AVRを認識できません。

なんだよ!

なんでだよ!

いろいろ確認したら・・・

AVRのチップがブレッドボードにちゃんと入っていないだけでした。(苦笑)


Img_4663


arduino-0022\hardware\arduino\bootloaders\atmega\ATmegaBOOT_168_pro_8MHz.hex

このファイルを指定して、焼き焼き開始!

すぐに終了!

よし成功!


たった、これだけのことで、疲れたので・・・

本日の作業は終了です。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その25 Infra Red Thermometer 続き

2011-01-15 | Arduinoねた

とりあえず、使えそうな感じがじてきた赤外線温度センサーですが・・・

そのままでは、やっぱり使えません。


センサーに何もしなければ、室温を表示してくれるようです。

センサーに手をかざしてみると・・・なんとなく表示温度(検知温度)が上がります。

でも、この検知温度は、センサーに手を近づけると上がり、センサーから手を離すと下がります。 本来、距離には関係なく、温度を検知しないとダメですよね。

Img_2501


これは、きっと、光学的にレンズなどを置いてやら無いとダメなんだ・・・と勝手に考えて、秋月電子で「超高感度焦電センサー用レンズ」(フレネルレンズと書いてあります)というのを購入しました。


奥まで、きっちり入らないのですが・・・指向性は格段に良くなりました。

Img_2499


また、検知する温度の変化が少なくなったものの、手をかざす距離を変えても、あまり変化がなくなりました。

Img_2505


もしかしたら・・・これは有効かもしれません。

というところで、実験は終了・・・

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その24 Infra Red Thermometer

2011-01-14 | Arduinoねた

半年ほど前の話です・・・

 

 

2010年のシンガポール世界大会にレスキューBで参加することになった「M&Y」ですが・・・

レスキューBは、壁に張り付いてる被災者(電気ヒーター)を検知しなければなりません。

そのために、温度センサーをいろいろと探しました。

最初は・・・LEGOの温度センサーを買えば解決・・・

もし、それがだめでも・・・秋月電子を探せばなんとかなるさ・・・

と、安易に考えていたのですが・・・

実際にやってみると、温度を測ることは簡単にできます、でも「離れた場所の温度」を検知することが、とても難しいことが判りました。

離れた場所の温度を測る機械って、サーモグラフィーとかしか思いつかなかったのですが、さすがにそれは無理ですよねぇ。

ネットで調べると・・・非接触型の赤外線温度センサーは、結構沢山あります。

例えば、電子体温計(耳に当てるヤツ)とか・・・

でも、ジュニアのロボットに接続できるようなセンサーモジュールが全然見つかりません。

 

 

電子工作の師匠に聞いたら「そういう時には電子温度計を分解して部品を取るんだよ」って・・・そんなの素人には無理です。(泣)

 

 

結局、ジャパンオープンのシニア交流会の時に、Mが「NIIT-BLUE」の皆さんから、センサーモジュールを紹介してもらい、一件落着したのでした。

 

 

と、前置きが長くなりました・・・・

 

 

今回のねたは非接触型の赤外線温度センサーを探しているときに手に入れたものです。

MLX90614

ストロベリーリナックスで、素子だけ 2,100円(税込み)で売られていたものです。

「お~、これは安い!」

しかも、仕様には、すごい機能が「これでもか・・・」と並べられています。

しかし、注意書きに・・・

こちらの商品は、お求めいただいても上記掲載以外のさらに詳しい技術資料・参考資料はございません。上記の資料により購入を検討ください。

と、ありました。

で、「上の資料」というのは、全部英語でさっぱり判りませんでした。

勢いで、買ってみたものの・・・全く使えずにお蔵入りしていました。

 

 

ところが、最近Arduinoを始めたので、改めてネットを検索してみると・・・

なんか、プログラム例(スケッチというのですか)がありました。

 

 

実験してみると・・・なんと、簡単に動作確認ができました。

Img_1428

 

 

このセンサーは、SMBusという接続方法で、I2Cに似ているものらしいです。

出来てしまうと(使えてしまうと)何とは無いのですけど・・・

面倒なのは、電源が3Vなのです。 (5Vのものも有るらしいです。)

なので、3端子レギュレータで降圧して使います。

素晴しいのは、この単なる素子だけで・・・デジタル出力ができます。

分解能は0.02℃だそうです。

ちょっと変わっているのは、絶対温度で計測されます。

つまり、摂氏0℃は273.15℃です。

普通に気温を測ると、297.0℃と表示されます。

(なので、単に273.2を引いて表示します。)

 

 

現在のところ、直接NXTなどで使えるものではありませんが、AVRとかArduinoをセンサー用のフロントプロセッサにすれば、安価で正確な温度センサーとして使えるのではないかと、喜んでいます。

 

 

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その23 0022

2011-01-10 | Arduinoねた

久しぶりの Arduinoねた です。

なぜ、久しぶりなのか?

私がさぼっていたからです。 (単にそれだけ・・・笑)


で、久しぶりにやってみようかと触ったら・・・「新しいバージョンがあります」との表示がでました。

新しいバーションは 0022 でした。

とりあえず、ダウンロードして動かしてみました。


なんだか・・・いろいろやり方を忘れしまっているようです。

思い出すのに一苦労・・・


アイコンが、UNOに変わっています。

Newarduinoicon

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

おみやげ

2010-11-20 | Arduinoねた

昨日から、長野方面からのお客様が泊まっています。

そのお客様が、「お土産です・・・」とくれたのが

Img_1902


このようなものでした。

一瞬見たときには・・・カードゲームのUNOかと、思っちゃいました。

これはこれは・・・大変なものを頂いてしまい、恐縮です。


中身は、勿論 Arduino UNO ですね。

Img_1906

通信速度が、改善されているとのことなので・・・後日、実験してみたいと思います。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その22 しつこく方位センサー 続き

2010-11-19 | Arduinoねた

続きです・・・


まずは、センサーを一回転させて、最大値と最小値を求めます。

Xmax = 453

Xmin = 395

Ymax = 455

Ymin = 392

だったので、

Xavr = ( Xmax + Xmin )  ÷ 2 = 424

Yavr = ( Ymax + Ymin )  ÷ 2 =  424

なので、計測した値から、Xavr、Yavrを差し引きます。

Img_1438


その差し引いた値を X、Y として、X ÷ Y を tan-1 で角度に変換します。

これで、方位がわかります・・・のハズですが・・・

しょせんおもちゃです。(笑)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その21 しつこく方位センサー

2010-11-18 | Arduinoねた

こいつは、方位センサーばっかり、幾つ持っているんだよ!

と、しつこく方位センサーねたです。


おもちゃから方位センサーを取り出す話を、前に書きましたが・・・

その「おまけ」です。


ネットで、おもちゃ(トレジャーガウスト)の中にHM55Bが入っていることを知り、早速ネットで探しました・・・そうしたら・・・Amazonで普通に300円で売っていました。

(何で、そんなに安いの?)

まあ、良く判らないけど、安いからという理由で4個買いました。

家に届いてから、さっそく1個を分解してみると・・・

違う! HM55Bじゃない!

ガックシ、orz

確かに、方位センサーらしき物体が入っていたのですが、それは端子も5個しかなく、明らかにHM55Bではありませんでした。

Img_1432


チップには、A204 7112 と書かれていました。


・・・残念ながら、これ以上は手も足も出ずに、そのまま放置されていました。

しかし、時の流れは、私に幸運をもたらしてくれるようです。

つい最近、ネットをさまよっていたら・・・わたしと同じ挫折を味わった人が(けっこう)いたようです。 棄てる神あれば、拾う神も居る・・・らしいですねぇ。

A204の正体が判りました。

愛知製鋼株式会社の電子コンパス AMI204 というものらしいです。


で、仕様を見る限り・・・HN55Bのアナログ版という感じです。

使い方はとっても簡単です。

XYin:H で CS:L⇒H  にすると、OUTにX方向の磁気センサーの値がアナログで出力されます。 同様に XYin:L で CS:L⇒H にすれば、Y方向の磁気センサーの値が出力されます。

この2つの出力を使って、方位を計算する・・・らしいです。


じゃあ、実験してみましょうかねぇ。

これも、3V仕様のようなので、3端子レギュレーアで5Vを降圧して3.3Vを供給します。

プログラムはこんな感じです。

  int x,y;
  digitalWrite( XYin,HIGH );
  delay( 1 );
  digitalWrite( CS,HIGH );
  delay( 1 );
  x = analogRead( OUT );
  digitalWrite( XYin,LOW );
  delay( 1 );
  y = analogRead( OUT );
  digitalWrite( CS,LOW );

とっても簡単ですねぇ。

でも、これでは、2組の磁気センサーの値を読み込めただけです。

ここから、方位を計算します・・・

でも、疲れたので今回は終わり。(てへっ)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その20 デバッグ

2010-11-12 | Arduinoねた

最近始めた、Arduinoですが・・・

なかなか使えるツールだなぁと思います。

そのツールを使いこなすのにはまだまだ知識も経験も足りないのですが・・・

最近、シリアルモニタを使えるようになりました。

プログラムの最初に

Serial.begin( 9600 );

と書いておいて、確認したい場所で

Serial.print( i );

とすると、シリアルモニタに 変数i の値が表示されます。

これ、Arduinoを使用する人の常識なのだと思いますが・・・

その常識を知らなかった・・・恥ずかしい!

逆に、その機能を知った時・・・これ、便利だぁ!

なんで、こんな便利な機能を誰も教えてくれなかったの!

これで、どこまで処理が進んでいるか確認することができます。

なんですけど・・・

NXTとArduinoをI2Cで通信させる実験のときに、とってもハマリました。

通信の1ステップずつ、動作を確認しようとして、いたるところに Serial.print( ) を入れたところ・・・プログラムが全く機能しなくなりました。 

微妙なタイミングを要求するプログラムには、使用しないほうがよさそうです。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Arduinoねた その19 変数

2010-10-14 | Arduinoねた

またまた「Arduinoねた」です。


いろいろなセンサーを接続して実験などしているのですが・・・

センサーの精度が良くなかったり、ふらふらとノイズの影響を受けることがあるので、一定時間ごとに計測した値の最新の4回の平均をとることにしました。

void loop( )

{

  int x,x1,x2,x3,x4;

  x4 = x3;
  x3 = x2;
  x2 = x1;

  x1 = analogRead( OUT ); // センサーの値を取得

  x = ( x1 + x2 + x3 + x4 ) / 4;
}
こんな感じ・・・

そうすると、変数x には、4回の平均値が入る・・・と思ったのですが・・・

凄く小さな値になります。

で、最近やっと覚えた Serial.print( ) で、変数 x2 の値を表示してみると、「0」です。

いつまでも「0」です。


loop( ) のループは、ループの最初に戻ると毎回初期化される・・・ということなんでしょうか?

とりあえず、変数を静的に定義すると

static int x,x1,x2,x3,x4;

やっと、4回の平均値が表示されるようになりました。


イメージ的には・・・

main( )

{

while( true )

   loop( );

}

ということなんですね。


これも、Arduinoの常識なの?

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする