mbedでトラ技3月号の頒布カメラBを使う

トランジスタ技術2012年3月号 の特集で紹介されていた頒布カメラBをmbedで使ってみました。


ほとんどこちらの記事をなぞっただけです。大変参考になりました。
Robot No.8080のブログ mbed + トラ技カメラBの実験。(その1)


1.カメラモジュールのデータシートを入手して、ピンの位置を確認

2.カメラモジュールとmbedを配線

3.mbedのプログラムをインポート

4.撮影

5.Processingでデータを画像化


1.カメラモジュールのデータシートを入手して、ピンの位置を確認
こちらのページから「PCB寸法図」のpdfをダウンロードします。20本あるピンの左下・白い三角があるところが1pinで、その上が2pin、3pinは1pinの右、となっています。僕は横に進んでいくと勘違いしました。


2.カメラモジュールとmbedを配線

それぞれのpinをこちらの記事に従って配線します。

SCL端子(3pin)はプルアップします。抵抗は10kΩでOKでした。

8pinはnc(No Connection?)となっているので、結線していません。


3.mbedのプログラムをインポート
こちらのプログラムをインポートします。

4.撮影

ターミナルのscreen だと文字化けしてしまったので、ArduinoのSerial Monitorで表示しました。通信速度が最初は9600になっているので、115200に変更。

イニシャライズの後、何か文字を送ると数字がダーッと出力されます。これが160px * 120px * RGBのデータになります。改行を削除すると57600文字あります。


5.Processingでデータを画像化

今回はテストなので、この文字列をテキストエディタにコピペして「captureData.txt」というファイル名で保存。Processingで読み込んで以下のように各ドットを描画すると、画像としてみる事ができます。取りだした値は0〜15なので、16を掛けて256段階にしてます。


int width = 160;
int height = 120;
String[] pixeldata;

void setup(){
  size(width, height);
  noStroke();
  pixeldata = loadStrings("captureData.txt");
}

void draw(){
  for( int i=0; i<width*height; i++){
    int x = i%width;
    int y = i/width;
    
    fill(
        unhex( String.valueOf(pixeldata[0].charAt(3*i+0)) ) *16,
        unhex( String.valueOf(pixeldata[0].charAt(3*i+1)) ) *16,
        unhex( String.valueOf(pixeldata[0].charAt(3*i+2)) ) *16
    );    

    rect(x, y, 1, 1);
  }
}



そうしてようやく得られた画像がこちら。

ちいさっ!地味!