It is a weapon built for endurance, an instrument of control over hunger itself. The weak offer fragile devices that falter under pressure - feeders so frail they split open at the first scratch of a claw, crumble beneath the weight of a hungry beast, and surrender to chaos before the battle even begins. This is not one of them.
Rising 1 meter into the air, The "Big Dawg" Feeder stands like a fortress of steel (but it's actually plastic). Its 40-liter reservoir holds a stockpile of sustenance, delivered by the relentless force of an olds elevator — precise, efficient, unyielding.
Designed for the battlefield, it withstands the assaults of claws, teeth, and rage without faltering. Eight dogs are fed with certainty, without hesitation, without failure.
It is not a feeder.
It is a standard of strength.
It is the enduring power that hunger cannot overcome.
But it didn't work. After countless hours of design work and 3D Printing, the elevator required too much torque to turn it because of a jamming issue in the scoop system. We hope to release a version two which will work, but right now, we have no time left.
This project uses the concept of an olds elevator. An explanation video can be found here
Assembly Instructions can be found at the following links
The code can be found at the GitHub Repository along with the setup instructions for the Raspberry Pi and Arduino.
The Raspberry Pi runs Node RED.
In the UI flow a UI control node outputs to a function that will call up the dog's feeding times and display them in the form node. When a form is saved, it's values are stored in the global context. Underneath those nodes there is another form node that is connected to a node that saves the forms values in the flow context. These nodes allow the user to choose a snack amount for their dogs. A form node lets the user log food added or taken out of the feeder so that the feeder can keep a rough estimate of the amount of food left. An error message will be triggered if the food level drops below 100g.
In the Feed Control flow an inject node injects: the current time as a JavaScript Date object and the dog's form data. This is fed into a node that converts the times from the dog's form data to JS Date objects. These values are fed into a function node that checks if it is time to be fed and of they have been fed already in that minute to prevent overfeeding. If it is time to be fed then it returns the JS object (found below) that contains the dog's id, the meal name, the amount of food and the time. If it is not time to be fed then the function returns null
msg.payload = {
dogName: msg.dogID,
meal: mealName,
amount: dog[mealName + "Amount"],
time: mealTime
};
The above object is passed into an MQTT out node which sends the object to the Arduino.
Arduino
When the Arduino powers up, it connects to Wi-Fi and subscribes to the MQTT topic: dogfeeder/receive
. Then it zeroes the stepper2 using a magnetic hall sensor.
When a message is sent to the Arduino, the messageHandler
function takes in the data and parses it to JSON. It then checks if the dogName is a list of dogs or just one dog. Then it gets the stepper positions for each dog from this function below:
int getDogAngle(const char* dogName) {
if (strcmp(dogName, "dog1data") == 0) return 0 * 3;
if (strcmp(dogName, "dog2data") == 0) return 90 * 3;
if (strcmp(dogName, "dog3data") == 0) return 180 * 3;
if (strcmp(dogName, "dog4data") == 0) return 270 * 3;
if (strcmp(dogName, "dog5data") == 0) return 0 * 3;
if (strcmp(dogName, "dog6data") == 0) return 90 * 3;
if (strcmp(dogName, "dog7data") == 0) return 180 * 3;
if (strcmp(dogName, "dog8data") == 0) return 270 * 3;
return -1;
}
Once it has the correct positions, it queues the feed job. When it's turn comes, the job is dequeued and processed. The Arduino turns the stepper drivers on, stepper2 turns to the correct bowl and stepper1 dispenses the food.
Part Name | Quantity | Print Settings |
Screw Base_Normal | 3 | eSUN PETG with Manual Tree Supports (see image below). If there are no supports, it will fall over. Don't ask how I know that. |
Screw Base_Short | 1 | eSUN PETG with No Supports |
Motor Mount | 2 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Strength Settings. Automatic Tree Supports. |
Top Gear_Teeth | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. Automatic Tree Supports. |
Top Gear_Bearing Sleeve | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. Automatic Tree Supports. |
Top Gear_Spacer | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
Bottom Gear_Teeth | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. Automatic Tree Supports. Add pause at layer 60 to insert 6 captive M5 nuts. |
Bottom Gear_Spacer | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
Bottom Gear_Bottom Cover | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. Automatic Tree Supports. |
Elevator Tube_Scoop | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. Automatic Tree Supports. |
Elevator Tube_Short | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
Elevator Tube_Normal | 2 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
Small Bevel Gear | 2 | eSUN PETG with No Supports 25% infill |
Cap for Small Bevel Gear Taper Lock | 2 | eSUN PETG with No Supports 99% infill |
Taper Lock for Small Bevel Gear | 2 | eSUN PETG with No Supports 99% infill |
Discharge Chute_Top | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
Discharge Chute_Bottom | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. Manual Supports. (see below) |
Discharge Chute_Shaft Interface | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. 6x Captive M3 nuts. |
Discharge Chute_Extension | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
Discharge Chute_Top Interface | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
Discharge Chute_Lid | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
Discharge Chute_Bearing Housing | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
Taper Lock for Central Shaft_A | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
Taper Lock for Central Shaft_B | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
Universal Joint_Outer | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
Universal Joint_Inner | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
Elevator Tube_Collar | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. Automatic Supports |
Elevator Tube_Negative Collar | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. Automatic Supports |
Base Plate_Top Gear_Retainer for Bearing | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. Automatic Supports |
Base Plate_Piece 1 with 2x M3 Captive Nuts | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. Automatic Supports. 2x M3 Captive Nuts |
Base Plate_Piece 2 with 2x M5 Captive Nuts | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. Automatic Supports. 2x M5 Captive Nuts |
Base Plate_Piece 3 with 16x M3 Captive Nuts | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. Automatic Supports. 16x M3 Captive Nuts |
Base Plate_Piece 4 with 2x M5 Captive Nuts | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. Automatic Supports. 2x M5 Captive Nuts |
Base Plate_Centre Piece | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
Base Plate_Motor Assembly_Standoff_Tall | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
Base Plate_Motor Assembly_Standoff_Short | 1 | eSUN ePLA-ST. Bambu Lab Printers can use the 0.2mm Standard Settings. |
eSUN PETG
Strength
Standard
Same as Strength but with these changes
The author marked this model as their own original creation.