STEAM教育ならぬ、STEAMライフ Science + Technology + Engineering + Art + Mathematics
旧『“PLASSON”自作二足歩行ロボット Personal Low-tech ASSembly Of Nisokuhokou 』

1:製作超入門で作るの最近の記事

次に向けて始動

| コメント(0)

第11回ROBO-ONE

軽量級優勝は、クロムキッドでした! いやー、くぱぱさん、くままさん、おめでとうございます!

重量級優勝は、ヨコヅナグレート不知火二代目! GIYさん、おめでとうございます!

散財心理学実習講義200Xさんのところに詳しいレポートが! ありがとうございます!

次に向けて、私も始動しなくては。

■ガシャペリオン(アルファベットだと読みにくいので今後はカタカナで)

■PAVANE(わかりにくいんで、改名しようかな)

  • テーマ:6VマシンでHVマシンに勝つ!
  • 出場目標:KHR3rdAnniversary
  • コントローラーのRCB-3HV化(PLASSON MAから)
  • 1stANNIVERSARYブラックフレームにこだわるからこその6Vマシン
  • ヒザのオフセットアーム化

■PLASSON MA

  • 現役引退
  • RCB-3HVをアップデートしてPAVANEに

■オリジナル8軸ロボ



少軸ロボリスト

| コメント(7)

二足歩行ロボット製作超入門

8軸オリジナルロボに向けて

ロボット名と写真は、王国@楽天へのアフィリエイトリンクです。
「詳細」はメーカーサイトなどへのリンクです。



二足歩行ロボット製作超入門

超入門本シリーズをしばらくお休みする前に、補足です。

*****

1:0N0さんとこの不定期日記で、

メヒャニカ! 岡山県立大学ロボット研究サークルで、 ATmega128の罠の話。」

という記事がありました。リンク先にお邪魔してみると、ATmega128で2つある8ビットタイマのレジスタの並びが違っていて同じプログラムで動かないって話で、超入門本でも注意してねってことが書いてありました。

そーなんです。ATmega32(タイマ0とタイマ2が8ビットタイマ)でも違うんです。超入門本の場合は、本のサポートページ(URLは本に載ってます)の正誤表に書いてあったので、私は助かったのですが。

というわけで、超入門本でロボット作ってみようって人は、

をしっかり読みましょう。ヒント満載です。

追記:

いや、もちろん、データシートをしっかり読むのが一番なんですけどね。私も上で書いた正誤表だけじゃなくて、ぴしいさんに教えていただいた日本語データシートでも確認しました。

*****

2:10/17に

が、問題は、ごにゃごにゃ・・・(自分でアイディア見つけることこそが楽しいので、しばらく自分で考えてみます)。

と書きました。これは、8個のモーターを動かす場合、、、



二足歩行ロボット製作超入門

ロボファイト4が終わるまでの約ひと月の間、「超入門本をもとにオリジナルロボットを作るシリーズ」はお休みします。

超入門本でいうと、今、第2章が終わったところです。第3章はフレームの作成です。どんなロボットにするかの構想は練っておきたいと思います。



モーター8個動いた

| コメント(0)

二足歩行ロボット製作超入門

超入門本では4個のモーターを動かすところまで書いてあるのですが、8個のサーボモーターを動かすことに成功しました。

 8個のモーターを動かしてみた(動画)

  1. 最初の10秒くらいが、8個を順番に動かすやり方
  2. 次の10秒くらいが、2個ずつ同時に動かすやり方

テロップが出ている間の音が変になっているみたいです。すみません。

見た目あまり変わりませんが、1のほうが安定しているような、2のほうがピクピクしてそうな、そんな感じがします。音も違うし・・・。

あーそうかー、1.はパルス周期20msec(2.5ms×8)で、2.はその半分なんだから、そりゃ音も違いますね、、、さすがに眠いので頭が動きません。寝ます。明日も普通に仕事だし(^^;。



二足歩行ロボット製作超入門

さて、モーター8個をどう動かすかなんて先走るのはこのへんまでにして、地道に手を動かすことに戻ります。

超入門本のp.108の「interrupt.c」です。割り込みで1msecごとにカウンタに1を加えて1000まできたら「0」を表示します。

さて、例によって、GDLのバージョンの違い(超入門本はVer.1.5、私のはVer.1.7)よる修正点があります。

  1. 超入門本でのインクルードファイルの「signal.h」は、新バージョンでは不要(「interrupt.h」に含まれたらしいです)。
    ちなみに「signal.h」をいれたままだとビルド時に
    warning: #warning "This header file is obsolete.  Use <avr/interrupt.h>.
    という表示が出ます。でも、ビルド自体は「成功」で、そのままマイコンへ書き込んでも正常に動きました。
  2. そのほか、http://www.robotsfx.com/robot/ATWALKER.html 参照

ソースは、、、

*****



二足歩行ロボット製作超入門

10/8にタイマカウンタの割り振りをどうしようかという話の中で、「どういうロボット作るか考えないと、決められませんね。」と書きました。

しかし、思い返してみれば、もともとマイコンを使えるようにするというのが目的なのでした。

  1. パルス周期を20msecから10msecにする
  2. 設定値1あたりの角度量を小さくする

うまくいったときに動きが面白くなりそうなのはと考えると、スピードアップにつながる1.だなっと。

よし、1.に挑戦しよう(安易だなぁ)。

あれ?待てよ・・・



二足歩行ロボット製作超入門

サーボモーターを動かすときのタイマカウンタの使い方について、頭を整理しています。「脳を鍛える」って感じ。

今のところの理解では、同じポート(今回はPORT C)で8個のモーターを動かす場合、

  1. 1個のサーボモーターについてのパルス周期20msecを短くする
    RCB-1のコマンドリファレンスでパルスの繰り返し周期8〜20msec程度とあるので、KONDO製RED Versionは8msecでも動くと思われる。これを活用したい。
  2. 設定値1あたりの角度量を1.6°よりも細かくする
    ROBO-ONEの足裏規格を意識すると、バランスを取るのにもっと細かい角度設定が必要という気がする。

ことが、3つあるタイマカウンタ(8bitが2つ、16bitが1つ)でできるけど、同時には実現できない・・・ということかなー。

■以下、メモ:

  1. は、最大のパルス幅が2.4msecなので、2つのタイマカウンタだけ利用の場合は、サーボモーター8個を2.5msecずつずらして1個が20msec周期、というのが限界。
    余談ですが、この方法を最初に考えた人は、すごいな。
    もう1個のタイマカウンタを加えれば、同じタイミングで2個のサーボモーターを動かせる(それぞれのパルス幅の設定ができる)ので、サーボモーター4個で2.5msecずつずらして1個が10msec周期が2つという形にできる・・・はず。
    ただし、もうサーボモーターは増やせない。
  2. は、パルス周期は2.5msec単位で数えればよいとなれば8bitカウンタで可能になるので、パルス幅を16bitカウンタで作ればできる・・・はず。
    ただし、同じタイミングで2個のサーボモーターは動かせなくなる(設定値1あたりの角度量が2種類で良ければ可能だろうけど)。

設定値1あたりの角度量がヒザだけ2倍というのは、ありかもしれない・・・。

1.と2.のどちらをとるか、どういうロボット作るか考えないと、決められませんね。



超入門I/Oポート

| コメント(0)

二足歩行ロボット製作超入門

超入門本専用掲示板を読んでいて、もしかしたら初心者の方が戸惑うことがあるのかなと思って書きますが、

  • ATmega32のI/Oポートの各ピンは、入力になったり出力になったり特殊機能が使えたりします。
  • そうした機能の切換は、対応する特殊レジスタの値を変えることで行います。
  • 入力されたり出力したりするデータも、そのための特殊レジスタを使います。

ATmega32の特殊レジスタはレジスタの表にあるように00から3Fまで64個もあるらしいです。

使い方を覚える近道は、まず実際に使えるところから使ってみることだなっと。

追記:

  • センサーつながない、シリアル通信しない、サーボモーターを動かせればいい、ということであれば、全部のピン(ATmega32なら32本)にサーボモーターをつなぐことも可能です。
  • アナログ→デジタル変換やシリアル通信などの特殊機能は、使えるピンが決まっています。


LED点滅成功

| コメント(0)

二足歩行ロボット製作超入門

計算結果表示プログラムは割愛して、マイコン基板のLED表示に成功しました。

製作超入門のサンプルプログラムでは、点滅がピピピピピピピピピピピという感じだったので、時間稼ぎのwait()を下記のように二重ループにして、ピッピッピッピッピッピッという感じにしてみました。

void wait(void)
{
  int counti;
  int countj;

  for (counti = 0; counti < 30000; counti ++)
  {
    for (countj = 0; countj < 10; countj ++)
    {
          /* なにもしない */
    }
  }
}

昔のBASICの経験が役に立っています。



このアーカイブについて

このページには、過去に書かれた記事のうち1:製作超入門で作るカテゴリに属しているものが含まれています。

次のカテゴリは2:週刊マイロボットを作るです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。