クローバー祭2014

サッカーロボ解体新書第二弾!

2014/11/11 0:56 に 山田憲 が投稿

今回はサッカーロボに使ったプログラムの内容を解説していきたいと思います。
(cppファイルとそれを左右マイコン用にコンパイルしたhexファイルを添付しています)

#define F_CPU    9600000UL

#include <avr/io.h>
#include <util/delay.h>

#define RIGHT        0
#define LEFT        1

#define M_TYPE        LEFT      //書き込むマイコンの種類(RIGHT=右モーターマイコン LEFT=左モーターマイコン)

#define  ROOM          25           //ジョイスティックの中心と判定する範囲


#define TYPE_X        0
#define TYPE_Y        1

int8_t joyS(uint8_t type);                 //ジョイスティックの情報読み込み。戻り値に-128~128の値を挿入(誤差がなければ理論上中心=0)
int8_t joy_pos[2];                             //ジョイスティックの情報保存用変数。1ループ毎にjoyS関数を使って更新する。
int8_t joy_pos_abs [2];                    //ジョイスティックの絶対値を格納するための配列

int main(void)
{
    DDRB=0b00000111;             //出力をPB0、PB1、PB2に設定。その他は入力
   

    TCCR0A = 0b10000011;       //PB0にPWMを設定
    TCCR0B = 0b00000011;       //64分周に設定
  
    while(1)
    {
        //joyS関数を使って更新する。
        joy_pos[TYPE_X]=joyS(TYPE_X);
        joy_pos[TYPE_Y]=joyS(TYPE_Y);
        /*-128~127を-127~127になおす*/
        if(joy_pos[TYPE_X]<0)
        joy_pos[TYPE_X]++;
        if(joy_pos[TYPE_Y]<0)
        joy_pos[TYPE_Y]++;

        //取得したjoy_posをもとにMDICを制御
        if((joy_pos[TYPE_X]<ROOM)&&(joy_pos[TYPE_X]>-ROOM)&&(joy_pos[TYPE_Y]<ROOM)&&(joy_pos[TYPE_Y]>-ROOM))
        {
                 /*ジョイスティックが中心にある場合*/
                PORTB=_BV(PB2) | _BV(PB1);
                OCR0A=255;
               
        }else{

                /*joy_posの絶対値を取る*/

            if(joy_pos[TYPE_X]<0)
                joy_pos_abs [TYPE_X]=-joy_pos[TYPE_X];
                else
                joy_pos_abs [TYPE_X]= joy_pos[TYPE_X];
            if(joy_pos[TYPE_Y]<0)
                joy_pos_abs [TYPE_Y]=-joy_pos[TYPE_Y];
                else
                joy_pos_abs [TYPE_Y]= joy_pos[TYPE_Y];

            if(joy_pos[TYPE_X]<0)
            joy_pos_abs[TYPE_X]--;
            if(joy_pos[TYPE_Y]<0)
            joy_pos_abs[TYPE_Y]--;      
     

            /*
            //操作性の都合によりこのロボットは最高速度を封印してあります。
            //それでもこのロボットの真のパワーを見たい方はここを開放してください
            joy_pos_abs[TYPE_Y]*=2;
            joy_pos_abs[TYPE_X]*=2;
            */



            if(joy_pos_abs[TYPE_X]<=joy_pos_abs[TYPE_Y])//縦軸絶対値が横軸絶対値より大きい時
            {
                //前進or後退処理
                if(joy_pos[TYPE_Y]>0)
                {
                    //前進処理(両モーター前転)
                    PORTB=_BV(PB1);
                  //↑イコールでピンを設定すれば排他的にPB2を0にしてくれるため2行書くコストを省略できる(PB0はPWMとして設定してるので影響を受けない)

                }else{
                     //後退処理(両モーター後転)
                    PORTB=_BV(PB2);
                }
                OCR0A=joy_pos_abs[TYPE_Y];//PWMでモータースピードを指定
            }else{//縦軸絶対値が横軸絶対値より小さい時
                if(joy_pos[TYPE_X]>0)
                {
                    //右折処理(左モーター前転右モーター後転)
                    if(M_TYPE==RIGHT)
                        PORTB=_BV(PB2);
                    else
                        PORTB=_BV(PB1);

                }else{

                    //左折処理(左モーター後転右モーター前転)
                    if(M_TYPE==RIGHT)
                        PORTB=_BV(PB1);
                    else
                        PORTB=_BV(PB2);
                }
                OCR0A=joy_pos_abs[TYPE_X];//PWMでモータースピードを指定
               
            }
        }
       
    }
    return 0;
}
int8_t joyS(uint8_t type)//ジョイスティックの値をAD変換で読み取る
{   
    if(type==M_TYPE)//オーダーが縦軸値の場合
    ADMUX = 3 | _BV(ADLAR); // 電圧基準はVCC。PB3に設定|ビット左揃え適用|横軸入力
    else                        //オーダーが横軸値の場合
    ADMUX = 2 | _BV(ADLAR); // 電圧基準はVCC。PB4に設定|ビット左揃え適用|縦軸入力
   

    ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADIF)|_BV(ADPS2)|_BV(ADPS1);
    loop_until_bit_is_clear(ADCSRA,ADSC);//AD変換待ち

     /*0~255のAD変換値を-128~127に変えて返す*/
    if(type==TYPE_X)//オーダーが縦軸値の場合
    return  127-ADCH;
    else                         //オーダーが横軸値の場合
    return  ADCH-128;
}

サッカーロボ解体新書第一弾!

2014/11/05 2:33 に 山田憲 が投稿   [ 2014/11/09 19:26 に更新しました ]

※追記:基板図の画像とファイル(.mb3)を追加しました(2014年11月6日)
こんにちは!1日2日のクローバー祭でサッカーロボ(RBX‐SC2014MR)を作ってもらったみなさんありがとうございました。
クローバー祭は終わってしまいましたが、これからサッカーロボ解体新書と題してこのロボットのしくみや製作までの道のりをちょっとだけ紹介していこうと思います。
サッカーロボの仕様を詳しく知りたい人,また,似たようなラジコンロボを作りたい人への参考となれば幸いです.
(RBX‐SC2014MRの説明書を添付しています。)
第一弾は使った電子部品と基板図の紹介です。

まずは電子部品から
ジョイスティック                                     JT8P-3.2T-B10K-1-16Y              
マイコン                                                ATtiny13A-PU
モータードライバーIC(MDIC)           TA7291p
モーター(モーターベース,プーリ付き)    FA-130RA
スライドスイッチ                        SS12D01G4
電池ボックス                        BH-331-3A
<その他の部品>
紙フェノール基板,EHコネクタソケット,ハウジング,抵抗(1kΩ),赤色LED,ジョイスティックのキャップ,リボンケーブル
基板はマルツ電機.

EHコネクタ,ハウジング,リボンケーブル,モーターはデジット
ジョイスティックのキャップはラジオショック
その他は秋月電子にて買わせていただきました.ありがとうございます.

さてこのサッカーロボは以下のような構成で成り立っています.
なぜマイコンが2つ有るのかと言うのには以下の理由があります.
・縦長のマイコンとは違いスペースが確保しやすいから
・ATtiny13の価格は1個50円(秋月電子価格)で,2個使ってもtiny2313やmega88等のAVRマイコンより安いから
逆にマイコンそれぞれに値を読み取らせるため,
両者の認識にギャップが生じてまっすぐ進み難く成るなどの点が懸念されます。
しかし上記の利点はそれ以上の価値があるのではないでしょうか?
あと,この構造には,ピン配置の関係でマイコンから直線でモータードライバーへの配線ができるという嬉しい副作用もありました.
以下回路図です.
(今回は行っていませんでしたが、ジョイスティック周りにレギュレーターやノイズ対策用のコンデンサー等が有ったらなお良かったかもしれません。)

基板図は以下のようになります
大量生産し、かつ子供達にハンダ付けして貰うという点を考慮して
ラインの太さは1.6mm、ホール周りには2mmと若干余裕ある設計にしてみました。
先にマイコンとジョイスティックがハンダ付けされていたのは熱に弱いマイコンとピンの間隔が2mmしかないジョイスティックはハンダの難易度が高い為です。
左右のマイコンとMDICが点対称にすることによって配線を簡単にすることができ、
かつMDICの足を外側に曲げておけば間違って逆に挿す心配がなくなるのでお勧めです。

次回はプログラムについて書いていきたいと思います

2014.10.25 活動報告

2014/10/25 2:37 に Haruka KISHIDA が投稿

ROBOX1回生,クローバー祭では潜水艇担当の岸田です。
潜水艇のサンプルづくりが終わっているので,今日はサッカーロボ製作を手伝いました。
サッカーロボに使う基板を磨いたり,導線の被覆をとったりしたのですが,新入生教育でやってきたことが活かされているように感じられてとてもやりがいがありました。
クローバー祭が近づいてきているので,各自で仕事をきっちりこなしていきたいと思います。



2014.10.21 活動報告

2014/10/21 3:10 に ユーザー不明 が投稿

 ROBOX2回生の青山です.
 クローバー祭の係としては,飛行機を担当しています.飛行機班が,他の水中モーターや,サッカーロボと違う点は,いつ,子供たちが作りたいと言っても作れる状態である必要があるという事で,誰でも作れるようにするための説明書のような物の製作をしてます.
 また,子供達が作った飛行機で遊べるように,簡単な紙飛行機の飛距離計測や,輪っかくぐり,割りばし飛行機を用いた的当て等も企画,必要な装置を製作中です.今日はその中でも,ネオジウム磁石を先につけた,的当て用の割りばし飛行機が本日完成しました.
 面白く,遊びやすく,わかりやすいものを作っていけるよう,頑張っていきたいと思います.

2014.10.18 活動報告

2014/10/18 6:40 に 八切宗矩 が投稿

こんにちは、ROBOX1回生で理工学部エネルギー機械工学部の八切ですヽ(・∀・)ノ

もう10月になりますが、活動日誌を書くのは初めてです笑

では活動報告を、、、

ROBOXはクローバー祭で飛行機・水中モーター・サッカーロボをものづくり教室として開きます!
僕はその中の水中モーターを使った船を作っています。当日は子どもたちにそれぞれ作ってもらうのですが、例をいくつか僕らが作ってるという訳です。友達や先輩が作ってくれた作品から色々ヒントをもらいながら僕も作りました。完成度はあまり高くないですが笑
飛行機やサッカーロボの制作も順調そうなので、クローバー祭が楽しみですねo(^▽^)o
たくさんの人が来てくれるといいな!

2014.10.16 活動報告

2014/10/16 4:52 に 山田憲 が投稿

ROBOX・理工学部インテリジェント情報工学科1回生の山田です。
今日はものづくり教室で子どもたちに作ってもらうサッカーロボの機体バランスの調整を行いました。今回の機体は有線制御なのでコントローラーからの力の向きの影響がケーブルを伝わって機体が倒れてしまうという問題を抱えていました。
今回の調節にあたり、機体の姿勢補助用の棒を樹脂製と金属製の組み合わせにし、前方に前傾防止とネジ穴隠しの為の板を配置することによりそれらの問題は解決しました。
他にサッカーグラウンドのボールの決定等のプランも大方定まったので完成へのビジョンが見えてきた一日でした。
次回より仮機体から本番用の設計に移り、量産体制に移って行こうと思います。

2014.10.4 活動報告

2014/10/04 21:18 に ユーザー不明 が投稿

ROBOX・理工学部電気工学科1回生の冨永です。活動報告を書かせていただくのが久しぶりで多少文章がぎこちないかもしれませんがご了承ください…
10月に入り秋学期がスタートしましたが、これをご覧の皆さんはどのような夏休みを過ごされましたか。僕はひたすらロボットの製作に取り組んでいました。無事にロボットも動き満足の行く夏休みに出来ました。
さて、一回生は11月1日、2日に行われるクローバー祭に向けて製作活動を行っております。ROBOXは「子供たちにものづくりに興味を持ってもらいたい」というコンセプトを掲げ、ものづくり教室を開きます。ものづくり教室では、紙飛行機・潜水艇・サッカーロボットをやります。当日に子供たちにも楽しんでもらえるように私たちは工夫を凝らして作業をすすめています。紙飛行機では様々な機体を作り実際に飛ばして動作確認をしています。機体ごとで飛び方が違うので楽しめると思います。潜水艇では人数が少ないという事態に遭遇しておりますが試作機を作り終わりました。子供たちが難しいと思われる箇所の改善に取り組んでいます。サッカーロボットでは基板をどのようにするかという話し合いをしており更なる改善点を洗い出しています。コントローラでロボットを動かすことで子供たちが楽しめるのではないかと考えています。

クローバー祭まで残り一ヶ月を切りましたが、一回生一致団結して頑張って参りますので、宜しくお願いします。

1-7 of 7