Yes I know I should have used a state machine design, but it appears to work so far, and I think I did good for only having the thing for 14 days
created Feb 2010
by Jake Dixon
jakedixon@hotmail.com
all parts from digikey/my parts drawer
//Parts list
P# Q Name
67-1106-nd 10 test led
p20kbact-nd 1 20K ohm
cm140kfct-nd 1 140K ohm (not used)
5v relay DPDT (used for door actuator)
374-1051-nd 3 5v/120v relay spst
317-1305-nd 1 thermal resistor5-100k ohm
p959-nd 10 330uf caps (in parallel with relays)
*/
// set pin numbers:
int PhotoPin = 1; // photo analog pin
int TempPin = 0; // temp analog sensor
int FeedPin = 12; // dispenses feed
int FanPin = 7; // exhaust fan ( cheap wal-mart plug in fan)
int HeatPin = 2; // heat lamp ( 100W light bulb)
int LightPin = 4; // night light (40W Lightbulb)
int ButtonPin = 8; // pushbutton
int DoorPin = 13; //door actuator realay
// variables will change:
int ButtonState = 0; // variable for reading the push button status
int DoorState = 0; //variable for reading the door state
int Bright = 0; // variable for photo pin
int Temp = 0; // variable for temp cold
long Flip = 199900; // Delays routines and allows manual operation
int Flop = LOW; // Not sure yet but I may need it
void setup() {
pinMode(FeedPin, OUTPUT);
pinMode(FanPin, OUTPUT);
pinMode(HeatPin, OUTPUT);
pinMode(LightPin, OUTPUT);
pinMode(DoorPin, OUTPUT);
pinMode(PhotoPin, INPUT);
pinMode(TempPin, INPUT);
pinMode(ButtonPin, INPUT);
digitalWrite(DoorPin, LOW);
Serial.begin(9600);
}
void loop()
{
Flip ++;
// ******** Define int ******** //aka "what's up"
Bright=analogRead(PhotoPin);
Temp=analogRead(TempPin);
ButtonState=digitalRead(ButtonPin);
DoorState=digitalRead(DoorPin);
// ****** Manual Operation ******
if (ButtonState == HIGH) // the button is pushed
{
if(DoorState == LOW) // the door is closed
{
Serial.println("******Door Opening******");
digitalWrite(DoorPin, HIGH); // open the door
delay (5000); // how long it takes to open
}
if (DoorState == HIGH) // the door is open
{
Serial.println("******Door Closing******");
digitalWrite(DoorPin, LOW); // close the door
delay (5000); // how long it takes to close
}
}
// ****** Morning Routine ******
if (Flip > 2000000){ //disables a change from night to day and vice verse for about 2-3 hours
if(Bright < 672){ //its dark out side
if (Flop==LOW){ //its not already in "morning"
digitalWrite(DoorPin, HIGH); //open the door
Serial.println("***********GOOD MORNING***********");
Flip = 0;
Flop= HIGH; //enable night mode
}
}
}
// ********Evening Routine********
if (Flip >2000000) {
if (Bright > 800){ // if it's dark out and night is enabled
if(Flop == HIGH){
Serial.println("******Good Evening******");
digitalWrite(DoorPin, HIGH); // open the door
Serial.println("step 1 go");
digitalWrite(LightPin, HIGH); // turn on the light
Serial.println("step 2 go");
delay (5000); // wait 5 seconds
Serial.println("step 3 go");
digitalWrite(FeedPin, HIGH); // turn on the dinner bell/feeder on
Serial.println("step 4 go");
delay (20000); // wait 20 seconds
Serial.println("step 5 go");
digitalWrite(FeedPin, LOW); // total feed/buzzer time 20 seconds
Serial.println("step 6 go");
delay (300000); // wait 5 min for all the chickens to get home
Serial.println("step 7 go");
digitalWrite (DoorPin, LOW); // close the door
Serial.println("step 8 go");
delay (900000); // wait for everything to get settled
Serial.println("step 9 go");
digitalWrite(LightPin, LOW); // sleep tight
Serial.println("******good night******");
Flip = 0; //reset timer
Flop=LOW; //disable evening, enable morning
}
}
}
if (Temp < 380)
{
digitalWrite(FanPin, HIGH);
Serial.println("******Fan on******");
}
if (Temp > 390)
{
digitalWrite(FanPin, LOW);
}
if (Temp > 800){
Serial.println("******heater on******");
digitalWrite(HeatPin, HIGH);
}
if (Temp < 780)
{
digitalWrite(HeatPin, LOW);
}
}
how did I test the operation you ask?
I put leds on the relays, so when it energizes it lights the led.
I also used a desk lamp for heat a cooler to simulate the frost, and the photo sensor is in the window for light/dark.
so far it works, well see how it does when I finish modifying the shed for chickens! ![]()