This project was a request from my wife who has recently had a coop delivered and now keeps three chickens (producing an egg each every day - yum !). To ensure the chickens are let out when the sun comes up, and to stop my wife complaining as she realised she would be getting up at 5am in the summer she asked if I could come up with something to automatically open the coop door and let the chickens out in the morning.
Commercial door openers that tend to use a clock and require programming cost in excess of £120 by the time you've purchased a modified door to go with them. They also rely on gravity to close them as the motor simply winds up a cord on a pulley to open it and unwinds it to close it. The door on our coop slides horizontally !
After a few days trawling the net to get inspiration, I found it on a DIY CNC machine where motors were used to turn threaded bar, thus moving the rail attached to it. I did some rough calculation and worked out that a 6:1 geared motor would give enough speed to open the door fairly quickly, so ordered one of the MFA motors from Maplin. Whilst proving the project on the development board I was going to use normal transistors for the H-Bridge to control the test motor, but ordered a L298 board of E-bay for a fiver to control the MFA motor.
With help from the guys here (my PBP programming skills are a tad rusty as I don't code that often) I have the code proven and it works fine on the desk. My next step is to place the PIC and a few resistors etc on a bit of strip board, place it all in a box and then fix it and the motor to the coop. Anyway, in a bid to return the help Henrik, Al, Robert and a few others gave me here is my code and a schematic. Note that the diodes etc for the motor is all contained on the H-Bridge board.
Code:
'****************************************************************
'* Name : Light Activated Door Control *
'* Author : Malcolm Crabbe *
'* Date : 21st January 2014 *
'* Version : 1.0 *
'* Notes : Uses PBP 2.60c *
'* : 12F683, int osc *
'* : Program uses a light dependent resistor to turn *
'* : on an electric motor and open a sliding door. *
'* : Door travel controlled by limit switches *
'****************************************************************
ASM
__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_ON & _MCLRE_OFF
endasm
DEFINE ADC_BITS 10 ' ADC resolution
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50
number VAR word ' Variable to store ADC result
day var byte ' Variable to indicate day or night
CMCON0=7
CCP1CON=0
ANSEL = %00000001 ' GPIO.0 A/D in, rest digital
ADCON0.7 = 1 ' Right justify for 10-bit
GPIO = %00000000 ' Initialize outputs
TRISIO = %101011 ' GPIO 0,1,3,5 = input, 2 & 4 outputs
Motor1 var gpio.2 ' H-Bridge pin 1
Motor2 var gpio.4 ' H-Bridge pin 2
SW1 VAR gpio.5 ' Door open limit switch
SW2 VAR gpio.1 ' Door open limit switch
low Motor1 ' Turn off H-Bridge pin 1
low Motor2 ' Turn off H-Bridge pin 2
day=0 ' Initialise unit to check if day time
main:
if sw1=0 then day = 0 ' If limit switch is open, and mode is night then
adcin 0,number ' Read AN0
if day=0 then ' Day 0 = night, Day 1 = Day
If number >400 then ' If ACD result is above a threshold
high Motor1 ' Turn on H-Bridge pin 1
Low Motor2 ' Turn off H-Bridge pin 2
endif
endif
if SW1 = 1 then ' Door closes limit switch and applies 5v to GPIO.5
low Motor1 ' Turn off H-Bridge pin 1 } Stop motor
low Motor2 ' Turn off H-Bridge pin 2 }
day = 1 ' Set variable to day to indicate the door is open
endif
if sw2=0 then ' Door closes limit switch and applies 5v to GPIO.1
low Motor1 ' Turn off H-Bridge pin 1 } Stop motor
low Motor2 ' Turn off H-Bridge pin 2 }
endif
goto main
OK there may well be smarter, tighter way of coding, but this works and seems logical to my way of thinking !!
Regards
Malcolm
Dam, juts noticed I made an error in the schematic - The LEDs should be after the switches not between them and the supply... its been a long day and its late !! - I'll correct it and upload a new version later
Bookmarks