Mechanical design and Machine design¶
The Growth Machine: Sipmate¶
We weren’t satisfied with the manual (analog) version — we envisioned something more automated and efficient. That’s where the idea of the Sipmate was born: exactly what our lab had been missing.
Here you can see how plants were growing in our lab before:
Our goal was to move beyond this setup. We wanted a fully automated system — and this was our very first sketch:
We were inspired by an exciting open-source project, which you can check out here.
But we wanted to go a step further: Our goal was not only to support the growth of plants, but also to promote human well-being. That’s why we came up with the idea of a 2-in-1 system that serves both plants and people.
The result is a machine capable of automatically transporting bulk materials (such as soil, seeds, or coffee beans) into a container and then watering it regularly – whether it’s a flower pot or a coffee mug.
The mechanical foundation is based on a classic FDM system, as known from 3D printing.
To bring the Growth Machine to life, we made extensive use of the FabLab’s resources – including 3D printers, a laser cutter, a vacuum forming machine, and various analog methods for construction and prototyping.
Our project is divided into the following areas:
- Housing construction
- Mechanics
- Electronics
- Programming
Material List¶
Part | Quantity | Price | image |
---|---|---|---|
Aluminum profile 25 x 3 x 3 | 4 | 7.19 € | |
Aluminum profile 35 x 3 x 3 | 4 | 8.00 € | |
Aluminum profile 31 x 3 x 3 | 4 | 7.60 € | |
T-nuts 30mm M4 | 100 | 18.63 € | |
Hexagon screws | 120 | 8.00 € | |
Automatic connectors (screw, cutting nut, hammer nut) | 16 | 19.20 € | |
Peristaltic pump (13D020 or NKP-DC-510Y) | 1 | 16.90 € | ![]() |
Stepper motor SY42STH47-1684A | 2 | 42.00 € | ![]() |
Stepper motor | 1 | 16.90 € | ![]() |
DIN rail | 1 | 2.30 € | |
Terminal blocks for DIN rail | 4 | 5.20 € | |
End terminal block (4 contacts each) | 1 | 1.65 € | |
Cover for DIN rail | 1 | 1.60 € | |
Connectors for terminal blocks | 2 | 0.60 € | |
Micro metal gear motor | 1 | 5.80 € | ![]() |
Pulley wheels (20 teeth) | 3 | 3.80 € | |
Timing pulleys (20 teeth) | 3 | 9.80 € | |
Stranded wires (1.4mm) | 14.20 € | ||
Ferrules | 4.50 € | ||
Anti-shock feet | 4 | 12.20 € | |
Linear guide | 3 | 150.00 € | ![]() |
24V power supply | 18.00 € | ![]() |
|
Full Graphic Smart Controller | 1 | 8.30 € | ![]() |
Bottle + cap | 2 | 0.00 € | |
BIGTREETECH Octopus, V1.1 | 1 | 65.99 € | ![]() |
TMC 2209 Stepper Motor Driver | 3 | 15.00 € | |
Cress seeds | 1 | 3.00 € | |
Hydroponic net pots with growing wool | 60 | 18.00 € | |
PLA filament (2 rolls of 500g) | 2 | 60.00 € | |
Acrylic glass A4, 2mm transparent | 2 | 16.30 € | |
Acrylic glass A3, 2mm black | 1 | 11.30 € | |
Acrylic glass A3, 5mm (transparent or color unspecified) | 2 | 22.00 € | |
emergency stop | 1 | 8.90 € | ![]() |
Housing Construction¶
Aluminum Frame¶
To build our machine’s frame we used 30mm x 30mm aluminum extrusions.
This particular size later turned out to be kind of a pain point because some crucial connecting components were difficult to source.
20mm x 20mm would probably have been a better choice but you live and you learn…
Based on our initial drawings we set up a basic digital twin in Fusion that we continuously built upon.
The frame itself ended up looking something like this:
The lower rectangle is raised up to leave some space for whatever vessels are put into the base board and held in place by cutting sleeve automatic fasteners.
Since these automatic fasteners tended to slightly bend the aluminum extrusions out of shape we only used them for the lower part of the frame and went with a 3D printed solution for the top.
Walls¶
Holder Grid for Containers¶
For the holder grid for containers – such as plant pots and cups – we designed a laser-cut plate that is 5 mm thick and measures 344 mm × 244 mm.
In the design process, we used a parametric design, allowing the dimensions of the cutouts to be dynamically and flexibly adjusted to fit various container sizes – all “on the fly.” The diameter for the cup holder is 37 mm, while the diameter for the plant pot holder is 55 mm.
To optimize the design, we first created several test versions made from cardboard. These were used for form and size checks as well as practical testing. After successful prototyping, the final version was precisely laser-cut from acrylic.
Side and Back Panels
Different requirements had to be considered for the side panels and the back panel.
Back Panel
The back panel plays a key role as a protective barrier between the watering area and the electronics. It also serves as a visual shield, hiding the electronics and contributing to a clean and organized appearance.
In addition, the back panel has a structural function: several essential components are mounted directly onto it, including:
- a DIN rail for structured installation of electronic components
- the microcontroller board
- the peristaltic pump for watering
- and the mounting brackets of the aluminum profiles, which provide stability to the overall frame
Side Panels¶
For the side panels, it was especially important that they be light-permeable, allowing the plants to receive as much natural light as possible.
Like the back panel, the side panels are attached to the aluminum profiles using bracket holes.
To optimize the connection between the aluminum profiles and screws, we used T-slot nuts, which allow for a stable, precise, and flexible mounting system within the aluminum rails.
Axes¶
As you probably have already noticed, our machine is heavily inspired by basic 3D printers which is why we included 3 movable axes.
The first axis we took care of was in the Y direction, meaning forwards and backwards movement.
It is driven by a NEMA17 stepper motor in the upper back left corner of our frame.
A tensioning mechanism in the upper front left corner holds a 6mm GT2 timing belt which is clamped down on a 3D printed piece that holds the X-axis gantry.
Said piece is attached to a carriage sliding along an MGN12 linear rail.
The X-axis is built pretty much the same way and takes care of moving the machine’s Z-axis assembly which features two sperate heads that are attached to only one motor.
We built the Z-axis in a way that when the left head is lowered down, the right head is moved up and vice versa.
Something similar can be seen on the LumenPnP by Opulo.
Mechanics¶
For our mechanical system, we use a peristaltic pump to transport water, controlled by a Marlin board (BigTreeTech Octopus V1.1). The board is equipped with TMC2209 stepper motor drivers and powered by a 24V 5A power supply connected to the mains. Both the board and the power distributor are mounted on a DIN rail, allowing for safe grounding if necessary. Three stepper motors are connected in total, and for safety, we have integrated an emergency stop button.
Pump System¶
For our plant watering machine, we use a peristaltic pump because it can deliver liquids precisely and cleanly. The pump works by using rotating rollers to squeeze a flexible tube, pushing water in one direction. Since the liquid only touches the tubing, the system is hygienic and easy to maintain. It is also self-priming (can draw in water without pre-filling) and allows for very accurate dosing—perfect for our automatic irrigation system. Here you can find the pump we use
Watering Head¶
Our watering head is part of an automated system that pumps water from a bottle using a peristaltic pump and delivers it through a tube into the main working area.
There, the water is released through a vertically downward-facing hose attached to the watering head, which waters the plants precisely. The head is mounted on a movable carriage that can be adjusted vertically. This allows the distance to the plant to be adapted depending on its growth stage. For filling our shot glasses with precision, the carriage moves all the way down to avoid spilling even a single drop.
The excess water that reaches the bottom of the plants is collected in an additional container.
Electronics¶
Here you can see the electronic components and how they are powered. We use a standard Schuko plug to supply power to the power supply unit. From there, the power is routed to the BigTreeTech Octopus V1.1 board, which is connected to the stepper motors, the peristaltic pump, and the RepRapDiscount Full Graphic Smart Controller. Additionally, we have integrated an emergency stop button that is directly connected to the power supply, allowing the entire machine to be shut off quickly in case of an emergency.
In true German fashion—safety first—we’ve implemented a thorough grounding concept. Our power supply is connected to a DIN rail via a grounding cable (properly screwed in, of course). From there, another cable runs to a T-slot nut, which grounds the aluminum frame as well. This way, not only is the system protected, but our TÜV-approved peace of mind is too—German engineering at its finest.
Programming¶
Marlin Firmware¶
Since our machine is based on a lot of components found in a modern 3D printer, we chose to make use of the open source Marlin firmware.
Once we downloaded and unzipped the latest release, we opened it in Visual Studio Code.
To be able to build the firmware for our machine, we needed to install two crucial extensions.
Auto Build Marlin and PlatformIO IDE massively simplify the whole process.
Marlin is quite a behemoth when it comes to customizability, only the basic configuration file contains almost 3500 lines of code that can be changed to power a machine.
To add to that there is an advanced configuration file with ~4300 lines.
Going through every single one of the possible settings to change would certainly be too much, so we’ll just give you the cliff notes of what we did to get our machine up and running.
For everything else there is an entire configuration guide, so be sure to check that out.
The first things we needed to change were related to the hardware we are using.
In Configuration.h
we set up the BigTreeTech Octopus V1.1
as the motherboard and changed the stepper motor drivers for X,Y,Z and E0 to TMC2209
.
Next, since our machine is not really a 3D printer and thus doesn’t have any hot parts, we had to set up dummy thermal sensors because disabling them entirely would result in an error.
Further down in the configuration file we then enabled endstops for all of our axes.
The logic for our Z-axis endstop had to be inverted due to reasons, we’ll cover in a bit.
Up next: defining the length of our axes.
Keep scrolling and you’ll end up in the LCD and SD support section, this is what ours looked like:
The next section defines the type of screen you are using, ours required us to uncomment line 2768, #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
.
With that the basic setup was out of the way and we changed over to the Configuration_adv.h
file.
As mentioned, this one is the larger of the two but just because there are so many options doesn’t mean you have to enable them all.
The first relevant changes we made were found in the tmc/config
section following line 2722.
Here we changed the current and number of microsteps to 1000mA and 16 respectively.
In the tmc/stallguard
section we enabled sensorless homing, which is a neat feature that lets you home your machine without a physical limit switch.
Remember how we had to invert the logic for the Z-axis endstop? For some reason sensorless homing just didn’t want to work reliably so we had to install an actual switch there while the other axes were just fine with a sensitivity of 80.
That pretty much covers all the relevant changes. We next headed over to the Auto Build Marlin
extension and built a firmware binary file that we could save onto a micro SD card.
After inserting that SD card into the mainboard and turning on the machine, it automatically flashed the new firmware.
The entire marlin folder is about 500mb in size, so we’ll just provide the Configuration.h and Configuration_adv.h files.
GCODE¶
After the firmware was done we began writing a gcode script that makes our machine distribute water and seeds at specific locations.
With the digital twin already pretty much done, determining the locations was pretty straight forward so we needed to figure out how long and how fast we’d need to run the two distribution motors.
By the way those motors are technically using fan ports on the mainboard so don’t be surprised when looking at our gcode…
Here is the beginning of the watering and seed distribution routine we ended up with:
G28 ; home all axes
//1st position
G0 X250 Y130 Z90 F3000 ; move to next position at 50mm/s
M106 P0 S255 ; turn on pump at full speed
G4 S9 ; wait for 9 seconds
M107 P0 ; turn off pump
G0 X250 Y130 Z0 ; move down second head
M106 P1 S10 ; turn on seed motor at slow speed
G4 P500 ; wait for half a second
M107 P1 ; turn off seed motor
G4 S1 ; wait for another second to prevent scattering seeds
This is simply repeated for every location.
Click here to download the whole .gcode file.
Finishing¶
Our digital twin:
Digital twin¶
Here you can find our digital twin as a Fusion file click here for the download