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 http://www.innerqube.com 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 http://www.diptrace.com

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

The Paperduino - Which I made following this guide http://txapuzas.blogspot.com/2010/07/paperduino-stripboard.html

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.

**Update**

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 (http://innerqube.com)
April 2010 Edited by James Fordham
*

/ include the LCD library code:
#include

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");
delay(1000);
lcd.clear();
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
delay(10);
upRead2 = digitalRead(upPin);
downRead2 = digitalRead(downPin);
startRead2 = digitalRead(startPin);

//slow down button value change speed
delay(100);

//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
{
minutesCount++;
secondsCount=0;
}
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
{
secondsCount=55;
minutesCount--;
}
else
{
if(secondsCount<0) //if countdown finished, reset values to zero
{
secondsCount = 0;
minutesCount = 0;
}
}
}
lcdWrite();

if(secondsCount<0)
{
secondsCount=0;
lcd.clear();
lcd.print("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;
Serial.println(timerCount);
for(int i=timerCount;i>0;i--)
{
lcd.clear();

if(timerCount2>60)
{
minutesCount = timerCount2/60;
secondsCount = timerCount2%60;
}
else if(secondsCount==60)
{
secondsCount=59;
}
else
{
minutesCount = 0;
secondsCount = timerCount2;
}

lcdWrite();

//send transistor base pin high
digitalWrite(transistorPin, HIGH);
delay(1000);
timerCount2--;
}

lcd.clear();
lcd.print("donE");

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

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

//turn off piezo buzzer
analogWrite(buzzerPin, 0);
delay(2000);
lcd.clear();
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.

**Update**

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?

**Update**

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

LED Contest

Participated in the
LED Contest