Re: The history of "M&Y"

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

AVRねた その15 フォトリフレクタ

2008-11-03 | AVRねた

先日の高専祭の時に、電子工作の師匠から「そうだ、これあげます。」といって、袋詰めの部品をいただきました。 中身は、光センサーのようです。

家に帰って、部品を調べて見ると・・・RPR-220というフォトリフレクタでした。

早速、AVRマイコンに接続して色の判定を行ってみます。(当たり前なのかもしれませんが、赤外線発行ダイオードとフォトトランジスタの組み合わせです。 λp=940nm)

もう、お得意のブレッドボードで回路を作って、光センサーの値をLCDに表示します。

これで、レスキューに必要な、銀、白、緑、黒の値を計ってみます。

結果は、以下の通りです。(値は10ビットですので、0~1023になります。)

銀:979

白:232

緑:287

黒: 24

この結果を見ると、値の大きい順に並べると「銀>緑>白>黒」となります。

レスキューのルールに

1.8.4. アルミで作られた銀色の被災者、白(または白に近い色)の床、緑色のテープで作られた被災者、黒いラインの(垂直入射での緑の光に対する)反射率は次の順序でしっかり区別される。銀色の被災者 (最も明るい) > フロア > 緑色の被災者 > 黒色のライン (最も暗い)。

というのがあり、ルール上は 「銀>白>緑>黒」になるように想定されていますが、これと違った結果になってしまいました。(普通の可視光フォトトランジスタを使った光センサーでも「銀>白>緑>黒」になります。)

赤外線を使うとこうなるのが当たり前なのでしょうか?(赤外線の常識なの?)

TJ3のラインセンサーもフォトリレクタを使用しており、赤外線と同様の順番になります。

まぁ、どちらにしても黒と緑と白が判別できれば、困らないのですけどね。

ずっと前に、自作機の研究を開始した当時のこと、「ロボデザイナーの光センサーはサッカー用なのでレスキューに向かない」旨のアドバイスをいただきました。 ロボデザイナーの光センサーが赤外線検知素子だったからのようです。 そのとき「レスキューの色の判定は赤外線検知素子ではダメで、可視光線検知素子を使う必要がある。」と思い込んでいましたが・・・どうも、赤外線でも可視光線でも使えることは使えるようですね。 どちらが最適なのでしょうか? きっと、外光などの影響でどちらが良い、という判断があるのでしょうね。

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

AVRねた その14 eeprom

2008-10-30 | AVRねた

とりあえずLCDの接続ができたので、センサーの値を測ることができるようになりました。

ただ、LCDを接続してしまうと、ポート数が減ってしまうので・・・どうしようかな。

とりあえず、次の実験としてデータをeepromに書き込んでみました。

といっても、結構簡単でした。

#include <avr/eeprom.h>

このヘッダを付けると、eepromへの読み書きの関数が使えるようになりました。

ただ、eepromの読み書きの前には、アクセス可能になるまで待つ必要があるようです。

これで、データを保存して、あとでパソコンに読み出すことができました。

ところが、プログラムを書く込むと、さっきeepromに書いたデータが消えています。

なんで?

と不思議に思っていたら・・・書き込む設定のところに

Erace device before flash programing

という設定になっていました。 (うん納得)

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

AVRねた その13 光センサー

2008-10-27 | AVRねた

とうとうAVRの研究も、入力系に移ってきました。

今回は、ジュニアレスキューロボットの要となる、光センサーです。

ATMEGA88のPC0(ADC0)にフォトトランジスタを接続して、アナログポートとして読み出しを開始!

・・・あれ、値が1023から変化しない。 まったく変化しない。 なんで?

このAVRマイコン壊れてるのかな? (すぐに、他人のせいにする奴)

いろいろやっても変化無いので、その日は終了しました。(がっくし)

翌日、すっきりしない頭で再度挑戦です。

でも、結局わからないので、困ったときのインターネット・・・いろいろ回路図などを確認したところ、AVCCポートの配線忘れという単純なミスであることが分かりました。

なんで、こんなところではまっていたのでしょうか?

だって、いままで実験していたATtiny26には、そんなポート無かったんだもん。

いや単に、知識不足なだけでした。

これで、光センサーの値が読めるようになりました。

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

AVRねた その12 LCD

2008-10-25 | AVRねた

実験でLCD接続はできたのはできたのですが・・・いろいろ不具合がありました。

・使用したのが、Attiny26だったので、容量不足で printf( ) が使用できなかった。

・LCDをPIC-BASICのキットから使いまわしたので、バックライトも無いし、なんか使いにくい。

という状況でした。

そこで、またまた秋月電子に行って、物色したところ、オレンジ色のバックライトが付いたLCDを購入しました。 これは、端子が一列に並んでいるので、ブレッドボードにも直接刺せそうです。 (PIC-BASICのキットに付いていたLCDは端子が7×2ピン構成になっていました。)

このLCDを使って、さらにATMEGA88を使い、ブレッドボ-ドに配線しました。 もう、ブレッドボードの配線にも慣れてきました。 プログラムを作成し、AVRマイコンに転送すると、LCDに文字が表示されました。 (最初は、LCD全体に四角が並ぶだけで、文字が表示されないのであせりましたが、LCDのVCL端子に接続したVRを調整することで、文字が浮き出てきました。)

printf( ) も使用できました。

さあ、やっとこれで、入力系の研究に移れそうです。

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

AVRねた その11 フィットしない?

2008-10-23 | AVRねた

今度の「M&Y研究所」の研究課題はAVRマイコンでLCDに表示をする方法の研究です。

かつて、買ってきたままお蔵入りしているPIC-BASICに付いてきたLCD(16文字×2行)を引っぺがして、なんとかブレッドボ-ド上のATtiny26に接続しました。

「AVRマイコン活用ブック」に掲載されている例を参考にプログラムも作りました。

さあ、いざ書き込み・・・という時にエラーメッセージが出ました。

「The contents of the HEX file does not fit in the selected device」

??? これは何??? 選択したデバイスにフィットしない?

作成したファイルがATtiny26用じゃないってこと?

よくよく調べたら、ATtiny26のプログラムエリアの大きさを超えてしまった。(いわゆる容量オーバー)ということみたいです。 こんな短いプログラムが入らないなんて情けないぞ、ATtiny26!

その前に、エラーメッセージの意味が分からなかった自分が情けない。

巨大な容量を食うのは、汎用の出力関数である printf( ) のようです。

問題の printf( ) を使わなければ容量的にはOKのようです。

とりあえず、指定した文字列をLCDに出力することはできました。

これくらいならATTiny26で十分だろうと思っていましたが、やっぱり、ATMEGA88で組みなおしが必要ですね。

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

AVRねた その10 次は入力だ

2008-10-21 | AVRねた

やっと、AVRマイコンでモーター制御がなんとかできる目処が付きました。

いろいろな方から、マイコンとモーターの電源は分けたほうが良いとの意見をいただきました。 ご指摘ありがとうございます。

ここまで、なんと長い道のりであったことでしょう。


出力側の目処が立ったので、今度は入力側の研究です。

レスキューの基本は

黒ラインをたどる ⇒ 光センサー

障害物の回避 ⇒ タッチセンサー(まあ、単純にスイッチ)

傾斜路の検知 ⇒ 水銀スイッチや加速度センサー

といったところだと思います。


まあ、どれもこれまでに実験したものばかりなので、簡単だ・・・などと思っていたのですが・・・あれっ、光センサーの値ってどうやって計るの?(どうやって知るの?)

「AVRマイコン活用ブック」に掲載されているロボットなどでは、シリアルケーブルでパソコンと接続して、光センサーの値をパソコン上に表示して値を計測するみたいです。(TJ3とかと同じですね。)

やっぱり、そういう仕組みが必要なのか。

今考えている案は

案1 王道?の通り。 パソコンとシリアルケーブルで接続してパソコンの画面で確認する。

   ⇒TJ3もこの方法ですね。 できればやりたくないなぁ。 単にパソコン側にプログラムを用意するのが面倒なだけですが・・・

案2 AVRマイコンにLEDをたくさん付けて、光センサーで読み取った値を2進数で表示する。 

   ⇒これならできるかもしれないなぁ。 でもポートがもったいない。

案3 AVRマイコンにブザーを付けて、モールス信号とかで表現する。

   ⇒これもできるかも! でも、不便。

案4 AVRマイコンにLCDを付けて光センサーの値を表示する。

   ⇒やっぱりこれが一番現実的か? LEGO方式ですね。

あと、もうひとつ。

案5 光センサーの値をEEPROMに格納する。

   ⇒これも、実現可能かも? EEPROMに格納しておいて、あとでパソコンに接続したときにISP経由で読み込めば値が分かるのではないでしょうか。

まだまだ先は長そうだ・・・ふぅ~っ。

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

AVRねた その9 ISP接続の謎

2008-10-19 | AVRねた

AVRマイコンでのモーター制御ができるようになり、喜んでいたのですが・・・

今、私はAVRマイコンをブレッドボード上で配線して実験しています。

パソコンに、AVRプログラマ(AVR mkII)を接続し、そこから出ているISP(6ピン)をブレッドボード上のATMEGA88に接続しています。

これで、パソコン上で作成したプログラムをAVRマイコンに転送して動作実験をしています。


ISPを接続したまま、

プログラム作成⇒転送⇒動作確認

を繰り返しています。


たまたま、(ISPを接続したまま)パソコンの電源を切りました。 この状態で、AVRマイコンが動くかどうか確認したら、うんともすんとも言いません。 

「あれ、電源はパソコン側から供給してないハズなんだけどなぁ」

ISPを外してみると、ちゃんと動きました。

「単体で動かすときにはISPは外さないとダメなのか・・・」


♪たらりらった~らった~♪ 

M&Y父」はレベルが上がった。 

「AVRマイコンを単体で動作させるときには、ISPを外すと正しく動作する」を覚えた。


じゃあ、ISPを外してもう一回動作確認だ! と繰り返していくと、いままでモーター制御でリセットしまくっていたのが嘘のようになくなりました。

あの誤動作は幻だったのか?

巨大な電解コンデンサを抜いても、全然問題ありません。

これまでの、私の努力は何だったの?


そうすると、今後は

プログラム作成⇒ISP接続⇒転送⇒ISPを抜く⇒動作確認

という面倒な手順になるのかなぁ。


ちょっと脱力感です。

これも、マイコン開発の常識なのですかねぇ。

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

AVRねた その8 巨大コンデンサ

2008-10-18 | AVRねた

AVRマイコンでモーターをコントロールすると、マイコンにリセットがかかり無限ループにはまります。

どうも、モーターに負荷が掛かると、電源電圧が下がりマイコンがリセットしてしまうようです。

Img_0569 マイコンとモーターの電源を分ければ解決することは分かったのですが・・・なんか電池がもったいないので(「もったいないお化け」が出そうなので)1つの電源でなんとかならないか実験を繰り返しています。

いろいろなところに、0.1μFのコンデンサを入れてみたりしても、やっぱりダメです。

もう、意地になって「えいっ」とばかりに、巨大な電解コンデンサを接続してみました。

3300μFを2つ

さすがに、誤動作しなくなりました。

なぜ、我が家にこんな巨大コンデンサが(それも2つも)あったのか、自分自身でも思い出せないのですが・・・まあ、役に立ったからいいや。 このコンデンサは単三電池より太いです。 こんなのを2個も搭載したら、なんかじゃまだなぁ。

これで、めでたしめでたし・・・と、ならないのが「M&Y研究所」です。

・・・つづく

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

AVRねた その7 続モータ制御

2008-10-18 | AVRねた

モーター制御で、誤動作に悩まされている「M&Y研究所」ですが・・・

まずは、一番安易な対策をしてみました。

かって、ロボデザイナーで同じ症状になったときの対策で、マイコンとモ-ターの電源を分けて見ました。 マイコンには乾電池2本、モーターには乾電池3本を接続しました。

こうすると、ちゃんと期待通りの動作をします。 フルで正回転中に逆回転指示をしても、ちゃんと指示通りに動作します。 あれ、これだとTA7291Pにも3Vしか行かないけど・・・なんか動くぞ! 

TA7291Pの電源を4.5Vにしても動作自体は変わりませんでした。

とりあえず、この対策案1は有効なようです。 しかし、これでは電池をたくさん搭載する必要があります。 (なんか勿体無いなぁ。) 電池の電源を共有することはできないか考えてみます。

次にやってみたのは、電源の安定化です。 安定化といっても、3端子レギュレータをかませるだけです。 電池を4本にして6Vにします。 低ドロップ型の3端子レギュレータで5Vにしてみましたが・・・やっぱり、誤動作します。 この対策案2ではだめなようです。 

がっくし。

最後に、3端子レギュレータを2個搭載し、5Vの電源をAVRマイコンに、3.3Vの電源をモーターに分けてみましたが・・・やっぱりダメです。

TJ3は、3本の電池でちゃんと動作しているのですが・・・やっぱりプロが作るものは違いますねぇ。

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

AVRねた その6 モーター制御

2008-10-17 | AVRねた

AVRマイコンの研究も進んできました。

今回はモーターの制御です。

ATMEGA88が刺さっているブレッドボードに、モータードライバICの「TA7291P」を追加します。

これまで、乾電池2本で実験していましたが、乾電池3本にしました。(TA7291Pが5V仕様なので。)

肝心のモーターは、ずっとお蔵入りしていたロボデザイナーのモーターを接続してみました。

(1)1秒間LEDを点灯

(2)モーターを1秒間正回転

(3)1秒間LEDを点灯

(4)モーターを1秒間逆回転

(5)1秒間LEDを点灯

(6)モーターを停止

という単純なプログラムを作って、いざ動作開始!とやってみました。

本来であれば、5秒で終わるプログラムのハズなのですが・・・何回も回転したり逆転したり止まったり・・・LEDも何回も光ります。

おかしいなぁ、ループなんて入れていないのですが・・・

(また、コンパイラのバグか?  ・・・ うまくいかないと、すぐに他人のバグにしたがる奴! いるいる!)

訳が分からないのでモーターを外してみたら、ちゃんと動作しました。 LEDが三回光って終りになりました。 これって、モーターのノイズで誤動作していたってこと? それともモーターの回転で電源電圧が下がってRESETしちゃったってことでしょうか?

どちらにしても、このままじゃちゃんと動作しそうにありません。

なんか対策が必要なようですね。 ふぅ~。

PWMでモーターの回転を絞ってみたら、なんかうまく動作しました。 

う~ん不安定?

コンデンサでもかませれば良いのかな?

それとも、電源の安定化が必要なのかな?

そういえば、確かロボデザイナーで実験した時には、コントローラの電源とモータの電源は分離しなければ、ちゃんと動作しなかったなぁ。

世界中のみんな、オラに技術を分けてくれ!

実験で分かったことは、モ-ターの回転開始、モーターの逆転時に誤動作しやすいようです。 (あと止めた時も!)

これも、メカトロの常識ですか?

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

AVRねた その5 PWM

2008-10-16 | AVRねた

先日、開発環境を古くしたおかげで、良く分からない(コンパイラの)バグに悩まされること無く、快適にプログラムの研究が進んでいます。

今度は、モーターの制御に掛かっています。

モーターは(面倒くさいので)モータードライバなる便利なICを使います。

これを使えば、失敗のしようが無いのでは・・・と思えます。(本当かよ!)

で、いろいろ見ていたら、PWMが簡単にできそうだったので、これの実験を先にやります。

LEGOのRCXモーターも、パワーを1~5で指定できました。 これに当たるものなのでしょうね。

AVRでは、単に

・PWMを使うぞ

・カウンタが0x00~0xFFに変化するまでの間で、ここになったらON-OFFを切り替える

という指定だけで、できちゃうらしいです。

早速実験してみると・・・本当に簡単にできちゃいました。

まだモーターを接続していないので、LEDで確認ですが・・・接続したLEDが蛍の光のようにポワ~ンと明るくなったり、暗くなったりします。 恐るべしAVR!

よし、次はモーターを接続して、本当に回してみよう。

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

AVRねた その4 割り込み

2008-10-15 | AVRねた

しつこくAVRマイコンを研究しています。

なかなかうまく行かないので・・・もうこの歳で新しい技術の習得は無理か?とあきらめかけましたが・・・やっと割り込みのプログラムが動きました。


問題点

・10ms毎に割り込みを発生させ、グローバル変数 cnt をインクリメントする。

・メインプログラムで cnt を0にクリアしてから、100になるまで待つ。

という簡単な処理です。 100になれば1秒になるハズです。

でも、何度やってもうまくいきませんでした。


ところが、これもBuildした過程で生成させるlssファイルの中のアセンブラを見たら(もちろんアセンブラなんか分かりませんが)、変数のアクセスなのにメモリを参照していないことに気がつきました。 プログラムがあまりに簡単なので、変数がすべてレジスタに乗ってしまったようです。そうすると、割り込みで変化する変数を読めない場合が出てきそうです。

ということで、それに気がついて、さらにネットでいろいろ調べて見ると・・・ volatile という記述が必要なことがわかりました。

先ほどの cnt という変数の宣言に volatile を付けてBuildしてみると・・・ちゃんと動作しました。


解決策

割り込みで使用するグルーバル変数の宣言に volatile を付加する。

volatile long cnt;


ふっ~! この単純なプログラムを動作させるのに2日が無駄になりました。

きっと、こんなことはマイコン使いの方達にとっては常識なのでしょうね。

やっぱり、誰か私にAVRの基本的な使い方を教えてくださ~い。

現在、AVRマイコンはATMEGA88というのを使用しています。

秋月電子で買った、ブレッドボードで実験しています。

ここまでに、すでに2個のAVRマイコンが「お亡くなり」になっています。 合唱ではなく合掌!

私が、ずっと参考にしている「AVRマイコン活用ブック」のプログラムには volatile という記述がありませんでした。 これは、コンパイラのバージョンによっては、最適化の度合いがちがうのでしょうかねぇ。

どちらにしても、コンパイラの頭が良すぎてはまっていたようです。

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

AVRねた その3 バグ?

2008-10-14 | AVRねた

現在研究中のAVRマイコンですが・・・

前回の記事で、「プログラムの途中でプログラムが切れる」は、なんかコンパイラのバグらしい、と勝手に思っています。

で、ネットをさまよってヒントをさがしてみると、古いバージョンのほうが安定しているというのがありました。(本当かどうか知りませんが?)

で、古いバージョンのコンパイラをダウンロードしてインストールしてみました。

Buildでできる ~.lss というファイルを開いて確認してみると、途中で切れずにプログラムが翻訳されています。 

やった~! やっと一歩前進だ!

ということで、現在 AvrStudio4.14(Build589)+WinAVR(20060421)を使用(試用?)しています。

でも、やっぱり、割り込みがうまくいきません。

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

AVRねた その2 研究ですが

2008-10-13 | AVRねた

ここのところ、熱中しているAVRマイコンですが・・・

行き詰っています。

前にも書いた、タイマーと割り込みです。

Img_0562 (努力の結果?)タイマーは「タイマー」、割り込みは「割り込み」で、単体ではできるようになってきたのですが・・・組み合わせるとどうもうまく動作しません。


で、いろいろやってみたところ・・・

なんと、動作しない部分はプログラムが途中で消えていることが分かりました。

消えているというよりも、ある部分より先がコンパイルされていない。

これじゃあ動かないのも納得! 

じゃあどうするのか?


どうしよう? 困った。 

やっぱAVRダメか?

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

AVRねた その1 研究中

2008-10-13 | AVRねた

いま、結構まじめにAVRマイコンについて勉強しています。

まあ、私が勉強してもしょうがないのですが・・・個人の趣味ってことで。

話の発端は、「NXTに自作センサーを付けることができるか?」というところからきています。

休日は、のんびりと?ネットをうろついているのですが・・・そんな中で「AVRマイコン活用ブック」という本を見つけました。 その本の中に、NXTに加速度センサーを接続する記事がありました。

早速買って見ましたが・・・結構簡単そうに見えて、面倒です。

AVRの開発環境などもそろえなければならないし・・・と思っていたら、秋葉原で簡単に手に入りましたので(秋月電子万歳!)、ここのところ研究してます。

とりあえず、NXTとAVRマイコンを接続することはできました。 あとは、自作センサーをAVRマイコンに接続すれば、何でもできそうです。

なんか、こう書くと、そんなに苦労していないように思われるかもしれませんが・・・道のりは長かったです。

プログラムも普通に(入出力などの)処理をすることはできるようになったのですが、タイマーと割り込みがうまくいきません。 いや、うまくいく時もあるのですが、うまくいかない時もあり・・・結局、良く分かっていません。

だれか、AVRマイコンの使い方教えてください。

・・・ロボコンも終わったし・・・

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