Turn Your Old MEAT GRINDER Into an Automatic CHICKEN FEEDER
by might111 in Outside > Backyard
4166 Views, 10 Favorites, 0 Comments
Turn Your Old MEAT GRINDER Into an Automatic CHICKEN FEEDER
Let me present to you a chicken feeder made out of an old meat grinder. The only expense is a Nema17 motor and a driver. You can get away with using a AC timer and a worm motor if you are not familiar with electronics. It might also work with wet dog/cat food, even without modifications (see Step 2). Sorry for lack of pictures as I didn't intend to publish it at the time of bouilding. I later connected this feeder to a 12V battery charged by a solar cell. Enjoy!
PARTS LIST
PARTS LIST:
- old meat grinder
- nema 17 or better
- nema 17 holder
- plastic bottle
- driver L298
- shaft coupler
- screw
- microcontroller
- 12V power supply
Cut the Meat Grinder With an Angle Grinder
Cut a small opening just before the exit of the meat grinder. This allows the chicken feed to exit freely and not get stuck at the end of the worm. Don't cut too far back though as the feed might leak out.
File sides of the worm so the clearence is wider for larger pieces to pass through.
Heat shrink the plastic bottle on the top of the meat grinder. Wider and higher than mine works better. Hot glue another bottle with cap if needed.
The Code Is for Fotocell Driven Dosage Once a Day; It Includes Chicken Gates and a Relay for 12V Battery
//code has a "counter" that counts minutes
//it goes to 0 at night and to 71 durring the day
//but only dispenses at 30 in the morning
#include "LowPower.h"
#include "Stepper.h"
int Pin0 = 9;
int Pin1 = 8;
int Pin2 = 7;
int Pin3 = 6;
int fotoThr=780;
//int enable1Motor = 3;
//int enable2Motor = 5;
int mosfetFeeder = 4;
int fotoenablePin = 2;
int t = 2; //delay
int i=0;
int j=0;
int k=0;
int _step = 0;
int sensorPin = A0;
int foto = 700;
int state = 1; //0 is closed; 1 is open
int feederInit = 35; // minutes of luminating, max 60, 0=darkness, 30 feeder start, once a day
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 10, 11, 12, 13);
boolean dir = true;// gre
void setup()
{
// set the speed at 60 rpm:
myStepper.setSpeed(30);
// initialize the serial port:
Serial.begin(9600);
// pinMode(enable1Motor, OUTPUT);
//pinMode(enable2Motor, OUTPUT);
pinMode(Pin0, OUTPUT);
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
pinMode(fotoenablePin, OUTPUT);
pinMode(mosfetFeeder, OUTPUT);
}
void loop()
{
digitalWrite(fotoenablePin, HIGH);
delay(50);
foto = analogRead(sensorPin);
digitalWrite(fotoenablePin, LOW);
// { dir = true; }
// else
// { dir = false; }
if (foto < fotoThr && state == 0)
{
//digitalWrite(baza1, HIGH);
delay(200); //to let dc-dc conv. power up
//digitalWrite(9, LOW);
//digitalWrite(10, LOW);
state = 1;
for (int i = 0; i < 24576; i++)
{
dir = true;
switch (_step) {
case 0:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;
case 1:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, HIGH);
break;
case 2:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;
case 3:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;
case 4:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
case 5:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
case 6:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
case 7:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;
default:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
}
if (dir) {
_step++;
} else {
_step--;
}
if (_step > 7) {
_step = 0;
}
if (_step < 0) {
_step = 7;
}
delay(t);
}
// digitalWrite(baza1, LOW);
// digitalWrite(9, HIGH);
//digitalWrite(10, HIGH);
}
if (foto > fotoThr && state == 1)
{
//digitalWrite(baza1, HIGH);
delay(200);
//digitalWrite(9, LOW);
//digitalWrite(10, LOW);
state = 0;
for (int i = 0; i < 24576; i++)
{
dir = false;
switch (_step) {
case 0:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;
case 1:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, HIGH);
break;
case 2:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;
case 3:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
break;
case 4:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
case 5:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
case 6:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
case 7:
digitalWrite(Pin0, HIGH);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
break;
default:
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
break;
}
if (dir) {
_step++;
} else {
_step--;
}
if (_step > 7) {
_step = 0;
}
if (_step < 0) {
_step = 7;
}
delay(t);
}
//digitalWrite(baza1, LOW);
//digitalWrite(9, HIGH);
//digitalWrite(10, HIGH);
}
digitalWrite(Pin0, LOW);
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
if (foto < fotoThr )
{
feederInit++;
if(feederInit==71)
{
feederInit=70;
}
}
else
{
feederInit--;
if(feederInit==0)
{
feederInit=1;
}
}
if (foto < fotoThr && feederInit==30 )
{
for(j=0;j<5;j++)
{
digitalWrite(mosfetFeeder, HIGH);
delay(2000);
for(i=1;i<=5;i++)
{
Serial.println("counterclockwise");
myStepper.step(stepsPerRevolution);
delay(200);
}
digitalWrite(mosfetFeeder, LOW);
for(k=0;k<8;k++)
{
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}
}
}
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}