Build your own Raspberry Pi powered Terrarium

Use a Raspberry Pi to control LED lighting for a terrarium. Download the code I've shared on my Github page, and build your own!

You will need...

Lets get started

It might seem complicated, but it's pretty straight forward once we break it down into parts. Keep scrolling and we can go through each step. If you get stuck, feel free to send me an email. Perhaps I could make one for you?

Keep scrolling for more...

Powering the lights

How can a Raspberry Pi control LED lighting?

All Raspberry Pi's come with a series of GPIO pins which you can control.

GPIO pins either accept an input voltage which can be read, or can be setup to output a voltage signal. In this case, we want to power our LED lights, so we want to output a signal. In our software, we tell the Raspberry Pi that we want to use three pins to control the RGB light strip (one for each colour), and one pin to control the White LED strip.

Sounds simple right? Unfortunately there are two problems...

Fortunately, we have solutions to both of these issues.


Instead of using the Raspberry Pi GPIO pins to power the LED strips (which wouldn't work because the output voltage is too low at 3.3v when we need 12v), we will instead power the LED strips off a 12v power supply, and introduce a MOSFET into that circuit.

Think of the MOSFET here as a type of switch. The MOSFET has two circuits running through it. When current passes through one of those circuits, it opens the other circuit.

We connect our Raspberry Pi and our LED light strip to our MOSFET. I've shown one MOSFET here, but we would need to add one per colour on the RGB strip, and another one for our White LED strip. Each of these are controlled separately to achieve a full colour spectrum.

A MOSFET has three pins. From left to right, Gate, Drain, Source.

The part I have used here (Part Number IRLZ34N) is a perfect fit for a 12v LED light circuit. It is rated to work with the Raspberry Pi's 3.3v output and the 12v light circuit. There are two types of MOSFETS, and they are wired differently. This is an N-type MOSFET.

It can be helpful to use a little PCB board to attach the MOSFETs to. The image above was my first attempt. I ended up redoing this part, and not using a PCB. Instead I just used solder, wire, and heat shrink to save a little space.

You might notice that in the picture above, I'm also using the 12v power source to power the Raspberry Pi. The Raspberry Pi can accept 5v power into the GPIO interface. How do we step down from 12v to 5v? We can use a 12v to 5v UBEC. This accepts a 12v source, and outputs a 5v current. This step is optional, you could just use a normal 5v power supply, but I wanted to only have one cable going into the terrarium

Controlling the lights

I mentioned earlier that there is another issue here. Our LED strips are analogue. They accept any current between 0v and 12v. For the RGB light strip, to generate a wide selection of colours, that means we want to use all sorts of voltages.

When the Raspberry Pi is instructed to send an output voltage to our MOSFET, it can only send either 0v or 3.3v. There is no in-between. If we could half the voltage and send 1.65v to the gate of the mosfet, we would expect around 6v of current on the light circuit.

So what can we do?

Pulse Width Modulation

Feel free to skip this section if you want, I've handled this in the code so you don't really need to understand this part. But if you are interested, what we can do is quickly alternate the output 3.3v signal on and off many times a second. We can then have the software turn that signal on for longer, or off for longer, depending on what voltage we want to try and emulate.

The fun part

Now that the hard part is done, putting the terrarium together can start. For mine, I chose to try and build a closed terrarium and grow mosses, lichens, and other moisture loving plants.

To create a healthy enviroment for the plants, it's useful to create an area in the bottom of the container which contains either spagnum moss, or charcoal. My understanding is that this can help to prevent toxic compounds from lingering in the bottom where the water drains. It will help to prevent the envirment in the soil turning anaerobic, and will be more beneficial to the health of the overall system

For my terrarium, I used...

First I started with large rocks at the bottom

Next I placed a piece of Coffee filter paper on top

And on top of that, a combination of Spagnum Moss and crushed Charcoal (be sure not to use any charcoal that might have a chemical accelerant added to it to help it burn faster)

On top of that some small rocks

And on top of that some potting mix

Now that we have a functional drainage and bedding layer, the plants can be added. This part was difficult to photograph, but essentially it's a bit of a jigsaw puzzle, and is really an art form in itself.

Installing the software

Firstly prepare a Rasperry Pi by installing Raspian OS, and set the Timezone on your Raspberry Pi with ‘sudo raspi-config’ command. (Defaults to UTC)


Python Libraries

To install my light controller script, simply copy the,, and files to a directory of the Raspberry Pi, and type the following commands

pigpiod sudo python

The first command starts the GPIO daemon, and the second command runs my script. The GPIO daemon is the software the Raspberry Pi uses to send and receieve signals over the GPIO interface

Changing your settings

Modify the file and provide your latitude & longitude to allow the script to give you the correct day/night cycle for your location.

Optionally you can also specify which GPIO pins to use. The default is as follows:

About me

Hi, My name is Mark Paine, I'm a software developer based in New Zealand. I love nature, electronics, and programming. It was great to combine it all together and produce this guide. I hope you enjoyed reading it.

If you have any questions or comments, feel free to get in touch either here in the 'issues' section of the GitHub page, or via email on

If you create your own terrarium using this guide, send me a photo.

Do you love this Terrarium, but can't build your own? Perhaps I can build you one? Get in touch. :)