Top > FLIR_Lepton 広告 廉価な長波長赤外線 (LWIR) カメラFLIR Leptonは小型で安価なボロメータ型の長波長赤外線 (LWIR) カメラ。 解像度は80x60で画角は水平方向が50度、縦方向が39度、対角線が63.5度 Sparkfunの開発用キットのおかげで簡単に使えるようになっている。 Sparkfunのチュートリアルやキットの開発元?が詳しい。 Raspberry Piを使うのが一番楽だと思う。Arduinoでやろうとしないほうがいい。 FTDIのFT232シリーズで読み込むのはPCが使えるので便利。 画像を読み込む側の条件以下の条件を満たすマイコンやFPGA、PCなどを使わないと画像が得られない。
この理由からArduinoのunoやnano、miniなど8 bit系のCPU(ATmega168やATmega328など)を使っているものはかなり困難。 設定
データ構造一行(164バイト)が一つの単位だけど、垂れ流しているのでどう読んでも、つまり164バイト以下で読んだり、まとめて読んでも良い。でも以下の通り164バイト単位で読み込んだほうがわかりやすい。 最初の2バイトがパケットのIDで次の2バイトがチェックサム、残りの160バイトが画像データ。 最初の2バイトの1バイト目はデータが使えるかどうかを示していて、次の1バイトがパケットの番号を示している。 もし最初の1バイトが0xXF(Xはなんでもいい、つまり下位4bitがすべて1)ならそのパケットは使えない。 なのでそのパケットが使えるかどうかは1バイト目を見ればよく、また2バイト目でもわかる。 160バイトの画像データは2バイトが一組になっているので、1ピクセル当たり16bit(使えるデータは14bit)が割り振られている。 テレメトリをイネーブルにすると3ライン分(3x164バイト)増える。 読み込みシーケンス単純にはこんな感じ、Raspberry Piはここまで意識しなくても使える
164x60バイトを1/27秒以下で読み込まないと、パケット番号が途中(例えば0から4)までの繰り返しになる。あるいは0だけが続いたり、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だけでよい コマンドを送ったり画像以外のデータ(ステータス、受光面温度など)を読む場合はI2Cもつなぐ必要がある。 画像と温度を対応させたい場合は受光面の温度を知る必要があるのでI2Cが必要。 リンク広告 |