Introduction: Automated Bean Sprouter

Sprouts are rich in minerals and vitamins and can be eaten in soups, salads and stir-fry. It also tastes great on burgers and is the easiest way to add nutrients to a meal. Sprouts is a super-food, it is very young plants that is harvested shortly after germination.

Sprouting seeds are easy, in short, the seeds get soaked in water for a few hours, I normally do mine overnight. This softens the outer shell of the seed and start the germination process. After that it is rinsed and placed in a container, it is rinsed at regularly until it is ready for harvest. This process can take anything between two and five days, depending on the type of seed.

This automated sprouter does the watering bit for you, every hour the water pump switches on for 10 seconds, long enough to cover the seeds in the drawer with water.

50g of mung seeds gives us a yield of over 400g within 3 days, that is excluding the soak time.

I've uploaded the time-lapse video to YouTube, you can see it here:


I used the Ender 3 to print the parts. I've printed it with normal PLA, the only color that really matters is that of the drawer, there I used transparent PLA to allow a bit of light into the drawer, and also to easier see how the sprouts are growing. 3d printer files

As commented below, PLA is not the best filament for food safe prints. Although it is food safe, there are many caveats, and PETG would be a better option for the drawer and the reservoir specifically. Alternatively, you can also coat the inside of the parts with food safe epoxy, just remember to keep the holes at the bottom of the drawer open.

Here is some more information about PLA and food safety:

Electronic parts:

The mung beans we use.

Step 1: Assemble the Reservoir

I've coated the reservoir with epoxy to make sure it doesn't leak. So I would suggest to fill the reservoir with water and make sure it doesn't leak, if it does, epoxy does a great job of sealing it.

Make sure the supports is removed from the reservoir. Connect the water pipe with the water pump and place in the reservoir. The water pump goes into the back of the reservoir into the cage printed for it. The slid at the top is for excess water to run off, and typically goes to the back of the sprouter.

Step 2: Assemble the Middle

The middle part is where the drawer with the seeds will fit in, so the open side should face the front. The water pipe and electric wire of the water pump will run up in the back of the middle part. It is a tight fit over the reservoir, so make sure the parts is properly cleaned.

Step 3: Assemble the Top

The top part is where the electronics go. The bigger gap is where the display goes and should ideally face the front. In the middle of the top part is a hole for the water pipe to go through.

Don't try and put the electric cable through the hole in the back, that will be done in the next step. This step is just to put the top on and to feed the water pipe through the hole in the middle of the top component.

If you are not comfortable or confident with the electronics, you can use a timer switch and connect the water pump with that. The water pump needs to go on for 10 seconds every hour to water the sprouts. The electronics part is cool, but not essential.

Step 4: Connect the Relay

The relay is used to switch the water pump on and off, and if you are in a hurry, this is the only electronics you would need. It won't be pretty, but it will work and grow the sprouts.

I'm still finding my way with electronics, so I used this tutorial to figure out how to connect the relay. Instead of a light I connected the water pump, I did not connect the lcd display yet, and I've put the on and off function of the relay on a timer. The important part here is that the default start of the relay is OFF.

Step 5: Connect the Other Components

This step is optional, but it does make the sprouter a lot better. Here are some tutorials on putting them together:

16x2 Character Digital LCD Module Board 5V For Arduino, some great coding examples in this tutorial. The data wires must be connected to pins 2, 3, 4, 5, 6 and 7.

Temperature and Humidity Sensor tutorial, the data wire must be connected to pin 8.

Real-Time Clock Module tutorial, follow the instructions for the DS1307 module.

Don't put the electronics in the top part yet, the next step is to upload the source code. First test this before the electronics is added.

Step 6: The Source Code

#include <RTClib.h>

#include <LiquidCrystal.h>
#include "DHT.h"

#define DHTPIN 8

RTC_DS1307 rtc;
LiquidCrystal lcd = LiquidCrystal(2, 3, 4, 5, 6, 7);

boolean pumping = false;

const int PUMP = 10;
const int PUMP_ACTIVE = 10;
const int PUMP_WAIT = 60 * 60;

int ledStatus = LOW;
int ledTimer = 5000;
int timer = 0;

void setup() {
 pinMode(PUMP, OUTPUT);


 rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
 lcd.begin(16, 2);

String displayCountdown() {
 if (timer < 1 && pumping == true) {
  digitalWrite(PUMP, HIGH);
  timer = PUMP_WAIT;
  pumping = false;
  lcd.begin(16, 2);
 } else if (timer < 1 && pumping == false) {
  digitalWrite(PUMP, LOW);
  timer = PUMP_ACTIVE;
  pumping = true;
  lcd.begin(16, 2);
 } else {
  timer -= 1;
 String timerDisplay = "";
 if (timer < 60) {
  timerDisplay = String(timer) + " sec";
 } else {
  int displayMinute = timer / 60;
  timerDisplay = String(displayMinute) + " min";
 return String(padFront(timerDisplay, 10));

String formatTemp(int humidity, float temperature) {

 int hic = dht.computeHeatIndex(temperature, humidity, false);
 if (isnan(humidity) || isnan(temperature) || isnan(hic)) {
  return "Temp read error";

 return padBack("Hum: " + String(humidity) + ", " + String(hic) + "C", 3);


String formatTime(DateTime now) {
 String timeString = "";
 int hour = now.hour();
 if (hour < 10) {
  timeString += "0";
 timeString += String(hour) + ":";

 int minute = now.minute();
 if (minute < 10) {
  timeString += "0";
 timeString += String(minute) + " ";
 return timeString;

String padBack(String input, int padding) {
 String output = input;
 for (int i=0; i<padding; i++) {
  output += " ";
 return output;

String padFront(String input, int length) {
 String output = input;
 for (int i=0; i < length - input.length(); i++) {
  output = " " + output;
 return output;

void loop() {
 int h = dht.readHumidity();
 float t = dht.readTemperature();

 DateTime now =;
 lcd.setCursor(0, 0);
 lcd.setCursor(6, 0);
 lcd.setCursor(1, 1);
 lcd.print(formatTemp(h, t));


Step 7: Placing the Electronics

When everything works, place the electronics in the top part. It is a tight squeeze, and the wires should keep the lcd display in place.

I haven't created a PCB board yet, once that has been done I will update the instructable. But for now it works with the breadboard.

For now I'm using the usb cable to power the arduino, and a separate power cable for the water pump. I'm not confident enough yet to create a single power supply. With the PCB design I will create a single power supply for the sprouter.

Once the electronics is put into the top part and tested that it works, add the lid to the sprouter.

Step 8: Conclusion

As mentioned in the introduction, mung beans is a great seed to test the sprouter.

Soak 50g of mung beans overnight, and put it in the drawer in the morning and start the sprouter. I start every batch with fresh water, and the growth cycle for the mung beans is short enough that I don't have to replace the water. I would suggest that if your growth cycle is longer than 3 days to replace the water with fresh water. You can off course refresh the water as often as you like.

Happy sprouting!

First Time Author Contest

Runner Up in the
First Time Author Contest