Project LUX: A new kind of SLA printer

Cheap yet high quality SLA prints using a polygon mirror and precise timing.

Similar projects worth following
For decades, SLA printers were incredibly expensive, large machines affordable only by large corporations. Only a few years ago Formlabs enabled rich hobbyists and small companies to enter the world of high quality, high resolution 3d printing. Just recently, with the introduction of DLP printers, prices have started to become low enough to enable the "common maker" to enjoy printing with resin. Project LUX is an attempt to bring cost down further and to make SLA printing even more accessible.

[ Important: Please visit the 'Credit' section of this page ]

The general Idea:

The principle on which LUX is based is rather simple - by using a polygon mirror, a component commonly found in (paper) laser printers aswell as some custom circuitry and programming, it is possible to project images onto resin, one line at a time.

The Good and the Bad:

Advantages are mainly cost as the used polygon mirrors are common and available on aliexpress and ebay aswell as a ( theoretically ) unlimited buildvolume. Additionally, resolution will be considerable higher than all DLP solutions available on the market nowadays, although artifacts will most likely still be present, but less noticeable. Because of the way galvo-driven setups work, they don't suffer from the artifacts mentioned.

Disadvantages are most likely speed, because exposing a layer line by line takes a longer time as exposing it completely in one go . Speed should, nonetheless, be in the same magnitude as DLP exposure. Another downside that needs to be mentioned is the need of a big resin reservoir due to the nature of the build, which requires the printing surface to dip down into the resin. Actual resin usage will be the same as other systems, obviously.

ToDo :

  • Write Firmware for the printer
  • Write slicer
  • Write host software
  • Build a proof-of-concept
  • Build a fully working machine

In the meantime, check out the WIP CAD plan of the printer here:


While I am aware that there exist plenty of firmware choices for 3d printers already, no implementation of what I have in mind exists yet. As this project is supposed to be a learning experience for me aswell, I have decided to write a firmware from scratch. So far, receiving, checking for errors and parsing of gcode has been implemented, although no other functions exist yet.

The slicer takes in .svg vector files and converts them to gcode with a custom flavor, adding a way to save and read timing information for the laser. The base for this calculation exists already aswell, though additional compensation for angular projection is needed.

Additionally, code has to be further optimised and changed in order to support multithreading so slicing times are kept low.

Currently, slicing the famous 'benchy' benchmark model at a layerheight of 0.05mm takes around 180 seconds or 3 minutes. Hopefully, this time should be reduced by 400-800% by having one thread run on each available cpu core.

For now, the host software used is pronterface, although I would prefer a 'all in one package' that processes .stl files (instead of .svg files) and is able to directly send code to the printer. No efforts on that have been made yet.


Right now, all that works is powering and (roughly) controlling the polygon mirror's speed. How this is achieved will be explained in a project log however.



This concept was NOT developed by me, but by the user 'Mario Lukas' and his OpenExposer project, which you can find here:

Unfortunately, it seems like the project was abandoned, as the last update was published on 01/25/2016, over a year ago. I only intend to build upon the core ideas, not to steal any of his intellectual property.


The project, including this page is heavily WIP and will change.

Code explanations, concept drawings, models and additional source code will be added in later updates -

Comments and suggestions are greatly appreciated!

  • 1 × Polygon Mirror MASQ6NF1LX - however, exact model does not matter, all work more or less the same
  • 1 × Arduino Mega 2560
  • 1 × 24V PSU

  • Log 01: The polygon mirror

    Daniel Kinader05/30/2017 at 20:44 1 comment

    The polygon mirror is the main part of the printer. It consists of a hexagonal mirror mounted on a BLDC motor aswell as a three phase driver IC. My particular model uses 24V as a supply voltage and 5V logic level, although it's yet untested wether 3.3v work too. When providing power, pulling MOT_ON low and applying a clock signal ranging between 100 - 1000 Hz , the motor starts to spin.

    The speed of the motor depends on the clock signal, so far I haven't been able to measure RPM either but I plan to do this in the next couple of days. I'm unsure wether every board is tested individually, but on the back of mine, '24803 min^-1' can be read, most likely standing for the maximum rpm,meaning it's capable of much higher speeds than what is needed for the application.

    The pinout seems to be pretty common for polygon mirrors, at least i haven't seen any other so far. There exist some other posts about their pinout, however it's likely that those are wrong as the authors note odd behaviour of the board.

    The exact use of the LOCK pin is still unknown to me, however I assume it's supposed to tell the actual rotational speed of the motor. A screenshot of the output in relation to clock input can be seen down below.

    [ToDo: RPM-calculation}

    Similar to (paper) laser printers, the exact RPM will be determined by counting the delay between interrupts, which will be triggered whenever the laser reflects off the mirror and onto a photodiode. 6 interrupts will then be equal to one full rotation.

View project log

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates