トランジスタ技術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); } }
そうしてようやく得られた画像がこちら。
ちいさっ!地味!