Ljusmaskinen is a portable light rig attached to a backpack. It’s made for complementing Festmaskinen.

It’s got 4x4W RGBW spots and 4x10W COB LED’s mounted on a rig made out of aluminium profile.


The chassis is build up of 2020 aluminium profile and can be folded to take up less space when transporting.

The main section is the Y-arms that is made to carry mini spot lights.
The arms can be raised and lowered, also the whole Y can be raised and lowered.

PAR Cans

The body of the PAR Cans is a small product intendet for GU10 halogen lamps.
Black 230v Mains Pulse PAR16 Birdie Can Parcan Lantern DJ Stage Spotlight
My idea was to tear out the halogen part and exchange it with LED’s instead. It worked out okay, but it was very fiddly.

The LED assembly is basically these layers bolted together:

The LED assembly pretty much replaces the old halogen GU10 base. Then the whole back of the PAR can be mounted as before.

The angle of the 3 LED lenses titling inwards a bit, that means that the light beams overlap a bit. The natural tube shape of the PAR cans absorb any lights escaping the lenses which get rids of the halo-effect that so easily can occur.

PAR Can LED drivers

I went with a little unusual LED driver for this build. Since this is a battery operated product I didn’t want to limit the current with resistors and loose a lot of effect on them. Especially since effect of the LED is 1W per color channel.
I decided to limit the current consumption of each color of the LED by supplying it’s forward voltage from a buck regulator. By simply adjusting the voltage in the buck I could trim it to around 200mA per channel.
The extra potentiometers in the bucks would also give me the option of adjusting each color channel separate. That made the color calibration of the light so much easier.
I also find a cheap and available power cable; I used a ethernet cable. It comes in 4 twisted pairs with colors almost matching red (orange), green, blue and white(brown). According to Wikipedia a 24AWG ethernet conductor can handle 0.577A. The ethernet cable worked great, my current is about 200mA.

The maximum current rating on the LED’s is 350mA. I decided to put 3 of them in series at around 8V, that would also lower the current and make it easier for the ethernet conductors.

The PCB for the PAR lights consists of 4 Arduino Nano 328p that controls the PWM to RGBW for the 4 PAR cans. It also holds 4 buck converters for corresponding color.
The LED’s packaging have 8 pins that leads to separate anodes and cathodes on each color channel in the RGBW package. That is a little bit unusual, most packages have a common anode (positive) and separate cathode (minus) to control the LED on the low side.
My setup is a little bit unusual since i don’t limit the current via resistors but set the voltage per channel on the anode side. The 8 pin packaging allows me to have a separate voltage dependent on the color and still use simple N-channel mosfets to PWM on the cathode side.
I used 4 Arduino Nano because one of them don’t have enough PWM outputs. It was also what I had available at home at the time.


The big 10W COB LED’s goes in between the PAR cans and will act as a strobe and/or blinder.
COB LED Panel 120x36mm Warm White 112 LED 10W 12V is a powerful LED with a big aluminium back for sinking the heat from the 112 LED array.

The mounting was pretty easy with a couple of 90 degree aluminium profile and some screws. I also bended them outwards towards 135 degrees. This light rig will be around 3 meters up in the air, so aiming the blinder downward felt necessary.

DMX Reciver and COB LED Driver

The PCB for the COB LED’s also takes care of the DMX512 light control input. It’s based on a LightBoxNano which is populated with 4 N-channel mosfets and a Arduino Nano.
The LightBoxNano have a RS485 transceiver populated that enables it to receive DMX512. The transceiver is a ADM2687E which have a built in isolated dc-to-dc converter.
Many DIY DMX products completely forgets about the importance of isolation from the MCU side. A DMX bus can stretch hundres of meters in a installation and the probability of getting 230V on the DMX side is a real danger.
On most 230V mains powered devices transceivers solve this by bridging the isolated side with a transformer and AC power. But since this is a battery operated device we don’t have access to AC. The ADM2687E transceiver is around 4 times more expensive than the commonly found MAX485, but the ease of the DC-DC isolation makes it worth it.

I’ve extended the LightBoxNano with some protoboard to attach 2 12.5V buck converters for the positive side of the COB LED’s.
The same driver technique is used on the COBLED driver as the PAR can LED driver. I don’t want to waste energy as heat, and a simple adjustment on the buck’s potentiometer makes it easy to set the current.

The case is a rats nest

Power input, DMX, 4 cables to the COB LED’s and 4 ethernet cables with 4 pairs each goeas in to one case.
The mess is real.

The two LED drivers stack.

I used an older case for the LED drivers, the size was perfect but i got a lot of old holes. I’ve to find a cover for this. Maybe I’ll put a “Ljusmaskinen” logo here in the future to cover up the ugly parts.

Light Controller

I could have written some software for the MCU to run the lights, but that would make it hard to control and change in the future. Therefore I decided early on to use QLC+ for controlling the lights. It’s an awesome software that holds a professional grade for scene lighting. It’s also free, free as in freedom.
Using QLC+ I could program the lights easy and achieve total dynamic control.

But I needed a computer for running the software. I thought of a laptop, but the cable mess and potentially glitching DMX dongles in the backpack freaked me out.
I decided to use a Raspberry Pi, that way I could mount everything in a case and it would use very little power compared to a laptop.
A laptop will still be used for configuring QLC+, but at runtime it would be completely standalone.

The case holds a Raspberry Pi, a small buck converter to lower the input voltage to 5V and a DMX King USB dongle.
It also has a main power switch for cutting the power.

I’ve also attached a button and a two color LED as interface. Since I’m going to use a MIDI controller as input the USB connector can possibly glitch and then the QLC+program could potentially act up.
So a small Python script is listening for double click and triple click on the button and shows the status on the two color LED.
Double click will restart QLC+ and make all USB devices initialize.
Triple click will make a safe shutdown to the Raspberry Pi which avoids a corrupt SD card.

MIDI interface for controlling light

I usually control my light setups in QLC+ over OSC (Open Sound Control) over UDP. But a friend of mine use a MIDI controller and it makes the timing and control so much better. So I decided to invest in a Novation Launch Control XL.

But holding this big 239x239mm wide beast with one hand is hard. So I mounted a mount for my hand, this way I can hold the MIDI controller with one hand and adjust the knobs with the other.

Light controlling layout

To build a good light program is hard, especially when you want to build dynamic light patterns and have the ability to change them to music in real time.
A friend have taught me a new way of working with light programs and it gives so much dynamic control. It’s hard to explain in words, but you kind of working with colors and brightness separately. I kind of had this workflow earlier, but this is taking it to the next level.

My layout consists of a simple master dimmer for the par spots and another master dimmer for the blinders.
The main feature is pulses that can pulse to quarter, half , every, double, quadruple beat. The slider sets the level of corresponding beat.
Then I have a “Add Color” section that have standard RGBW fixed colors and a few animated color changes.
The “Subtract Light” section is super interesting! I can black out RGB values in different patterns like odd/even or randomized pixels.
Together it gives me great flexibility to my lighting and I can really express myself to music.

In the bottom row we can find buttons that pulses the blinders to corresponding beat.
To have blinders on all time looks really bright and boring. But I’ve invented a maximum duration setting for my blinders that makes the blinders to be on for a maximum time. Together with the longer flashes of example every 16 beat flash and a maximum duration of 200ms gives some fantastic rhythmic flashes.

Fun Will Now Commence

This was just a mad thought in my head that I acted upon. And I’m glad I did, it was so much fun!
It will really go great together with Festmaskinen, and I’m so hyped about the mobile raves the future holds.

Fiery Fox – a flaming fox sculpture

My friend find a really neat night lamp in the shape of a low poly fox. It diffuses the light super good and makes a good base for some addressable LED’s.

I wanted an easy way of attaching the WS2812 LED strip inside the hollow sculpture and decided to laser cut out a base out of transparent acrylic. SVG cutting image can be found here: InnerStandForLEDStrip.svg

I place the LED strip on the edges of the acrylic base and soldered them in a continuous bus.

Then I soldered the bus to an Arduino Nano, and hooked up a Plejd light controller that gives out 1-10V that I read of the Arduino via resistor divider.

The program for the Arduino uses the WS2812FX library and reads the 1-10V input via an ADC: FieryFox at Github.

Signs for our village camp at Borderland

Our camp at Borderland festival is named “The Elements”, and a nice sign will make it stand out.

I laser cut out the letters out of plywood, and the mounting holes in the back plate as well. I screwed in the letters with a few centimeter spacers between.

I made a nice control interface for setting light levels and modes of the sign. I encapsulated it in a great looking aluminium case with rubber seals for weather protection.
The control interface was also engraved by a fiber laser.

WS2812 LED strip was attached to the underside of the letters, aimed to reflect the light towards a light background that would diffuse the light around the letters.
And lastly the letters painted with corresponding colors to make the sign visible in daytime as well at night.

The ultimate Microbit Set

I made the ultimate Microbit set for my purposes. I combined several kits in to one kit, and also included a ES121 electric screw driver and tweezers.

These are the original kits that I combined to get multiple bits.

I found a good sturdy case for fishing flies.

I found out that a common laser cut friendly foam is polyethylene foam (PE foam or PEF). It’s commonly used for tool cases.
I calculated all the bits I wanted, and made slots for them together with some of my tools. Then I laser cut them out and hot glued them into place the case.

The end result is an awesome Microbit set that is very portable.

Folkrace 187

In Swedish Robot Championship there’s a tournament that is called Folkrace where autonomous cars is racing around a track. A sub class of this is a miniature race in scale 1:87.

So I started out on a Fuller Car system truck in scale 1:87. It have some really nice suspension and drivetrain but is made for following a iron track.

A NodeMCU development kit (ESP8266) almost fitted the truck bed, if i filed of 0.5mm of it i fitted perfectly.

I solved the steering by cutting a hole, big enough for a small servo, in the trucks chassis.
Then i glued on a small magnet that aligned with the already existing magnet in the steering system.

I then mounted 3 VL53L0X ToF (Time of FLight) distance sensors inside the cab of the truck. The sensors is pointing out from the same holes the windows are located.
The sensors will be used to locate walls and other trucks, it’s gives a pretty low resolution, but should be enough.

The space inside the truck bed is cramped, and I mean it. After fitting a small H-bridge, a couple of batteries and some cables together with a start module nothing more can fit.

As if the cramped space inside the truck bed was not a challenge big enough I choose to run Micro Python on the MCU.
It’s pretty nice and all, I could remotly upload new Python code to the flash and run my test scripts inside a Python interactive terminal.
You can find the code here: https://github.com/TimGremalm/Folkrace187

I found the challenges of the small form factor thrilling, it was a really fun adventure puzzling everything together and make it look pretty stock.
But there is room for many improvements! The Fuller Car system have a very nice steering system, and it’s very useful for a future design.
But Fullers drive train is a worm gear, it makes it strong but gives the drive train some momentum that makes the car slow in response when braking och switching between going forward and backwards. For future builds I would have to build my own drive train.

The cramped space inside the truck bed is due to a lot of premade modules and a lot of cables. A more effective way of doing it would be to make a PCB with a ESP8266, H-bridge and sensor bus built in.

Also I think I would abandon Micro Python for C and Free RTOS. The VL53L0X driver is very slow in Micro Python and it takes too long to read 3 sensors. The whole driver thing is pretty hard to fault find and gives great me a great hazzle.

Prop for Downton Abbey larp

For the larp 1912 we wanted to have servant bells like in Downton Abbey.

Carl Nordblom made a nice looking construction for the bells using leaf springs.

An ESP8266 is listening on some bell topics for messages. If a message is received it will swing the corresponding servo with a bell hooked up.

To trigger the bells we built a box with a auto returning string to pull. The strings is hooked up to a micro switch witch triggers the reset pin on a ESP8266.
When the ESP8266 starts it sends a message on the corresponding MQTT topic to ring, then enter heavy sleep mode.

Cooking food with a robot – a good learning experience

So we have this awesome Universal Robots arm at work. One night my colleagues had been experimenting with emptying the coffee grain, and after that it was just standing there mounted and everything.
I couldn’t miss this opportunity, so I decided to cook with it as my first robot programming experience!

So I thought about what food would be the most easy to cook, and then it hit me; premade tomato soup. I rushed to the store and got some soup.
The programming experience was easy to pick up I didn’t read anything out of the manual.

I wanted a pretty simple program:
* Pick up stiring device
* Move to pot
* Stir until cooked
* Remove and drop stiring device

I made some absolute key frames and let the robot handle the interpolation and movement.
I also hooked up a switch and made the robot stir the pot until the switch was activated.

Skrivbord – An overengineered workstation

So I have wanted to build a desk for many years now, ideas have grown and so has the big feature list. But since my interest have moved away from software to electronics my requirements have changed. I need a lot bigger work space for tools and more shelves for instruments, and still a lot of screens.
So 3 years ago I started on my desk design. I decided that I wanted to go for aluminium profiles for my frame, both because it’s flexible and something I had not tried it before.
I also wanted as much of the construction to be as precise as possible, so everything is constructed in CAD. Mechanics strength tested, mechatronics is movement tested, material purchase planned and material is CNC cut as much as possible.
By the end of 2018 I started the weeks long process of assemble it all.

I made a drawing with assembly instructions based on my CAD design Skrivbord (Workstation, Gremalm).pdf. But I quickly decided to change the assembly order to make two stable outer pieces to build the rest on, it also meant that I didn’t have to turn the whole assembly too much.

The two outer pieces assembled.

Sliders for the raise-able desk and shelf are mounted on the sides. It’s MGN12H linear sliders often used in smaller CNC builds.

Desk assembled.

Center pieces to hold the two sides together.

To make the desk move up and down in the sliders I’ve constructed a linear actuator using a threaded rod, some pulleys and a stepper motor. It all goes together in this lower center assembly.

The desk was lifted in place and screwed into the MGN12H blocks. It should have been a lot of over constrains in the desk assembly, but it could move up and down pretty easy.

The desk shelf will hold all the monitors, and is attached to the big desk. That means when the desk is raised or lowered the computer monitors will follow. I used an old used actuator for this purpose that I had laying around.

Instead of using CNC cut polycarbonate I ordered laser cut ABS sheets for the desk because it was a lot cheaper. I found this neat laser cut order system where I could upload my DXF-files directly on the web and isntantly get a quote. https://smidyo.com/

To raise and lower the desk I made a small control box. It have two stepper drivers inside that drives each side of the desk.
A VL53L0X ToF (Time-of-Flight) sensor is measuring the distance to the desk so the control box can regulate the height. This also gives me an absolute height of the desk when restarting the MCU.
An ESP32 connects to a MQTT server and serves a desired height topic, when a new goal is set the control box will start to raise/lower the desk until the goal is set.
There’s also manual override for the desk with ordinary switches.

So in the end, was it worth it? No; the whole construction ended up far too expensive both in cost and time. But it was a nice experience to design something this big and follow through building it.
A far more effective workstation would be to purchase a cheap Ikea shelf and then place a raisable desk in front of it.