open-hardware transparent polygon scanner

laser scanner which uses transparent instead of reflective polygon

Similar projects worth following
An open-hardware laser scanner suited for Printed Circuit Board (PCB) manufacturing. The laser scanner uses a transparent prism instead of a reflective polygon with a f-theta lens.

The goal of this project is to develop a PCB machine which can create a track width smaller than 100 micrometers, i.e. 4 mil. The PCB machine should be fast and have a writing speed greater than 3 meters per second. The machine uses a transparent instead of a reflective polygon to move a laser beam. The main advantage is that an expensive f-theta lens is not needed and the projection is tele-centric.


The current version of the Hexastorm has the following specifications:

  • wavelength: 405 nm
  • rotation frequency:  up to 21000 RPM, current 2400 RPM
  • line speed: up to 34 meters per min @ 21000 RPM
  • spot size FWHM: circular, 25  micrometers diameter
  • cross scanner error: 40 micrometers  (error orthogonal to scanline)
  • stabilization accuracy scanning direction :  2.2 micrometers (disabling/enabling scanhead)
  • jitter: 35 microns (error parallel to scanline)
  • laser driver frequency: 2.6 MHz
  • maximum scan line length: 24 mm
  • typical scan line length: 8 mm
  • optical power: 500 mW
  • facets: prism has 4 facets


  • Beaglebone green
  • Firestarter cape


An image can be uploaded to the scanner and exposed on a substrate.
An exposure result on cyanotype paper is shown below.
Resolution looks to be around 100 microns. Stitching still needs to be fixed, results in white lanes.

An exposure goes as follows (for the result see above). The new scan head will not use a mirror and is oriented vertically.

Hexastorm fork of LDGraphy
Optical design

Official website
Failed kickstarter campaign
Reprap article

calibration data of current scanhead

Zip Archive - 278.28 kB - 01/25/2019 at 18:50



measurements and algorithm used to determine stabilization accuracy, see blog

RAR Archive - 594.17 kB - 01/25/2019 at 14:50



bom of firestarter and overview of layout

Adobe Portable Document Format - 912.66 kB - 05/07/2018 at 21:30



gerber files GBL -> Gerber Bottom Layer GTL -> Gerber Top Layer GTO -> Top Overlay GBO -> Bottom Overlay (empty) GTS -> Top Solder GBS -> Bottom Solder GTP -> Top past GBP -> Bottom Past GKO -> KeepOut Layer DRR is the Drill Layer with APR that is the tool if you wanted to make the cards ... send all the files

Zip Archive - 258.00 kB - 05/07/2018 at 20:59



presentation given to various companies on the potential applications of the Hexastorm

Adobe Portable Document Format - 5.37 MB - 11/03/2017 at 12:42


  • 1 × Quartz optical window, 2mm thick, 30x30 mm 40 euros, faces 60/40 < 5 arc min, chamfers 0.10 – 0.30mm, edges Polished 60/40, top bottom polished 60/40,
  • 1 × Beaglebone Green 45 euros, kiwi electronics
  • 1 × Heavy Duty Heatsink / Laser Diode Housing for 5.6 mm with Fan 11.93 euro, odic force
  • 1 × BDR-S06J 405nm, 500-600mW Blue-violet Cut-pin Laser Diode 27 euro. odic force
  • 1 × 25 mm focal length, cylinder lens, 12.5 mm x 25 mm 56.50 euro, edmund optics, faces 60/40, MgF2 coated

View all 11 components

  • Exposure new scanhead

    Hexastorm01/29/2019 at 21:40 0 comments

    Made an exposure with the improved scanhead today. Results look good, already at 100 microns before optimizing, exposure speed is around 2 mm/s. Still need to fix the stitching error, it result in a white line.

    Image was taken with a Leica DMS 1000. Machine is calibrated, measurements are accurate.

    Full overview of sample shown above, taken with smart phone.

  • Stabilization accuracy

    Hexastorm01/25/2019 at 14:47 0 comments

    Yesterday evening, I measured the stabilization accuracy of the scanhead. I repeated the following;
    enable the scanhead, stabilize it (get it in sync) sent out pixel 3600 and record the image with an exposure time of 50 ms.
    The result; spot is extremely stable. I measure a standard deviation over 21 measurements in the x- and y-direction of [0, 2.2]  micron.  Note that this is expected as the y-axis of the camera was parallel to the scanning direction.  I have added the measurements as rar file, see 21measurements.rar.

    Summarizing; repeatability in scanning direction after disable/enable scanhead is 2.2 micron.

  • Jitter removed

    Hexastorm01/23/2019 at 21:05 0 comments

    I have been able to almost remove the jitter.  I have added a prism to refract the light. Using the prism, I can position my diode closer to the focal point and ensure it is hit in the middle.
    I also realigned the first lens. I used a UV light, bluepoint2, with Norland61 and UVacryl2295 for final fixing. The prism is 7.5x7.8x8 mm. It was still in stock. The single spot is 25x25 micron.
    A spot created by four facets is 48x60 micron. The cross-scan error is 23 micron. The jitter is 35 micron. The facet error was set to 1/3200. In general, the lower the better.
    I still need to measure the lane-to-lane stability if this is done, I will proceed with experiments.
    In the image below a pixel is 4.8 micron. Note that the spot become less sharp at the edges, as predicted by my earlier theoretical calculations.

    The new setup with prism and photodiode.

  • Jitter

    Hexastorm01/17/2019 at 17:32 0 comments

    Checked the jitter today and it is pretty bad. The facets do not overlay each other in time.
    With the current settings the pru measures a 1 percent error in time. I have been able to work with a 0.25 percent and a 0.16 percent variance in the current setup, see the constant JITTER_ALLOW in the header. However after gluing I couldn't get it back to 0.16 percent. Probably the photodiode is not hit in its sweet spot.
    Below is what I hoped to measure;  a nice series of dots.... The most upper dot originates from edge detection. This picture was made of a single facet.

    The following picture was taken for multiple facets over a longer time.  I believe to think I can see four facets.  I can see two lines and two facets on that line.  As you can see from above there are no longer 3 dots but 6 dots in a line.

  • New lasermodule

    Hexastorm01/11/2019 at 18:16 0 comments

    I have finished the new module. It can be mounted on the FELIX frame. Th laser is aligned with the prism, and both apsheric lenses. A photodiode has been added. The spotsize is still in the order of 25 microns and the cross scan error in the order of 40 microns. I still need to measure the jitter.
    Aluminum bar has been added for reinforcement and flatten the plate. It was slightly curved (in the order of a couple of 100 micron). The laser  and prism were aligned using shims.  Used Loctite 222 to lock the washers, loctite 406 anaeroob glue to lock plastic part and UV glue to mount the plastics. The lenses were glued with CAF3 (silicon glue) to the plastic posts. I didn't do this very clean so the optics became slightly dirty. I used pre-wetted polyester wipers and cleantips swaps with ethanol to fix it. The aluminum u-bar had a height and width of 10 mm and a thickness of 2 mm.

  • Position Photodiode

    Hexastorm01/04/2019 at 11:06 0 comments

    Today, I talked with my colleagues on the position of the photo-diode.  In short, measuring the reflection is a bad idea as opposing planes in practice are not planar due to fabrication errors. I would therefore not correct for the jitter. The idea now is to add a prism or mirror and deflect the laserdiode beam upwards before it refracts through the lens or after it refracts through the lens.
    This prism or mirror is imaged to be small, e.g. a cube of 5x5x5 mm. The light is hereafter measured by a photodiode. This measurement would account for the aberration. In my initial design, I used a mirror. The disadvantage is that it is harder to mount at an angle of 45 degrees. The prism has the 45 degree angle build in.

  • Electrical Redesign

    Hexastorm12/27/2018 at 14:58 0 comments

    The Firestarter PCB was designed in Altium.  For the new design, I plan to use Kicad, for progress see Github.
    It will consist out of two boards; a main board on the Beaglebone with three stepper drivers and a control board to drive the laser diode and measure the photodiode voltage.
    In the original design,  I used a voltage divider to measure the photodiode voltage. The resistor was chosen with the Axel benz formula. A resistance of 340 kOhm works.
    However, a photodiode is something different than a photoresistor. Electronic designer recommended to use the "proven" method. Use an op-amp to read out the voltage. Subsequently, use a Schmitt trigger to get a block pulse. This was also used by H zeller in Ldgraphy.
    I build the circuit and got it to work with 220 picofarad for C1, see circuit.
    The signal is still sensitive to stray light, so use a cap around the photodiode. The photodiode must be placed closely to the rotating prism to fetch all facets.

    Signal at TP5/ vphoto in design.

    Signal at hsync in design.

  • Optical Redesign Final

    Hexastorm12/18/2018 at 10:45 0 comments

    I tested the new design with the 75 mm and 25 mm cylinder lens.  The spot size is around 24 micrometers  and circular. The line thickness is 63 micrometers. This can be seen from the picture. The pixel size is 4.8 micron. The line is around 13 pixels wide. The cross scan error is in the order of 40 micrometers. This is an enormous improvement as compared to the first version; which had a line thickness of 260 micrometers.

    The setup is shown below;

  • Optical Redesign; First tests

    Hexastorm12/13/2018 at 23:33 0 comments

    As stated earlier, I did a test where I added two cylinder planoconvex lenses; one with 250 mm and the other with 75 mm focal length. The spot was 40 micrometers in diameter and circular. The cross-scan-error is reduced but not removed. The line width is 140 micrometers.
    Hereafter I removed the lenses and focused the laser directly with the aspheric lens right after the polygon. The distance to facet of the camera chip was in the order of 30 mm. The line is then 260 micrometers wide.
    As I did not have short focal length cylinder lenses in stock, I proceeded with a 25 mm and a 8 mm camera lens and measured the vertical component of a by the lens focused coli-mated bundle. The line width was 101 micrometers and 73.6 micrometers.
    Combing all the results;
          the apsherical lens pair reduces the cross scan error
          the apsherical lens pair improves the spot; more circular and better quality
          the focal length of the second aspherical lens has to be as short as possible

    A short focal length would require that the polygon is oriented vertically. The path is not long enough for a mirror. I did a test and the polygon seems to operate fine vertically and even upside facing down.
    Furthermore, I measured how planar the prism is. The prism is planar within 5 micrometers.
    Still there seem to be significant offsets. I therefore assume that when the air bearing gets into balance; it achieves an equilibrium where the polygon is tilted. This seems to be filtered out by the second asherical lens. An other source for error is the 5 arc minute tolerance on parallel opposing faces.
    This is not removed by the cylindrical lens and that is why its focal length has to be kept as short as possible.

    Camera with lens imaging a colimated bundle.

    Lines visible further away from the prism of the invidual facets.

    Setup with cylinders.

  • Improved optical design

    Hexastorm12/02/2018 at 17:31 0 comments

    The design I am now aiming for is shown below. The first cylindrical lens has a focal length of 230 mm. the second lens a focal length of 75 mm.  This should reduce the cross scan error and make the beam more round.

    A side view and top view are shown below. ( the cylinder lenses are drawn incorrectly the curved side should face the bundle)

    Note, this is different than the technique used in reflective polygon scanners where the collimated bundle is compressed to a line and after reflection is expanded to an ellipse, see patent.

View all 16 project logs

Enjoy this project?



Gravis wrote 02/03/2019 at 19:16 point

I'm also interested in the possibility of using a motor from a hard disk drive instead of a breaking down a polygon motor.  HDD motors are cheap to buy and (as I understand it,) contain an encoder and have screw holes which makes affixing things easier.

  Are you sure? yes | no

Hexastorm wrote 02/04/2019 at 08:48 point

HDD seem too slow.  They typically spin at 5400 or 7200 RPM.  At the moment, I can go up to 24000 RPM with polygon motor. For some applications, I would like 50000 RPM or 70.000 RPM, like the roadrunner sold by precision laser scanner. Also the motors are not too expensive, they are like 20 euros. I understand 20 euro's can still be a lot but if you look at total costs; you can better pay attention to other components.

  Are you sure? yes | no

Gravis wrote 02/05/2019 at 06:00 point

Oh, I had no idea you were planning on high speed.  Where can you get the motors in the 20 euros range?

  Are you sure? yes | no

Hexastorm wrote 02/06/2019 at 13:40 point

You can find polygon motors at alibaba ( .  The system is a proof of concept; for desktop PCB prototyping 2400 RPM is fine. If you plan to compete with Kleo . You will need at least 50K RPM.  An option would be to encase the prism and remove the air. This will reduce the drag. You could also fill the encasing with Helium as it has low drag and a high thermal conductivity.  Like the roadrunner the encasing windows would be tilted out of plane to minimize back reflections, see

  Are you sure? yes | no

Gravis wrote 02/03/2019 at 15:57 point

My suggestion for this project is to isolate the scanner from the 3 axis robot part so that the scanner could be made into a tool that can be changed out.  I would also ditch using BB's PRU and instead use a dedicated chip (and maybe a RAM buffer) and connect it via CAN bus.

  Are you sure? yes | no

Hexastorm wrote 02/04/2019 at 08:58 point

I intend to isolate the scanner, and design it for specific machines. I like the idea of having a dedicated chip. In the past I used a FPGA (Xula-LX25) with RAM as  bufffer. I can imagine there are even better options. The problem is that developing a dedicated board costs time, money and a lot of experience. Zeller made a very accessible code for the Beaglebone, so I went with that. You are looking at a proof of concept. It's a technology demonstrator. Anyway if you have recommendations; or some example code; feel free to share. 

  Are you sure? yes | no

Gravis wrote 02/05/2019 at 07:48 point

Considering this is a project where accurate timing is vital, I think an XMOS processor (e.g. XS1-L4A) would be a good fit.  Each 100MIPS processing unit is 100% deterministic with fast GPIOs.  I don't know the rate of data throughput you need but it may be easier to just cache to workload on a local FLASH chip than stream it.

  Are you sure? yes | no

Hexastorm wrote 02/05/2019 at 10:53 point

XS1-L4A is nice... but I rather like something with lot of support and examples... probably first gonna optimize the current code and balance my prism.

  Are you sure? yes | no

Gravis wrote 02/05/2019 at 20:37 point

XMOS stuff actually does have lot of support (, examples ( and even an IDE but I somehow missed the part where you wrote that didn't want to build a custom board.  Sorry about that.  XMOS chips make it easy to glue things together since it's 99% software so it doesn't take too much skill to make a board with them.  Consider enlisting help to make a board as there is a good chance it will alleviate timing related issues.  Good luck! :)

  Are you sure? yes | no

Paul wrote 11/05/2017 at 03:49 point

You've certainly done your homework very thoroughly, and I see that in your application with very small optical cone angles (large focal ratio), the optical aberrations and field curvature appear to be tolerable.  That's great.

One question: You say that previous scan techniques require a large (and therefore expensive, you argue) f-theta lens, which must have one dimension at least as wide as the scan line.  In your approach, your polygons must be larger than the scan line length, but in *two* dimensions, making the volume of your optical element much larger.  Since either shape would use identical materials and fabrication processes in volume production (i.e. injection molding), one would naively expect the smaller element (the f-theta lens) to be cheaper.   How is this line of reasoning flawed?

  Are you sure? yes | no

Hexastorm wrote 11/05/2017 at 10:51 point

A telecentric f-theta lens requires one dimension at least as wide as the scan line. A non-telecentric f-theta lens does not require that.  In my approach, the polygon must have one dimension longer than the scan line. The second dimension is 2 mm. An f-theta lens consists out of multiple lens elements, e.g. a 3 element f-theta lens. These elements have curved surfaces. The prism consists out of a single element with a flat surface. The prisms now costs 40 euro's per piece with a minimum batch size of 10. They are not injection molded. You can't make the f-theta lens out of plastic, so you would have to injection mold quartz. I am unfamiliar with the prizes for that. Besides most likely a higher price and the fact you have to use multiple elements, you also need to worry about patents. Envisiontec patented the usage of reflective polygons; US 9079355 B2 . Finally, you need a thick reflective polygon as thick polygons can deflect collimated bundles with a large diameter and these can be focused to smaller spots.  A transparent prism uses a focused bundle and therefore typically can be thinner, which keeps the price of the bearing lower.

  Are you sure? yes | no

Paul wrote 11/05/2017 at 15:55 point

You have clearly thought about this a great deal, and have your arguments worked out well.

I wasn't considering that you might be requiring quartz.  I would have guessed even BK7 would be overkill for this application.

I mention injection molding because I look around my offices and see several laser printers.  Each of them contain a laser scanning unit with a rotating (reflective) polygon and a f-theta lens arrangement, with the final element being very large (>200 mm long).  All the optical elements of the ones I have inspected appear to be injection-molded PMMA or similar plastic.  The entire laser scanning unit must cost considerably less than $50, given the prices of the printers (all less than $200, two less than $70).  Granted, these are produced in huge volumes, but they serve as existence proof that these scanning systems with large optical elements are not intrinsically costly.

  Are you sure? yes | no

Hexastorm wrote 11/05/2017 at 16:52 point

PMMA absorbs light at 405 nm. The laser printers at your office use 800 nm and low power lasers. I use 405 nm and high power lasers. So yes; there is concrete proof that PMMA injection molded systems are not intrinsically costly. There is no proof that quartz systems are not intrinsically costly.  It's unclear what the prices of these systems would be .

  Are you sure? yes | no

Paul wrote 11/03/2017 at 13:21 point

A good variation on the usual way.  I build a few instruments based on this and similar methods between 1985-1989.  A couple of important notes:  

1. The scanned field is NOT flat: The optical distance to the target plane *increases* as the polygon rotates away from normal.  Not only is it geometrically longer, some of the increased  path length is in the high-index polygon too, increasing the path length even more.  The result is a curved focal or scan plane.  One of my instruments actually depended on this: a rotating polygon was used to tune the optical path length inside an optical resonator cavity, to adjust a tunable laser that was phase-locked to that cavity. 

2. You get some significant spherical aberration when you focus through a thick window like that, for similar reasons: the light rays at the periphery of the optical cone take a longer path to the target plane than rays going through the middle of the cone, with the result that they focus at a different depth.  For a laser at f/50 (or whatever it is), this probably isn't significant, but in an imaging system at f/2, it seriously degrades focus. 

  Are you sure? yes | no

Hexastorm wrote 11/04/2017 at 22:09 point

Paul, thank you for your reply!
A transparent polygon scanner with a single laser bundle was first patented by Lindberg in 1962.  The scan field is not flat and you can get some significant optical aberrations. A full numerical model is available here . A description of this model is available in the technical presentation. The result shows that in practice the scan field is flat and the optical aberrations are not significant.

  Are you sure? yes | no

Hexastorm wrote 11/03/2017 at 11:58 point

Well this is the first comment! If Hackers are interested in transparent polygon scanning let me know :P ..

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

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