月別アーカイブ: 2017年8月

修理


ルネサス大会で故障したカメラ基板を新調する。
ワイヤーのはんだ付けランドの強化(スルーホール追加)し
ワイヤー自体も根元を接着剤で補強する
基板レジストは、つや無し黒レジスト
接着用スペースの増加による重量増を板厚変更(1mm->0.6mm)で吸収
結果-0.05gで、重量増無し
(にしてもpcbgogoは早い、火曜に発注で、翌週月曜に届いた)

基板の作成は簡単なのだけど、取り替えた後の光軸の調整が本題で、
目視では、カメラが何処を見ているかは分からないため、
カメラのデータを読み込んでは、レンズと基板位置を指先の感覚でズラして合わせ込んでいくことを、延々、行うことになった
たぶん元に戻ったけれど、走行テストで確認必要

続きを読む

ラインカメラをESP-WROOM-32で動かす


あまり早くないICを上手く使いこなすを止めて、早いCPUでサクサク動かす
今回のボードはESP-WROOM-32。
32画素の読み込みだと370us程度、露光時間を1msとすると700Hz以上でサンプリングできそう。
そこまで早いなら、標準的なライントレース制御でもいけるのではないだろうか
適当な画素の値を2値化して出力して、デジタルセンサのポートに繋ぎ、
適当な画素の値をまとめてDACで出力して、アナログセンサのポートに繋げば
そのまま置き換えもできるかもしれない。
といっても、ここからの調整は、実機にカメラと証明を取り付けて現物合わせになるので未検証。

#define CLK 16
#define SI 17
#define AO A0

#define SEN_R 18
#define SEN_MR 19
#define SEN_C 21
#define SEN_ML 22
#define SEN_L 23
#define THER_WHITE 50

#define ANA_R 25
#define ANA_L 26


unsigned char data[32];

void setup() {
  // put your setup code here, to run once:
  
  digitalWrite(SI, LOW);
  pinMode(SI, OUTPUT);
  digitalWrite(CLK, LOW);
  pinMode(CLK, OUTPUT);

  pinMode(SEN_R, OUTPUT);
  pinMode(SEN_MR, OUTPUT);
  pinMode(SEN_C, OUTPUT);
  pinMode(SEN_ML, OUTPUT);
  pinMode(SEN_L, OUTPUT);
  
  pinMode(ANA_R, OUTPUT);
  pinMode(ANA_L, OUTPUT);

  
  Serial.begin(115200);
  while (!Serial);
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(500);
  
  while(1)
  {
    digitalWrite(SI, HIGH);
    digitalWrite(CLK, HIGH);
    digitalWrite(SI, LOW);
    delayMicroseconds(10);
  
    digitalWrite(CLK, LOW);
    for (int j = 0; j < 32; j++){
      data[j]=analogRead(A0)/4;//12bit -> 10bit
      digitalWrite(CLK, HIGH);
      digitalWrite(CLK, LOW);
      digitalWrite(CLK, HIGH);
      digitalWrite(CLK, LOW);
      digitalWrite(CLK, HIGH);
      digitalWrite(CLK, LOW);
      digitalWrite(CLK, HIGH);
      digitalWrite(CLK, LOW);
    }
    
    dacWrite(ANA_R, (data[12]+ data[13]+ data[14])/12);  //data[x]は最大1024までになる
    dacWrite(ANA_L, (data[18]+ data[19]+ data[20])/12);  //DAC は8bit(最大255まで)なので、溢れないよう注意
    
    if(data[ 5]>THER_WHITE){digitalWrite(SEN_R , HIGH);}else{digitalWrite(SEN_R , LOW);}//右端センサ
    if(data[ 8]>THER_WHITE){digitalWrite(SEN_MR, HIGH);}else{digitalWrite(SEN_MR, LOW);}//右中センサ
    if(data[16]>THER_WHITE){digitalWrite(SEN_C , HIGH);}else{digitalWrite(SEN_C , LOW);}//中心センサ
    if(data[24]>THER_WHITE){digitalWrite(SEN_ML, HIGH);}else{digitalWrite(SEN_ML, LOW);}//左中センサ
    if(data[27]>THER_WHITE){digitalWrite(SEN_L , HIGH);}else{digitalWrite(SEN_L , LOW);}//左端センサ
  
    
    //Serial.println (data[15]);
    delay(5);//ココで露光時間調整
  }

}

RMCR2017夏


今回は日程の関係か参加台数は少なめだが、マスタークラスが新設されたRMCR
いつもの連中は自由にやらせといて、Advanceクラスを一新する良い変更だと思う。

さて、競技結果は、
予選を2位で通過するも
決勝Tでは、パターン剥離で走行できず。残念
常に監視していた箇所なのだけど、まさか本番で壊れるとは

築地でご飯