Lori - The Photopolymerization Characterization Device

In February of 2018, I was tasked as a polySpectra intern with creating a device which could measure the intrinsic photopolymerization properties of resins more easily and reliably. By August, a working version of the project, named Lori, was complete. The device was able to perform consistently and is in use in the lab. I am currently working on a v2 of the device.

polySpectra is a Berkeley, CA-based 3D printing materials start-up. They make high performing engineering resins which are printed using Vat Photopolymerization 3D printing processes - those in which a resin is cured layer by layer to make a 3D part. The team is pretty small - less than 10 full-time members - which makes it a great place to work on a project that genuinely contributes to the company objectives.

A high-performance part made from polySpectra's flagship material, COR Alpha  The material has an impressive combination of mechanical and thermal properties.

Simply put, Lori precisely exposes resin using high-power UV LEDs, thus making several samples which are measured in order to map exposure to thickness. Let's break that down.


The process of making an Exposure vs. Thickness relationship is incredibly valuable in Vat Photopolymerization. Without knowing how the resin will respond to certain doses of light, developing print settings (i.e. per-layer exposure times) becomes a guessing game, rather than knowing that, for example, a 10-second exposure of 15 mW/cm^2, 405 nm wavelength light will cure a 100-micron thick layer of material. The name given to this graphical relationship is a working curve. Creating working curves gives resin developers an idea of how altering resin formulas will affect corresponding print settings. Being able to measure this relationship efficiently is critical in being able to effectively develop resin.​

An example working curve from Molecule Inc showing the Energy (Dose) to Cure Depth relationship.

There is a great Instructables project which details the process of making a working curve using a typical DLP printer and a useful web app for translating working curve results into print settings, but there are several problems with using this method for resin development:


  1. It requires too much resin

  2. The printer used has a lot to do with results

  3. Printers aren't made to do this


This keeps the tests from being easy, modular, and quick.


Once the problems with the current process had been outlined, I had to come up with a generic design plan for the device. Some critical parameters for the device:


1. Size

Lori needed to be able to fit inside of a glove box for tests. We determined that a roughly 5"x7"x7" profile would work well for going in and out of the purge box​

Early renderings of the overall form of Lori.

2. Number of Test Samples

In order to have confidence in the results of a working curve, the team determined that 12 samples would be sufficient. Easy enough to solve - I would use 12 LEDs. All of the samples need to be isolated to guarantee that the doses are accurate, so the emitted light from the LEDs needs to be concentrated from the PCB to the resin tray. I decided on Aluminum tubes for a couple of reasons:

  • They come in a variety of sizes, which would make it easy to find a good fit for whatever LED I chose.

  • They won't absorb light - I later discovered that using plastic tubes reduced power output by 90%.​

An early design showing the concentrating tubes and the use of magnets to locate the resin tray.

3. LED Control

For Lori to be effective and modular, the LEDs needed to be turned on for any amount of time reliably. I chose an Arduino Mega as the control board because its 70+ I/O pins would be more than enough to run everything, and it would be easy to program to precisely control and adjust LED on/off times.


4. LED Power Output

Printers range in power output from about 5-25 mW/cm^2, so it would be ideal to be able to run tests anywhere within this range. Since smaller values could be achieved through PWM control, Raymond Weitekamp (polySpectra CEO) recommended 1A, 3.7V, 395nm LEDs which we knew of from previous experimentation with the idea. They come in a PCB 'star' form-factor which is easy to interface with but takes up too much space to have 12 of them fit within the frame of the device. However, with the SMT LED chosen, there was no way to power them directly from the Arduino (which can only output 40mA per I/O pin); MOSFETs would be used to power the LEDs from the power supply.


5. Interfacing

A big part of the project was making Lori simple to interface with. I decided to use a Nextion display, which has it's own GUI design software and uses serial communication to communicate with the Arduino.


6. Resin Tray

Lori needed to be able to run tests with a small amount of resin and the samples needed to be easily identified after testing in order to correctly correlate the dose-thickness relationship. I decided to use a glass slide as the bottom of the resin tray - cured resin sticks to glass, which would make measurement simple,  and 2"x3"x1mm glass slides are cheap as a consumable. In order to hold the resin, I needed a seal for the glass slide, which I made out of silicone using a mold.

Design Process

With all of the requirements of the device laid out, I was ready to start designing. Since the mechanical design (specifically the Aluminum tube placement) was going to be dependent on the PCB, I worked on the schematic and PCB design first.


The v1 schematic design features:

  • An Arduino Mega powered from a 5V, 12A power supply

  • 2 5V always-on fans, which will be used in combination with heatsinks in order to cool the LEDs when they are on for long periods of time

  • The Nextion Display

  • 13 Resistor-MOSFET-LED lines. The resistor is intended to take the extra 1.3V from the power supply, and the MOSFETs are connected to the Arduino PWM pins - acting as a precisely controllable switch for the LEDs

  • A light intensity measurement sensor. This didn't end up being implemented into Lori, but was added to the design for possible calibration of the system using the extra LED

  • A temperature/humidity sensor. This component is simply intended to add more data for the user. 

The schematic and PCB layout was done in EasyEDA and the PCB was ordered through JLCPCB after some brief testing of the Resistor-MOSFET-LED setup.


The next step was to make a prototype to test the electronics. After Soldering the PCB and making a very simplified frame and a first version of the glass slide seal, I was ready to test some assumptions that I had made.​

Left: A labeled rendering of the planned prototype assembly.

Right: Mid-PCB assembly testing of LEDs.

My initial plan for the device was that the user would be able to set a maximum intensity and a time, and all LEDs would stay on for that time, scaling their intensities (i.e. 1 x Max Intensity, 11/12 x Max Intensity, ... 1/12 x Max Intensity) through PWM. One assumption in this was that LED intensity scaled linearly with PWM input. Some quick testing showed that this was certainly not true. But this alone would not have been a deal breaker - I could map PWM to intensity, it would just be a hassle.​

It became clear after looking at the output of just a few LEDs that PWM did not map as cleanly to output intensity as cleanly as I had hoped.

But another assumption was that each LED was independently controlled - which also turned out to be false. If one LED was on at full PWM and then the 11 others turned on afterward, the first one would dim severely. This meant that having a changing Max Intensity was not possibly - in fact, it meant that any modularity which I planned had to be nixed. ​

The output intensity for any given PWM value varied with how many other LEDs were on.

The new plan for Lori was this - there would be two types of tests:

  1. A 'Together Test' which would turn all LEDs on at fixed PWM values for an adjustable amount of time. The PWM values would be tuned so that there was a range of output intensity and thus dose (~5-30 mW/cm^2).

  2. A 'Solo Test' which would turn each LED on and off one by one at fixed PWM values for a scaled amount of time (i.e. LED 1 is on for 1 x Max Time, LED 2 is on for 11/12 x Max Time, ... LED 12 is on for 1/12 x Max Time). The PWM values would be tuned so that the outputs were all roughly the same (~20 mW/cm^2).

There was also now a need for a calibration process - an occasional verification of the outputs of the LEDs and updating the memory of Lori to account for the changing intensities using the Arduino's EEPROM. 


All was not lost, but lesson learned - manufacturers make LED drivers for a reason. Precisely controlling 12 LEDs isn't as easy as putting them in parallel. The problem seemed to be that LEDs have different resistances when they are on or off, causing a propagating effect in other lines of the parallel circuit. Adding a diode to each line to further isolate them could have helped, but probably wouldn't have completely solved the problem. I will be using a TLC5940 16-channel LED driver in v2 of this project.

With the testing method figured out, it was time to finish building the prototype (right) and start running some working curve tests. The most important factor in determining the effectiveness of Lori is the variance between tests. However, for initial tests, I chose to test a resin with a known Critical Exposure  (Ec - the minimum dose required to begin curing resin) and Penetration Depth (Dp - essentially how quickly the curing process propagates during exposure), the two important results of a working curve. Molecule's PR Rigid has this data available and was a good neutral resin to begin testing with.

The initial tests were hard-coded for simplicity. My first cured sample (left) turned out pretty well, but the data wasn't looking the way I had expected it to. The LEDs were the most obvious component to troubleshoot - but upon testing, using a custom photodiode-calibration jig, the LED output was consistent. The next component I looked at was the resin tray.

A rendering of the use of the photodiode calibration jig (red). The photodiode (blue) is moved from location to location in order to align the detector with the LEDs. Without the jig, it would be difficult to pinpoint the most accurate locations for the photodiode.

Resin Tray

The resin tray was the most challenging single component of the build. The challenge is that it needed to be able to fit around the glass slide tight enough to prevent any resin leakage, but needed to be flexible enough to make placing the seal easy enough to do in a glovebox. The seal also needed to be located consistently. I initially used Formlabs flexible resin to make the seal and had planned to use magnet inserts to locate it. This seal was good for just a couple of insertions and removals of the glass slide before starting to break - the flexible resin was too brittle and not ductile enough. Additionally, the magnets - although satisfying - were too much of a hassle to install and made a mess. I switched to molded silicone for the seal and a physical locating process (a lip to push the corner of the seal into). It took a lot of iteration before making a mold and a process that made sufficient seals - a lot:

Failed molds: 4 different mold materials, 3 different silicones, 2 different release agents, 6 different mold designs, and a lot of processes tweaking finally resulted in a successful final component.






The Final Mold: A rendering of the final mold design.

Here are some of the factors which were important in the mold design and mold-making process:

  • The mold material had to be extremely flexible. Removing the glass slide required a lot of strength and flexibility of the seal.

  • The slot left for inserting the 1mm thick glass slide had to be very undersized (~0.6 mm) for the seal to be tight enough.

  • Some of the silicone had to be poured before full assembly of the mold in order to get into some hard-to-reach places.

  • The mold had to be cured for a long time in the heat chamber for proper removal.

  • The distance between the glass slide and the bottom of the seal had to be as small as possible. This is the only unconstrained section of the path that light from the LEDs travels - making it a significant source for error. The drawback to making it too thin is that the seal becomes more fragile, so this is where a lot of the experimentation with mold design took place.

Left: Some images from the seal fabrication process using the mold. Right: Improved results after bringing the resin tray about 2mm closer to the LEDs. The more isolated test sites are a good indication that LEDs were well concentrated.

With the seal figured out, results improved greatly. Data was much more consistent and the Ec and Dp values were much closer to the manufacturer values - and about 30% closer than the results attained with the previous working curve process. With the process validated, I was ready to make a fully fledged assembly of the device. After waiting for shipping and some relatively simple assembly, it was time to test the real Lori.

Working Curve results from the prototype - the R^2 value still isn't great. but is certainly adequate for a simple assembly.


Left: A (still hard-coded) test with final hardware. The 3 flashes are a troubleshooting measure, indicating that the Arduino is moving on to the next LED. Right: An image of Lori running a 'Solo Test' (using a more simplified display).

After setting up the Nextion display to run tests and communicate with the Arduino (this significantly expedited experimentation), I started running a lot of tests. After tuning certain mechanical and electronic components and debugging the software, I started to obtain excellent results. 

A breif demo of the Nextion display functionality.

Working curve results for the 'Solo Test' with 2 different exposure times taken on different days with acceptable error between results.

One problem that came up was a resin spill - this made 3 LEDs useless and reduced the confidence in results slightly. However, the results were still good enough to move on to polySpectra material.

Results of a working curve test performed using polySpectra COR Alpha material.

Above: One fun use for Lori was to test the CAL material, which has to have an extremely high Ec (to reduce the chance of over-curing) and a ridiculously high Dp (so that polymerization can propagate through a large build area). This results in a pretty crazy looking working curve sample, which had to use a modified resin tray.

Testing with polySpectra material did not go quite as well - it became really difficult to eliminate variables like temperature, test time, and LED intensity variability and the lack of working LEDs made testing all the more difficult. Although the device was functional and could produce reliable results, making v1 pointed out some possible improvements. This prompted the beginning of the v2 design.

Conclusions and Future Work

Overall, Lori v1 was a successful project. All of the initial objectives for the device were met and the device functioned well with most resins. I was really happy with the aesthetic and function of Lori v1 and I'm proud to have brought an original device from start to finish - but I knew I could do better.


Plans for Lori v2

LED Driver

The most critical change for Lori v2 will be the use of a TLC5940 LED driver to replace the MOSFETs. This driver is a 120mA per channel constant current sink, so there will be a lot less variation in LED intensity and all LEDs will be completely independent. This will allow me to reincorporate the modularity (PWM mapping, more concise calibration, adjustable intensities, etc.) which I had initially intended. Although 120mA is a reduced current draw from the previous setup, the LEDs will be about half as far from the resin tray - more than making up for the loss in intensity.


Temperature Control

The component which the resin tray rests on (the 'Tube Alignment') will now be milled from Aluminum in order to integrate resin heating. I'll be using a heater cartridge, a Solid-state relay, a standard thermistor, and PID control in order to accomplish this. The original firmware for Lori uses delays for LED on-times for simplicity. However, with active control of temperature, this won't be possible; I have restructured the firmware around timers in order to have real-time control of temperature. This component will also be replacing the tubes (and therefore will likely have to be renamed) and will have the second function of concentrating the light from all LEDs. The aluminum tube design worked decently well but was finicky. Having a single part will make things much more simple.​

A view of the 'Tube Alignment' component for Lori v2.

Socket LEDs

After ruining several LEDs with a resin spill, I thought it would be best if the LEDs weren't directly connected to the PCB, allowing for replacement of broken ones. By using simple plug-in LEDs, Lori v2 will be much easier to troubleshoot.​

Left: A cutaway view of the plug-in LED socket.

Above: Each LED has it's own miniature PCB, making replacement a simple process.

Work on Lori v2 is in progress, and I look forward to sharing my results when the project is finished.


  • Google Places - Black Circle
  • LinkedIn - Black Circle
  • Google+ - Black Circle

@2019. Kevin Coulson