Top > FLIR_Lepton 広告
*廉価な長波長赤外線 (LWIR) カメラ [#n0e34fde]
[[FLIR Lepton:http://www.flir.com/cores/content/?id=66257]]は小型で安価なボロメータ型の長波長赤外線 (LWIR) カメラ。
解像度は80x60で画角は水平方向が50度、縦方向が39度、対角線が63.5度
[[Sparkfunの開発用キット:https://www.sparkfun.com/products/13233]]のおかげで簡単に使えるようになっている。~
このキットは[[秋月電子:http://akizukidenshi.com/catalog/g/gM-09113/]]や[[ストロベリーリナックス:https://strawberry-linux.com/catalog/items?code=18257]]でも購入可能
[[Sparkfunのチュートリアル:https://learn.sparkfun.com/tutorials/flir-lepton-hookup-guide]]や[[キットの開発元?:http://www.pureengineering.com/projects/lepton]]が詳しい。
[[Raspberry Pi]]を使うのが一番楽だと思う。[[Arduino]]でやろうとしないほうがいい。
-[[やるならArduino Dueなどで>FLIR_Lepton/Arduino]]
[[FTDIのFT232シリーズで読み込む>FLIR_Lepton_with_FT232xx]]のはPCが使えるので便利。
**画像を読み込む側の条件 [#v3d54d29]
以下の条件を満たすマイコンやFPGA、PCなどを使わないと画像が得られない。
-SPIが使えること。
--I2Cも有ったほうが良いが、画像を撮るだけなら必要ない
-SPIで約40msecの間に約10KB読み込めること
--もう少し正確には1/27秒で9840バイト読める能力が必要
-10kB以上のデータを保存できること(必須ではない)
この理由から[[Arduino]]のunoやnano、miniなど8 bit系のCPU(ATmega168やATmega328など)を使っているものは[[かなり困難>FLIR_Lepton/Arduino]]。~
ピン配置はUNOなどに合わせてあるのに!
**設定 [#u1d0c45c]
-SPI MODE 3
--MODE 0でもできるかも
-2MHz以上のクロック
--これはやっと読めるだけなので実際は16MHz以上はほしい
-MSBから送信
**データ構造 [#b791a79e]
一行(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で設定する。
**読み込みシーケンス [#acd195c0]
単純にはこんな感じ、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
}
となる。これはパケット番号のみ表示する。実際は[[いろいろ大変>FLIR_Lepton/Arduino]]
**接続 [#pc726221]
ただ画像を撮るだけなら、SPIだけでよい~
またMOSIは繋がなくても良いので、電源2本とCS、SCK、MISOの5本繋げばいい。
コマンドを送ったり画像以外のデータ(ステータス、受光面温度など)を読む場合はI2Cもつなぐ必要がある。
画像と温度を対応させたい場合は受光面の温度を知る必要があるのでI2Cが必要。~
でも、普通に使うと受光面の温度は室温と大して変わらないことが多いので室温から推測できると思う。
**リンク [#ee3cd666]
-[[FLIR Lepton:http://www.flir.com/cores/content/?id=66257]]
-[[秋月電子:http://akizukidenshi.com/catalog/g/gM-09113/]]
-[[ストロベリーリナックス:https://strawberry-linux.com/catalog/items?code=18257]]
-[[Sparkfunのチュートリアル:https://learn.sparkfun.com/tutorials/flir-lepton-hookup-guide]]
-[[Google グループ:https://groups.google.com/forum/#!forum/flir-lepton]]
広告 |