Introduction:
The aim of this project was two fold:
1/ To solve a mystery (more on that in a minute).
2/ To use a PIC microcontroller and ancillary equipment to solve the mystery and increase my programming skills using PICBasic Pro (it did both).
I’d also like to add that I’ve been learning to program for almost exactly a year now. When I first discovered this Forum, I was in the death throws of trying to light an LED using Assembly code (hence my Forum name:LEDave). Without the Forum I’d really have struggled and probably not made it. Please see Credits below.
The Mystery:
So what was the big mystery that sparked me into life to build this project I hear you all cry: PAUSE 5000 ‘Wait for cry to subside.
Well for some time my wife and I had been putting food out for the birds in our garden, nothing unusual in that you’re thinking and you’d be right. However, we began to notice that overnight (we usually put the food out in the evenings for the next day) all the food was going missing by morning, and I mean all of it! Bacon rind, diced up bread, left over pieces of meat, seeds, everything, the birds were starting to look hungry and would soon be complaining……!
At first we suspected a Fox but we had no way of proving it. Then one morning we awoke to find two things in the garden. The first was a footprint (see picture below) on the back door step, the second was a, well let’s just call it a ‘deposit’ shall we (no picture below – too delicate a subject) on the lawn.
The footprint we thought wasn’t a Fox it was just too big, it looked more like a Bear but living in the UK we crossed a ‘Grizzly’ of the ‘possible’ list. Then a local ‘expert’ (my next door neighbour) after examining the ‘deposit’ (no I’m not putting a picture up!) said it definitely wasn’t a Fox, he thought it was a Deer! To which my wife was quick to point out that a Deer has hooves not pads as in the picture (the neighbour has since been relegated from ‘expert’ status to a ‘poor guesser’ status…at best!).
So just what was it that was coming into our garden at night and ‘stealing’ all the bird feed? There really was only one way to find out:
Build a Project….!
Method:
It was quickly decided a photograph would solve the mystery. The raider was ‘appearing’ late at night so the photograph had to be taken totally automatically.
To make the project work I’d need:
1/ PIR sensor (12v operation).
2/ Servo which luckily I had from way back (Futaba FP5148).
3/ 12v battery.
4/ PIC16F684 + Components (capacitor / resistors etc).
5/ 5V power supply.
6/ Sounder for an audible alarm.
7/ Suitable container / cable release / camera / tripod.
8/ Code & schematic (see below for both).
So how would it work? Well the theory was this:
The ‘mystery creature’ would trigger the PIR. The PIC would then drive a Servo motor to mechanically move a cable release to fire the camera and solve the mystery.
Here’s how it worked in detail (please use the Schematic and code below to follow the sequence through).
1/ The PIR sensor was connected to a 12v battery. VDD +5v from a power supply was then connected to the normally closed contacts on the PIR then through to PORTC.3 on the 16F684 via R2 a 10k current limiting resistor.
2/ On power up, the servo arm moves to the ‘set’ position ready to take a picture. At 4MH the 16F684 generates a pulse with an increment of 10us, however because the PIC was driving a servo which in turn was lifting and lowering a cable release, trial and error really was the way to set up the ‘set’ and ‘fire’ positions for the camera. The outgoing pulse to the servo is driven by pin PORTC.1 via current limiting resistor R1 200ohm.
3/ So we’ve powered up the project and the servo has moved to the ‘set’ position . The program then goes into a loop (LOOP1) waiting for the ‘creature’ to break the beam. When this happens the program jumps to LABEL FIRE: I need to point out that when the camera is first set up it goes into sleep mode after five minutes, so the first time the shutter is pressed it actually only wakes the camera from sleep. This is fine because it takes 10 seconds for the flash to charge up, then the program does another LOOP, if PORTC.3 is still at zero volts the second time around, the flash is charged and a picture is actually taken.
4/ When the program has entered the ‘FIRE’ LOOP, before it PAUSES for 10 seconds to allow the flash to fully charge and the camera to wake from sleep mode, pin PORTA.1 also goes high. This pin drives a Sounder which can be turned off by Switch 1 if not needed, this was a handy addition as some nights it was just nice to be able to use the device as an alarm with no camera attached and just watch what was happening. Some nights we left the alarm and the camera on and leapt out of bed to see the pictures actually being taken, rather cool it was too.
Code: ANSEL = %00000000 'Disable analog select so ports work as digital i/o. CMCON0 = %00000111 'Disable analog comparators. TRISA = %00000000 'Set PORTA as OUTPUT. PORTA = %00000000 'Set PORTA pins all low. TRISC = %00001000 'Set PORTC.0 as INPUT. PORTC = %00000000 'Set PORTC pins all low. x var byte 'Loop counter Variable Servo var PORTC.1 'Servo control output_pin PORTC = 0 'Setup for high_pulsout MAIN: PAUSE 50 FOR X = 1 TO 20 PULSOUT Servo,180 'Set the Servo_Arm_Pos (Ready to take a picture) PAUSE 20 NEXT X LOOP1: PAUSE 50 IF PORTC.3 = 0 THEN FIRE: 'PIR Activated (Mystery Creature Present?)(N/C Contacts opened). IF PORTC.3 = 1 THEN LOOP1:'PIR Not activated loop until it is. FIRE: 'Take a picture routine PAUSE 50 FOR X = 1 TO 20 pulsout servo,130 'Servo_arm moves cable release to take picture PAUSE 50 NEXT X pause 1000 'Time for shutter to fire / Or to wake camera from sleep mode FOR X = 1 TO 20 'Cable release for camera released / picture taken PULSOUT Servo,180 'Servo_arm moves back releases cable release PAUSE 50 NEXT X HIGH PORTA.1 ‘Turn Sounder Alarm On. PAUSE 10000 'Wait 10 sec's for Camera flash to recycle / recharge LOW PORTA.1 ‘ Turn Sounder Alarm Off (10 second bursts is fine) goto LOOP1:
Here you can see inside the box which contains the project. The servo is bolted to the wall to hold it in place and the lid has a modified plumbing fitting holding the cable release. The vero board holding the 16F684 / Sounder / power supply connector and labelled cables for the servo are on the outside.
How it all fitted together:
This picture shows the whole assembled project mounted on a tripod ready to go. The housing box is fiited to a thin metal plate with a hole in to accept the tripod mounting bush. The cable release is aligned onto the camera on / fire button.
Conclusion:
Well the project worked an absolute treat and bizzarely hit the jackpot the first night it was put into action, uncovering the identity of the late night marauder (see pictures below). This project was very low cost to build and easily adaptable for many different uses. If anyone else fancies building one and would like any advice, I'm more than happy and willing to offer help where I can. It also added to my programming knowledge giving an understanding of how you can use a PIC to control a servo, very useful. So a great success I'm happy to say.
It was a BADGER!
Credits: A difficult one this for fear of missing someone out, so I'm going to turn it on it's head a little and thank everyone who's ever taken the time to help me on the thread 12f675_fuse_about_to_blow! you know who you are! I would like to recommend this thread to any 'newbie' as it contains a wealth of really useful info for anyone starting out (plus I've already asked every silly question a newbie could possibly come up with already) here's the link below:
http://www.picbasic.co.uk/forum/showthread.php?t=12677
This article and its attachments are subject to subject to COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0.
I2CWRITE "Label" option - what does it do?
I'm working on a piece of code I found in another thread about a DS3231 RTC.
flotulopex Today, 14:04Unfortunately, the used I2CWRITE command has an optional label to jump to.
I don't get what the label is there for....