AE測定、長期間ロギングシステム構築 (その6) 最終検証編

histogram

前回までで、センサーから信号をとりだし、Arduinoで複数チャンネルのAD変換してイベントをとらえる事前検討が完了しました。ここでは、長期ロギングに向けて最終的な調整をしてきます。チャンネルごとにセンサーの設置状況も違うので、センサーごとに異なる閾値を設定したほうが良いと推測されます。
 

閾値検討用元データの取得用 Arduinoスケッチ

const int NUM_CHANS = 4;
const int MAX_HIST_INDEX = 200;
unsigned int histogram[MAX_HIST_INDEX + 1][NUM_CHANS];

// タイムアウト設定 (2時間 = 7,200,000ms)
const unsigned long TIMEOUT_MS = 7200000;
unsigned long startTime;

void setup() {
Serial.begin(115200);
ADCSRA &= ~(bit(ADPS2) | bit(ADPS1) | bit(ADPS0));
ADCSRA |= bit(ADPS2);

for (int i = 0; i <= MAX_HIST_INDEX; i++) {
for (int j = 0; j < NUM_CHANS; j++) histogram[i][j] = 0;
}

Serial.println(F("Long-term Noise Analysis Started..."));
Serial.println(F("Target: 20,000 non-zero samples OR 2 hours."));
startTime = millis();
}

void loop() {
bool limitReached = false;
unsigned long nonZeroCount = 0; // 0以外の総サンプル数

while (!limitReached) {
// タイムアウトチェック
if (millis() - startTime >= TIMEOUT_MS) {
Serial.println(F("Time limit reached (2 hours)."));
limitReached = true;
break;
}

for (int ch = 0; ch < NUM_CHANS; ch++) {
int rawVal = analogRead(A0 + ch) >> 2;

// 0以外の場合のみカウント
if (rawVal > 0) {
int index = (rawVal > MAX_HIST_INDEX) ? MAX_HIST_INDEX : rawVal;
histogram[index][ch]++;
nonZeroCount++;

// 0以外のサンプルが合計20,000に達したら終了
if (nonZeroCount >= 20000) {
Serial.println(F("Non-zero sample limit reached."));
limitReached = true;
break;
}
}
}
}

// 結果の出力
Serial.println(F("Value,CH0,CH1,CH2,CH3"));
for (int i = 1; i <= MAX_HIST_INDEX; i++) { // 0は除外して出力
Serial.print(i);
if (i == MAX_HIST_INDEX) Serial.print("+");
for (int ch = 0; ch < NUM_CHANS; ch++) {
Serial.print(",");
Serial.print(histogram[i][ch]);
}
Serial.println();
}

Serial.print(F("Total Non-Zero Samples: ")); Serial.println(nonZeroCount);
Serial.print(F("Elapsed Time (ms): ")); Serial.println(millis() - startTime);
Serial.println(F("--- Analysis Finished ---"));
while (1);
}

開発環境(室内)での事前検証結果

Long-term Noise Analysis Started...
Target: 20,000 non-zero samples OR 2 hours.
Time limit reached (2 hours).
Value,CH0,CH1,CH2,CH3
1,0,2,2,1
2,0,2,0,0
3,0,0,0,1
4,0,0,0,0
5,0,0,0,0
6,0,0,0,0
7,0,0,0,0
8,0,0,0,0
9,0,0,0,0
10,0,0,0,0
11,0,0,0,0
12,0,0,0,0
13,0,0,0,0


186,0,0,0,0
187,0,0,0,0
188,0,0,0,0
189,0,0,0,0
190,0,0,0,0
191,0,0,0,0
192,0,0,0,0
193,0,0,0,0
194,0,0,0,0
195,0,0,0,0
196,0,0,0,0
197,0,0,0,0
198,0,0,0,0
199,0,0,0,0
200+,0,0,0,0
Total Non-Zero Samples: 8
Elapsed Time (ms): 7200214
--- Analysis Finished ---

この結果から、2時間放置してもノイズ信号のMax値は3であり、少しだけ余裕を見て閾値を5に設定すればよさそうだと判断しました。 そして次はフィールドテストへシフトしました。

フィールドテストでの追加検討

 機器類を整理して、実環境に配置して、閾値を再検討してみました。2時間の放置検証して、事前検証と同じ結果を得ました。 チャンネル別に閾値を設定する想定でしたが、かなり管理低い閾値設定なので、すべてのチャンネルとも5に設定することにします。

 これで、長期ロギングに向けた最終検討に移行できそうです。
次回は、最終検証、本番運用に移行していきます。


関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です