GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
2016年末にGR-KAEDE, CMOSカメラモジュールを購入しました。テンプレートライブラリGR-KAEDE_Sketch_V121を基にして動体検出して画像をSDカードに保存するサンプルプログラムをコンパイルし実行したところ、プログラムが動きませんでした。調べたところmovingDetection関数が呼ばれたところで固まっていました(当関数を除けば画像キャプチャ、画像保存はできる)。当バージョンのライブラリに不具合などはございませんでしょうか。どうぞよろしくおねがいします。
がじぇるね岡宮です。
ashさん、ご回答遅くなりすみません。
おそらくなのですが、購入時に書き込まれているべき画像認識ファームが、製造時のどこかの工程で書き込まれていないか、消去されたかだと思うのですが、添付のファームウェアを以下の秋月さんのWebに掲載されている手順で書き込んでいただけますでしょうか。
http://akizukidenshi.com/download/ds/renesas/GR-KAEDE_USB_Farm.pdf
なお、私が記載できる範囲での基本的なメモリ構成は以下です。
0xFFC00200 ->画像認識ライブラリのテーブルなど(★ここが消えている可能性大)
0xFFC10000 ->ユーザーアプリ分岐用
0xFFC20100 ->検査用
0xFFE00000 ->画像認識ライブラリ(トラステッドメモリのため消せません、見えません)
0xFFFD0000 ->USBマスストレージファーム
念のためですが、GR-KAEDE用スケッチテンプレートに画像認識ライブラリの初期化かからきちんと帰ってくるか確認するだけのプログラムを以下に記載します。LEDがチカチカしたらファームがきちんと存在しています。Mdl_IP_Initから帰ってくるかどうかが焦点です。
#include <Arduino.h>#include <Image.h>
#define INTERVAL 100
void setup(){ Serial.begin(9600); pinMode(PIN_LED0,OUTPUT); pinMode(PIN_LED1,OUTPUT); pinMode(PIN_LED2,OUTPUT); pinMode(PIN_LED3,OUTPUT);
initialize_sdram(); Mdl_IP_Init( (uint8_t*)IMG_BUF_BASE_ADDR );
}
void loop(){ Serial.println("hello"); delay(100);
digitalWrite(PIN_LED0, 1); delay(INTERVAL); digitalWrite(PIN_LED1, 1); delay(INTERVAL); digitalWrite(PIN_LED2, 1); delay(INTERVAL); digitalWrite(PIN_LED3, 1); delay(INTERVAL); digitalWrite(PIN_LED0, 0); delay(INTERVAL); digitalWrite(PIN_LED1, 0); delay(INTERVAL); digitalWrite(PIN_LED2, 0); delay(INTERVAL); digitalWrite(PIN_LED3, 0); delay(INTERVAL);
白とびの件、試してみました。再現するときと再現しないときがあり、いまいち分かっていませんが、OV7740のAWB(オートホワイトバランス)が関係しているのではないかと思っています。
OV7740のパラメータを変えるとAPIを用意しておらずすみませんが、以下はパラメータを変更してためした結果です。SDに入れて確認するのが面倒だと思いますので、USBに送信して確認するアプリと、サンプルプログラムを文末に貼り付けます。OV7740のパラメータはImageライブラリのutlityフォルダ内ov7740.hにあります。すみません、私もよくわかってませんが、AWBのON/OFF設定はアドレス0x80で設定するのですが、設定個所が2か所あり、下の方にある0x80を変更すると適用されます。(次版では不要な設定は削除しようと思います。)
●Webコンパイラのデフォルト(OV7740 0x80 0x7F)
●AWBをOFF (OV7740 0x80 0x6F)
●AWB OFF+AWB gain OFF
●AWB OFF + AWB gain OFF + 動体検知
USB CDCでJPEGを送ってリアルタイムに画像を表示するアプリ(Windows)。
起動して、USBポートを指定すると画像が表示されます。
写真だけ送る
#include <Arduino.h>#include "Image.h"#include "SD.h"#include "RTC.h"
Image image;void setup(){ Serial.begin(57600); image.begin();
}void loop(){ uint8_t headder_data[12] = {0xFF,0xFF,0xAA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
image.captureStart(); while(!image.isCaptureFinished()); image.createJpg(); uint8_t* adr = image.getCreatedJpg(); int32_t size = image.getCreatedJpgSize(); headder_data[8] = (uint8_t)((int32_t)size >> 0); headder_data[9] = (uint8_t)((int32_t)size >> 8); headder_data[10] = (uint8_t)((int32_t)size >> 16); headder_data[11] = (uint8_t)((int32_t)size >> 24);
for (int i = 0; i < sizeof(headder_data); i++){ Serial.write(headder_data[i]); } for (int i = 0; i < size; i++){ Serial.write(*adr); adr++; }
動体検知込みで送る
Image image[3];void setup(){ Serial.begin(57600); image[0].begin();
}void loop(){ uint8_t headder_data[12] = {0xFF,0xFF,0xAA,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; static int cnt = 0;
while(cnt < 2){ //necessary at least two image in the past. image[cnt].captureStart(); while(!image[cnt].isCaptureFinished()); image[cnt].createGrayImage(); cnt++; }
image[cnt%3].captureStart(); while(!image[cnt%3].isCaptureFinished()); image[cnt%3].createGrayImage(); // Moving detection if( 0 == image[cnt%3].movingDetection(image[(cnt-2)%3].getCreatedGrayImage(), image[(cnt-1)%3].getCreatedGrayImage())){ //do nothing } image[cnt%3].createJpg(); uint8_t* adr = image[cnt%3].getCreatedJpg(); int32_t size = image[cnt%3].getCreatedJpgSize(); headder_data[8] = (uint8_t)((int32_t)size >> 0); headder_data[9] = (uint8_t)((int32_t)size >> 8); headder_data[10] = (uint8_t)((int32_t)size >> 16); headder_data[11] = (uint8_t)((int32_t)size >> 24);
for (int i = 0; i < sizeof(headder_data); i++){ Serial.write(headder_data[i]); } for (int i = 0; i < size; i++){ Serial.write(*adr); adr++; } cnt++;