Spycam with Arduino / Digispark

This is my first real project with the Digispark.

My son made a bird feeder at school and every now and then we could spot a bird eating on our balcony. I thought that would be cool to make photos of the birds stopping by.

Somehow we would have to detect when something comes/flies by. This is done using the PIR motion sensor. But apart from that, Digispark should also trigger after a defined interval, like making a foto every 5 minutes for some nice time lapse movies. I actually added a 1k potentiometer with which we can adjust the delay between two photos between 30 secs and 10 minutes. Setting the poti value in the middle Digispark would trigger a photo every 5 mins.

I bought myself a spycam on ebay:

spycam

Features:
Image Resolution: 1280 x 960 pixel
Color Video Resolution: 640 x 480 pixel
FPS: 29 frames per second
Image file format: JPEG
Video file format: AVI
Color Video and Audio
Rechargeable Li-ion battery: 280mA 3.7V
Dimension: 5.0 x 3.0 x 1.2 cm

Continue reading

HC-SR501 passive infrared sensor with Arduino

Got myself a HC-SR501 passive infrared sensor from ebay for less than 5€.
As information about this sensor is hard to find but usage is pretty easy I thought I share my findings.

HC-SR501

HC-SR501: Left poti is to adjust sensitivity. I have set it to medium. Right poti is to adjust the delay. I set it to minimum which means it triggers about every 5 seconds.

HC-SR501

On the bottom are the connections for 5V (left), signal (middle) and GND (right). I tried around with the jumper on the top right, but couldn’t really tell a different behaviour.

I thought the signal pin delivers an analog value according to the distance so I added a LED to pin 11 for the output. This was the initial setup:

#define pir A0
#define led 11

void setup() {
  pinMode(pir, INPUT);
  pinMode(led, OUTPUT);
  Serial.begin(9600);

}

void loop() {
  int i = analogRead(pir);
  int l = map(i,0,1023,0,255);

  Serial.print(i);
  Serial.print(" / ");
  Serial.println(l);
  analogWrite(led, l);

  delay(100);
}

I realized that the value I was reading at the sensor pin was always around 680 not matter what.
I then went on to change analogRead to digitalRead:

#define pir A0
#define led 11

void setup() {
  pinMode(pir, INPUT);
  pinMode(led, OUTPUT);
}

void loop() {
  digitalWrite(led, digitalRead(pir));
  delay(100);
}

And it worked too… but I think going forward I will use analogRead and will react to motion once the value delivered by the PIR is higher than 500.