Introduction: Arduino Cat Detector SD Card Logger

About: Evil Mad Scientist, Atari Punk Console Maker, Avante Garde Contemporary Artist, Air Metal Musician

I used:

an Arduino Uno
a Parallax PIR Motion Sensor
and
a Seeed Studio SD Card Shield


Arduino, shield, sd card, logging shield, storage, logger

Check out This instructable on PIRs in case you didn't know what it is:
https://www.instructables.com/id/PIR-Motion-Sensor-Tutorial/

Step 1: Connect Your PIR Sensor

Hook up the PIR Sensor

Ground pin to Ground
VCC pin to 5V
OUT to A5


To better help you understand how to hook it up:
Arduino PinPIR Sensor Pin
GND GND
5V VCC
A5 OUT

Also hook up and LED to pin 9 on the arduino

You might need to use a breadboard to hook it up right.
I've included a Frizing file to illustrate the device hookups.

Step 2: Test Your PIR Sensor

Now enter this code into your Arduino

void setup() {
  Serial.begin(9600);
  pinMode(9, OUTPUT);
  pinMode(A5, INPUT);
}

void loop() {
  if (analogRead(A5) < 1){
    digitalWrite(9, LOW);
    Serial.println("No cats");
  }
  delay(200);
  if (analogRead(A5) > 0){
    digitalWrite(9, HIGH);
    Serial.println("Cat detected");
  }
}

After you hooked up the Motion Sensor and the LED and uploaded your code to the Arduino, wave your hand in front of the sensor. If the LED lights up then you did it right. Sit still for a few seconds and the LED will go off.
You can also open the Arduino Serial Monitor to see whats going on.

Step 3: Connect You SD Card Sheild

Now that your Motion Sensor is working you want to log the times is senses motion.
So plug your new SD Card Shield into your Arduino and proceed to hookup the Motion Sensor and LED using the riser pins on the Shield.

All connections should be in the same place like on the Frizting file it shows.

Step 4: Log Your Cats

Now that its all hooked up, upload this code to your arduino:

NOTE: Your going to have to install the updated SDFat Library in order for this to work you can find it at:
http://code.google.com/p/sdfatlib/downloads/list

/* This code was stolen and modified from the examples
provided along with thte sd fat library found at
http://code.google.com/p/sdfatlib/downloads/list
*/
/*
* Append Example
*
* This sketch shows how to use open for append.
* The sketch will append 100 line each time it opens the file.
* The sketch will open and close the file 100 times.
*/
#include <SdFat.h>

// filename for this example
char name[] = "CATS.LOG";

// SD chip select pin
const uint8_t chipSelect = SS;

// file system object
SdFat sd;

// create Serial stream
ArduinoOutStream cout(Serial);

// store error strings in flash to save RAM
#define error(s) sd.errorHalt_P(PSTR(s))
//------------------------------------------------------------------------------
void setup() {
  pinMode(9, OUTPUT);
  pinMode(A5, INPUT);
  Serial.begin(9600);
  if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt();

}
//------------------------------------------------------------------------------
void loop() {
  if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt();
  ofstream sdout(name, ios::out | ios::app);

  if (!sdout) error("open failed");
  delay(200);

  if (analogRead(A5) < 1){
    digitalWrite(9, LOW);
    Serial.println("No cats");
  }    

  if (analogRead(A5) > 0){
    digitalWrite(9, HIGH);
    int minutes = millis()/1000/60;
    int seconds = millis()/1000;
    int milliseconds = millis();
    //to make it easier to read the time stamps divide number of
    //milisecons by seconds by minuts.
    Serial.print("Cat detected ");
    Serial.print(minutes);
    Serial.print(" minutes ");
    Serial.print(seconds);
    Serial.println(" seconds after arduino boot.");  
    sdout << "Cat detected " << millis()/1000/60 << " minutes " << millis()/1000 << " seconds after arduino boot." << endl;
    sdout.close();
  }
  if (!sdout) error("append data failed");
}

Now let it run for a while. Turn off you Arduino and remove the SD card. You can now plug the SD card into your computer and read the log file your arduino created.

In my final connections I used an additional prototyping shield with a mini breadboard so I could place the whole thing in a small space.