Top > FLIR_Lepton

広告

廉価な長波長赤外線 (LWIR) カメラ

FLIR Leptonは小型で安価なボロメータ型の長波長赤外線 (LWIR) カメラ。

解像度は80x60で画角は水平方向が50度、縦方向が39度、対角線が63.5度

Sparkfunの開発用キットのおかげで簡単に使えるようになっている。
このキットは秋月電子ストロベリーリナックスでも購入可能

Sparkfunのチュートリアルキットの開発元?が詳しい。

Raspberry Piを使うのが一番楽だと思う。Arduinoでやろうとしないほうがいい。

FTDIのFT232シリーズで読み込むのはPCが使えるので便利。

画像を読み込む側の条件

以下の条件を満たすマイコンやFPGA、PCなどを使わないと画像が得られない。

  • SPIが使えること。
    • I2Cも有ったほうが良いが、画像を撮るだけなら必要ない
  • SPIで約40msecの間に約10KB読み込めること
    • もう少し正確には1/27秒で9840バイト読める能力が必要
  • 10kB以上のデータを保存できること(必須ではない)

この理由からArduinoのunoやnano、miniなど8 bit系のCPU(ATmega168やATmega328など)を使っているものはかなり困難
ピン配置はUNOなどに合わせてあるのに!

設定

  • SPI MODE 3
    • MODE 0でもできるかも
  • 2MHz以上のクロック
    • これはやっと読めるだけなので実際は16MHz以上はほしい
  • MSBから送信

データ構造

一行(164バイト)が一つの単位だけど、垂れ流しているのでどう読んでも、つまり164バイト以下で読んだり、まとめて読んでも良い。でも以下の通り164バイト単位で読み込んだほうがわかりやすい。

最初の2バイトがパケットのIDで次の2バイトがチェックサム、残りの160バイトが画像データ。

最初の2バイトの1バイト目はデータが使えるかどうかを示していて、次の1バイトがパケットの番号を示している。

もし最初の1バイトが0xXF(Xはなんでもいい、つまり下位4bitがすべて1)ならそのパケットは使えない。
また2バイト目は、通常は59が最高(テレメトリをつけた場合は62)なのでそれ以上の数値が出ていたらおかしい。ただし、0xFFは正常でも59の後などに出る。

なのでそのパケットが使えるかどうかは1バイト目を見ればよく、また2バイト目でもわかる。
ちゃんと動いていればパケットは順番通りに出てくる。飛んだり変な数値が出た場合はちゃんと読めていない。

160バイトの画像データは2バイトが一組になっているので、1ピクセル当たり16bit(使えるデータは14bit)が割り振られている。

テレメトリをイネーブルにすると3ライン分(3x164バイト)増える。
テレメトリはデフォルトで最後に付くが、最初に付けるように設定できる。
テレメトリをイネーブルにしたり、テレメトリの位置を変える場合はI2Cで設定する。

読み込みシーケンス

単純にはこんな感じ、Raspberry Piはここまで意識しなくても使える

  • CSをLow
  • SCK開始
  • MISOにデータが送られる
  • 任意のデータを読み込む
  • SCK停止
  • CSをHigh

164x60バイトを1/27秒以下で読み込まないと、パケット番号が途中(例えば0から4)までの繰り返しになる。あるいは0だけが続いたり、59よりも大きな数字や0xFFが出てくる。
ただし、正常な場合でも59の後は0xFFがでる。

例えばArduinoだとSPI関連部分は

#include <SPI.h>
void setup()
{
  Serial.begin(115200);
  SPI.setDataMode(SPI_MODE3);
  SPI.setClockDivider(SPI_CLOCK_DIV2);
  SPI.begin();
}
void loop()
{
  int i;
  byte buf[164];
  PORTB &= ~(1 << 2);  //CS (D10) -> Low
  for (i = 0; i < 164; i++)
  {
    buf[i]=SPI.transfer(0x00);
  }
  PORTB |= 1 << 2;  //CS (D10) -> High
  Serial.write(buf[1]);  //Packet number
}

となる。これはパケット番号のみ表示する。実際はいろいろ大変

接続

ただ画像を撮るだけなら、SPIだけでよい
またMOSIは繋がなくても良いので、電源2本とCS、SCK、MISOの5本繋げばいい。

コマンドを送ったり画像以外のデータ(ステータス、受光面温度など)を読む場合はI2Cもつなぐ必要がある。

画像と温度を対応させたい場合は受光面の温度を知る必要があるのでI2Cが必要。
でも、普通に使うと受光面の温度は室温と大して変わらないことが多いので室温から推測できると思う。

リンク


広告

Reload   Diff   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes
Last-modified: Fri, 13 Jan 2017 13:33:30 HADT (1007d)