Evolution of a Blog

This blog has evolved as I have as a maker. It starts at the beginning of my journey where I began to re-tread my tires in the useful lore of micro electronics and the open-source software that can drive them. While building solutions around micro-electronics are still an occasional topic my more recent focus has been on the 3D Printing side of making.

Wednesday, September 6, 2017

Generation of a NanoDLP Mask for the Wanhao D7

Update as of 17/9/2017:  This is a very flawed article as I confess in a later post here.  Flawed, yet because the D7 UV light is distributed so heavily to the center, it still worked well!  Sorry for any confusion and that I did not post this confession sooner (though I did make a note on the 14th)!

I finally decided to invest the effort in creating masks so that my build plate is evenly exposed to radiation from the UV LED Array of the Wanhao D7 3D Printer.    The annotation on the following images explains the process.  Links are at the bottom.

Note that as of 14:53 on 7/9/2017 I am chasing a little bit of under cure on the edges even with the measurements.  Things are much, much better than without the mask, just not perfect!

Note that as of as of 16:24 on 14/9/2017 I need to 'fess up that my understanding of how mask generation works in NanoDLP was pretty flawed below.  Stay tuned.

Created a printable grid that matches the default grid on the NanoDLP mask generator (e.g. 10 columns by 5 rows).  The tabs can be used to secure the grid.  Theoretically the one without tabs could be printed on the D7.  The camera adapter was my first plan but the iPhone light meter app I tried could not detect the UV well enough.  The little square thing is a mount for the photoresistor that I ended up using.
Ultra simple Arduino circuit.  Photoresistor to ground and to A5 with a 10k resistor to +5v.  Read A5 averaging 2 seconds of inputs 100ms delayed from each other (20 in other words) and display the result.
Printed matrix secured to the printer with the photoresistor in a cell.

Top right is the output from the Arduino.  Bottom right is the monitor built into the printer.  Left is the spreadsheet that I used to calculate the mask values.
View of the completed spreadsheet.  Layer cure time will need to be increased by the stated percentage.

The above spreadsheet also has tables for subsets of the build platform.  This one only uses two fifths of the build plate and as such only increases cure time by 11%.  The white area of the first table is the printable area to model.  On the second table the yellowish cells represent unprintable but the light grey ones are adjustable to be useable.

Mask as generated.  Located in ~/printer/public/plates on the NanoDLP instance.

Proof is in the pudding.

Grid on Thingiverse
Arduino Sketch
NanoDlp Mask Calculator
Link to Mask - Use at your own risk!

Parts needed for your own measuring device:
  1. Photoresistor -  Search for "5516 Photoresistor Sensor Detection Light Dependent Resistor". Interestingly I did not buy this for UV sensitivity but it works fine and I wonder if other photoresistors might as well.  If you are reading a difference of more than 30-40% from the middle to the edges of your display it might be the photoresistor.
  2. 10K Resistor - Used for the other leg of a classic voltage divider.  
  3. Arduino Uno - Search for them on eBay.  You can get clones from China for a couple of quid if you are patient with shipping times.
Comparison of masks for my two printers.
Interestingly the printer on the left has a glass plate behind the LCD and the one on the right does not.

Here is the test piece from my second printer.  Same issue with measuring the little pointy things...there is a slight under cure at the edges.

Calibration pieces from printer #1.  First time anything has stuck to that corner!

Closeup of the above calibration pieces.  Can you tell which one was center, versus side, versus corner?


  1. Hi. Thank you for your tutorial. Can you explain me how make for know what generation is my LCD screen, i have a new D7 1.4.
    Thank you by advance.

    1. Sorry, but I am not sure what you are asking! What I did above will work for any version of the D7 if you are using NanoDLP.

  2. Hi I did the same assembly but I can't get it to work.
    In the arduino the massage is different from your image.
    UV: 749, 0,0
    It show only random numbers

    1. In the arduino sketch the sensor pin is wrong
      #define LUM 7 shoud be 5

    2. It is 7 if the voltage divider is connected to pin 7...and 5 if it is connected to 5! The sketch post dates the above and I moved from 5 to seven...sorry! Trying to keep things interesting.

  3. The sketch the above article was based on was accidently updated with a more current version. I have now replaced it with the right code. Sorry for any confusion.

  4. Could it be possible that that you are introducing the the values the wrong way ? You measure squares and the mask are rectangles
    The mask would be 5 points in with and 10 in height

    1. You are absolutely right. I made a note to that effect on the 14th, and added another article that shows the proper orientation here: http://raspberrypirobot.blogspot.co.uk/2017/09/the-nanodlp-mask-wizard-and-wanhao-d7.html.

      I did just add another note at the top of the post just to be clear that I had malfunctioned!

  5. good job really

    can I have stl which looks on that image https://1.bp.blogspot.com/-f5SiCW-C0Zg/WbFPzic6GFI/AAAAAAAAM7c/OF1UC0eJGQEK_xptKTDnfYSYriOBgIqQwCLcBGAs/s280/FullSizeRender%2B27.jpg ?

    1. A number of masks are in the D7 Group on Facebook in addition to the ones liked to above.

  6. http://raspberrypirobot.blogspot.sg/2017/09/the-nanodlp-mask-wizard-and-wanhao-d7.html

    The bottom row appears to be a rectangle and not a square, meaning that the light levels on this row will be a lot less than on all the other rows ?

    1. It is just an area to take measurement from...the mask should then be extrapolated from that measurement.