We have quite a lot of sex toys, to the point that stuffing them into a chest of the end of the bed isn’t really practical. So after dedicating a room to be the new play space, I decided a display cabinet of some kind would be a good idea; not specifically to display things as such, but just to make the task of choosing which to play with easier. And since the idea of being dominated by a machine turns me on so much, I thought I’d start by handing over that task of choosing which sex toys to use in a session, over to a machine. An Arduino micro-controller to be specific. Here’s the end result:

When the door is opened, the sex toy cabinet cycles through each shelf and highlights a toy; when closed again, it defaults back to mood lighting for 30 minutes. All I need to do is tell it how many toys are on each shelf, and it does the rest. It only requires that each toy be evenly spaced on a shelf.

The build is surprisingly simple, though a working knowledge of the Arduino platform as well as basics of electronics and soldering skills is required. You can download the code here and tweak as needed; you also need the FastLED and Adafruit Neopixels libraries installed.


  • Ikea Billy bookcase, doors optional.
  • 5m strip of 60/m WS2812B “Neopixels”. Neopixels is the brand name for these lights, but you can buy the generic ones directly from China incredibly cheaply. Each “pixel” has it’s own controller chip, so they can all be run independently. A single data line drives the whole lot. I used 43 pixels per shelf, so including the top it works out at 258 pixels in total. These strips have 60 pixels per metre, so you’ll have a little left over for other projects.
  • 5V 15A power supply. Neopixels run at about a peak rating of 60mA on full white, so in theory the build would use 258 x 0.060; or 15.36A. In practice, I won’t ever be running them at full white brightness, so a 10A supply would probably suffice, but I just happened to have a 15A supply lying around. Note that the one I have uses terminal blocks to attach bare AC wires. If you’re not comfortable with AC power, get a fully enclosed PSU like this one.
  • 3 core LED wire, plus male and female connectors.
  • Arduino Uno.
  • Aluminium LED profiling. Optional, and the most expensive part of the build, but you’ll end up with a more professional finish. The profiling provides an easy way to mount the LED strip to the shelf, protects the bare circuitry, and diffuses the light. You can buy strips already mounted in a rubber moulding that looks pretty good and comes with a sticky tape backing, but I’ve had problems with getting it to stay stuck before. If you’re saving money and decide to go for this method instead, it might be an idea to put the LEDs at the bottom of the shelf instead.
  • Reed switch sensor and magnet.


Before we begin, know that we’ll be wiring the LEDs up in one continuous string; and that there is a specific direction in which to wire them. Look carefully at the strip, and note the arrow which shows the direction of the signal. The control box will be on top of the cabinet, and whichever side it’s on will be the start of the LED strip. The next shelf is then wired in the opposite direction, such that the signal snakes down the cabinet. Don’t get it wrong.

toy chooser direction of WS2812B

Once your Billy is built as required, pull the shelves out and cut the profile strips as needed. I left just over half a centimetre of clearance on each end so the cabling could trail out the back. Use an angle grinder to cut the profile and smooth it down.

toy chooser overview

Next, cut the LED strips to size. You’ll be cutting directly through the metal pads between each pixel, and rejoining them with wire later. I ended up using 43 pixels per shelf, so if you’ve got the same sized Billy you’ll probably need the same.

toy chooser led strips cut and soldered

Next, you need to solder female and male connectors to opposite ends of the strips. I’d suggest leaving a good 30cm of cable on each side too, longer if you have a particularly tall shelf. Remember to thread the cable through the white plastic end caps before soldering them to the strip. This is the most involved part of the build, simply because there’s lots of soldering involved – easy soldering, but soldering none-the-less. Use a bit of electrical tape to insulate the joints. At the end you’ll have a series of male connector -> 30cm of cable -> LED strip -> 30cm of cable -> female connector.

Use a 10mm drill bit to cut holes in the backing board, left and right, for each shelf. The should be a little below each shelf peg. Don’t forget the top of the cabinet too.

toy chooser holes in backing board

Screw the profile clips to the shelf; in the photo below, my initial attempt, I placed these quite near the back – I later changed these all to about 1/3rd of the way from the front of the shelf, after finding the effect somewhat muted, particular on the lower shelves.

toy chooser screw in clips

Thread the leads of the completed strips in profiling through the holes, then replace the shelf and clip them in, again remembering that the order is important – the the male plug from the shelf above should be on the side of the female plug for the shelf below it, so the strip snakes down.

toy chooser thread through strips

Don’t put your strips at the back. I later moved these all to the front. The cabling is a little uglier, but the overall effect is much better. I used some black electrical tape to cover up the cabling.

Door Sensor

Wire up the reed switch sensor to 5V (VCC), GND, and the data signal to pin 7 on the Arduino. Use hot glue to attach the sensor to the top of the cupboard, near the middle but still on the side of the dominant door (whichever you would open first), then glue a magnet to the door itself – such that opening the door pulls the magnet away from the reed switch and triggers it. You might want to experiment beforehand to find the sweet spot in which the sensor is reliably triggered each time – your magnet may need to be in a particular direction, for instance. Use the built-in example Basics -> DigitalReadSerial to test.

Lights, Action

Connect everything up around the back, and load a simple strand test from Adafruit (you’ll find it under the Examples menu item). The data signal for the strip should go into pin 6.

This is important: never try to power the strip directly from your Arduino when powered over USB, you will blow it up and possibly damage your computer. The strips draw a lot of power, and absolutely must be be powered by the external power supply. Once you’ve unplugged the USB cable, you’re safe to power the Arduino from that external power supply too, but never do both.

  • If you’ve got the USB cable plugged in: connect the signal pin (green) to Arduino pin 6, and the ground to GND. The red cable from the strip must go directly to the power supply’s +V terminal, but the grounds must also be all connected (ie, to the Arduino as well). Do NOT connect the red cable on the LED strip to the Arduino.
  • If you’ve got the USB cable unplugged: you can safely pull a jumper cable from the 5V power supply to the 5V pin on the Arduino. In this case, the Arduino isn’t supplying any power from USB, it’s just drawing it from the external power supply.

Finally, if your strip is working correctly, go ahead and load up the toyChooser code. Adjust the following variables, then upload to your Arduino. These are the only lines that need to be changed:

#define PIX_PER_SHELF 43 //number of LEDs you have on each shelf
#define SHELVES 6 // number of shelves you have
#define DATA_PIN 6 // neopixel signal pin
#define DOOR_SWITCH 7 // magnet and reed switch on cupboard door
#define AMBIENT_TIME 1800000 // milliseconds to leave cabinet in ambient lighting mode (1,800,000 = 30 minutes)
int toys[] = {5,4,4,4,8,8}; // how many toys you have on each row

In particular, ensure the number of LEDs you’ve got per shelf is correct, as is the number of shelves. By default, the ambient lighting stays on for 30 minutes after you’ve closed the door, but you can shorten or lengthen that time if you like. Finally, the list of numbers in curly brackets is how many toys you have on each shelf – in my case, 5 on the first shelf, 4 on the next, then 4 … etc. Change as you need.

That’s it! The toy cabinet now has pride of place in our playroom, and there’s no more “analysis paralysis” when it comes to figuring out what to play with today! Questions, problems, suggestions – ask away in the comments!