摩擦抵抗低減

141124
タイヤを手で回すと「キュッキュッ」とギヤの擦れる音がしているのが気になっていた。
で、ピニオンギヤにフッ素コート剤を塗ってみる。
使用したのはカワダのインパルス・ドライPTFE ”ケリー”
結果、キュッキュッ音が消えた。
モータを定電圧で回転させた時の電流を確認してみると、若干なりと電流がさがるようで効果ありそう。
実際の走りに効果があるのかは不明。どの程度の耐久性があるかも不安。

ついでに、錆サビになっていたベアリングも交換。
ラジコンショップで買ったものを、格安品に交換してみる。
こちらは、定電圧駆動時の電流が確実に増えている。
手で回した感じではゴリゴリ感も無いので分からない。
ラジコン用に比べて汎用品は硬いグリスが入っているとかはありそうである

高輝度赤色LED

14113003
まーた懲りずにLED照明を弄って撃沈する
今回は光度35000mcdの超高輝度赤色LEDTLCR5800を試した。
CMOSカメラの感度は赤色から赤外付近にピークがあるため、
赤色LEDを照明にすると効率よく露光できるようになる。
が、感度ピークによる効率よりも白色LEDのパワーのほうが勝るようで、暗くなってしまった。
ちなみに2年前にも同じような検討で失敗している
14113004
ということで、日亜NSPW500GS-K1に戻す。

九州地区大会

エキシビション走行の機会を頂けたので、宮崎佐土原高校へ。
佐土原駅に着くとkuroさんがいる。凄い活力。
14110903
今年のコースはクランク3、車線変更2、R450の蛸壺区間。罠は無いレイアウト。ただ、競技会場の照明のオレンジが強い。5年前に苦しめられた光はこの照明だったか?
予選ではハーフラインが1mに設定されている車線変更での接触やコースアウトが多いように見える。減速中に車線変更に移れないため初期のヨーが不足するのだろうか?
終わってみると予選通過した32台のタイム差は1秒以内という接戦ぶり、県大会からの選抜は流石。
Basicクラスはトーナメントが無いため、2回走行のベストタイムによる代表争いになる。一か八かのような速度での勝負は見ていて非常に面白い。

14110901
決勝トーナメントでは熊本、佐賀、福岡、宮崎の4県の乱戦が続く。
1/100単位の勝負が続くなか、安定したタイムを出し続ける佐賀県勢の勢いが凄かったが、更にタイムをのばした熊本勢が優勝を掴んだ

8人?ほどで行ったエキシビションは
数分話した後に走行を行うスタイルで行われた。
(トーナメント形式と違って気が楽である)
14110902
長崎総合大学のIさんのカメラ誘導ロボット。
あと少し詰めれば完走しそうな感じ

帰りにくじら羊羹を買いに行くも、既に売れきれ。残念

/////////////////////////////////////

タイヤ温度23度

中国地区マイコンカー研究会

14110301
参道を抜け、
14110302
出雲大社にお参りして、
14110303
出雲そばを食べて、
14110304
もう一杯食べて、
14110305
今年もk先生のお誘いで、中国地区マイコンカー研究会に参加させて頂く。
14110306
二日間に渡って中国地区の先生や生徒さんと調整に明け暮れる。
ルネサス大会に近い感じの強グリップコースでの蛸壺はなかなか走り難い。
フルグリップな走行軌道から急に後輪がブレイクしてしまう。タイヤが滑る兆候が掴めない。
結局は後輪の駆動力を下げたほうが綺麗に曲がれるようだ。
他にも坂の頂上で減速が間に合って無かったり、下り坂後のコーナが不安定だったりと色々修正。
有意義な走行会でした、ありがとうございました。

福岡県大会

141026
嘉穂総合高校で行われた県大会にてエキシビション走行の機会を頂く。
ついでに記録用動画の撮影も。

年季の入ったコースのためか、各所でタイヤの滑って面白い。

運営の皆様、参加者の皆様お疲れ様でした

ハーフラインの誤検出対策

001
ハーフライン後にコーナが現れることは無い。
ハーフライン検出後は操舵角度を監視して、コーナに入った場合には通常走行に復帰する。
002
車線変更はハーフライン後120cm以内に設定される。そのため、130cmを超えてもハーフラインが無い場合には通常走行に復帰する。
003
センサーの跳ねの対策に、トレースラインが途切てもしばらくはトレースラインの監視を続け、誤検出の場合にはトレースラインの途切れ待ち処理に戻す。

ハーフラインの検出条件

14092101
コーナー区間にハーフラインは設置されない。
操舵角度が大きい場合にはマーカー検出を無効にする。

14092102
S時コーナの途中にハーフラインは設置されない。
操舵速度が速い場合にはマーカー検出を無効にする。

材料変更

140913
とにかくオーバーハングを軽くしたい。
発砲スチロールでバンパーを作ると、発砲ウレタン製の半分以下の軽さになった。
が、当然ながら走行性能に変化無し。
そして見た目が悪い。

追記
元:5.1g
発砲スチロール1:2.3g
発砲スチロール2:2.2g

コース補修

1409061
カッティングマシンを入手したので
1409062
カッティングシートを切って
1409063
これを
1409064
こうする

カメラ制御コード

残り4つということで、だいたい1年前のコード公開

    /*
    PB.DR.BIT.B3 CLK
    PB.DR.BIT.B2 RESET
    PB.DR.BIT.B1 START
    PF.DRL.BIT.B1 STRB
    AN0 Image DATA
    PB.DR.BIT.B16 LOAD
    PE.DRL.BIT.B15 SIN
    PE.DRL.BIT.B14 SCLK

    PFC.PAIORL.BIT.B6 = 1; 右
    PFC.PAIORL.BIT.B7 = 1; 左
    PFC.PAIORL.BIT.B8 = 1; 同期
    PFC.PAIORL.BIT.B9 = 1; 中央
    PFC.PAIORL.BIT.B10 = 1;
    PFC.PAIORL.BIT.B11 = 1;
    PFC.PAIORL.BIT.B12 = 1;
    PFC.PAIORL.BIT.B13 = 1;
    PFC.PAIORL.BIT.B14 = 1;
    PFC.PAIORL.BIT.B15 = 1;
    */

    #include <machine.h>
    #include <stdarg.h>
    #include "iodefine.h"
    #include "sci.h"
    #include "7125sio.h"

    #define CLK_H PB.DR.BIT.B3=1
    #define CLK_L PB.DR.BIT.B3=0
    #define SCLK_H PE.DRL.BIT.B14=1
    #define SCLK_L PE.DRL.BIT.B14=0
    #define WAIT for(i=0;i<1000;i++){} /*======================================*/ /* プロトタイプ宣言 */ /*======================================*/ void main(void); unsigned char dipsw_getL( void ); unsigned char dipsw_getH( void ); void setReg(unsigned char data ); /*======================================*/ /* グローバル変数の宣言 */ /*======================================*/ unsigned int watc=0; unsigned char reg[16]; unsigned int h_cnt; unsigned int adcnt; unsigned char data[256]; /************************************************************************/ /* メインプログラム */ /************************************************************************/ void main( void ) { unsigned int pri_v,pri_h; int i,j; char dif,min,max,minad,maxad,out; unsigned char rf,lf,lsh; unsigned char blevel,wlevel; char mr,ml; unsigned char digisensor; /* マイコン機能の初期化 */ init_all(); //初期化 sci1_init(38400,8,0,1); reg[ 0]=0x00;//Image Capture Mode 0 = Continuous Mode reg[ 1]=0x10;//NA reg[ 2]=0x20;//Interrupt setting reg[ 3]=0x30;//Data Rate 0 = 1/4 reg[ 4]=(0x40|(dipsw_getL()+3));//露光時間 3=285fps 2=303fps 1=323fps reg[ 5]=0x50;//露光時間 reg[ 6]=0x60;//露光時間 reg[ 7]=0x70;//露光時間 reg[ 8]=0x86;//Gain reg[ 9]=0x90;//MSB setting reg[10]=0xA0;//Black level output reg[11]=0xB0;//Offset subtraction reg[12]=0xC0;//STRB reg[13]=0xD2;//NA reg[14]=0xE0;//Power save mode reg[15]=0xFE;//NA lsh=30+dipsw_getH()*10;// 1=100 2=120 3=140 //black=30~40 RESET: digisensor = 0x00; WDT.WRITE.WTCNT = 0x5A00; PB.DR.BIT.B2=0;//リセット H -> L

    CMT0.CMCNT = 0;
    CMT.CMSTR.BIT.STR0 = 1;//cmt0 スタート
    while(CMT0.CMCNT<150){CLK_H;CLK_L;}//200us待ち CMT.CMSTR.BIT.STR0 = 0;//cmt0 停止 CLK_H; CLK_L; PB.DR.BIT.B2=1;//リセット L -> H

    CMT0.CMCNT = 0;
    CMT.CMSTR.BIT.STR0 = 1;//cmt0 スタート
    while(CMT0.CMCNT<75){CLK_H;CLK_L;}//100us待ち CMT.CMSTR.BIT.STR0 = 0;//cmt0 停止 CLK_H; CLK_L; setReg(reg[ 0]); setReg(reg[ 1]); setReg(reg[ 2]); setReg(reg[ 3]); setReg(reg[ 4]); setReg(reg[ 5]); setReg(reg[ 6]); setReg(reg[ 7]); setReg(reg[ 8]); setReg(reg[ 9]); setReg(reg[10]); setReg(reg[11]); setReg(reg[12]); setReg(reg[13]); setReg(reg[14]); setReg(reg[15]); RESTART: CLK_H; CLK_L; PB.DR.BIT.B1=1;//スタート CLK_H; PB.DR.BIT.B1=0;//スタート信号戻す 920ns リセット開始から0.5ms後 CLK_L; CLK_H; i=0; WDT.WRITE.WTCNT = 0x5A00; //2.73ms以内にクリア NEXTREAD: while(PF.DRL.BIT.B1==0){//STRBシグナル待 CLK_L; CLK_H; } AD0.ADCR.BIT.ADST = 1;//AD変換開始 if(i==0){ PA.DRL.BYTE.H = digisensor;//xxxx x001 PA.DRL.BIT.B8 = 0; //mainCPUへの同期信号クリア } CLK_L;CLK_H; CLK_L;CLK_H;//STRB -> L
    CLK_L;CLK_H;

    while(AD0.ADCSR.BIT.ADF == 0);//AD変換終了まで待つ
    data[i] = AD0.ADDR0 >> 8; //値を保存

    i++;
    if(i<128){goto NEXTREAD;} //32*5= 160 setReg(0x21);//Set STOP=1 min=-10; max= 10; minad=0; maxad=0; //ライン重心計算 for(i=1;i<29;i++){ dif=data[i+95]-data[i+96]; //96 97 if(i<24 && dif5 && dif>max){max=dif;maxad=i;} //白→黒
    }
    if(min==-10 || max==10 ||(minad>maxad)){
    out=63;
    }else{
    out=(minad+maxad);
    }
    PA.DRL.BYTE.H = out<<2; /* ラインマーカしきい値計算 */ blevel=200; for(i=65;i<=91;i++){ if(blevel>data[i]){blevel=data[i];}
    if(blevel>data[i+32]){blevel=data[i+32];}
    }
    wlevel=blevel+lsh;

    digisensor=0x01;
    //左マーカ
    if(data[ 99]>wlevel || data[ 67]>wlevel){digisensor= digisensor | 0x40;}//0100 0000

    //右マーカ
    if(data[ 89]>wlevel || data[121]>wlevel){digisensor= digisensor | 0x04;}//0000 0100

    //中心ライン
    if(data[109]>wlevel || data[110]>wlevel || data[111]>wlevel || data[78]>wlevel){
    digisensor= digisensor | 0x10;}//中央線 0001 0000

    if(data[104]>wlevel || data[ 72]>wlevel){digisensor= digisensor | 0x20;} //左中マーカ
    if(data[116]>wlevel || data[ 84]>wlevel){digisensor= digisensor | 0x08;} //右中マーカ

    PA.DRL.BIT.B9 = 1;//

    PA.DRL.BIT.B8 = 1;//同期線L->H

    goto RESTART;

    }

    /************************************************************************/
    /* ディップスイッチ値読み込み */
    /* 戻り値 スイッチ値 0~15 */
    /************************************************************************/
    unsigned char dipsw_getL( void )
    {
    unsigned char sw=0;

    if(PE.PRL.BIT.B2==0){sw+=2;}
    if(PE.PRL.BIT.B3==0){sw+=1;}

    return sw;
    }

    /************************************************************************/
    /* ディップスイッチ値読み込み */
    /* 戻り値 スイッチ値 0~15 */
    /************************************************************************/
    unsigned char dipsw_getH( void )
    {
    unsigned char sw=0;

    if(PE.PRL.BIT.B0==0){sw+=2;}
    if(PE.PRL.BIT.B1==0){sw+=1;}

    return sw;
    }

    /************************************************************************/
    /* レジスタ書き込み */
    /* */
    /************************************************************************/
    void setReg( unsigned char data )
    {
    int wt=0;
    //SCLK_Lからスタート
    //adress
    if((data&0x80)==0x80){PE.DRL.BIT.B15=1;}else{PE.DRL.BIT.B15=0;}
    SCLK_H;SCLK_L;
    if((data&0x40)==0x40){PE.DRL.BIT.B15=1;}else{PE.DRL.BIT.B15=0;}
    SCLK_H;SCLK_L;
    if((data&0x20)==0x20){PE.DRL.BIT.B15=1;}else{PE.DRL.BIT.B15=0;}
    SCLK_H;SCLK_L;
    if((data&0x10)==0x10){PE.DRL.BIT.B15=1;}else{PE.DRL.BIT.B15=0;}
    SCLK_H;SCLK_L;
    //data
    if((data&0x08)==0x08){PE.DRL.BIT.B15=1;}else{PE.DRL.BIT.B15=0;}
    SCLK_H;SCLK_L;
    if((data&0x04)==0x04){PE.DRL.BIT.B15=1;}else{PE.DRL.BIT.B15=0;}
    SCLK_H;SCLK_L;
    if((data&0x02)==0x02){PE.DRL.BIT.B15=1;}else{PE.DRL.BIT.B15=0;}
    SCLK_H;SCLK_L;
    if((data&0x01)==0x01){PE.DRL.BIT.B15=1;}else{PE.DRL.BIT.B15=0;}
    SCLK_H;
    PB.DR.BIT.B16=1;//LOAD_H
    CLK_H;
    PB.DR.BIT.B16=0;//LOAD_L
    SCLK_L;
    CLK_L;
    }