2016年6月12日日曜日

Symaマルチコプターのカメラ&PIRモーションセンサーで簡易防犯カメラ - Arduino偏

SymaマルチコプターのカメラとPIRモーションセンサーで簡単防犯カメラを作ってみました。

Symaマルチコプターのカメラの制御方法は、前記事を参照してください。

○回路・配線図
 
○プログラム(スケッチ)
FlexiTimer2をインストールしてください。

#include <FlexiTimer2.h>
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 30;
//the time when the sensor outputs a low impulse
long unsigned int lowIn;
//the amount of milliseconds the sensor has to be low
//before we assume all motion has stopped
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;
int pirPin = 3; //the digital pin connected to the PIR sensor's output
int cameraPin = 13;
int swPin = 2;
bool mode;
int pulese;
void shootPules() {
digitalWrite(cameraPin, LOW);
FlexiTimer2::stop();
}
//SETUP
void setup(){
Serial.begin(9600);
pinMode(swPin, INPUT_PULLUP);
pinMode(pirPin, INPUT);
pinMode(cameraPin, OUTPUT);
digitalWrite(pirPin, LOW);
// SW ON(HIGH):VIDEO
// SW OFF(LOW):STILL
if (digitalRead(swPin) == HIGH) {
mode = 1;
pulese = 500;
pause = 30000; // 30sec
} else {
mode = 0;
pulese = 100;
pause = 5000; // 5sec
}
FlexiTimer2::set(pulese, shootPules);
//give the sensor some time to calibrate
Serial.print("calibrating sensor ");
for(int i = 0; i < calibrationTime; i++){
Serial.print(".");
delay(1000);
}
Serial.println(" done");
Serial.println("SENSOR ACTIVE");
delay(50);
}
//LOOP
void loop(){
if(digitalRead(pirPin) == HIGH){
if(lockLow){
digitalWrite(cameraPin, HIGH);
FlexiTimer2::start();
//makes sure we wait for a transition to LOW before any further output is made:
lockLow = false;
Serial.println("---");
Serial.print("motion detected at ");
Serial.print(millis()/1000);
Serial.println(" sec");
delay(50);
}
takeLowTime = true;
}
if(digitalRead(pirPin) == LOW){
if(takeLowTime){
lowIn = millis(); //save the time of the transition from high to LOW
takeLowTime = false; //make sure this is only done at the start of a LOW phase
}
//if the sensor is low for more than the given pause,
//we assume that no more motion is going to happen
if(!lockLow && millis() - lowIn > pause){
//makes sure this block of code is only executed again after
//a new motion sequence has been detected
lockLow = true;
Serial.print("motion ended at "); //output
Serial.print((millis() - pause)/1000);
Serial.println(" sec");
// Stop Recording
if (mode) {
digitalWrite(cameraPin, HIGH);
FlexiTimer2::start();
}
delay(50);
}
}
}
view raw pir_camera.ino hosted with ❤ by GitHub

 スライドスイッチで静止画/動画モードを切り替えます(要リセット)。

0 件のコメント:

コメントを投稿