menu icon

VASCO COSME

FAB_FEEDER


Since the begginning of Fabacademy this project had been contained on its dimension and functionalities. I've soon realized i couldn't do a do-all machine, so i concentrated on it just storing, weighting and dispensing my dog's dry food.

I'm yet far from the conclusion of this project, but i believe i've come a long way and learnt a lot by developing this project.

WHAT DOES IT DO TODAY?
On the touch of a button , it starts a cycle of the machine's basic functionalities:

- The DC motor rotates the helix and this moves the food sotred in the storage compartment into the weighting box.
- At that time, the hall effect sensor is sending out values that are read by the attiny, evaluating if it is already time to release the fod in the weighting compartment.
- When a certain value (=weight) is reached, the bottom lid rotates 180º, thereby releasing the food.





MECHANICAL AND MACHINE DESIGN

I consider myself very comfortable working in Rhino now, and in this project i learnt a lot, but mostly i got faster and a lot of processes in building in Rhino are now optimized in my workflow inside Rhino.

You can download the RHINO files here




- - - - - - - - - - - - - - - - -

3D printing some parts

I 3d printed the HELIX and the pipe/deposit connector. The helix , wich i thought was to give me some serous trouble when 3d printing, didn't go bad at all, but the connector got some overhanging to be corrected in a later stage of this spiral development.




- - - - - - - - - - - - - - - - -

Spring/Load system




- - - - - - - - - - - - - - - - -

Weight recipient rotating-lid release system




- - - - - - - - - - - - - - - - -

Fooling around with some color....









ELECTRONICS

I started by designing a board that would integrate circuits for all the inputs and outputs that i wanted to have working:

- INPUT - Hall effect sensor

- OUTPUT - DC motor + Stepper Motor

Here is the result of my circuit design in Eagle:

You can download the EAGLE files here




- - - - - - - - - - - - - - - - -

MILLING THE BOARD

Things didn't go very well in the beginning. The copper board wasn't, for some reason, completely flat, so i had to re-mill the board some 3 times.


- - - - - - - - - - - - - - - - -

I was afraid of the trough-holes to remove the copper around them, but it turned out pretty fine. I picked the components and started assembling the circuit.




- - - - - - - - - - - - - - - - -

The soldering part of the process went well, but as soon as i started programming the board, it just didn't got recognized by the computer and i couldn't do anything.... i spotted some connections that weren't fully working, but even after i fix them the board wasn't working.




- - - - - - - - - - - - - - - - -

I started stressing because milling and soldering another board right away would disturb my schedule, so i decided to start testing using the Echo hello-world board i had built in WEEK_6 of FabAcademy.


- - - - - - - - - - - - - - - - -

Things moved on at good speed, and the echo helloboard was now turned in a sort of FEEDERUINO ;)




- - - - - - - - - - - - - - - - -

Because i needed, for the stepper motor, of 4 mosfests, i decided to use the part the mosfets in the board that wasn't functioning. tested the mosfets with the stepper motor and it worked. Great!










- - - - - - - - - - - - - - - - -

THE RECICLED DC MOTOR

For the helix motor i decided to get me a carwindow motor, wich are rather slow but have a lot of torque. I went to a nearby 'car parts shopping center', in a place called QUINTA DO CARMO. They have dozens of small shops filled with used car parts, so i got me a couple motors, for 10€ each (Ferdi, my guru, got his for 5!!!)




- - - - - - - - - - - - - - - - -

HALL EFFECT SENSOR

i thought about using the board i designed for the input devices ' assignement, but ultimately i just made a macgyver-style pcb with the sensor, due to problems with the dremel we use in the Modela.




- - - - - - - - - - - - - - - - -
The fabfeeder original board was still trying to escape from the project, but i kept it around.... ;)




- - - - - - - - - - - - - - - - -

EVERYTHING WORKING PROPERLY, BUT TOO MANY CABLES....

I learnt , unforgettably, why a PCB is so useful. When you just try to connect cables you get a very confusing desk!!!




- - - - - - - - - - - - - - - - -

FINAL TESTS

For the final tests i made some polistryene squares to act as dry food.




- - - - - - - - - - - - - - - - -

EVERYTHING WAS WORKING NOW!



This was the code used for putting the fabfeeder to work in this demo:

int sensorPin = 6; // select the input pin for the sensor
int ledPin = 7; // select the pin for the LED
int sensorValue = 0; // variable to store the value coming from the sensor
int ButtonPin = 3; // V - select the pin for the BUTTON
int DCMotorPin = 8; // V - select the pin for the DCMOTOR

int buttonState = 0; // variable for reading the pushbutton status

////para o STEPPER MOTOR
int motorPin1 = 4;
int motorPin2 = 5;
int motorPin3 = 1;
int motorPin4 = 0;
int delayTime = 8;

int emfuncionamento = 0;

void setup() {

// declare the ledPin as an OUTPUT:
pinMode(ledPin, OUTPUT);
// V - declare the MotorPin as an OUTPUT:
pinMode(DCMotorPin, OUTPUT);
// V - declare the ButtonPin as an INPUT:
pinMode(ButtonPin, INPUT);
pinMode(sensorPin, INPUT);
//
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);


}
void loop() {
// V - read the state of the pushbutton value:
buttonState = digitalRead(ButtonPin);
// check if the pushbutton is pressed.
// if it is not , the buttonState is LOW:
if (buttonState == LOW ) { //&& sensorValue > 50
// turn MOTOR on:
emfuncionamento = 1;
while(emfuncionamento == 1){
digitalWrite(DCMotorPin, HIGH);
delay(5000);
sensorValue = analogRead(sensorPin);
if (sensorValue > 500){
digitalWrite(DCMotorPin, LOW);
stepforward();
emfuncionamento = 0;
}
}
}
else {
// // turn stepper off:
// digitalWrite(DCMotorPin, LOW);
// digitalWrite(motorPin1, LOW);
// digitalWrite(motorPin2, LOW);
// digitalWrite(motorPin3, LOW);
// digitalWrite(motorPin4, LOW);
}
//
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
// turn the ledPin on
digitalWrite(ledPin, HIGH);
// stop the program for milliseconds:
delay(sensorValue);
// turn the ledPin off:
digitalWrite(ledPin, LOW);
// stop the program for for milliseconds:
delay(sensorValue);


}
void stepforward(){
////
for (int i=0; i <= 255; i++){
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
}
//
//
}