Bright Bricks

DIY LEGO Lighting

Daniel Koch & Liam Davies

Issue 44, March 2021

This article includes additional downloadable resources.
Please log in to access.

Log in

A look at both commercial and completely DIY lighting for your LEGO models.


LEGO has been a part of a great many people’s childhoods, and for an appreciable number, the addiction grows in adulthood. Lighting up LEGO models has really only been practical with the advent of LEDs, although some people managed it with grain of wheat incandescent globes. Lighting your model the right way can really make a difference to how it looks and catches attention, as well as show or highlight details not easily visible otherwise.

We’re going to have a look at different ways to light your models, firstly with commercially available set-specific lighting kits. After that, we’ll cover some of the commercial plug-and-play DIY options, then have a look at completely DIY methods, involving soldering your own SMD LEDs and working with some very fine wire. All of these had their advantages and disadvantages, which we’ll also cover. Even the very installation of lights into your LEGO set has pros and cons. The lights can make a set look better, highlight details, or even put on a show. The flip side is that the model tends to be relegated to the shelf, with play being difficult. It also involves wires which will likely be visible at some point, and bricks which may no longer fit perfectly where the wires go.

We’ve chosen the Harry Potter Whomping Willow Set (Set No. 75953) and The Pirates of Barracuda Bay (Set No. 21322) to demonstrate the commercial kits. After that, we use commercial DIY options to light the Vampyre Castle (Set No. 9468), and fully DIY options to light the Haunted House (Set No. 10228) and even give it a sound and light show with tour. Finally, we get ambitious and make a full set of working warning lights for fire and other emergency vehicles, with multiple flash patterns. Regardless of your electronic or LEGO skill levels and knowledge, there will be something in here for you.


Several companies make kits specific for certain LEGO sets. There is significant debate online about which is best, and more importantly, who stole whose ideas. We’ll discuss which is best shortly, because that partly depends on what you want out of your kits. The four main companies are Brick Loot, Lightailing, Light My Bricks, and Brickstuff. From what we have been able to gather, and none of this is official, Brick Loot were the first to sell LED lighting kits for LEGO. They also sell custom LEGO sets, among many other things.

Brick Loot’s format is a series of LEDs, individually or strip lights, glued into bricks with very fine wires connecting them. These strings are spaced so that they lead around the model with the bricks arriving in the relevant places. Some are in non-transparent bricks and are designed to shine light down (or up), lighting an area. Others are in transparent bricks, designed to illuminate the brick. This is often found in vehicle lights.

Lightailing follows the same format as Brick Loot, and online discussions often label them a copy, with Brick Loot being the original. We haven’t verified either way. Lightailing also have the Briksmax line, which is a cheaper version of their other kits. Corners cut for price include the LEDs not being glued into bricks. You have to stick them on with double sided tape. We’re not sure ourselves and don’t want to take a side regarding the copying debate.

We have a Lightailing kit here because that was what one of our staff bought several years ago, being the first lighting kit they had heard of.

The other main format is shared by Brickstuff and Light My Bricks. Both of these companies use individual LEDs on wires with a tiny plug on the other end. Lights plug into distribution boards (called ‘expansion boards’) to share power. This means that rather than one (or several) strings of many lights from the power supply, lighting is achieved with several or many lights with their own leads all running back to the power supply. This sounds cluttered but with a well-designed kit, it doesn’t have to be. The advantage of this system is that lights can be easily altered. It is not uncommon for effects boards to be used with some lights and not others. These can be flickering lights, sound boards, or zone controllers.

Aircraft effects board from Brickstuff
Flicker effects board from Light My Bricks

We bought a Light My Bricks kit for this project. We liked that they’re an Australian company, and consequently that shipping times would be good. Brickstuff is US-based, and shipping was both prohibitive in time for the magazine production cycle, and quite expensive. Brickstuff do have some attractive options, however. Unlike the Brick Loot/Lightailing debate, there are greater differences between Brickstuff and Light My Bricks, in terms of product offerings. It is harder to consider one a copy of the other. Although they both use similar systems, which has prompted allegations of copying online, those with experience in electronics know that it’s not that simple. The approach is just the most logical, and to find two companies using something very similar is not unusual in the electronics world.

Both companies employ both small LED light strips, and individual LEDs mounted on small PCBs. These are often available in different sizes. In real terms, the main differences between each company's offerings is in the type, number, and size of lights. A Brickstuff kit may have strips in a place where a Light My Bricks kit may have an individual LED, or vice versa. In other cases, lights might be in different locations.

Bit light from Brickstuff
Strip light from Light My Bricks


Which kit to choose will depend on your preferences and availability. Sometimes, only one or two companies will make a kit for the set you have. You also need to decide whether you want the one string of lights option, or a cluster of lights on their own wires coming to a central point.

Sometimes one is better than the other, and a look at the photos accompanying each product on the manufacturer’s website will give a clue in many cases. Each company approaches its lights differently, so again using their photos, look closely at the location, type, brightness, and colour of each light. Comparing similar photos of each kit side by side can be helpful, such as photos of the same detail or shots of the same side of a model.

Price also comes into the equation. Some are more expensive than others, although a close look at both photos and parts lists can often tell you why. This often reflects different design perspectives, and sometimes you may want a kit with fewer lights, for example. Budget is not the only factor in whether or not to choose a cheaper or more expensive kit.

The other factor is shipping, keeping in mind we are in Australia. The shipping quote for a Brickstuff order we were going to place (not for the Pirates kit) was USD $32 untracked, and USD $52 express tracked.

Express was still a week and a half at least for delivery. Once the exchange rate was factored in, the local option looked great even before shipping was considered! The fact that many kits come from US websites fools some people into thinking they’re cheaper.

Our Experience:
Lightailing - Harry Potter

Several years ago now, one of the DIYODE team bought three Lightailing lighting kits for the Harry Potter LEGO series, not knowing about the other brands at the time. These kits came from the United States at a time when the exchange rate was reasonable, but shipping cost was still significant. Transit time was around three weeks at that time. Inside the box was a set of lights on very small insulated wires, carefully attached to what at least appeared to be genuine LEGO bricks. The strings of lights were bundled with twist ties and packed with a photographic and text instruction booklet, which stepped the builder through the assembly process.

Any keen LEGO builder can make use of these instructions, but at times, more or different photos would have been helpful. A few mistakes were made, and in some cases, half an hour of confusion and staring at the model took place while we figured out how it was supposed to work. The kits fit into the sets reasonably well, considering the compromises that any lighting installation involves. The kits were supplied with a 3xAA battery holder with USB port, and the light strings also have a USB connector. Where relevant, a splitter was provided. The lights give a great effect and for the most part, we can see why each one was chosen in each location. Flickering candles would have been nice, but that’s not possible with Lightailing kits, or any other kit where all the lights are in parallel. While you can find 3mm and 5mm flickering LEDs, we’ve never seen them in the tiny SMD packages used here.

Our Experience:
Light My Bricks Kit - Pirates Of Barracuda Bay

With a few avid LEGO fans in the office, someone had already ordered the Light My Bricks kit for The Pirates of Barracuda Bay, one of the recent LEGO Ideas series. Our experience with shipping time was satisfactory when considering we ordered with public holidays involved, and in a peak postal demand time. Dispatch time from Light My Bricks was without question. The delays, and they were not significant, were entirely in the transport chain.

Opening the box revealed a bunch of individual resealable bags, clearly labelled with their contents. The different colours, sizes, and lengths of wire were the critical information and all were easily seen. Also inside was a user guide with general information, but no installation instructions. Light My Bricks have chosen to make their installation guides entirely online, and as soon as we saw one, we knew why. Each step is clearly laid out with a paragraph of detailed, descriptive text and at least six photographs per step, often more.

Installation was slow, because it’s a detailed kit and a detailed model that it’s being installed in. At times it was fiddly, but the instructions prevent mistakes. Unless, of course, you’re not paying attention, as was the case for us a couple of times. The connectors are very small, so a pair of small pliers softened with heat shrink is very useful. Be careful though, as damage to the wires is a very real possibility.

Overall we were thrilled with the result. The LED strips on the ship’s yard arms are visible from afar, but the effect they give outweighs this. Visible wiring was at a minimum, and for a model involving a sailing ship, the wiring just looks like ropes anyway. The effects and expansion boards can be hidden with care, and the flicker effect definitely justifies the effort needed. The flickering candles are the only light in several spaces, and it gives a great atmosphere. Light My Bricks do not supply battery boxes or other power supplies with their kits. They acknowledge the number of USB power options like USB plug packs and power banks laying around unused in many homes, but sell a range of options including battery boxes for those who need it.


If you want to light a model that a kit is not produced for, or want a different lighting arrangement than you can get in a kit, there are DIY options available too. This also applies to MOCs. MOC is an acronym for My Own Creation, and is essentially any LEGO model you build yourself rather than buy as a set. Because both companies already use individual LEDs with connectors for their kit products, Light My Bricks and Brickstuff come to the rescue here. Both companies sell their range of lights in packs of the same: A pack of four white Bit Lights from Light My bricks, for example. They also sell a range of expansion boards, connecting wires, effects boards, and power options.

The lights come in different sizes but the general trend is strips, lights the size of a LEGO stud, and tiny LEDs that Brickstuff call Pico LEDs and Light My Bricks call Micro Bit Lights. They are 1mm x 0.5mm SMD LEDs soldered to wires with tiny plugs. The resistors for each are on the connecting boards. The larger sized LEDs have a bigger SMD LED mounted on a stud-sized PCB with resistor on board and wires attached.

Pre-planning is needed here, as Light My Bricks sells two cable lengths for some light options. Other options have only the longer cable length. Brickstuff sells only the longer option, but does sell individual plugs with bare ended wires, rolls of wire, and warm white and white SMD LEDs on tiny PCBs so you can make your own custom light strings. The websites of both companies are worth a browse in detail before you commit to one or the other. However, we chose Light My Bricks, for the same reasons as above, and for the fact that the product options suited our needs better for the particular set we were going to light.

Our Experience:
Light My Bricks DIY Lights - The Vampyre Castle

We chose an old set from the personal collection of one of the DIYODE team: The Vampyre Castle. We couldn’t find any commercial lighting kits for it, so it was a great test bed for the DIY options.

The first step was to plan what we wanted to light, and how. After browsing the Light My Bricks website thoroughly, we decided to use strips, Bit Lights, and Micro Bit Lights. The micro bit lights are a tiny SMD LED soldered directly to wires with a very small plug on the other end. The plugs are smaller than those on the other two types of lights. They require their own expansion boards, which have resistors built in, so we really needed to use them in groups. This meant that most lighting would be done with the bit lights and strip lights where possible, as these can be combined.

Bit lights are a slightly larger SMD LED on a small PCB with the wires attached to that, and a more manageable (but still small) plug on the other end. They are sized to fit on top of a single LEGO stud. The strip lights are a flexible, two-LED resin-covered arrangement with adhesive backing and two sockets, the same as the expansion boards and a match, therefore, for the plugs from the bit lights. This enables daisy-chaining, important for wire minimisation.

Having decided what we would use, and noting that most lights come in a pack of four, we started planning a section of the castle at a time. On blank paper, we noted everything we might like to light, then proposed which kind of light to use. We did the same for other sections of the castle. After this, we went back and totalled up how many of each light in each colour we had used. When we discovered that we had only used one of some lights, or two, we went back and adjusted what we were lighting with what, until we had a list of parts that came close to being full packets.

The next step, once this plan was finalised, was to write the exact location of each light and how it was to be fixed. LED strips are self adhesive, but we specified exactly where they were going. Some bit lights sit under existing coloured transparent parts of the set, while others were going to be fixed into studs hidden from view in the model, using clear transparent single round plates to hold them.

The last step was to decide on logical locations for the expansion boards, then plan the wiring paths. This included using the strip lights as part of a path, whereas the bit lights are a single path from board to light. The same goes for the micro bit lights, except they have their own expansion boards. This told us how many of each size of connecting cable and expansion board to order. With that done, we passed the plan through someone else’s eyes, and ordered our stuff. We used the following individual lights, not taking packs into account:

2 x Micro Bit Light, Blue
3 x Micro Bit Light, Red
3 x Micro Bit Light, White
2 x Micro Bit Light Expansion Boards
12 x Bit Lights, White
4 x Bit Lights, Red
3 x Strip Lights, Warm White
4 x Strip Lights, Green
4 x 6-way Expansion boards
1 x Flicker Effects Board
1 x USB Power Cable
4 x 5cm Connecting Cables
3 x 30cm Connecting Cables
7 x 15cm Connecting Cables

That doesn't take pack sizes into account, although most things are a pack of four.

Once it all arrived, the process was a matter of just following our planning. Wires get routed where they fit, with the least visibility but taking care not to exceed available wire length. In most cases the wires can go under bricks with minimal visible impact. Black twist ties can be handy in bunching up excess cable, and sparing use of double-sided tape helps secure bundles and expansion boards in out of the way places. Some magic tape or scotch tape was also used. We chose the USB option for our lighting, as it gives us the most possibilities. It enables the use of wall adaptors, power banks, and AA battery boxes which can be bought with USB sockets fitted.


Hopefully you can adapt the things contained in these builds to your own lighting needs. Browse the websites thoroughly to be familiar with all available options before you plan your lighting and commit to a purchase. However, the next logical step is full DIY, which we will go into detail next.

DIY From Scratch:

WARNING! Some information contained in this article may cause offence, distress or cardiac arrest for LEGO purists. This article contains graphic descriptions of gluing, drilling, and modifying LEGO bricks. In LEGO circles, this is considered illegal building techniques.

The commercial options are all well and good, and the results are pretty spectacular. However, there are some problems with the commercial DIY products. By the nature of both production costs and needing to keep inventory lines to a reasonable level, there is a limit to the options available. While the commercial DIY covers custom builds and sets there is no kit for, it can be hard to figure out how to make the options work. That excess cable can be hard to hide, too. Additionally, the cost adds up, fast! There are also things you may want to do that there is no product for.

There is a real need for a completely do-it-yourself do-it-yourself option. We mean bare LEDs, fine wire, and that’s it. We mean soldering your own LEDs to fine wire so you can have the right LED exactly where you want it, with no excess cable, or worse, being 10mm too short. This is going to involve skilled soldering, but there are levels of that. Some of the options we chose can be done with care, and others take a lot more experience.

To explore what we mean by DIY DIY, we’ve got two builds lined up. The first is a custom light and sound tour of the LEGO Haunted House, a retired set that still looks amazing. This is Arduino-controlled and features some single-colour LEDs, and WS2812 RGB LEDs. Some are tiny SMDs, while others are the Lilypad/Raft style sequins meant for wearable displays. We also use an MP3 module to play a variety of sounds to match what the light is focusing on. While you can’t get the Haunted House new anymore, the principles apply to any building.

The second build is a full set of flashing lights for emergency, road, and construction vehicles. This means proper flashing patterns like real fire, police, and ambulance vehicles rather than the blinking lights on the few commercial flashing LEGO lights available. It also flashes the hazard lights and runs the head and tail lights. With a colour change, it will suit the yellow/orange lights of construction, roadwork, and service vehicles. There will be two versions, one stripped down for small vehicles with fewer lights, and a full-sized version for larger trucks and plant equipment.


The haunted house is actually easier to light than some of the sets we’ve looked at so far. Most of the floors of the building are supported by thick beams, meant to replicate timber, and these hide the underside of the floor from regular viewing. After some experimentation, we chose to go with RGB LEDs throughout, with a couple of exceptions. This enables the colour to be customised. In real life, an abandoned house with the power still on doesn’t suddenly have all red or green lights fitted as is the trope of cartoons and dioramas. RGB LEDs allow the user to tune the colour exactly to their needs. Maybe your house has old, dim incandescent globes, or maybe it has greenish-tinted light from the older style fluorescent tubes.

We looked at two main options here. Because our LEDs need not be hidden inside bricks, we can afford some bulk. The Flora Neopixels were one option, and they are suitable. However, we went for a 144-LED/metre LED strip which can be individually cut into sections or single lights. We had examined the Raft/Lilypad/Sequin single-colour options too, and if you have fixed-colour needs in your model, then these are entirely suitable. They also require one less wire. We didn’t use any because the only places where we needed single-colour light, were places that we needed specialised LEDs.

The challenge with any LEGO project involving a microcontroller unit (MCU) is hiding it. Some people go to great lengths to fit their MCU into the model, while the other option is external cabling. We went with this second option, because the use of WS2812 LEDs means that we don’t need very many wires. In non-addressable LEDs, any zones to be controlled need their own power wiring. The more zones, the more wires. Even flickering effects, for example, need a wire for each LED and a common ground.

On the subject of wire, this is one of the biggest challenges. We needed a wire small enough to hide easily and fit between bricks, big enough to carry the current needed (not that there is much of that) and easy to work with. Jacketed cables require stripping, which is hard at such a small scale. The plastic also adds to the overall diameter. Brickstuff sells very small wire, but getting it here in time was going to be an issue. Instead, we turned to Element 14 and used the filters to search through the hook-up wire options. What we came up with are three sizes of enamelled copper wire (ECW), 0.315mm, 0.2mm, and 0.15mm, which has a solderable coating. Element 14 has a pack of four reels of 38 metres each of coloured ECW, whereas the 0.315 and 0.2mm options were 500g rolls, the 0.2mm being over 1800 metres. There is no colour coding with the plain ECW, so permanent marker must be used on the ends of one wire when you attach it.

Solderable coatings avoid the need to strip the cable, but heating the jacket causes the release of toxic fumes. This point was noted well on the product page for one of the brands, but not the other. This dictates the use of a filter mask meant for spray paint. Because of someone’s previous career in horticulture, we had the proper rubber half-face respirator on hand with the highest grade of filters installed. For people who have not had a past or current career dealing with agricultural chemicals or the like, you can get P2 disposable masks from hardware stores. The ones for toxic fumes have a charcoal layer for chemical absorption, and the label on the back will tell you what level of protection they offer. Look for one that specifies chemicals, agrichemicals, or paint. None of them provide protection from car paints so don’t waste your time thinking you haven’t got the right ones when you see that warning.

Next up, we used a similar planning process to the Vampyre Castle, but because we were not bound by fixed cable lengths, we were able to choose routes that made cable-hiding easier. Additionally, being addressable, we could use one string with continuous power rails, and just cut the data wire into smaller lengths. Well, that was the theory. Because the pins of the LEDs are quite close to the connection pads on the LED strip, and melting the ECW’s coating reveals too much wire, we had to cut and shorten the bare section of each power connection. At the time of planning, however, we didn’t know this.

The exceptions to this system are the tiny pre-soldered LEDs we used in the lamps and light fittings that were visible, such as those over the bed. These need their own channel but can be wired in parallel for each zone. For example, both of the bedroom wall lamps are in parallel and flicker together.

The other task was rebuilding the fireplace to have a fire in it. The existing design had no space for LEDs or flame elements. In the end, we chose to mount 5mm LEDs in there, and reserved the option of adding LEGO flame elements but didn’t install them at first. These LEDs are from LED Sales, and are waterclear 3mm and 5mm LEDs with a flame effect driver built in. We chose orange and red, but omitted yellow to give the fire a dying-down look.

Before we did anything else, we made up a wiring loom. We had chosen the 0.2mm ECW for the power rails, as the 0.15mm will have too much voltage drop. We have fifteen WS2812 LEDs at 35mA each, giving 525mA total load. On a 5V supply, that ends up 0.7V of drop, still within the LED’s operating limits. We measured out the total run length including the distance around obstacles, cut two strands of the 0.2mm the same as this, and coloured one black with a permanent marker. Then we measured the same length of green 0.15mm ECW for our data wire, and twisted all three together. We had allowed extra length as the twisting will take up some cable.

Making up the light string was reasonably straightforward, although care had to be taken. We cut the individual sections from the 144/m strip, being careful to cut along the line and so leave enough solder pad on each side. The ends of the enamelled copper wire were tinned as described above, then the bundles of relevant length soldered on. We double-checked each LED was the right way around, regarding data in and out connections. At the end, we used a multimeter set to continuity to verify that each power rail was continuous and did not cross over at any point.

We installed the light string we had made according to our wiring plan. There was some slight slack in places but it was easily hideable because of the beam structure of the floors. There will always be visible wiring at some point in an illuminated LEGO model, unless you’re willing to drill bricks. Even then, you won’t hide them all in all situations. We accepted this and made the most of it. In any case, we’ve ended up with less visible wiring than the commercial single-string light kits, and much less than the light-to-expansion-board type lighting systems. The photos from that section show that even that wiring isn’t too obtrusive. We were quite happy with the results. We used mostly double sided tape to stick things down. This is a clear, thin version rather than the foam-cored version often thought of first.

We now had four channels to connect to our MCU. One was the addressable string, which would do most of the lighting. One was the tiny LEDs in the bedroom wall lamps, one was the green flickering LED in the wardrobe and the other was the beating heart (our only nods to cartoon haunted house trope). The wall lamps in the bedroom are flickered by code, so they need their own drive pin and wire. These and the heart are PWM pins. We current-limited both to below the threshold of the pins, avoiding a transistor.

The power rails for the addressable string are connected straight to the power supply. We also common-grounded all the LEDs to remove a few wires. Because we eventually chose not to turn the fireplace on or off during the tour as we had originally planned, we just connected it to the supply rails instead of the MCU.

We chose to use an Arduino Uno for this, with a battery bank for power, because we were not going to reasonably fit even an Arduino Nano into the model without significant rebuilding of the roof, for very little gain. Instead, we made the wiring long enough to put the power and driver far enough away from the model so as not to be a distraction. We designed two modes. One is called ‘Static mode’, and is the house in its normal state. Lights are at a medium brightness, wall lights and fireplace flicker, and the soundscape is general things like owls, wind, crickets, creaking doors and windows in the wind. All of them are things that do not imply the supernatural, but rather the abandoned.

The second mode, activated by a button in our build, is called ‘Dynamic mode’, and this is the tour. The building lights dim, then one zone at a time, the light increases and sounds play for that particular area. Footsteps on tiles, for instance, or on floorboards. For static mode, we have an underlying soundtrack with random sounds called to add detail.

For sound, we used an MP3 module that can store and play individual files on demand. We used Audacity to splice our individual sound files into one track per zone. In other words, the footsteps on tiles, pot boiling, and fireplace crackle for the kitchen zone were spliced to be one file. The footsteps on floorboards and pen writing on paper for the upstairs landing were another. We chose to mount the speaker remotely.

While there is some space in the roof to hide it, the wires need to be a bit thicker than those for the LEDs, and in any case, one of the modes is a soundscape for outside. Placing the speaker in the model does not have enough benefit to outway the effort. Having an external speaker also broadens the options for it. You could even connect the sound output to a home theatre amplifier!


The code is available for download from our website. Conceptually, the code for the haunted house is just a matter of changing the brightness of our zones over time. While it's not a super hard task, there is still a fair bit of code at play here so we won't be discussing every detail of it. Because we need to be able to change multiple aspects of the haunted house lighting at the same time. For example, the pulsing heart lights and the bedroom lamps, the delay() function of the Arduino becomes very impractical when creating lighting animations. We simply can't manage multiple channels of lights at the same time with this method. This means that all of our code needs to be non-blocking, so other lighting behaviour can be executed at the same time.

void loop() {
for(int i = 0; i < get_num_zones(); i++) {
if(millis() >= dynamic_mode_end_time) {
if(dynamic_mode_active) {
dynamic_mode_active = false;

You can see in our shortened code above that we're managing all aspects of our lighting in one loop. The zone lighting, the bedroom lights, and the heart pulsing. The heart pulsing uses a sine function to change brightness smoothly, and we're using the inbuilt random() function to generate flickers for the bedroom lights. The zone lighting utilises the map() function to create linear transitions between zones over time.

//The brightness of the lit up zone
const int zone_brightness_active = 255;
//The brightness of the other zones
const int zone_brightness_inactive = 50;
//Duration fading In/Out of zone brightness
const unsigned int fade_duration = 500;
//Duration that a zone is active for
const unsigned int zone_duration = 3000;
//The waiting time between fading zones
const unsigned int changeover = 300;
//What colours are the room lights?
//This is an RGB colour (Red, Green, Blue)
uint8_t room_colour_r = 255;
uint8_t room_colour_g = 127;
uint8_t room_colour_b = 0;

We've put a focus on the parameters at the top of the file (such as above) to allow you to change the behaviour of the haunted house as you please. There are many ways of customising how the lighting behaves, including changing how long each zone is lit up for, what colour they are lit, and even what LEDs are used for which zone. These parameters are all commented, and are a good way of implementing your own LEGO lighting functionality. This way, there isn't any messing around with code logic and is just a matter of setting up your parameters and uploading to the Arduino!

"I Don’t Have The Haunted House Or Vampyre Castle!":

The haunted house is well and truly retired but was very popular. The Vampyre Castle is long gone too. You can buy them second-hand or even new old stock, though they usually sell for collectors’ prices. Because of their popularity, we’ve still made the code available. The code and lighting circuit could be modified to the current LEGO haunted house, though that set is more of a theme park styled building rather than an abandoned home.

Even if you don’t have any of these sets, the code and the process we used here will still form a starting point and guide should you wish to animate any LEGO building. You can easily change the sounds played, and what the lights do.

This makes it suitable for many sets, including the current LEGO City shopping and house sets, where you could take a tour down a city street through various shops and eateries. It would suit the range of modular buildings that has been a series for the past several years, or any other model with a level of detail and more than one or two spaces. However, we’re not just lighting buildings.


Vehicle-mounted LEDs present a problem we didn’t have with the buildings. For normal vehicles, with steady headlights and tail lights, only a battery is needed in addition to the LEDs. If you just want indicators to animate, a small flasher circuit might squeeze in. For anything else though, the needs are greater. We set ourselves the task of animating the warning lights on emergency and service/road work vehicles. Some of the commercial lighting brands offer flashing lights, but they are just blinking LEDs. There is no synchronicity, and only the blinking pattern. Very few emergency vehicles today just have rotating flashing lights, which are the closest thing that blinking LEDs can replicate. The use of LED lighting has created far more light positions and patterns on these vehicles.

The driver MCU board and power supply both need to be hidden inside the vehicle. Alternatively, a cable that is small enough to be discreet and long enough to not have the controller and battery visible is required. For a MOC, you can design the vehicle to house these items. For a set or smaller MOC, that’s not possible. After reading many forums, we came to the conclusion that many FOLs (Fans of LEGO, also AFOLs with ‘Adult’ added) who light their models have them either on static display or posed in a diorama.

That being the case, cables aren’t such a problem. With 40mA of current available on each pin, the Arduino Nano seemed like a good choice. It has enough GPIO and PWM pins to do most jobs we could think of. If the vehicle in question has some room, the Nano stands the best chance of being able to fit inside. In the case of the fire appliance we settled on, the Nano did fit. For the fire car, not so, nor were we able to fit it in the service truck we used, by around 4mm. We chose this last one to show that it’s not just emergency vehicles which can use this controller.

Many roadwork and construction vehicles use similar lights to those on emergency vehicles, and in the particular case of larger roadworks or site trucks, there are grille, bumper, and side lights just like a fire appliance or ambulance. The service truck we used is from the current LEGO range. It’s out of the LEGO City Shopping Street set 60306. The fire appliance and fire car are older sets, but as with the buildings, the process should translate to other vehicles.


LED choice for this project was quite different from the buildings. Lights had to be small so that they could fit between existing bricks. We turned to LED Sales, a Tasmanian-based independent supplier with a great range of LEDs for the hobbyist. We chose some tiny SMD LEDs with the wires pre-soldered. These have a resistor for 12V, but it can be cut off and changed with care. These LEDs can go between LEGO bricks. We used larger LEDs for the roof lights, which require soldering. They’re small but manageable. We have a combination of 0603 and 0805 size SMD LEDs here. In the end, we stopped using the pre-wired LEDs because the wire was too soft and was breaking under the LEGO bricks. LED Sales note on the product page that these lights are fragile. We hand-soldered the 0603-sized LEDs instead.

In some cases, we would be drawing more than the 40mA max that the Nano can supply if we ran all LEDs at max brightness. We decided 10mA to 15mA was a better limit per channel. Because we’re using individual LEDs and not commercial lights which have the resistor on the tiny PCB, we need resistors at the Nano to limit current. These resistors will vary depending on how many LEDs you have in each zone, and how many zones will be on at once. This last point is because of the maximum current capability for the board rather than because of the LEDs. We used regular 1/2W metal film resistors at the Nano.


Planning involved an analysis of real fire appliances. Because we’re in NSW, Fire and Rescue NSW (FRNSW) vehicles formed the basis of our study. We didn’t spend much time on Rural Fire Service vehicles because our model is an urban appliance. However, most Australian states use similarly-equipped vehicles in both categories.

In particular, Victoria’s Metropolitan Fire Brigade use vehicles so similar, we didn’t notice straight away that they were serving side by side with FRNSW vehicles in the Black Summer bushfires in some of the videos. Besides the white paint scheme, the same applies for Victoria’s Country Fire Authority (CFA) and the NSW RFS vehicles they were working beside. The story will be similar across Australia, but our international readers should have little trouble adapting the build to their countries. We checked out British, German, and US fire appliances too.

We determined that the most complex flash patterns were in the roof light bars at the front of the vehicles. The rear roof lights if present were a bit simpler. There are grille, rear bumper, and side lights on most vehicles. We’re calling these the ‘minor lights’. They’re smaller and seemed to have the least complex flash patterns. There are significant differences between agencies, vehicle type, and age. This means there really is no ‘right’ and ‘wrong’. For example, many FRNSW vehicles we saw had more minor lights than the RFS vehicles, which sometimes had none. Our flash patterns are not exact, because almost every fleet addition has a different arrangement, We liked some of the overseas patterns too.

Flash patterns were planned first by simply writing down the pattern in terms of left or right, inner and outer (for the four-zone roof bar), then adding approximate times for on and off. The process morphed into a word document which informed our coding. Code was done one pattern at a time, tested with an Arduino Uno and 5mm LEDs on a breadboard, and adjusted until it looked right.

Having decided on our flash pattern, we planned the light locations and divided them into zones. The roof bar had four zones: Left outer, left inner, right inner, and right outer. For the rear roof lights, we used any of the roof bar patterns that would function with only one light. Side lights would follow the pattern set for the front grille and rear bumper. Additionally, lights would be grouped by colour. All references like ‘inner’, ‘outer’, ‘left’, and ‘right’ are assumed to be from the perspective of someone in the vehicle, facing forward as for driving.

The service vehicle was a simpler pattern that could also be used for smaller emergency vehicles such as general duties police cars. We designed the program so that one code and build can cover all situations. For the service vehicle, we connected the main roof lights to the ‘rear roof light’ position on the Nano, because both have two lights only. The hazard and tail/headlights in both work the same way, while minor lights if present also carry over.


For the light bars, we chose to modify the structure. We purchased additional bricks online, something you can do from Brick Owl or Brick Link, among others. We chose flat white tiles, and glued the transparent coloured tiles to the top with cyanoacrylate (super) glue. This meant that we could use bigger LEDs, still small SMD devices but big enough to carefully solder to. This is important in reducing wiring as you’ll see shortly. CA glue is problematic in that it is instant-setting when used properly. We chose instead to use a little more than required and use a trigger chemical called ‘Zip Kicker’ to set the glue after we had aligned the pieces. LEGO bricks are ABS plastic, so this works. Using CA on most other clear plastics produces frosting or crazing.

The light bar is where full DIY lighting comes into its own. We were able to fit LEDs with custom wiring looms into the light bars by using glue and tiles rather than the studs on a LEGO plate, and SMD LEDs. We used the same wire as the haunted house to run a common ground to all LEDs, and a signal wire per zone. This eliminated three wires for our four-zone light bar. The LEDs are glued in place after soldering, before the transparent tile is placed over the top. This means you can place four LEDs facing up, or four pairs of two wired in parallel, with one of each pair facing rearward and one forward. Small slivers of plastic can be glued between the zones to help keep the lighting flashes separate, but we found this unnecessary. The rear roof lights are made a similar way but ours have only LEDs facing backwards.

To melt the coating on the ECW, it was heated first and tinned to prevent excessive heat transfering to the LEDs. That way, soldering to the LEDs can be done quickly. You can choose to glue the LEDs first and solder carefully, or solder first and glue after. We explored both options but found that soldering at a temperature just hot enough to do the job, with a very fine point, is necessary to avoid melting the tile underneath. Which method suits you the most will be a matter of personal preference, but we found that gluing the LEDs first made sure they were stable to solder to, and the wiring was neater. This was particularly true of the common ground wires and the wires between the forward- and rear-ward facing pairs where relevant.


Much like the haunted house, cable length was planned first and cut to size with a little slack. The roof bar was the hardest to hide cables for, as it has the most wires. It still wasn’t hard. Common-grounding and parallel pairs meant that for the eight LEDs in four zones in our roof bar, we had only five wires. For all other lights, some disassembly was required. We used the LED Sales 0603 LEDs soldered to our Element 14-sourced wire for the bumper and grille emergency lights, along with the side lights. These are small enough to fit on top of the studs on the plates underneath the transparent sections. Sometimes we needed to glue them in place to make things really work.

The same applied to the head and tail lights. We really wanted brighter LEDs for the headlights, but we couldn’t make them fit without going for the same approach as the roof light bar. Because of the construction of the model, this wasn’t practical.

We settled for the same 0805-size as in the roof bar. This particular model has no indicator/hazard lights, but the service vehicle we used for the smaller version does. This method goes for whatever vehicle you’re fitting lights to, whether it’s a small one with the simplified lights or the full-sized version. The difference will be in whether you’re mounting the power/MCU internally or remotely.

Once all the LEDs were placed and we knew the plan wouldn’t change, they were connected to the MCU.


We found it easier to write one code for all lights. If your vehicle does not have all the light options, then you can pick and choose which pins to connect. For example, our fire car had only one light bar, with one LED zone per side. So, even though it was the vehicle's primary light bar, we connected it to the outputs for the rear roof lights.

This pattern has only two zones (for left and right or red and blue), but more patterns than the minor lights. If your vehicle does not have indicators/turn signals, you can skip that pin. The code will run anyway, and removing the sections of code doesn’t speed anything up or otherwise improve the system. We chose the same approach for the service vehicle.


byte MINORRIGHT_Group8[][2] = {
//Three flashes each side
{21, 0}, {3, 1}, {2, 0}, {3, 1}, {2, 0}, {3, 1}, {8, 0},
//Asymmetric Flash
{4, 1}, {6, 0}, {4, 1}, {6, 0}, {10, 0}, {4, 1}, {6, 0}, {20, 0},
//Dual Bounce
{13, 0}, {12, 1}, {1, 0},
//In/Out Bounce
{5, 0}, {4, 1}, {1, 0},
//Flash each side, slow
{40, 1}, {1, 0}, {41, 0},


With our fire appliance, we had enough space to squeeze in the MCU and a battery. However, we couldn’t find a really practical way of turning the unit on or off, and recharging the battery. Instead, we opted to externally power the unit. This we did through the hollow stud that is meant for connecting a water supply hose to a fire hydrant. The hydrant was part of the kit, as was a short hose. To do it, we did something that will terrify LEGO purists: We drilled a small hole in the back of the brick! This enabled us to pass a cable through to the Nano. We sheathed the outside section in ivory-coloured insulation from a cable we had around, to look like a hydrant hose. This can be taken out of sight to a power bank or USB plugpack.

With the MCU installed, we could solder on the wires from each light zone. This has to be done carefully because having a hot soldering iron around thermoformable plastic parts like LEGO bricks can be an issue. We survived the process and so did our bricks. It helped that, after soldering the relevant wires into groups, we added sockets so that attaching to the Nano was easier. We just slid the sockets onto the pins. You could, if you wish, solder all the lights first, then install them and the MCU in one process. Both involve a fair amount of dismantling and rebuilding the model so it’s probably much the same either way, but you’ll need to plan your cable lengths very carefully to use the second option.


Mounting the MCU and power externally solves those problems, but a thicker cable is visible as all zones, not just power, must exit the vehicle. It also means longer runs of very fine wire. This wire can handle the 20mA for an LED across short distances, but length will eventually become an issue.

For some models, it’s the only option. This means soldering longer wires onto your lights, bundling them together, and getting them out of the vehicle somehow. You could do the unimaginable and drill a hole in the floor of your vehicle. Some already have a suitable aperture. In other cases you may bring them out the side of the vehicle.

Whatever you do, you’ll have to hide the cable, or accept its visibility. For a static shelf display, the cable will be less distracting. In a diorama, that might be harder to accept. You might have to find a way through the base of whatever your model is on, and run it under the base. Each situation will be unique so we can’t provide much advice there. All we can say is: Consider the surroundings and be creative.


Both the DIY building and vehicle lighting presented here are really guides on how to plan and execute your own lighting project. However, even with these builds, we can think of places to go. Most Australian emergency vehicles flash the headlights on high beam when the vehicle is moving, and the headlights are not already on for driving in the dark. You could code this in. You could also add sound. This might be a siren, or engine, air brake, pump, and voice noises.

We could have included a reed switch or some small tactile switch to turn the vehicle lights on or off, or even change modes. For example, headlights flashing and hazards off while driving, then steady headlights with hazard lights flashing when the vehicle is stationary. You could also use a battery and wireless charging module, or build in a charging port.

Regarding the haunted house, you can adapt that to other buildings. The shopping street that we borrowed the service truck from would be a great example, with the different shops being different zones, with sounds to match. The current LEGO range also includes a multi-story unit-style house that would be suitable for the sound and light tour.

Hopefully these builds have inspired you to take your own LEGO lighting journey. We’d love to see it if you do! We also toyed (no pun intended) with the idea of an MOC for a NSW Fire and Rescue appliance model, but it was never going to be ready in the time frame. The suppliers and techniques presented here should help you light up any LEGO model.

Other videos