ロボコンマガジンNo.60を買ってきました。
2008年蘇州世界大会のことが掲載されています。
それは、とりあえず置いておいて・・・。
ロボカップジャパンオープン2009という記事があり、「小型ロボットリーグにヒューマノイドサブリーグを新設」と書かれています。 そして記事の最後に「ロボカップジャパンオープン2009大阪」とあります。
また、大阪でやるみたいですね。
ロボコンマガジンNo.60を買ってきました。
2008年蘇州世界大会のことが掲載されています。
それは、とりあえず置いておいて・・・。
ロボカップジャパンオープン2009という記事があり、「小型ロボットリーグにヒューマノイドサブリーグを新設」と書かれています。 そして記事の最後に「ロボカップジャパンオープン2009大阪」とあります。
また、大阪でやるみたいですね。
AVRマイコンでのモーター制御ができるようになり、喜んでいたのですが・・・
今、私はAVRマイコンをブレッドボード上で配線して実験しています。
パソコンに、AVRプログラマ(AVR mkII)を接続し、そこから出ているISP(6ピン)をブレッドボード上のATMEGA88に接続しています。
これで、パソコン上で作成したプログラムをAVRマイコンに転送して動作実験をしています。
ISPを接続したまま、
プログラム作成⇒転送⇒動作確認
を繰り返しています。
たまたま、(ISPを接続したまま)パソコンの電源を切りました。 この状態で、AVRマイコンが動くかどうか確認したら、うんともすんとも言いません。
「あれ、電源はパソコン側から供給してないハズなんだけどなぁ」
ISPを外してみると、ちゃんと動きました。
「単体で動かすときにはISPは外さないとダメなのか・・・」
♪たらりらった~らった~♪
「M&Y父」はレベルが上がった。
「AVRマイコンを単体で動作させるときには、ISPを外すと正しく動作する」を覚えた。
じゃあ、ISPを外してもう一回動作確認だ! と繰り返していくと、いままでモーター制御でリセットしまくっていたのが嘘のようになくなりました。
あの誤動作は幻だったのか?
巨大な電解コンデンサを抜いても、全然問題ありません。
これまでの、私の努力は何だったの?
そうすると、今後は
プログラム作成⇒ISP接続⇒転送⇒ISPを抜く⇒動作確認
という面倒な手順になるのかなぁ。
ちょっと脱力感です。
これも、マイコン開発の常識なのですかねぇ。
ここのところ、全然M&Yの履歴になっていません。
M&Y父の履歴になってしまっています。
それじゃあ、ということで、MとYの近況など・・・
Yは、杉並区立科学館での「小学5年生科学教室」に参加してきました。 これから6週間、土曜日に科学館に行き、いろいろなことを学習してきます。 今日は生物で「水中の微生物」だそうです。
迎えに行くと、教室から飛び出しくるなり「お父さん顕微鏡買って!」ですからねぇ・・・とても楽しかったようです。 まだまだ続くので、楽しみですね。
一方、MはNQCの勉強を始めました。 かって、電子工作の師匠から宿題を出されたのを思い出したようです。 キーボードを打つのが遅いMですが、結構な時間がんばりました。
RCXで組んだロボットが、少しづつラインをたどって動き出してきました。
コンパイルすると、エラーが出ます・・・「なんかエラーが出るんだけど。」「かっこの数が合ってないかセミコロンが足りないかじゃないの?」・・・という会話を何度繰り返したかわかりません。 「あっ! やっぱり足りなかった。」
「(足りないのはおまえの・・・だっちゅ~の!)」
銀の被災者発見、緑の被災者発見・・・までできたところで、本日はギブアップです。
お疲れ様です。
宿題の期限まであと2週間ですが、大丈夫でしょうか?
AVRマイコンでモーターをコントロールすると、マイコンにリセットがかかり無限ループにはまります。
どうも、モーターに負荷が掛かると、電源電圧が下がりマイコンがリセットしてしまうようです。
マイコンとモーターの電源を分ければ解決することは分かったのですが・・・なんか電池がもったいないので(「もったいないお化け」が出そうなので)1つの電源でなんとかならないか実験を繰り返しています。
いろいろなところに、0.1μFのコンデンサを入れてみたりしても、やっぱりダメです。
もう、意地になって「えいっ」とばかりに、巨大な電解コンデンサを接続してみました。
3300μFを2つ
さすがに、誤動作しなくなりました。
なぜ、我が家にこんな巨大コンデンサが(それも2つも)あったのか、自分自身でも思い出せないのですが・・・まあ、役に立ったからいいや。 このコンデンサは単三電池より太いです。 こんなのを2個も搭載したら、なんかじゃまだなぁ。
これで、めでたしめでたし・・・と、ならないのが「M&Y研究所」です。
・・・つづく
モーター制御で、誤動作に悩まされている「M&Y研究所」ですが・・・
まずは、一番安易な対策をしてみました。
かって、ロボデザイナーで同じ症状になったときの対策で、マイコンとモ-ターの電源を分けて見ました。 マイコンには乾電池2本、モーターには乾電池3本を接続しました。
こうすると、ちゃんと期待通りの動作をします。 フルで正回転中に逆回転指示をしても、ちゃんと指示通りに動作します。 あれ、これだとTA7291Pにも3Vしか行かないけど・・・なんか動くぞ!
TA7291Pの電源を4.5Vにしても動作自体は変わりませんでした。
とりあえず、この対策案1は有効なようです。 しかし、これでは電池をたくさん搭載する必要があります。 (なんか勿体無いなぁ。) 電池の電源を共有することはできないか考えてみます。
次にやってみたのは、電源の安定化です。 安定化といっても、3端子レギュレータをかませるだけです。 電池を4本にして6Vにします。 低ドロップ型の3端子レギュレータで5Vにしてみましたが・・・やっぱり、誤動作します。 この対策案2ではだめなようです。
がっくし。
最後に、3端子レギュレータを2個搭載し、5Vの電源をAVRマイコンに、3.3Vの電源をモーターに分けてみましたが・・・やっぱりダメです。
TJ3は、3本の電池でちゃんと動作しているのですが・・・やっぱりプロが作るものは違いますねぇ。
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でモーターの回転を絞ってみたら、なんかうまく動作しました。
う~ん不安定?
コンデンサでもかませれば良いのかな?
それとも、電源の安定化が必要なのかな?
そういえば、確かロボデザイナーで実験した時には、コントローラの電源とモータの電源は分離しなければ、ちゃんと動作しなかったなぁ。
世界中のみんな、オラに技術を分けてくれ!
実験で分かったことは、モ-ターの回転開始、モーターの逆転時に誤動作しやすいようです。 (あと止めた時も!)
これも、メカトロの常識ですか?
先日、開発環境を古くしたおかげで、良く分からない(コンパイラの)バグに悩まされること無く、快適にプログラムの研究が進んでいます。
今度は、モーターの制御に掛かっています。
モーターは(面倒くさいので)モータードライバなる便利なICを使います。
これを使えば、失敗のしようが無いのでは・・・と思えます。(本当かよ!)
で、いろいろ見ていたら、PWMが簡単にできそうだったので、これの実験を先にやります。
LEGOのRCXモーターも、パワーを1~5で指定できました。 これに当たるものなのでしょうね。
AVRでは、単に
・PWMを使うぞ
・カウンタが0x00~0xFFに変化するまでの間で、ここになったらON-OFFを切り替える
という指定だけで、できちゃうらしいです。
早速実験してみると・・・本当に簡単にできちゃいました。
まだモーターを接続していないので、LEDで確認ですが・・・接続したLEDが蛍の光のようにポワ~ンと明るくなったり、暗くなったりします。 恐るべし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 という記述がありませんでした。 これは、コンパイラのバージョンによっては、最適化の度合いがちがうのでしょうかねぇ。
どちらにしても、コンパイラの頭が良すぎてはまっていたようです。
現在研究中のAVRマイコンですが・・・
前回の記事で、「プログラムの途中でプログラムが切れる」は、なんかコンパイラのバグらしい、と勝手に思っています。
で、ネットをさまよってヒントをさがしてみると、古いバージョンのほうが安定しているというのがありました。(本当かどうか知りませんが?)
で、古いバージョンのコンパイラをダウンロードしてインストールしてみました。
Buildでできる ~.lss というファイルを開いて確認してみると、途中で切れずにプログラムが翻訳されています。
やった~! やっと一歩前進だ!
ということで、現在 AvrStudio4.14(Build589)+WinAVR(20060421)を使用(試用?)しています。
でも、やっぱり、割り込みがうまくいきません。
いま、結構まじめにAVRマイコンについて勉強しています。
まあ、私が勉強してもしょうがないのですが・・・個人の趣味ってことで。
話の発端は、「NXTに自作センサーを付けることができるか?」というところからきています。
休日は、のんびりと?ネットをうろついているのですが・・・そんな中で「AVRマイコン活用ブック」という本を見つけました。 その本の中に、NXTに加速度センサーを接続する記事がありました。
早速買って見ましたが・・・結構簡単そうに見えて、面倒です。
AVRの開発環境などもそろえなければならないし・・・と思っていたら、秋葉原で簡単に手に入りましたので(秋月電子万歳!)、ここのところ研究してます。
とりあえず、NXTとAVRマイコンを接続することはできました。 あとは、自作センサーをAVRマイコンに接続すれば、何でもできそうです。
なんか、こう書くと、そんなに苦労していないように思われるかもしれませんが・・・道のりは長かったです。
プログラムも普通に(入出力などの)処理をすることはできるようになったのですが、タイマーと割り込みがうまくいきません。 いや、うまくいく時もあるのですが、うまくいかない時もあり・・・結局、良く分かっていません。
だれか、AVRマイコンの使い方教えてください。
・・・ロボコンも終わったし・・・
今日は、Y、M&Y母と3人でパシフィコ横浜で開催されている「ROBO JAPAN 2008」というイベントに行ってきました。
Mは学校の弓道部の試合の応援だそうです。
なんで、行くことになったかは、よく知りませんが、Yが行きたいというので・・・
行ってみると、まあまあの混雑ぶりでした。
ROBO-ONEの試合をやっていました。
また、初めてASIMOが動いているのを見ました。
どう見ても、小人が入っているようでした。(中の人は大変だなぁ・・・うそです。)
で、個人的に面白かったのは
第3位 東京理科大
マッスルスーツでしたっけ、農作業とかで重い荷物を運ぶのをアシストする補助ロボットの実演をしていました。 たくさんの人が並んでたので、私は体験はしませんでしたが、見ていても面白かったです。
第2位 千葉工業大学
とても小さなロボットを展示していました。 はばたく蝶のロボットです。
展示だけで実演はしていませんでしたが、精巧にできていました。 飛んでいる映像を、iPod-touchの動画再生で見せてくれました。 なかなかいいぞぅ。
第1位 東京工業大学
レスキュー関係のいろいろなロボットを実演していました。
蛇のように、たくさんの関節を持つロボットがウニウニ動いていましたが、驚いたことに、各関節に付いているタイヤには駆動するためのモーターがなく、単なる空転するタイヤでした。それを関節をくねることで推進力にしているそうです。 これ、レスキューのロボットに使えませんかね? 多関節のヘビ型ロボットが、ウネウネと黒線に沿って這って進む姿は、「とても面白いと思うのですが。 まあ、直径22cmには到底収まりませんねえ。 ルールが変わって「スタートのときは直径22cmに収まること」となれば、最初はとぐろを巻かせておけば良いのですが・・・。
また、「座布団」と言っていましたが、正方形の板の下にクローラー型のオムニホイール(みたいなの)を付けて、人を乗せて前後左右に動く乗り物?が楽しかったです。 これも、アイディアとしてレスキューのロボットにつかえませんかね?
と、いうことで、まあまあでした。
千葉工業大学のブースにロボカップ蘇州のトロフィーが飾ってありました。 ヒューマノイドリーグのサッカーのようでした。 その後ろに、賞状がありました。 まだ、我が家には賞状は届いていないのですが・・・シニアリ-グはうらやましいなぁ。
今日は、杉並区立科学館で「天文の夕べ」というイベントがありました。
久しぶりに、参加してプラネタリウムで星を見ながら解説を聞き、科学館の大きな望遠鏡で星を見せてもらいました。
今日は木星の縞模様や衛星もよく見えました。 月の表面が模型のように凹凸が分かるような感じでした。
雲がすごい速さで移動しており、星が見えたり隠れたりしていましたが、東京の空も捨てたもんじゃないですね。
レスキューの競技では、被災者を発見したときにランプを点灯して「発見したよ!」とアピールします。 このアピールが正しければ得点をもらえます。 逆に誤った場所でアピールしてしまうと減点になります。
ところで、LEGOのランプはどこにも売っていないのですが・・・他のチームの人たちはどうしているのでしょうか?
「M&Y」は、LEDで自作しています。
NXTだと、RCX用の変換ケーブルを使用して、RCX用のランプを光らせているのを見たことがあります。 みんな、こうしているのでしょうか?
これまで、あまり興味が無かったので、よく見ていなかった!