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

20170828_204455.jpg
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

20170828_204448.jpg

PARTS LIST:

  1. old meat grinder
  2. nema 17 or better
  3. nema 17 holder
  4. plastic bottle
  5. driver L298
  6. shaft coupler
  7. screw
  8. microcontroller
  9. 12V power supply

Cut the Meat Grinder With an Angle Grinder

s-l1000.jpg

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);

}

Done!

20171024 182136