忍者ブログ

Fグループ電子工作講座

秋月電子SH7125ボードで始めるマイコン開発

ライントレース解説

前回使用したライントレースプログラムを解説します。
関連:ライントレース関連記事一覧

ライントレースの動きは
・ラインの真上に居るときは直進
・ラインの右側に寄ったときは右旋回
・ラインの左側に寄ったときは左旋回
が基本となります。

これをセンサーとモーターの動きで表すと
・右センサーON、 左センサーON の時:右モータON、 左モータON
・右センサーON、 左センサーOFFの時:右モータON、 左モータOFF
・右センサーOFF、左センサーON の時:右モータOFF、左モータON
・右センサーOFF、左センサーOFFの時:右モータOFF、左モータOFF
センサーが両方OFFの状態は元々決めていませんでしたが、止めておくことにします。

これを整理するととても簡素になります。
右センサー反応しているとき、右モーター回る
左センサー反応しているとき、左モーター回る
基本的にはこれだけです。
速度調整さえうまくできればマイコン無しでも動かすことができます。

※2019/06/23誤記修正
ちなみに
・片方のクローラーを止めてもう片方だけ回す旋回方法新地旋回 信地旋回
・それぞれのクローラーを反対方向に動かす旋回方法超新地旋回 超信地旋回
と言います。
模型では大したことありませんが、重機でやると地面がえぐれて後で整地するのが大変です。
また、ベルト部分を履帯と呼びますが、重機で新地旋回をやると履帯が痛みます。


台から落ちない制御(簡易版)

ライントレースを応用するとロボット相撲の様な台から落ちない制御を行うことができます。

ライントレースでは台の白い部分と黒い部分で判定を分けていました。
台から落ちない制御の場合、台(の白い部分)と台の無い部分で判定を分けます。
フォトリフレクタは赤外線の反射の強弱で出力が変わります。
赤外線が反射する物が何もない場合出力は一番小さくなります。
つまるところセンサ感度は変更せずそのまま使えます。

センサーの配置は少し変える必要があります。
台の端を走行させる状態を考えてみます。
ライントレースのセンサーの位置では台から落ちそうか判定できません。

そこでセンサーの位置を履帯より外側に出しておく必要があります。
加工が得意な人はアルミ材やプラ板などを任意に加工してください。
加工に慣れていない人はユニバーサルプレート2枚セットの余り材やロングユニバーサルアーム等が良いでしょう。

台から落ちない動作

動作を考えてみます。
何もない場所でまっすぐ進むのはそのまま

台から落ちそうなとき、台から離れる様に動く必要があります。

これを整理すると
右センサー反応しているとき、左モーター回る
左センサー反応しているとき、右モーター回る
となります。

前回のプログラムからの修正点は

#include "iodefine.h"
#include "io_setup.h"
#include "intMTU.h"
#include "ADConv.h"

#define SENS_THRESHOLD    800    //判定値
#define PWM_MAX    400        //PWM出力

void main(void){
    short sens_R=0,sens_L=0;
    short sens_R_on=0,sens_L_on=0;
    short pwm_out_L=0,pwm_out_R=0;

    hardware_setup();        //汎用IOの初期化
    init_MTU();            //PWM機能の初期化
    init_ADC();            //AD変換機能の初期化
 
    while(1){
        check_ai();        //AD変換を実行
        sens_R=get_ai(0);    //AD変換値を取得
        sens_L=get_ai(1);    //AD変換値を取得
        sens_R_on=(sens_R>SENS_THRESHOLD)? 1:0;
        sens_L_on=(sens_L>SENS_THRESHOLD)? 1:0;

        pwm_out_R=(sens_L_on==0)?0:PWM_MAX;
        pwm_out_L=(sens_R_on==0)?0:PWM_MAX;

        set_pwm( PWM_PE0 , pwm_out_R);    //PWM出力
        set_pwm( PWM_PE1 , pwm_out_L);    //PWM出力
    } // end while
}
ようは左右にセンサーをひっくり返しただけ。
これでとりあえず台から落ちなくはなります。
だがしかし・・・

次回:台から落ちない制御
PR

コメント

プロフィール

HN:
ぼんどF博士
性別:
男性
自己紹介:

最新コメント