インターフェース7月号

140528
教授の記事が読めるのはインターフェースだけ。
10ページに渡りRCサーボモータの機構構造や通信インターフェース、制御特性が解説されている。後半では5種類のサーボモータに対して負荷(慣性重量)を変化させた場合の応答特性と消費電力の測定がされており、負荷が大きくなっても定速度回転に落ち着くまでの時間に変化があまり無いが、目標角度付近での収束性が悪くなることが示されている。
ちなみに、評価されたサーボモータはBasicクラス認定サーボとは違い、負荷もマイコンカーのレンジよりも小さい。この記事を参考に特性を取ると役立つような気がする

サンプルブック

CIMG0238
12系列の抵抗とコンデンサでサンプルブックのような物を作る。
次は1005サイズで作ろう。

3Dプリンタ見てきた

121207
AIP CLOUD 3DAYS- 3rd Season-でホットプロシードさん博多図工室さんの展示を見てきた

写真は3DプリンタBlade-1
3Dデータはフリーソフトや安価なソフトでも作成可能とのこと。
動作音も静かで、少し前の静穏モードの無いインクジェットプリンタと同じくらいの音しかしない。

12月にOPENした博多図工室さん
たぶんはんだづけカフェのようなコンセプトの施設で、
この3Dプリンタとレーザー加工機が常設してあるとのこと。
気軽に立ち寄って3Dプリンタやレーザー加工が出来るのだとしたら嬉しい。
公式サイトが出来るのが楽しみだ。

ハッピーPCB

IMG_0962
ハッピーPCBから基板が届いた。
基板品質はPBと同じくらい良くてスルーホールの穴ズレも殆ど無い。
納期も早い。
9/26夜 web上で注文、ガーバー送付
9/27夕 ガーバー確認完了、製造開始
10/10  発送(10月頭に工場の連休が入った)
10/11  到着

ただし、
ハッピーPCBにはガーバーデータの命名規則がないため、
データをどの層のパターンとするかの判断は工場で決めているようだ。

久々のトラブルで勉強になったので覚書。
①ファイル名はコレくらい分かりやすく書く
Component side Pattern.grb
Solder side Pattern.grb
Component side Resist.grb
Solder side Resist.grb
②念のためガーバー上にもどの面のデータか書く
121014
③製造前に完成予定図を提出してもらう

M64282FPまとめ

①中古のポケットカメラを買ってくる(amazonで1円~)
②特殊ねじの頭をドリルで壊す
IMG_0737
③M64282FPとレンズのついたモジュールが出てくる
IMG_0746
④各信号線を確認して
IMG_0752
⑤Arduinoにつなぐ
IMG_0750
⑥プログラムを書く
#define voutPin 0
#define readPin 2
#define xckPin 3
#define resetPin 4
#define loadPin 5
#define sinPin 6
#define startPin 7

#define reg0 0x00
#define reg1 0x0F //ゲイン
#define reg2 0x05 //C1 露光時間
#define reg3 0x00 //C0 露光時間
#define reg4 0x01
#define reg5 0x00
#define reg6 0x01
#define reg7 0x07

#define Xck_H digitalWrite(xckPin,HIGH)
#define Xck_L digitalWrite(xckPin,LOW)

unsigned char data[256];

// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);

pinMode(readPin, INPUT);
pinMode(xckPin, OUTPUT);
pinMode(resetPin, OUTPUT);
pinMode(loadPin, OUTPUT);
pinMode(sinPin, OUTPUT);
pinMode(startPin, OUTPUT);

}

// the loop routine runs over and over again forever:
void loop() {
char buf;
int adcnt;
int datacnt;
int i;

digitalWrite(resetPin,LOW);//RESET -> L
Xck_H;
Xck_L;
Xck_H;
Xck_L;
digitalWrite(resetPin,HIGH);//RESET -> H リセット解除
Xck_H;
Xck_L;

//レジスタ設定
setReg(2,reg2);
setReg(3,reg3);
setReg(1,reg1);
setReg(0,reg0);
setReg(4,reg4);
setReg(5,reg5);
setReg(6,reg6);
setReg(7,reg7);

Xck_H;
Xck_L;
digitalWrite(startPin,HIGH);//スタートH カメラスタート
Xck_H;
digitalWrite(startPin,LOW);//スタートL
Xck_L;
Xck_H;

while(digitalRead(readPin)==LOW){//READシグナル待
Xck_L;
Xck_H;
}

adcnt=0;
datacnt=0;

//今回は8列8行毎に32×32画素を取得する
while(datacnt<255){
if((adcnt&0x0070)==0x0000){//8列中1列データ取得
data[datacnt]=(analogRead(voutPin)/4); //ADの最大値1024を8bitに圧縮
datacnt=datacnt+1;
}
adcnt=adcnt+1;
Xck_L; Xck_H;
Xck_L; Xck_H;
Xck_L; Xck_H;
Xck_L; Xck_H;
Xck_L; Xck_H;
Xck_L; Xck_H;
Xck_L; Xck_H;
Xck_L; Xck_H;
}

//シリアルモニタに画像データを表示する
for(i=0;i<256;i++){
if(i%16==0){Serial.println(" ");}
if(data[i]<100){Serial.print(" ");}
if(data[i]<10){Serial.print(" ");}
Serial.print(data[i], DEC);
Serial.print(" ");
}
Serial.println(" ");

while(1){}
}

void setReg( unsigned char adr, unsigned char data )
{
//アドレス転送(3bit)
if((adr&0x04)==0x04){digitalWrite(sinPin,HIGH);}else{digitalWrite(sinPin,LOW);}
Xck_H; Xck_L;
if((adr&0x02)==0x02){digitalWrite(sinPin,HIGH);}else{digitalWrite(sinPin,LOW);}
Xck_H; Xck_L;
if((adr&0x01)==0x01){digitalWrite(sinPin,HIGH);}else{digitalWrite(sinPin,LOW);}
Xck_H; Xck_L;

//データ転送(8bit)
if((data&0x80)==0x80){digitalWrite(sinPin,HIGH);}else{digitalWrite(sinPin,LOW);}
Xck_H; Xck_L;
if((data&0x40)==0x40){digitalWrite(sinPin,HIGH);}else{digitalWrite(sinPin,LOW);}
Xck_H; Xck_L;
if((data&0x20)==0x20){digitalWrite(sinPin,HIGH);}else{digitalWrite(sinPin,LOW);}
Xck_H; Xck_L;
if((data&0x10)==0x10){digitalWrite(sinPin,HIGH);}else{digitalWrite(sinPin,LOW);}
Xck_H; Xck_L;
if((data&0x08)==0x08){digitalWrite(sinPin,HIGH);}else{digitalWrite(sinPin,LOW);}
Xck_H; Xck_L;
if((data&0x04)==0x04){digitalWrite(sinPin,HIGH);}else{digitalWrite(sinPin,LOW);}
Xck_H; Xck_L;
if((data&0x02)==0x02){digitalWrite(sinPin,HIGH);}else{digitalWrite(sinPin,LOW);}
Xck_H; Xck_L;
if((data&0x01)==0x01){digitalWrite(sinPin,HIGH);}else{digitalWrite(sinPin,LOW);}
Xck_H;
digitalWrite(loadPin,HIGH); //LOADピン→H
digitalWrite(sinPin,LOW);
Xck_L;
digitalWrite(loadPin,LOW); //LOADピン→L
}

カメラの感度調整は殆ど露光時間で行う。
ゲインで弄ると2値化処理しているような画になる。

フレームレートは露光時間とデータ転送時間できまる
照明を明るくして露光時間を減らした上で、
Xckのクロックを上げて、AD変換速度も上げる。(がじぇるねを使う)
さらに、
128×128画素も不要ならばデータを読み飛ばしてAD変換の時間を削る。
画の後半が不要ならば、データの始めの方(写真の上の方)だけを取得して
リセットをかける。捨てた後半のデータ転送時間が節約できる
これで、H8-3048で37fps位にはなる。

参考
http://www.seattlerobotics.org/encoder/200205/gbcam.html
http://www2.plala.or.jp/k_y_yoshino/w6/vision.html
http://mieng.net/miu/index.php?main_page=product_info&products_id=18
http://embedded754.blog6.fc2.com/

ロボット競技大会応援

111001
前日夜から歴代OBと集り、そのまま大会へ。
初日よりも飛躍的に良い成績だったが、今年も全国に届かず。

こつこつ

結局平日は何もできず。

@6:30:準備開始
@7:00:シリコンシート切り,工具準備完了
@7:20:ノートPC準備
@8:00:デジカメ,梱包etc完了

@全国大会専用特別処理再実装,DIPSWによるパラメータ設定項目追加
@夕食はスープカレー

@前回までの谷のスロープの長さは110cm程度

@dscn0733.JPG

@北海道大会コース
@ビール園にて夕食

ちょっと一服

080112.jpeg
時計台やTV塔等少し観光して回り、TV塔のふもとと、JR地下外で白い恋人を確保する。
日持ちしないニシン漬は最終日に購入する。

到着

17頃に北海道入りし、いよいよといった感じである。

・昨年よりも雪が少なく感じる
・疾風さん曰く、白い恋人はどこも完売
・夕食は札幌ビール園、明日も札幌ビール園