Arduino UV LED PCB Exposure Box




Introduction: Arduino UV LED PCB Exposure Box

Here are the pictures of my UV LED PCB exposure box, I made it because I wasn't having much luck with the "Press n Peel" method of PCB production and well it sounded like a cool project.

I made it by following this web site however it doesn't have any useable files apart from the Arduino code, which i needed to edit anyway but if you head over to my web site I have uploaded a schematic which can be opened and edited in Diptrace available here

The UV LED PCB exposure box is made up of a number of parts they are;

The Paperduino - Which I made following this guide

The Paperduino is the control for the UV LED PCB exposure box, it allows you to select the exposure time and then displays a countdown of the exposure time. It also controls the UV panel with the aid of a IRF530 Mosfet which turns the UV LED panel on when the exposure is started and off when the exposure finishes. This is on a second strip board along with most of the wiring.


Here the Arduino code:

Arduino code for basic timer control of DIY
single-sided UV LED PCB exposure lightbox.

Uses two SPST button switches to increase and decrease
minutes and seconds timer control and an third SPST
button switch to start the timing sequence.

Once initiated, the arduino chip charges the IRF520 gate
pin to switch on 12V DC power adaptor load to the UV
LED matrix to commence the photo exposure period.

The circuit:

LCD RS pin to digital pin 12
LCD Enable pin to digital pin 11
LCD D4 pin to digital pin 5
LCD D5 pin to digital pin 4
LCD D6 pin to digital pin 3
LCD D7 pin to digital pin 2
LCD pot control read to pot center
LCD pot Ends to +5V and ground
Digital pin 7 to PN100 base pin
Digital pin 13 to piezo buzzer
Digital pin 9 to SPST start button
Digital pin 6 to SPST up button
Digital pin 8 to SPST down button

By Quinton Pratt (
April 2010 Edited by James Fordham

/ include the LCD library code:

int startPin = 9; //start button pin
int upPin = 6; //up button pin
int downPin = 8; //down button pin
int transistorPin = 7; //transistor base pin
int buzzerPin = 13; //piezo buzzer pin

int upRead1 = 0; //variable to read up button
int upRead2 = 0; //debounce variable for up button
int downRead1 = 0; //variable to read down button
int downRead2 = 0; //debounce variable for down button
int startRead1 = 0; //variable to read start button
int startRead2 = 0; //debounce variable for start button

int timerCount = 0; //variable for timer setting
int minutesCount = 0; //minutes value
int secondsCount = 0; //seconds value

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
lcd.print("UV LED Lightbox");
lcd.print("Exposure Time?");
pinMode(transistorPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(startPin, INPUT);
pinMode(upPin, INPUT);
pinMode(downPin, INPUT);
Serial.begin(9600); //open serial port

void lcdWrite()
lcd.setCursor(0, 0); //set cursor to top left
lcd.print(minutesCount); //print minutes value
lcd.setCursor(3, 0); //set cursor on other side of minutes value
lcd.print("min"); //print min string
lcd.setCursor(7, 0); //set cursor further right
lcd.print(secondsCount); //print seconds value
lcd.setCursor(10,0); //set cursor further right
lcd.print("sec"); //print sec string

void loop() {

//read all three buttons
upRead1 = digitalRead(upPin);
downRead1 = digitalRead(downPin);
startRead1 = digitalRead(startPin);

//debounce read for all three buttons
upRead2 = digitalRead(upPin);
downRead2 = digitalRead(downPin);
startRead2 = digitalRead(startPin);

//slow down button value change speed

//if up button pressed increment timer count and print to lcd
if(upRead1==upRead2 && upRead1==HIGH)
lcd.clear(); //clear screen
secondsCount = secondsCount+5; //increment in sec intervals
if(secondsCount==60) //increment minute & rest sec for every 60 sec
lcdWrite(); //print values

//if down button pressed decrement timer count and print to lcd
if(downRead1==downRead2 && downRead1==HIGH)
lcd.clear(); //clear lcd
secondsCount = secondsCount-5; //decrement minute & reset sec for every 60 sec
if(minutesCount>0) //if more than a minute left
if(secondsCount==-5) // reset sec value of -5 to 55 & decrement minute
if(secondsCount<0) //if countdown finished, reset values to zero
secondsCount = 0;
minutesCount = 0;


//if start button pressed activate transistor base and
//print timer count down to lcd
//activate buzzer to signal end of count
if(startRead1==startRead2 && startRead1==HIGH)

timerCount = (minutesCount*60) + secondsCount;
int timerCount2 = timerCount;
for(int i=timerCount;i>0;i--)

minutesCount = timerCount2/60;
secondsCount = timerCount2%60;
else if(secondsCount==60)
minutesCount = 0;
secondsCount = timerCount2;


//send transistor base pin high
digitalWrite(transistorPin, HIGH);


//turn transistor off
digitalWrite(transistorPin, LOW);

//turn on piezo buzzer
analogWrite(buzzerPin, 255);

//turn off piezo buzzer
analogWrite(buzzerPin, 0);
lcd.print("Exposure Time?");

//reset timer values
timerCount = 0;
minutesCount = 0;
secondsCount = 0;


The Control Panel - This is made up on 3 tactile switches, which increase, decrease and start the exposure. And a Piezo speaker to tell you when the exposure is complete.

The LCD - This is used to display the exposure time and displays the message "donE" when complete, who can tell me where this reference comes from? :-)

And lastly

The UV LED Panel - This is made up of 84 UV LED's each row of 3 LED's having it's own 100ohm resistor too. I have included a jpg on the PCB and as you can see there is the option to add an extra 21 LED's and resistors if you wanted to increase the exposure area, however my power supply wouldn't allow for these extra LED's.

LED specs:

Forward Voltage : 3.2 - 3.6
Forward Current : 20mA
MCD: 3,000
Lens Colour : Water Clear
Emitting Colour : UV
Size : 5mm

The UV LED PCB Exposure Box uses two 12v 600mA power supplies (1 for the UV panel & 1 for everything else) The last 2 picture show the first test exposure PCB and the PCB i made for my Arduino "Word Clock". Overall i'm very happy with how it came out and plan on using it again soon.


Here's a short video of the UV LED PCB Exposure Box in operation

I hope you find this useful and why not try making one yourself?


I thought it might be a good idea to explain how the exposure box actually works, lol

So basically the exposure box allows you to take you designed PCB and make a usable PCB, to do this you use special PCB's called photoresist PCB's these have a coating which makes them sensitive to UV light.

Once you have your PCB design and special photoresist PCB's, you need to make a mask of your design to transfer this to the PCB, I do this by printing my design onto a piece of over head project paper.

You then remove the protective layer from your photoresist PCB's and place you mask on top, put this in the exposure box for around 3mins, once this is done you need to lock the exposure by developing your photoresist PCB in photoresist developer.

Once you have done this, your design should be visible on the PCB and your ready to etch your PCB in Ferric Chloride.

Hope that makes it a bit clearer :-)

Thanks for looking



    • Water Contest

      Water Contest
    • Tiny Home Contest

      Tiny Home Contest
    • Fix It! Contest

      Fix It! Contest

    18 Discussions


    This project died a bit as did my web site, lol.

    Here is a link to all the files i ever had on the project, hopefully they are useful to you.


    The link to the dropbox website with schematic is dead. Would you please to send me this project on email?

    I think I still have them on a external HD somewhere give a day or so to track them down and I'll post a new link.


    Here's the link to a new drop box folder.

    Hi! Nice project. I'm looking to build it but I can't seem to find 3000
    mcd leds where I live, just 300 mcd only. Do you know if they will work
    anyway? Should I expect the exposition time to be 10 times slower
    maybe? Thanks!

    1 reply

    Take a look on ebay, you can get 3000mcd UV leds quite easily they will come from China or similar.

    I'm not sure how 300mcd leds would effect the exposure time. As I said in an earlier reply this is no longer used.

    Just a brief notification, assuming I did get the question correct ;)

    The usage of "donE" is old and comes from the time regular 8-segment diodes were used. You could easily spell "don" with lower case letters, whereas "e" is impossible, hence the usage of capital letter :)

    I like your project though :)

    I like the LED circuit. consider it stolen... ;-)

    Nice project! I bread-boarded the circuit and loaded the sketch but had a problem. The inputs for the switches "float" and are very sensitive to picking up stray signals causing the counter to start erratically. I used (3) 47K "Pull down" resistors on the input pins and everything is fine. Is this normal? I know about internal Pull Ups (DigitalWrite(Pin,High), but your sketch is looking for a High signal on the pins, so wouldn't work. I will try to re-write the sketch that holds the pins High and look for a Low to activate the 3 pins (pushbuttons to ground instead of +), then I can use the internal Pull Up resistors to stabilize the inputs. Does that make sense?
    Also, LCD Display R/W needs to be grounded.
    Other than that, very clever project - I was looking all over and this one suits me fine for PCB "Ironing Time" for toner transfer, and will be helpful when I switch over to a photo resist method. I know I can buy a $5 kitchen timer.... but as you all know it's the fun of building your own that's enjoyed every time you use it!


    Thanks it's real easy to vote just visit this page:


    And you will see my Instructable (bottom row) then just click the vote button.

    Thanks again


    I've updated the Instructable with the Arduino code and a VIDEO!!!

    Cool! Can you put this together as a step-by-step instructable? It seems like you've linked out to the directions, why not gather them together in one place?

    1 reply

    Thanks for the comment.

    I built this a little while ago if i'm honest and i can't remember most of it, lol. I didn't take any build photo's and the website I followed for most of the build seems to be down + I don't really have the time at the moment, so i guess the answer to your question in no, well no at the moment anyway.