Greetings,
First project, an automatic fish feeder for my Beta fish.
Its pretty simple. It detects night & day via light reading from a photocell hanging out in my Window. It triggers the servo, which has a circular attachment (plastic piece that rotates). It has a whole it the circle that accepts 1-2 pellets from the food container that swings around to drop the pellets through a whole in the other side. I usually feed my beta about 4-5 pellets twice a day so it goes back and forth for food 3 times per feeding. It pauses for an hour after each cycle to allow the serial number to pass. I also hooked up a light as the fish bowl was pretty dark. I got it off of an LED flash light that had different modes so it can flash red when feeding then switch back to white. That's about it, simple works :].
So I'm looking for some advice. I would like to incorporate a time system and get rid of the photocell for consistency. Being a newb, the only shield I have is the SD shield from seeedstudio and I really have looked into it much. I have checked out the tuts. and was going to look into data capture later to track the feedings. If I could use that to tell time, that would be great. But really open to opinions or code revisions.
PICS/GALLERY: (The first pic with the cup, was first concept
lol)
CODE:
PLEASE BE WARNED! I'm not very good at coding. I made it work though.
#include <Servo.h> //servo library import
Servo servo;
int photocellPin = 0;
int photocellReading;
int lightLvl = 0;
int pos = 0;
int bowlLight = 8;
int startLed = 13;
void setup() {
pinMode(bowlLight, OUTPUT);
pinMode(startLed, OUTPUT);
//Bowl Light initial setup // OFF-WHITE
digitalWrite(bowlLight, HIGH);
delay(100);
digitalWrite(bowlLight, LOW);
delay(100);
Serial.begin(9600);
servo.attach(9);
}
void loop() {
photocellReading = analogRead(photocellPin);
Serial.print("OFF = ");
Serial.println(photocellReading);
photocellReading = 1023 - photocellReading;
lightLvl = map(photocellReading, 0, 1023, 0, 90);
delay(15);
if (lightLvl == 30)
{
Serial.print("DAY FEED = ");
//Change bowl light to alert(RED)
digitalWrite(bowlLight, HIGH);
delay(100);
digitalWrite(bowlLight, LOW);
delay(100);
digitalWrite(bowlLight, HIGH);
delay(100);
digitalWrite(bowlLight, LOW);
delay(100);
digitalWrite(bowlLight, HIGH);
delay(100);
digitalWrite(bowlLight, LOW);
delay(100);
//Shake food to loosin
servo.write(140);
delay(500);
servo.write(50);
delay(500);
servo.write(140);
delay(500);
servo.write(50);
delay(500);
servo.write(160); //pickup pellet
delay(1000);
servo.write(155);
delay(500);
servo.write(160);
delay(500);
servo.write(155);
delay(500);
servo.write(160);
delay(500);
servo.write(0); //drop pellet
delay(1000);
servo.write(5);
delay(100);
servo.write(0);
delay(100);
servo.write(5);
delay(100);
servo.write(0);
delay(100);
servo.write(50);
delay(500);
servo.write(0);
delay(1000);
servo.write(160); //pickup
delay(1000);
servo.write(155);
delay(500);
servo.write(160);
delay(500);
servo.write(155);
delay(500);
servo.write(160);
delay(500);
servo.write(0); //drop
delay(1000);
servo.write(5);
delay(100);
servo.write(0);
delay(100);
servo.write(5);
delay(100);
servo.write(0);
delay(100);
servo.write(50);
delay(500);
servo.write(0);
delay(1000);
servo.write(160); //pickup
delay(1000);
servo.write(155);
delay(500);
servo.write(160);
delay(500);
servo.write(155);
delay(500);
servo.write(160);
delay(500);
servo.write(0); //drop
delay(1000);
servo.write(5);
delay(100);
servo.write(0);
delay(100);
servo.write(5);
delay(100);
servo.write(0);
delay(100);
servo.write(50);
delay(500);
servo.write(0);
delay(1000);
//Change bowl light back to WHITE
digitalWrite(bowlLight, HIGH);
delay(100);
digitalWrite(bowlLight, LOW);
delay(100);
digitalWrite(bowlLight, HIGH);
delay(100);
digitalWrite(bowlLight, LOW);
delay(3600000);
}
else
{
servo.write(0);
}
if (lightLvl == 80)
{
Serial.print("NIGHT FEED = ");
//Change bowl light to alert
digitalWrite(bowlLight, HIGH);
delay(100);
digitalWrite(bowlLight, LOW);
delay(100);
digitalWrite(bowlLight, HIGH);
delay(100);
digitalWrite(bowlLight, LOW);
delay(100);
digitalWrite(bowlLight, HIGH);
delay(100);
digitalWrite(bowlLight, LOW);
delay(100);
//Shake food to loosin
servo.write(140);
delay(500);
servo.write(50);
delay(500);
servo.write(140);
delay(500);
servo.write(50);
delay(500);
servo.write(160); //pickup pellet
delay(1000);
servo.write(155);
delay(500);
servo.write(160);
delay(500);
servo.write(155);
delay(500);
servo.write(160);
delay(500);
servo.write(0); //drop pellet
delay(1000);
servo.write(5);
delay(100);
servo.write(0);
delay(100);
servo.write(5);
delay(100);
servo.write(0);
delay(100);
servo.write(50);
delay(500);
servo.write(0);
delay(1000);
servo.write(160); //pickup
delay(1000);
servo.write(155);
delay(500);
servo.write(160);
delay(500);
servo.write(155);
delay(500);
servo.write(160);
delay(500);
servo.write(0); //drop
delay(1000);
servo.write(5);
delay(100);
servo.write(0);
delay(100);
servo.write(5);
delay(100);
servo.write(0);
delay(100);
servo.write(50);
delay(500);
servo.write(0);
delay(1000);
servo.write(160); //pickup
delay(1000);
servo.write(155);
delay(500);
servo.write(160);
delay(500);
servo.write(155);
delay(500);
servo.write(160);
delay(500);
servo.write(0); //drop
delay(1000);
servo.write(5);
delay(100);
servo.write(0);
delay(100);
servo.write(5);
delay(100);
servo.write(0);
delay(100);
servo.write(50);
delay(500);
servo.write(0);
delay(1000);
//Change bowl light back to WHITE
digitalWrite(bowlLight, HIGH);
delay(100);
digitalWrite(bowlLight, LOW);
delay(100);
digitalWrite(bowlLight, HIGH);
delay(100);
digitalWrite(bowlLight, LOW);
delay(3600000);
}
else
{
servo.write(0);
}
}
