« Arduino EthernetシールドとSDライブラリーの利用に関してのメモ書き | Main | Deek-RobotのData logging shield V1.0を使ってArduino Spyカメラ »

04/22/2017

PIRで検知しVC0706で撮影、Ethernet ShieldのmicroSDに記録

Pirethernet Arduino UNO にEthernet Shield と シールドボードに小型のブレッドボードを貼り付けた。
Fritzingで絵を描いてみると・・・左図のようになる。
一番下の階層は、Arduino UNOで、第二階層がEthernet Shield、その上の第三階層に自作のシールドボードを載せ小型のブレッドボードを装着して、そこに部品を配置した。
前回のようなSDカードシールドでは、ブレッドボードが小さいとそこに部品を置ききれないので、Ethernetシールドを使えないかと調べ、可能だという事が分かったので、トライしてみた。(注記:カメラの所にある2本の抵抗は、絵では220Ωになっているが、僕がFritzingを使いこなせていないために、間違った表記になっている。この抵抗の値は2本とも10kΩである。)


Dsc_0005Dscf9618 Dscf9621 Ethernet Shieldは、サードパーティ製のもので(写真にあるものはKeystudio製だが、他のメーカー製、例えば「HiLetgo W5100 Ethernet Shield
」等でも稼働した)、ただしMACアドレスのラベル添付も無かった。未だ Ethernet の接続は行っていないが、このShield に装備されている microSDカード装置部は、写真やFritzing にあるような Pin接続で問題なく使う事が出来た。

使用したMicroSD Cardは、Amazonで2GB⑩のものを購入し、「
SD Formatter」でフォーマットして使用。

また、ArduinoのSketchは、下記のようになった。

尚、マイコンボードに書き込み時、幾つかのWarningメッセージは出るが、稼働している。

システムが稼働し、セットアップが終了した後
・PIRが検知するまでの間、LEDランプ1を0.3秒間隔で点滅させて、システムが稼働している事が分かるようにした。
・PIRがものの動きを検知すると、LEDランプ1が点灯し、ブザーを1.5秒間鳴らし、その後写真を撮影する。
・撮影した写真をmicroSDカードに記録中は、別のLEDランプ2を点灯させる。
・SDカードへの記録が終われば
  LEDランプ2は消灯し、
  PIR検知中を示すLEDランプ1は点滅状態になる。

詳細は、後ほどここに記載するが、記載している時間が今は無いので、今日はここまで・・・

/**
 * VC0706 Camera Module Arduino Compatible:
 *  + cvbs: N/A
 *  + 5V: connected to arduino => pin 5V0
 *  + TX (OUT): connected to the RX (IN) of arduino => pin 2
 *  + RX (IN): connected to the TX (OUT) of arduino => pin 3
 *  + GND: connected to the GND
 *  set the serial monitor 38400bps when use it
 *  PIR sensor: connected to arduino => pin 6 
 */

#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>
#include <JPEGCamera.h>

const int chipSelect = 4;
int pirPin     =  6;  // PIR sensor
int pirState =  LOW;  // states of PIR at the initial
int buzzerPin  =  5;
int ledPin1    =  8;  // LED shows Ready(flashing) or Detected(lighting)
int ledPin2    =  7;  // LED shows SD card writing(lighting) or not

File testFile;
SoftwareSerial s(2, 3);
JPEGCamera cam(s);
char filename[15];
int num = 0;
int numOfBytes;

int photoSize = 1; // 0 -> 160x120 / 1 -> 320x240 / 2-> 640x480
unsigned long mainStartTime, mainEndTime, startTime, endTime;

void setup()
{
//activate 5V for the SD Card shield
  Serial.begin(38400);
  Serial.println("Start of SPY Camera SetUp");
  pinMode(  pirPin,  INPUT); 
  pinMode( ledPin1, OUTPUT); 
  pinMode( ledPin2, OUTPUT); 
  pinMode(buzzerPin,OUTPUT);  
  digitalWrite( ledPin1, LOW);       // LED:OFF
  digitalWrite( ledPin2, LOW);       // LED:OFF
  
  Serial.begin(38400);
// Wait for the serial port to be opened
   while (!Serial) delay(25);
 
//check SD card
  while (!SD.begin(chipSelect))
    {
      Serial.println("Error: SD initialization failed. Is SD card in the card folder?");
    }
      Serial.println("Info: SD Initialization complete,");

// Serial port connected to the cam
    s.begin(115200); //for VC0706 cam
    delay(50);

    Serial.println("Info: Reseting cam...");
// reset cam and wait.
    cam.reset();
    delay(3000);

    Serial.println("Info: Changing baud rate...");
// change baud rate to work at 3.3v
    cam.chBaudRate(2);// 0 -> 9600 / 1 -> 19200 / 2 ->  38400 / 3 -> 57600 / 4 -> 115200
    delay(50);
  
//change serial to match new camera baud rate
    s.end();
    s.begin(38400);
    delay(50);

  Serial.println("Info: Changing picture size...");
//change picture size
  cam.chPictureSize(photoSize);
  delay(50);

  Serial.println("Info: getting last pic num for the created files...");
  num = getNewSDFileNum();
  Serial.println("Info: Setup is DONE!");
}

void loop()
{
  while(digitalRead(pirPin) == LOW )
  {
    digitalWrite(  ledPin1, HIGH);
    delay(300);
    digitalWrite(  ledPin1, LOW);
    delay(300);
  }

  pirState = digitalRead(pirPin);   // read the state of PIR sensor
  if (pirState == HIGH) {           // detected => "HIGH", if not-detected => "LOW"
                                    // Detected!
   digitalWrite(  ledPin1, HIGH);   // LED :ON
   digitalWrite(buzzerPin, HIGH);   // Warnig Buzzer ON   
   Serial.println("Some movements were detected!");
   delay(1500);
   digitalWrite(  ledPin1, LOW);    // LED:OFF 
   digitalWrite(buzzerPin, LOW);    // Buzzer OFF  
   takePic();
  }
}

void takePic()
{
  Serial.println("Info: Preparing to take new photo.");

// must call stopPictures before a new photo is taken.
  cam.stopPictures();
  delay(50);

// take photo
  cam.takePicture();
  delay(50);

  num++;
  sprintf(filename, "PIC_%i.JPG", num);

  if (SD.exists(filename)) {
    SD.remove(filename);
  }

// Create file
  digitalWrite( ledPin2, HIGH);     // LED :ON 
  testFile = SD.open(filename, FILE_WRITE);

//save to file
    Serial.print("Info: Saving photo to SD: ");
    Serial.println(filename);
    numOfBytes = cam.readData(testFile);
    Serial.print("Info: Bytes for photo: ");
    Serial.println(numOfBytes);

//must close file to finish writing.
    testFile.close();
    digitalWrite( ledPin2,  LOW);     // LED:OFF
    Serial.println("Info: saved picture that detected!");
}

int getNewSDFileNum() {
  File root = SD.open("/");
  int n = getFileLastNumForDirectory(root);
  root.close();

  return n > 0 ? n : 0;
}

int getFileLastNumForDirectory(File dir) {
  int n = 0;
  int fn = 0;

  while (true) {
    File entry =  dir.openNextFile();

    if (!entry) {

// no more files
      break;
    }

    fn = 0;

    if (entry.isDirectory()) {
      //fn = prepareFileLastNumForDirectory(entry);//no need to be recursively
    }
    else {
      String name = String(entry.name());

      if (name.startsWith("PIC_") && name.endsWith(".JPG")) {
        int pos = name.indexOf(".JPG");
        name = name.substring(4, pos);

        if (isValidNumber(name))
          fn = name.toInt();
      }
    }

    if (fn > n) {
      n = fn;
    }

    entry.close();
  }

  return n;
}

boolean isValidNumber(String str) {
  if (str && str.length() > 0) {
    for (byte i = 0; i < str.length(); i++)
    {
      if (!isDigit(str.charAt(i))) return false;
    }
    return true;
  }
  return false;
}

« Arduino EthernetシールドとSDライブラリーの利用に関してのメモ書き | Main | Deek-RobotのData logging shield V1.0を使ってArduino Spyカメラ »

PC and PC troubles」カテゴリの記事

Comments

Post a comment

Comments are moderated, and will not appear on this weblog until the author has approved them.

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/540128/65163967

Listed below are links to weblogs that reference PIRで検知しVC0706で撮影、Ethernet ShieldのmicroSDに記録:

« Arduino EthernetシールドとSDライブラリーの利用に関してのメモ書き | Main | Deek-RobotのData logging shield V1.0を使ってArduino Spyカメラ »

May 2017
Sun Mon Tue Wed Thu Fri Sat
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Recent Trackbacks

無料ブログはココログ