はじめに
ToFセンサとHDRカメラを組み合わせて、自動で撮影するカメラを製作しました。
被写体が設定した距離に近づくと自動的に撮影します。
製作物の機能
- ToFセンサで距離を測距(4×8ポイント)
- 距離を色で表示
- HDR/SDR切替
- ホワイトバランス設定
- 撮影距離範囲設定
- 手動撮影機能
- ISO感度/シャッター速度表示
必要な部品
-
Spresenseメインボード
-
Spresense 拡張ボード
-
Spresense HDRカメラ
-
ToFセンサーボード(SPRESENSE用)(MM-TOF10-IS)
-
Mic&LCD KIT for SPRESENSE
- LCDのみを使います。
- https://akizukidenshi.com/catalog/g/g116589/
-
固定用アクリル板
- レーザーカッターで切断します。
-
LCD取付用ヘッダーピン、ピンソケット
- LCD90度折り曲げて取付する用
制作プロセス
ハードウェア
- SpresenseメインボードをSpresense拡張ボードに取り付けます。
- Spresense拡張ボードを固定用アクリル板1に取り付けます。
- ToFセンサモジュールを、IFモジュールにFFCケーブルを使い接続します。
- Spresense拡張ボードにToFセンサIFモジュールを取り付けます。ToFセンサのマニュアル通りにIFモジュールをJP1,JP2に取り付けます。
- HDRカメラをカメラコネクタに取り付けます。
- LCDをピンヘッダとピンソケットを使い90度折り曲げてSpresense拡張ボードに取り付けます。
- HDRカメラとToFセンサモジュールを固定用アクリル板2に取り付けます。HDRカメラとToFセンサモジュールのレンズ中心位置の垂直位置を合わせるようにします。
- 固定用アクリル板2を固定用アクリル板1に取り付け金具を使い取り付けます。
ソフトウェア
- ソースコードを以下に示します。
- ビルド時はメインメモリは1280MB確保するようにしてください。
- メインコアのみ使用しています。
メインコア
#include <Camera.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <MM-ToF10.h>
#include <SDHCI.h>
#include <stdio.h> /* for sprintf */
#include <SPI.h>
#include "colmap.h"
#define TFT_DC 9
#define TFT_CS 10
static float tofdata[8][4];
float* tofptr = (float*)tofdata;
unsigned char col[3][1280];
int imageResolution = 32;
int imageWidth = 8;
int imageHeight = 4;
// 画面内位置
#define XP_HDR 170
#define YP_HDR 0
#define XP_JPG 170
#define YP_JPG 20
#define XP_TOF 170
#define YP_TOF 130
#define XP_RNG 170
#define YP_RNG 50
#define XP_PLT 16
#define YP_PLT 130
#define XP_ISO 0
#define YP_ISO 200
#define XP_SHUT 0
#define YP_SHUT 220
#define XP_WB 0
#define YP_WB 240
#define XP_FILE 0
#define YP_FILE 260
#define XP_CAP 0
#define YP_CAP 280
#define XP_ERR 0
#define YP_ERR 300
#define PSZ 16
#define TOFPOSMAX 5
#define QTINIT 80 //JPEG品質初期値
Adafruit_ILI9341 display = Adafruit_ILI9341(TFT_CS, TFT_DC);
SDClass theSD;
int button4 = HIGH;
int button5 = HIGH;
int button6 = HIGH;
int button7 = HIGH;
int take_picture_count = 0;
bool hdrmode = false; //HDRモード
char* wbname[] = {"Automatic ", "Incandescent", "Fluorescent ", "Daylight ", "Flash ", "Cloudy ", "Shade "};
CAM_WHITE_BALANCE wbmode[] = {CAM_WHITE_BALANCE_AUTO,
CAM_WHITE_BALANCE_INCANDESCENT,
CAM_WHITE_BALANCE_FLUORESCENT,
CAM_WHITE_BALANCE_DAYLIGHT,
CAM_WHITE_BALANCE_FLASH,
CAM_WHITE_BALANCE_CLOUDY,
CAM_WHITE_BALANCE_SHADE
};
int wbpos = 0 ; // ホワイトバランスモード
int tofpos = 0 ; //
int dtime = 500 ;
int qt = QTINIT ;
float imgsize;
int iso ;
int exposure ;
int tofrange[TOFPOSMAX][2] = {
{100, 200},
{200, 300},
{300, 500},
{500, 900},
{900, 2000}
};
int dist ;
void printError(enum CamErr err)
{
display.setTextColor(ILI9341_RED, ILI9341_BLACK); display.setTextSize(1);
display.setCursor(XP_ERR, YP_ERR );
display.print("Error: ");
switch (err)
{
case CAM_ERR_NO_DEVICE: display.println("No Device"); break;
case CAM_ERR_ILLEGAL_DEVERR: display.println("Illegal device error"); break;
case CAM_ERR_ALREADY_INITIALIZED: display.println("Already initialized"); break;
case CAM_ERR_NOT_INITIALIZED: display.println("Not initialized"); break;
case CAM_ERR_NOT_STILL_INITIALIZED: display.println("Still picture not initialized"); break;
case CAM_ERR_CANT_CREATE_THREAD: display.println("Failed to create thread"); break;
case CAM_ERR_INVALID_PARAM: display.println("Invalid parameter"); break;
case CAM_ERR_NO_MEMORY: display.println("No memory"); break;
case CAM_ERR_USR_INUSED: display.println("Buffer already in use"); break;
case CAM_ERR_NOT_PERMITTED: display.println("Operation not permitted"); break;
default: break;
}
}
void CamCB(CamImage img) {
if (img.isAvailable()) {
img.convertPixFormat(CAM_IMAGE_PIX_FMT_RGB565);
display.drawRGBBitmap(0, 0 /* 開始座標 */
, (uint16_t*)img.getImgBuff() /* 画像データ */
, 160 , 120 ); /* 横幅、縦幅 */
}
}
void setup() {
CamErr err;
pinMode(PIN_D04, INPUT_PULLUP);
pinMode(PIN_D05, INPUT_PULLUP);
pinMode(PIN_D06, INPUT_PULLUP);
pinMode(PIN_D07, INPUT_PULLUP);
display.begin(40000000); // 液晶ディスプレイの開始
display.setRotation(2); // ディスプレイの向きを設定
err = theCamera.begin(1, CAM_VIDEO_FPS_30, 160, 120, CAM_IMAGE_PIX_FMT_YUV422, 7 ); // カメラの開始
if (err != CAM_ERR_SUCCESS)
{
printError(err);
}
err = theCamera.setAutoWhiteBalanceMode(CAM_WHITE_BALANCE_AUTO); //ホワイトバランスをautoに設定
if (err != CAM_ERR_SUCCESS)
{
printError(err);
}
err = theCamera.setAutoISOSensitivity(true);//ISO感度をautoに設定
if (err != CAM_ERR_SUCCESS)
{
printError(err);
}
err = theCamera.setAutoExposure(true);//露光時間をautoに設定
if (err != CAM_ERR_SUCCESS)
{
printError(err);
}
err = theCamera.setHDR(CAM_HDR_MODE_OFF); //HDRモードをOFFに設定
if (err != CAM_ERR_SUCCESS)
{
printError(err);
}
err = theCamera.setStillPictureImageFormat(1280, 960, CAM_IMAGE_PIX_FMT_JPG, 4); //JPEG静止画設定
if (err != CAM_ERR_SUCCESS)
{
printError(err);
}
theCamera.setJPEGQuality(qt);
theCamera.startStreaming(true, CamCB); // カメラのストリーミングを開始
//LCD初期描画
display.fillScreen(ILI9341_BLACK);
display.setTextColor(ILI9341_YELLOW, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_HDR, YP_HDR );
display.println("SDR");
display.setTextColor(ILI9341_RED, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_JPG, YP_JPG );
display.printf("Q:%d", qt);
display.setTextColor(ILI9341_MAGENTA, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_WB, YP_WB );
display.print(wbname[wbpos]);
//SDカードマウント確認
while (!theSD.begin())
{
display.setTextColor(ILI9341_RED, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_ERR, YP_ERR );
display.print("Insert SD card.");
}
display.setCursor(XP_ERR, YP_ERR );
display.print(" ");
filecheck(); //ファイルネーム番号初期値チェック
// ToF init
MMToF10.begin();
MMToF10.sync();
MMToF10.nomal(ShortDistance, LowSpeed);
Serial.begin(115200);
Serial.println("setup done");
}
void dataplot()
{
int coln, col0 ;
int tcol, tcol0 ;
int ofst[4];
ofst[0] = 0;
ofst[1] = PSZ / 2;
ofst[2] = 0;
ofst[3] = PSZ / 2;
for (int y = 0 ; y < 4 ; y++)
{
for (int x = 0 ; x < 8 ; x++)
{
coln = int (tofdata[7 - x][y]) ;
if (coln > 999)
{
coln = 999;
}
display.fillRect( XP_PLT + x * PSZ + ofst[y] , YP_PLT + y * PSZ, PSZ, PSZ, display.color565(colmap[coln][0], colmap[coln][1], colmap[coln][2]));
}
}
}
void filecheck()
{
char filename[17] = {0};
sprintf(filename, "PICT%03d.JPG", take_picture_count);
while ( theSD.exists(filename ) )
{
take_picture_count++;
sprintf(filename, "PICT%03d_.JPG", take_picture_count);
}
display.setTextColor(ILI9341_BLUE, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_FILE, YP_FILE );
display.print("Start No:");
display.print(take_picture_count);
}
void capture()
{
display.setTextColor(ILI9341_RED, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_ERR, YP_ERR );
display.print(" ");
char filename[17] = {0};
sprintf(filename, "PICT%03d.JPG", take_picture_count);
display.setTextColor(ILI9341_RED, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_JPG, YP_JPG );
display.printf("Q:%d", qt);
CamImage img = theCamera.takePicture();
getinfo();
if (!img.isAvailable())
{
qt = qt - 5 ;
theCamera.setJPEGQuality(qt);
display.setTextColor(ILI9341_RED, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_JPG, YP_JPG );
display.printf("Q:%d", qt);
CamImage img = theCamera.takePicture();
}
qt = QTINIT ;
if (img.isAvailable())
{
display.setTextColor(ILI9341_RED, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_ERR, YP_ERR );
imgsize = img.getImgSize();
display.printf("RAM:%.0f/%.0f[KB]", imgsize / 1024.0, img.getImgBuffSize() / 1024.0);
sprintf(filename, "PICT%03d.JPG", take_picture_count);
display.setTextColor(ILI9341_BLUE, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_FILE, YP_FILE );
display.print(filename);
File myFile = theSD.open(filename, FILE_WRITE);
myFile.write(img.getImgBuff(), img.getImgSize());
myFile.close();
}
else
{
display.setTextColor(ILI9341_RED, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_ERR, YP_ERR );
display.print("Save Failed:");
}
sprintf(filename, "PICT%03d_info.txt", take_picture_count);
File myFile = theSD.open(filename, FILE_WRITE);
myFile.print("HDR mode:");
myFile.println(theCamera.getHDR());
myFile.print("white balance:");
myFile.println(wbname[wbpos]);
myFile.print("ISO:");
myFile.println(iso);
myFile.print("SHUT:");
myFile.println(exposure);
myFile.print("Size " );
myFile.println(imgsize);
myFile.print("Dist " );
myFile.println(dist);
myFile.println("TOF " );
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 8; j++) {
myFile.print(tofdata[7 - j][i]);
myFile.print(" ");
}
myFile.println();
}
myFile.println();
myFile.close();
take_picture_count++;
// delay(500);
}
void getinfo()
{
iso = theCamera.getISOSensitivity();// ISO値取得
exposure = theCamera.getAbsoluteExposure(); //露光時間取得
display.setTextColor(ILI9341_WHITE, ILI9341_BLACK); display.setTextSize(2);
display.setTextWrap(false) ;
display.setCursor(XP_ISO, YP_ISO );
display.print("ISO:");
display.setCursor(XP_ISO + 60, YP_ISO );
display.print(iso );
display.print(" ");
display.setCursor(XP_SHUT, YP_SHUT );
display.print("SHUT:");
display.setCursor(XP_SHUT + 60, YP_SHUT );
display.print(exposure);
display.print(" ");
display.setTextSize(2);
display.setCursor(XP_HDR + 40, YP_HDR );
display.print(theCamera.getHDR());
display.setTextColor(ILI9341_GREEN, ILI9341_BLACK);
display.setCursor(XP_TOF, YP_TOF );
display.print("Dist:");
display.setCursor(XP_TOF, YP_TOF + 20 );
display.print(dist);
display.print(" ");
display.setCursor(XP_RNG, YP_RNG );
display.print("RNG:");
display.setCursor(XP_RNG, YP_RNG + 20 );
display.print(tofrange[tofpos][0]);
display.print(" ");
display.setCursor(XP_RNG, YP_RNG + 40 );
display.print(tofrange[tofpos][1]);
display.print(" ");
}
void tofprint()
{
//this function is for debug
Serial.println("ToF data");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 8; j++) {
Serial.print(tofdata[j][i]);
Serial.print(" ");
}
Serial.println();
}
Serial.println();
}
void rangecheck()
{
dist = tofdata[3][2];
if ( dist > tofrange[tofpos][0] && dist < tofrange[tofpos][1])
{
display.setTextColor(ILI9341_RED, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_CAP, YP_CAP);
display.print("Capture");
capture();
display.setCursor(XP_CAP, YP_CAP);
display.print(" ");
}
}
void loop()
{
CamErr err;
int button4_input = digitalRead(PIN_D04);
int button5_input = digitalRead(PIN_D05);
int button6_input = digitalRead(PIN_D06);
int button7_input = digitalRead(PIN_D07);
MMToF10.get3d(tofptr);
//tofprint(); // for debug
dataplot();
rangecheck();
// Still Capture
if (button4_input != button4) {
if (button4_input == LOW) {
// push on
display.setTextColor(ILI9341_RED, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_CAP, YP_CAP);
display.print("Capture");
capture();
display.setCursor(XP_CAP, YP_CAP);
display.print(" ");
} else {
/// push off
}
button4 = button4_input;
}
//White Balance mode
if (button5_input != button5) {
if (button5_input == LOW) {
// push on
wbpos++;
if (wbpos > 6 )
{
wbpos = 0;
}
display.setTextColor(ILI9341_MAGENTA, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_WB, YP_WB );
display.print(wbname[wbpos]);
theCamera.setAutoWhiteBalanceMode(wbmode[wbpos]);
delay(200);
} else {
/// push off
}
button5 = button5_input;
}
//TOF range check
if (button6_input != button6) {
if (button6_input == LOW) {
// push on
tofpos++;
if (tofpos > TOFPOSMAX )
{
tofpos = 0;
}
} else {
/// push off
}
button6 = button6_input;
}
// HDR mode set
if (button7_input != button7) {
if (button7_input == LOW) {
// push on
hdrmode = !hdrmode ;
if (hdrmode == true) {
err = theCamera.setHDR(CAM_HDR_MODE_ON);
if (err != CAM_ERR_SUCCESS)
{
printError(err);
}
display.setTextColor(ILI9341_YELLOW, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_HDR, YP_HDR);
display.print("HDR");
delay(dtime);
}
else if ( hdrmode == false) {
err = theCamera.setHDR(CAM_HDR_MODE_OFF);
if (err != CAM_ERR_SUCCESS)
{
printError(err);
}
display.setTextColor(ILI9341_YELLOW, ILI9341_BLACK); display.setTextSize(2);
display.setCursor(XP_HDR, YP_HDR );
display.print("SDR");
delay(dtime);
}
} else {
/// push off
}
button7 = button7_input;
}
getinfo();
}
colormap.h
int colmap[1000][3]={
{0,0,128},{0,0,128},{0,0,128},{0,0,128},{0,0,132},{0,0,132},{0,0,132},{0,0,132},
{0,0,136},{0,0,136},{0,0,136},{0,0,136},{0,0,140},{0,0,140},{0,0,140},{0,0,140},
{0,0,144},{0,0,144},{0,0,144},{0,0,144},{0,0,148},{0,0,148},{0,0,148},{0,0,148},
{0,0,152},{0,0,152},{0,0,152},{0,0,152},{0,0,156},{0,0,156},{0,0,156},{0,0,156},
{0,0,160},{0,0,160},{0,0,160},{0,0,160},{0,0,164},{0,0,164},{0,0,164},{0,0,164},
{0,0,168},{0,0,168},{0,0,168},{0,0,168},{0,0,172},{0,0,172},{0,0,172},{0,0,172},
{0,0,176},{0,0,176},{0,0,176},{0,0,180},0,0,180},{0,0,180},{0,0,180},{0,0,184},
{0,0,184},{0,0,184},{0,0,184},{0,0,188},{0,0,188},{0,0,188},{0,0,188},{0,0,192},
{0,0,192},{0,0,192},{0,0,192},{0,0,196},{0,0,196},{0,0,196},{0,0,196},{0,0,200},
{0,0,200},{0,0,200},{0,0,200},{0,0,204},{0,0,204},{0,0,204},{0,0,204},{0,0,208},
{0,0,208},{0,0,208},{0,0,208},{0,0,212},{0,0,212},{0,0,212},{0,0,212},{0,0,216},
{0,0,216},{0,0,216},{0,0,216},{0,0,220},{0,0,220},{0,0,220},{0,0,220},{0,0,224},
{0,0,224},{0,0,224},{0,0,228},{0,0,228},{0,0,228},{0,0,228},{0,0,232},{0,0,232},
{0,0,232},{0,0,232},{0,0,236},{0,0,236},{0,0,236},{0,0,236},{0,0,240},{0,0,240},
{0,0,240},{0,0,240},{0,0,244},{0,0,244},{0,0,244},{0,0,244},{0,0,248},{0,0,248},
{0,0,248},{0,0,248},{0,0,252},{0,0,252},{0,0,252},{0,0,252},{0,0,255},{0,0,255},
{0,0,255},{0,0,255},{0,4,255},{0,4,255},{0,4,255},{0,4,255},{0,8,255},{0,8,255},
{0,8,255},{0,8,255},{0,12,255},{0,12,255},{0,12,255},{0,12,255},{0,16,255},{0,16,255},
{0,16,255},{0,20,255},{0,20,255},{0,20,255},{0,20,255},{0,24,255},{0,24,255},{0,24,255},
{0,24,255},{0,28,255},{0,28,255},{0,28,255},{0,28,255},{0,32,255},{0,32,255},{0,32,255},
{0,32,255},{0,36,255},{0,36,255},{0,36,255},{0,36,255},{0,40,255},{0,40,255},{0,40,255},
{0,40,255},{0,44,255},{0,44,255},{0,44,255},{0,44,255},{0,48,255},{0,48,255},{0,48,255},
{0,48,255},{0,52,255},{0,52,255},{0,52,255},{0,52,255},{0,56,255},{0,56,255},{0,56,255},
{0,56,255},{0,60,255},{0,60,255},{0,60,255},{0,60,255},{0,64,255},{0,64,255},{0,64,255},
{0,68,255},{0,68,255},{0,68,255},{0,68,255},{0,72,255},{0,72,255},{0,72,255},{0,72,255},
{0,76,255},{0,76,255},{0,76,255},{0,76,255},{0,80,255},{0,80,255},{0,80,255},{0,80,255},
{0,84,255},{0,84,255},{0,84,255},{0,84,255},{0,88,255},{0,88,255},{0,88,255},{0,88,255},
{0,92,255},{0,92,255},{0,92,255},{0,92,255},{0,96,255},{0,96,255},{0,96,255},{0,96,255},
{0,100,255},{0,100,255},{0,100,255},{0,100,255},{0,104,255},{0,104,255},{0,104,255},{0,104,255},
{0,108,255},{0,108,255},{0,108,255},{0,108,255},{0,112,255},{0,112,255},{0,112,255},{0,116,255},
{0,116,255},{0,116,255},{0,116,255},{0,120,255},{0,120,255},{0,120,255},{0,120,255},{0,124,255},
{0,124,255},{0,124,255},{0,124,255},{0,128,255},{0,128,255},{0,128,255},{0,128,255},{0,132,255},
{0,132,255},{0,132,255},{0,132,255},{0,136,255},{0,136,255},{0,136,255},{0,136,255},{0,140,255},
{0,140,255},{0,140,255},{0,140,255},{0,144,255},{0,144,255},{0,144,255},{0,144,255},{0,148,255},
{0,148,255},{0,148,255},{0,148,255},{0,152,255},{0,152,255},{0,152,255},{0,152,255},{0,156,255},
{0,156,255},{0,156,255},{0,156,255},{0,160,255},{0,160,255},{0,160,255},{0,164,255},{0,164,255},
{0,164,255},{0,164,255},{0,168,255},{0,168,255},{0,168,255},{0,168,255},{0,172,255},{0,172,255},
{0,172,255},{0,172,255},{0,176,255},{0,176,255},{0,176,255},{0,176,255},{0,180,255},{0,180,255},
{0,180,255},{0,180,255},{0,184,255},{0,184,255},{0,184,255},{0,184,255},{0,188,255},{0,188,255},
{0,188,255},{0,188,255},{0,192,255},{0,192,255},{0,192,255},{0,192,255},{0,196,255},{0,196,255},
{0,196,255},{0,196,255},{0,200,255},{0,200,255},{0,200,255},{0,200,255},{0,204,255},{0,204,255},
{0,204,255},{0,204,255},{0,208,255},{0,208,255},{0,208,255},{0,212,255},{0,212,255},{0,212,255},
{0,212,255},{0,216,255},{0,216,255},{0,216,255},{0,216,255},{0,220,255},{0,220,255},{0,220,255},
{0,220,255},{0,224,255},{0,224,255},{0,224,255},{0,224,255},{0,228,255},{0,228,255},{0,228,255},
{0,228,255},{0,232,255},{0,232,255},{0,232,255},{0,232,255},{0,236,255},{0,236,255},{0,236,255},
{0,236,255},{0,240,255},{0,240,255},{0,240,255},{0,240,255},{0,244,255},{0,244,255},{0,244,255},
{0,244,255},{0,248,255},{0,248,255},{0,248,255},{0,248,255},{0,252,255},{0,252,255},{0,252,255},
{0,252,255},{2,255,254},{2,255,254},{2,255,254},{2,255,254},{6,255,250},{6,255,250},{6,255,250},
{10,255,246},{10,255,246},{10,255,246},{10,255,246},{14,255,242},{14,255,242},{14,255,242},
{14,255,242},{18,255,238},{18,255,238},{18,255,238},{18,255,238},{22,255,234},{22,255,234},
{22,255,234},{22,255,234},{26,255,230},26,255,230},{26,255,230},{26,255,230},{30,255,226},
{30,255,226},{30,255,226},{30,255,226},{34,255,222},{34,255,222},{34,255,222},{34,255,222},{38,255,218},
{38,255,218},{38,255,218},{38,255,218},{42,255,214},{42,255,214},{42,255,214},{42,255,214},{46,255,210},
{46,255,210},{46,255,210},{46,255,210},{50,255,206},{50,255,206},{50,255,206},{50,255,206},{54,255,202},
{54,255,202},{54,255,202},{58,255,198},{58,255,198},{58,255,198},{58,255,198},{62,255,194},{62,255,194},
{62,255,194},{62,255,194},{66,255,190},{66,255,190},{66,255,190},{66,255,190},{70,255,186},{70,255,186},
{70,255,186},{70,255,186},{74,255,182},{74,255,182},{74,255,182},{74,255,182},{78,255,178},{78,255,178},
{78,255,178},{78,255,178},{82,255,174},{82,255,174},{82,255,174},{82,255,174},{86,255,170},{86,255,170},
{86,255,170},{86,255,170},{90,255,166},{90,255,166},{90,255,166},{90,255,166},{94,255,162},{94,255,162},
{94,255,162},{94,255,162},{98,255,158},{98,255,158},{98,255,158},{98,255,158},{102,255,154},{102,255,154},
{102,255,154},{106,255,150},{106,255,150},{106,255,150},{106,255,150},{110,255,146},{110,255,146},{110,255,146},
{110,255,146},{114,255,142},{114,255,142},{114,255,142},{114,255,142},{118,255,138},{118,255,138},{118,255,138},
{118,255,138},{122,255,134},{122,255,134},{122,255,134},{122,255,134},{126,255,130},{126,255,130},{126,255,130},
{126,255,130},{130,255,126},{130,255,126},{130,255,126},{130,255,126},{134,255,122},{134,255,122},{134,255,122},
{134,255,122},{138,255,118},{138,255,118},{138,255,118},{138,255,118},{142,255,114},{142,255,114},{142,255,114},
{142,255,114},{146,255,110},{146,255,110},{146,255,110},{146,255,110},{150,255,106},{150,255,106},{150,255,106},
{154,255,102},{154,255,102},{154,255,102},{154,255,102},{158,255,98},{158,255,98},{158,255,98},{158,255,98},
{162,255,94},{162,255,94},{162,255,94},{162,255,94},{166,255,90},{166,255,90},{166,255,90},{166,255,90},
{170,255,86},{170,255,86},{170,255,86},{170,255,86},{174,255,82},{174,255,82},{174,255,82},{174,255,82},
{178,255,78},{178,255,78},{178,255,78},{178,255,78},{182,255,74},{182,255,74},{182,255,74},{182,255,74},
{186,255,70},{186,255,70},{186,255,70},{186,255,70},{190,255,66},{190,255,66},{190,255,66},
{190,255,66},{194,255,62},{194,255,62},{194,255,62},{194,255,62},{198,255,58},{198,255,58},
{198,255,58},{202,255,54},{202,255,54},{202,255,54},{202,255,54},{206,255,50},{206,255,50},{206,255,50},
{206,255,50},{210,255,46},{210,255,46},{210,255,46},{210,255,46},{214,255,42},{214,255,42},{214,255,42},
{214,255,42},{218,255,38},{218,255,38},{218,255,38},{218,255,38},{222,255,34},{222,255,34},{222,255,34},
{222,255,34},{226,255,30},{226,255,30},{226,255,30},{226,255,30},{230,255,26},{230,255,26},{230,255,26},
{230,255,26},{234,255,22},{234,255,22},{234,255,22},{234,255,22},{238,255,18},{238,255,18},{238,255,18},
{238,255,18},{242,255,14},{242,255,14},{242,255,14},{242,255,14},{246,255,10},{246,255,10},{246,255,10},
{250,255,6},{250,255,6},{250,255,6},{250,255,6},{254,255,1},{254,255,1},{254,255,1},{254,255,1},
{255,252,0},{255,252,0},{255,252,0},{255,252,0},{255,248,0},{255,248,0},{255,248,0},{255,248,0},
{255,244,0},{255,244,0},{255,244,0},{255,244,0},{255,240,0},{255,240,0},{255,240,0},{255,240,0},
{255,236,0},{255,236,0},{255,236,0},{255,236,0},{255,232,0},{255,232,0},{255,232,0},{255,232,0},
{255,228,0},{255,228,0},{255,228,0},{255,228,0},{255,224,0},{255,224,0},{255,224,0},{255,224,0},
{255,220,0},{255,220,0},{255,220,0},{255,220,0},{255,216,0},{255,216,0},{255,216,0},{255,212,0},
{255,212,0},{255,212,0},{255,212,0},{255,208,0},{255,208,0},{255,208,0},{255,208,0},{255,204,0},
{255,204,0},{255,204,0},{255,204,0},{255,200,0},{255,200,0},{255,200,0},{255,200,0},{255,196,0},
{255,196,0},{255,196,0},{255,196,0},{255,192,0},{255,192,0},{255,192,0},{255,192,0},{255,188,0},
{255,188,0},{255,188,0},{255,188,0},{255,184,0},{255,184,0},{255,184,0},{255,184,0},{255,180,0},
{255,180,0},{255,180,0},{255,180,0},{255,176,0},{255,176,0},{255,176,0},{255,176,0},{255,172,0},
{255,172,0},{255,172,0},{255,172,0},{255,168,0},{255,168,0},{255,168,0},{255,168,0},{255,164,0},
{255,164,0},{255,164,0},{255,160,0},{255,160,0},{255,160,0},{255,160,0},{255,156,0},{255,156,0},
{255,156,0},{255,156,0},{255,152,0},{255,152,0},{255,152,0},{255,152,0},{255,148,0},{255,148,0},
{255,148,0},{255,148,0},{255,144,0},{255,144,0},{255,144,0},{255,144,0},{255,140,0},{255,140,0},
{255,140,0},{255,140,0},{255,136,0},{255,136,0},{255,136,0},{255,136,0},{255,132,0},{255,132,0},
{255,132,0},{255,132,0},{255,128,0},{255,128,0},{255,128,0},{255,128,0},{255,124,0},{255,124,0},
{255,124,0},{255,124,0},{255,120,0},{255,120,0},{255,120,0},{255,120,0},{255,116,0},{255,116,0},
{255,116,0},{255,112,0},{255,112,0},{255,112,0},{255,112,0},{255,108,0},{255,108,0},{255,108,0},
{255,108,0},{255,104,0},{255,104,0},{255,104,0},{255,104,0},{255,100,0},{255,100,0},{255,100,0},
{255,100,0},{255,96,0},{255,96,0},{255,96,0},{255,96,0},{255,92,0},{255,92,0},{255,92,0},
{255,92,0},{255,88,0},{255,88,0},{255,88,0},{255,88,0},{255,84,0},{255,84,0},{255,84,0},
{255,84,0},{255,80,0},{255,80,0},{255,80,0},{255,80,0},{255,76,0},{255,76,0},{255,76,0},
{255,76,0},{255,72,0},{255,72,0},{255,72,0},{255,72,0},{255,68,0},{255,68,0},{255,68,0},
{255,64,0},{255,64,0},{255,64,0},{255,64,0},{255,60,0},{255,60,0},{255,60,0},{255,60,0},
{255,56,0},{255,56,0},{255,56,0},{255,56,0},{255,52,0},{255,52,0},{255,52,0},{255,52,0},
{255,48,0},{255,48,0},{255,48,0},{255,48,0},{255,44,0},{255,44,0},{255,44,0},{255,44,0},
{255,40,0},{255,40,0},{255,40,0},{255,40,0},{255,36,0},{255,36,0},{255,36,0},{255,36,0},
{255,32,0},{255,32,0},{255,32,0},{255,32,0},{255,28,0},{255,28,0},{255,28,0},{255,28,0},
{255,24,0},{255,24,0},{255,24,0},{255,24,0},{255,20,0},{255,20,0},{255,20,0},{255,16,0},
{255,16,0},{255,16,0},{255,16,0},{255,12,0},{255,12,0},{255,12,0},{255,12,0},{255,8,0},
{255,8,0},{255,8,0},{255,8,0},{255,4,0},{255,4,0},{255,4,0},{255,4,0},{255,0,0},
{255,0,0},{255,0,0},{255,0,0},{252,0,0},{252,0,0},{252,0,0},{252,0,0},{248,0,0},
{248,0,0},{248,0,0},{248,0,0},{244,0,0},{244,0,0},{244,0,0},{244,0,0},{240,0,0},
{240,0,0},{240,0,0},{240,0,0},{236,0,0},{236,0,0},{236,0,0},{236,0,0},{232,0,0},
{232,0,0},{232,0,0},{232,0,0},{228,0,0},{228,0,0},{228,0,0},{224,0,0},{224,0,0},
{224,0,0},{224,0,0},{220,0,0},{220,0,0},{220,0,0},{220,0,0},{216,0,0},{216,0,0},
{216,0,0},{216,0,0},{212,0,0},{212,0,0},{212,0,0},{212,0,0},{208,0,0},{208,0,0},
{208,0,0},{208,0,0},{204,0,0},{204,0,0},{204,0,0},{204,0,0},{200,0,0},{200,0,0},
{200,0,0},{200,0,0},{196,0,0},{196,0,0},{196,0,0},{196,0,0},{192,0,0},{192,0,0},
{192,0,0},{192,0,0},{188,0,0},{188,0,0},{188,0,0},{188,0,0},{184,0,0},{184,0,0},
{184,0,0},{184,0,0},{180,0,0},{180,0,0},{180,0,0},{176,0,0},{176,0,0},{176,0,0},
{176,0,0},{172,0,0},{172,0,0},{172,0,0},{172,0,0},{168,0,0},{168,0,0},{168,0,0},
{168,0,0},{164,0,0},{164,0,0},{164,0,0},{164,0,0},{160,0,0},{160,0,0},{160,0,0},
{160,0,0},{156,0,0},{156,0,0},{156,0,0},{156,0,0},{152,0,0},{152,0,0},{152,0,0},
{152,0,0},{148,0,0},{148,0,0},{148,0,0},{148,0,0},{144,0,0},{144,0,0},{144,0,0},
{144,0,0},{140,0,0},{140,0,0},{140,0,0},{140,0,0},{136,0,0},{136,0,0},{136,0,0},
{136,0,0},{132,0,0},{132,0,0},{132,0,0},{128,0,0}};
動作説明
画面
- 画面上部にHDRカメラのモニタ画像、JPEG品質、その下にToFセンサの距離情報をヒートマップで表示しています。
-モニタ画像の左となりにHDR/SDRモード表示、自動撮影距離レンジ[mm]を表示しています。 - 距離ヒートマップの隣に中心画素の実際の距離を表示しています[mm]
- ヒートマップの下にカメラ情報が表示しています。ISO感度、シャッター速度、ホワイトバランスモードです。
- ファイル名表示はセーブされた画像のファイル名です。同じ名前_info.txtでカメラ情報と距離情報がテキストで記録されます。
PICT00xx_info.txt
HDR mode:0 white balance:Automatic ISO:10000 SHUT:312 Size 265088.00 Dist 188 TOF 99.81 134.56 146.66 159.02 165.87 166.09 146.29 173.55 118.35 115.34 128.16 137.33 128.67 131.46 143.38 140.78 105.02 123.81 128.52 149.83 188.30 184.39 168.91 144.34 132.93 160.68 175.67 224.67 250.76 300.16 416.58 830.19
- 一番下はメモリの使用量です。画像メモリは600kB用意していますが、被写体次第でJPEGのデータ量は大きく変わります。非圧縮ですと2.4MBなので、1/4以下に圧縮しないといけません。JPEG品質は最初は80からスタートして圧縮します。圧縮後のデータが600kBを超えるた場合は、品質を5落として(75)再度キャプチャを行います。5回繰り返して600kBを超えた場合はエラーになります。
ボタン操作
- スイッチはLCDに付いています。4つあり、右からD4,D5,D6,D7に接続されています。
- 各スイッチの機能は以下の通りです。
SW | 機能 |
---|---|
D4 | マニュアル撮影(シャッターボタン) |
D5 | ホワイトバランスモード |
D6 | 距離レンジ切替 |
D7 | HDRモード切替 |
-
enpon
さんが
2025/01/31
に
編集
をしました。
(メッセージ: 初版)
-
enpon
さんが
2025/01/31
に
編集
をしました。
-
enpon
さんが
2025/01/31
に
編集
をしました。
-
enpon
さんが
2025/01/31
に
編集
をしました。
-
enpon
さんが
2025/01/31
に
編集
をしました。
ログインしてコメントを投稿する