QFP, ATmega168
Posted by arms22 on 2010年12月23日

写真はちょっと変わったブレスレット、、、ではなくQFP(Quad Flat Package、4辺に端子がでているプラスチックパッケージ)のATmega168。ATmega168はArduinoにも採用されているATmega328のメモリが少ないバージョン。本当はATmega328のQFPが欲しかったんだけど、ずっと品薄状態が続いてて、いつまでたっても入手できそうにないのだ。ATmega168なら比較的在庫が豊富にあるのでそれならばとDigiKeyでお買い物をするついでに買ってみたというわけ。1つ188円@25個。
特に何か作りたいと言うわけでもないんだけど、とりあえず持っとけ見たいな。今度、Fusion PCBに基板を発注する時に何か面白げなものを作ろうかな。Dotsduino Proとかね。
スポンサーサイト
梅.py Python自習室 その6
Posted by arms22 on 2010年12月13日

梅.pyこと「Python自習室」そのわりにPython率低めの、生粋のPythonな人たちに白い目で見られる会の6回目に参加してきました。今回、カメラをおうちに忘れてきてしまったので、音声のみでお届けします(ごめんなさい)。
この日のトピックは、
- @nobonobo による Python-on-a-chip の紹介とデモ
- @soundkitchen が Kinect でナニかしない
Kinectはピクセルデータとは別に深度データも送ってくる様子。Kinect自体はただのカメラで受け側でちゃんとデータを処理しないといけない。Kinectの開発元が公式のデバイスドライバを公開するとかなんとかで、結構期待できそう。
僕の方はと言うとスタバカップアンプのはんだづけと、LEDマトリクスを使ったタッチ検出の実験、と相変わらずPythonはやってまてん。LEDが光センサーに使えるという話はずいぶん前に聞いていて、DotsduinoのLEDマトリクスを使ってできそうと思ったので挑戦してみました。まだドット単位でタッチを検出することはできてないけど、それなりにタッチを検出できていそう。詳しい話はEDN Japanで紹介されているので、そちらを参照してみてください。
LEDを光センサーとして使い、照明強度を計測
http://ednjapan.cancom-j.com/content/issue/2007/02/idea/idea01.html
これは1つのLEDを使った場合のお話。LEDマトリクスの場合、LEDが数十個もあるので1つ1つ検出していると結構時間がかかってしまう。
梅.py Python自習室 (mini Hack-a-thon)「ぱはPythonのぱ」 その6
http://tweetvite.com/event/umepy201012
Arduinoで遊ぼう - LinkSprite JPEGカメラモジュール「LS-Y201」
Posted by arms22 on 2010年12月06日

スイッチサイエンスで発売されている新しいJPEGカメラモジュール「LS-Y201」を試してみたよ。LS-Y201は以前このブログでも紹介したJPEGカメラモジュール「C328」と似た機能をもつモジュールで、JPEG圧縮されたカラー静止画をシリアルで出力する。C328の販売が終了して、代わりのカメラモジュールをずっと探していたので、LS-Y201の発売はうれしいかぎり。
LS-Y201の仕様
- 解像度: 640x480(VGA)/320x480(QVGA)/160x120
- ボーレート: 38400 bps
- 電源電圧: 3.3V または 5V
- サイズ: 32x32 mm
- 消費電流: 80~100mA


LS-Y201で撮影した画像。鮮やかさに欠けるけど画質はそこそこ。ピント調節はネジ式のレンズをぐりぐり回さないといけないので難しい。
Arduinoと接続する
5V <--> VCC(LS-Y201)LS-Y201の動作電圧は 3.3V か 5V なので、5V動作のArduino(UNOやDuemilanove、MEGAなど)直結できる。LS-Y201の電源(VCCとGND)とシリアルポート(TXとRX)をArduinoの端子につなげるだけでOKだ。
2番(RX) <--- TX(LS-Y201)
3番(TX) ---> RX(LS-Y201)
GND <--> GND(LS-Y201)
JPEGCameraライブラリ
Arduino用ライブラリはSparkFunが提供している「JPEGCamera」ライブラリが使える。けどこのライブラリはNewSoftSerialを使うことを前提に設計されていて、HardwareSerialが使えないようになっている。それだとちょっと不便だと思ったので、ちょっと修正してHardwareSerialでも使えるようにしておいた。ついでに撮影サイズを変更する為の処理も追加した。僕が改造したJPEGCameraライブラリは次のURLからダウンロードできる。
JPEGCamera-001.zip
http://code.google.com/p/arms22/downloads/detail?name=JPEGCamera-001.zip
上記、JPEGCameraの変更と合わせてNewSoftSerialの継承元クラスをPrintクラスからStreamクラスに変更した。こうする事でJPEGCameraはStreamクラスから派生したクラスすべてに対応することができた。
NewSoftSerial-001.zip
http://code.google.com/p/arms22/downloads/detail?name=NewSoftSerial-001.zip
サンプルスケッチ(Arduino)
Arduino側のスケッチ。PCから何らかのデータを受信したら、撮影を開始しJPEG画像をPCに送信する。工場出荷時にJPEGカメラのボーレートは38400 bps、撮影サイズは320 x 240に設定されている。撮影サイズを変更したい場合は、setup()のcamera.imageSizeの行を有効にする。撮影サイズはJPEGカメラのEEPROMに書き込まれるので、一度設定した後はcamera.imageSizeの行を無効に戻す。
#include <JPEGCamera.h>
#include <NewSoftSerial.h>
//NewSoftSerialインスタンスを作成
NewSoftSerial mySerial(2,3);
//JPEGCameraインスタンスを作成
//コンストラクタにStreamクラスの派生クラスを指定する
JPEGCamera camera(mySerial);
//受信バッファ
unsigned char response[32];
//受信データサイズ
unsigned int count=0;
//撮影したJPGE画像サイズ
unsigned int size=0;
//次に読み込むJPEG画像のアドレス
unsigned int address=0;
void setup()
{
//シリアルポートセットアップ
//JPEGカメラ-Arduino 38400 bps
//Arduino-PC 115 kbps
mySerial.begin(38400);
Serial.begin(115200);
//撮影サイズ設定(640x480,320x240,160x120)
//指定した撮影サイズはEEPROMに書き込まれるので1度実行したらコメントアウトしておく
// if( camera.imageSize(JPEGCamera::IMG_SZ_640x480) == false ){
// Serial.println("imageSize failed");
// }
//JPEGカメラをリセット
if( camera.reset() == false ){
Serial.println("reset failed");
}
//4秒程まってから撮影を開始する
delay(4000);
}
void loop()
{
//PCからの撮影トリガを待つ
if( Serial.available() ){
//受信データ破棄
Serial.flush();
//撮影する
if( camera.takePicture() == false ){
Serial.println("takePicture failed");
}
//撮影した画像データのサイズを取得する
if( camera.getSize(&size) == false ){
Serial.println("getSize failed");
}
//開始アドレスを0に、size分読み込むまで繰り返す
address = 0;
while(address < size)
{
//32byte読み込む
count = camera.readData(response, 32, address);
if( count ){
//PCに送信する
Serial.write(response, count);
//受信したデータサイズ分、アドレスを更新する
address += count;
}
else{
Serial.println("readData failed");
}
}
//撮影停止(一旦止めないと新しい画像は撮影されない)
camera.stopPictures();
//少し待つ
delay(100);
}
}
サンプルスケッチ(Processing)
Processing側のスケッチ。何らかのキー入力を受けると、Arduinoに1バイトデータを送信し、ArduinoからJPEG画像を受信する。受信の終わりはコンソールのメッセージが止まったことを目視で確認する。もう1度何かのキーを押すと、受信したJPEG画像が画面に表示される。受信したJPEG画像はスケッチのあるフォルダにphoto数字.jpgという名前で保存される。
import processing.serial.*;
Serial myPort;
String filename = "photo.jpg";
byte count = 0;
byte[] photo = {
};
Boolean readData = false;
PImage captureImage;
void setup()
{
size(640,480);
println( Serial.list() );
//Serial.list()[3]は環境に合わせて変更すること。
myPort = new Serial( this, Serial.list()[1], 115200 );
}
void draw()
{
byte[] buffer = new byte[64];
if( readData )
{
while( myPort.available() > 0 )
{
int readBytes = myPort.readBytes( buffer );
print( "Read " );
print( readBytes );
println( " bytes ..." );
for( int i = 0; i < readBytes; i++ )
{
photo = append( photo, buffer[i] );
}
}
}
else
{
while( myPort.available() > 0 )
{
print( "COM Data: " );
println( myPort.readString() );
}
}
}
void keyPressed()
{
if( photo.length > 0 ) {
readData = false;
print( "Writing to disk " );
print( photo.length );
println( " bytes ..." );
filename = "photo" + count + ".jpg";
saveBytes( filename, photo );
println( "DONE!" );
photo = new byte[0];
captureImage = loadImage(filename);
image(captureImage, 0, 0);
count++;
}
else {
readData = true;
myPort.write(0);
println( "Waiting for data ..." );
}
}
参考URL
mbedを使ったLinkSprite JPEG Color Camera LS-Y201からの画像取得
http://shinta-main-jp.blogspot.com/2010/11/mbedlinksprite-jpeg-color-camera-ls.html
LinkSpriteシリアル接続JPEGカラーカメラ
http://www.switch-science.com/products/detail.php?product_id=453
LinkSprite UART出力JPEGカラーカメラ(640x480)
http://strawberry-linux.com/catalog/items?code=18143
LinkSpriteシリアル接続JPEGカラーカメラ
http://www.wakamatsu.ne.jp/cgi-bin/shop/shop.cgi?&id=41049
LinkSprite JPEG Color Camera TTL Interface
http://www.sparkfun.com/products/10061
Arduinoで遊ぼう - JPEGカメラモジュールで写真を撮る
http://arms22.blog91.fc2.com/blog-entry-261.html
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
posted with amazlet at 10.12.06
小林 茂
オライリージャパン
売り上げランキング: 6565
オライリージャパン
売り上げランキング: 6565
該当の記事は見つかりませんでした。