前回、AMG8833 でカメラと重畳しました。ずっと動かしているとバッテリーの消耗が激しそうなので、人感センサーで動きを検出したらシステムを起動するようにしたいと思いました。で、Amazon で購入した激安の人感センサー「HC-SR501」を試してみました。






■ SPRESENSEに「HC-SR501」をつなげてみたら動かない
せっかくならメインボードのみで動かせないかと思い、何も考えずにつなげてみました。IO が 3.3V なので、電源が 3.3 Vでも動くんじゃね?と思ったのですが、、、甘かった。まぁ、動かないよねと思ったのですが、やっぱり動かない。





回路図を見てみたら、しっかりと LDO が載っています。5~20V を 3.3V にレベルダウンをしています。





これじゃ動かないよね、ということで、立派な LDO ですが、今回は邪魔なので取っ払ってしまいました。





導通しても問題なし。これで電源はなんとかなりました。



■ 感度と出力保持時間の調整が難しい
「SR-HC501」は ”ボリュームで感度と出力保持時間を調整できる” となってはいるのですが、これがなかなか難しい。





SR501 のセンサー部の PIR は内部にキャパシタンスがあり、それが充電できるまで検出できないようです。同じものかどうか分かりませんが、村田のセンサーは起動まで30数秒程度の時間が必要とデータシートにありました。それを知らずに、動かねぇ~と試行錯誤の連続。





”出力保持時間” も曲者です。なかなか検出しないので、検出できるようにと時計回りにまわすと、検出もしていないのにHIGHになりっぱなしになります。これに気づかず、ハンダを失敗したのかと試行錯誤することになりました。

割り込みで検出する場合、”出力保持時間”は、関係ないので最短(反時計回りいっぱい)に設定しておきました。





それは良しとしても、まだうまく動きません。ググってみたら検出間隔を短くするために抵抗をつけかえると良いと書いてあったので、思い切ってやってみましたが、これはNG。一度検出するとずっと検出しっぱなしになってしまいました。





気を取り直して、いろいろと調整してみたところ、やっと見つけたスイートスポット。ようやく期待どおりに動くようになりました。





買ってきてポン付けで動くと思ったのですが甘かった。このセンサー用のLSI(BISS0001)の中身はオペアンプでなので、むしろ自作したほうが良いかもしれません。



■ 人感センサーでSPRESENSEを起動する
いよいよ、人感センサーを割り込みを使ってSPRESENSEを起動するようにしたいと思います。構成は、人感センサーとSPRESENSEメインボードだけです。(SPRESENSEのIO電圧1.8Vに対し3.3Vを突っ込むので、自己責任でやってくださいねー)





電源コントロールに LowPower ライブラリを用いました。SPRESENSEは割り込み起動も簡単にできるので便利ですね。


#include <LowPower.h>
#include <EEPROM.h>

#define DET_PIN 16

int eeprom_address = 0;
int value;

bool bDetect = false;
void detect() {
bDetect = true;
}

void setup() {
Serial.begin(115200);
LowPower.begin();
attachInterrupt(digitalPinToInterrupt(DET_PIN), detect, RISING);

bootcause_e bc = LowPower.bootCause();

if ((bc == POR_SUPPLY) || (bc == POR_NORMAL)) {
Serial.println("Example for GPIO wakeup from cold sleep");
} else {
Serial.println("wakeup from cold sleep");
}
LowPower.enableBootCause(DET_PIN);
sleep(1);
}

void loop() {
static int n = 0;
if (bDetect) {
digitalWrite(LED0, HIGH);
value = EEPROM.read(eeprom_address);
Serial.println("DETECT!" + String(value));
++value;
EEPROM.write(eeprom_address, value);
bDetect = false;
} else {
digitalWrite(LED0, LOW);
}
delay(300);
digitalWrite(LED0, LOW);

// Cold sleep
Serial.print("Go to cold sleep...");
delay(1000);
LowPower.coldSleep();
}


気になる消費電力は、私のしょぼい電圧電流計で計測したところ、待受状態では 10μA 程度で、動いている状態で 20μA 程度でした。動作時 "20uA" は反応の悪い電圧計で測定したので一定時間の平均となっています。瞬間的には SPRESENSE には 6mA 程度流れているはずです。




しかし、この人感センサーは低消費電力ですね。最大消費電流 100uA となっていましたが偽りなしですね。これはSPRESENSEと相性よいかも…



■ 動かしてみた感想
簡単に動かせると思った人感センサーですが、思いの外苦戦をしてしまいました。ただ、使いこなせるようになると、強い味方になりそうです。そのためには、RIP Motion Sensor そのものの特性を熟知しておく必要がありそうです。

BISS0001は、アナログ回路に慣れていない人には便利なのかも知れませんが、少し使いにくい印象です。むしろオペアンプで増幅回路を自作したほうがよいのかもなと思いました。時間があったらチャレンジしてみようかな。

次回は、この人感センサーとカメラシステムを組み合わせてみたいと思います。
(^^)/~


■ 関連記事
三月の電子工作「SPRESENSEでサーマルカメラを作ろう!」
https://makers-with-myson.blog.ss-blog.jp/2021-03-07
三月の電子工作「SPRESENSEでサーマルカメラを作ろう!」カメラ画像にサーマル画像を重畳してみた
https://makers-with-myson.blog.ss-blog.jp/2021-03-14
三月の電子工作「SPRESENSEでサーマルカメラを作ろう!」人感センサーで撮影するサーマルカメラ完成
https://makers-with-myson.blog.ss-blog.jp/2021-04-06









SONY SPRESENSE メインボード CXD5602PWBMAIN1

  • 出版社/メーカー: スプレッセンス(Spresense)
  • メディア: Tools & Hardware



SONY SPRESENSE カメラモジュール CXD5602PWBCAM1

  • 出版社/メーカー: スプレッセンス(Spresense)
  • メディア: Tools & Hardware