なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

QFP, ATmega168

Posted by arms22 on 2010年12月23日 1  0

IMGP0223

写真はちょっと変わったブレスレット、、、ではなく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日 3  0

梅.pyこと「Python自習室」そのわりにPython率低めの、生粋のPythonな人たちに白い目で見られる会の6回目に参加してきました。今回、カメラをおうちに忘れてきてしまったので、音声のみでお届けします(ごめんなさい)。

この日のトピックは、

Python-on-a-chipはプリコンパイルされたバイトコードをターゲットマイコンで動作させるみたい。レジスタアクセスなどハードウェアをいじるネイティブ部分はランタイムにCで記述して、それをPythonからコールする仕組みのようだ。NetduinoなんかのC#環境と似てるね。ネイティブ周りのコードが整備された環境だと便利だねー。これはPython自習室っぽいネタだね~

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日 35  0

IMGP0211

スイッチサイエンスで発売されている新しい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
今回、C328の使い方を紹介した時と同じやり方で、LS-Y201で撮影した画像をPCの画面に表示する方法を紹介しよう。

LinkSprite JPEG Color Camera Sample Image LinkSprite JPEG Color Camera Sample Image

LS-Y201で撮影した画像。鮮やかさに欠けるけど画質はそこそこ。ピント調節はネジ式のレンズをぐりぐり回さないといけないので難しい。


Arduinoと接続する

5V      <--> VCC(LS-Y201)
2番(RX) <--- TX(LS-Y201)
3番(TX) ---> RX(LS-Y201)
GND <--> GND(LS-Y201)
LS-Y201の動作電圧は 3.3V か 5V なので、5V動作のArduino(UNOやDuemilanove、MEGAなど)直結できる。LS-Y201の電源(VCCとGND)とシリアルポート(TXとRX)をArduinoの端子につなげるだけでOKだ。


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


Arduino Uno SMD
Arduino Uno SMD
posted with amazlet at 11.02.02
スイッチサイエンス
売り上げランキング: 23827



Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ
小林 茂
オライリージャパン
売り上げランキング: 6565



該当の記事は見つかりませんでした。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。