I was always told: if you have to do something, do it with your own style! So here my Italian style UV box to expose the papers coated with antique photographic processes.

At the origin of photography many technologies of printing required the exposure in UV light. At those time sun was the perfect source and the exposure was usually made outdoor. The quantity of UV light from the sun can vary a lot in different seasons or with different weather, plus, baby it’s cold outside now in winter! For this reason I decided to build a UV Box.

I was inspired by some similar projects videos on YouTube but I added a personal touch.

First of all I used an old wood box for wine bottles instead of a modern plastic box. The wood box was in my cellar, free, and wood looks better and more coherent than plastic with old techniques.

Second I decided to add a timer for a precise exposure instead of counting the seconds with an external timer and manually switch the lights on and off.

.

.

Check out the video to know more about the UV Box and see how it works.

.

I used very common components easy to buy online:

LED stripes: BTF-LIGHTING UV Black Light 5m 300 LED Strips, 5050SMD Ultraviolet 395nm-405nm

Arduino Nano

Arduino Display 1602A

Buttons: GUUZI 12mm

Switches: GUUZI 12mm, 16mm

LED: GUUZI 12V-24V 12mm LED

Power: MeanWell LRS-150-12 150W DC 12V IP20

5V Power: Greluma DC 12v 24v to 5v Step Down Converter 5A 25W

The 5V are derived from the 12V Power Supply with the Stepdown Converter.
The relays are on the 12V power supply going to the LED stripes and have the green LED in parallel.

.

Here is the scheme of the circuit:

.

Here the program I wrote for the timer:

#include <LiquidCrystal.h>
#include "Countimer.h"
#include <EEPROM.h>
Countimer tdown;
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);


#define bt_set    A0
#define bt_up     A1
#define bt_down   A2
#define bt_start  A3
#define bt_full   A4
#define LCD_CONTRAST_PIN 11
#define relON LOW
#define relOFF HIGH

int time_s = 0;
int time_m = 0;
int time_h = 0;
int set = 0;
int flag1=0, flag2=0;
int relay = 8;
int relay2 = 9;
int buzzer = A5;
int power = 0;
int contrast = 0;


void setup() {
Serial.begin (9600);
//set some defaults


pinMode(bt_set,   INPUT_PULLUP);
pinMode(bt_up,    INPUT_PULLUP);
pinMode(bt_down,  INPUT_PULLUP);
pinMode(bt_start, INPUT_PULLUP);
pinMode(bt_full,  INPUT_PULLUP);

pinMode(relay, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(buzzer, OUTPUT);

lcd.begin(16, 2);
analogWrite(LCD_CONTRAST_PIN, contrast); //set some contrast
lcd.clear();
lcd.setCursor(0,0);
lcd.print("   Welcome To   ");
lcd.setCursor(0,1);
lcd.print(" LB's Drunk UV Box ");
tdown.setInterval(print_time, 999);
eeprom_read();
delay(4000);
lcd.clear();
}

void print_time(){
time_s = time_s-1;
if(time_s<0){time_s=59; time_m = time_m-1;}
if(time_m<0){time_m=59; time_h = time_h-1;}
}

void tdownComplete(){
  lcd.setCursor(0,1);
  lcd.print("  Done  ");
  delay(3000);
  lcd.clear();}
 

void loop(){
tdown.run();

//read power
if(digitalRead (bt_full) == 0){power=1;}
if(digitalRead (bt_full) == 1){power=0;}

if(digitalRead (bt_set) == 0){
if(flag1==0 && flag2==0){flag1=1;
set = set+1;
if(set>4){set=0;}
delay(100); 
}
}else{flag1=0;}

if(digitalRead (bt_up) == 0){
if(set==0){tdown.start(); flag2=1;}
if(set==1){time_s++;}
if(set==2){time_m++;}
if(set==3){time_h++;}
if(set==4){ if(contrast < 254){contrast=contrast+1; analogWrite(LCD_CONTRAST_PIN, contrast);} if (contrast >= 254){contrast=254;};}
if(time_s>59){time_s=0;}
if(time_m>59){time_m=0;}
if(time_h>99){time_h=0;}
if(set>0){eeprom_write();} //EEPROM.write(addrCon, contrast); EEPROM.write(addrLum, luminosity);
delay(200); 
}

if(digitalRead (bt_down) == 0){
if(set==0){tdown.stop(); flag2=0;}
if(set==1){time_s--;}
if(set==2){time_m--;}
if(set==3){time_h--;}
if(set==4){ if(contrast > 0){contrast=contrast-1; analogWrite(LCD_CONTRAST_PIN, contrast);} if (contrast <= 0){contrast=0;};}
if(time_s<0){time_s=59;}
if(time_m<0){time_m=59;}
if(time_h<0){time_h=99;}
if(set>0){eeprom_write();} // EEPROM.write(addrCon, contrast); EEPROM.write(addrLum, luminosity);
delay(200); 
}

if(digitalRead (bt_start) == 0)
  {if(set==0){{ flag2=1; 
  eeprom_read(); 
  if(power == 0){
  digitalWrite(relay, relON);
  digitalWrite(relay2, relOFF);}
else {
   digitalWrite(relay, relON);
   digitalWrite(relay2, relON);}

  tdown.restart(); 
  tdown.start();
}}
  else {set=0;
  }
}


lcd.setCursor(0,0);
if(set==0){
  if(power==1){lcd.print("PW full    Timer");}
  if(power==0){lcd.print("PW half    Timer");}
}
if(set==1){lcd.print("  Set Timer SS  ");}
if(set==2){lcd.print("  Set Timer MM  ");}
if(set==3){lcd.print("  Set Timer HH  ");}
if(set==4){lcd.print("  Contrast:  " + String(contrast)+"  ");}
lcd.setCursor(8,1);
if(time_h<=9){lcd.print("0");}
lcd.print(time_h);
lcd.print(":");
if(time_m<=9){lcd.print("0");}
lcd.print(time_m);
lcd.print(":");
if(time_s<=9){lcd.print("0");}
lcd.print(time_s);
lcd.print("   ");

if(time_s==0 && time_m==0 && time_h==0 && flag2==1){flag2=0;
tdown.stop(); 
digitalWrite(relay, relOFF);
digitalWrite(relay2, relOFF);
digitalWrite(buzzer, HIGH);
delay(300);
digitalWrite(buzzer, LOW);
delay(200);
digitalWrite(buzzer, HIGH);
delay(300);
digitalWrite(buzzer, LOW);
delay(200);
digitalWrite(buzzer, HIGH);
delay(300);
digitalWrite(buzzer, LOW);
tdownComplete();
eeprom_read();
}

if(flag2==1){
    if (power == 1){digitalWrite (relay, relON); digitalWrite(relay2, relON);}
    else {digitalWrite (relay, relON); digitalWrite(relay2, relOFF);}
    }
else{digitalWrite(relay, relOFF);
     digitalWrite(relay2, relOFF);}

delay(1);
}

void eeprom_write(){
EEPROM.write(1, time_s);  
EEPROM.write(2, time_m);  
EEPROM.write(3, time_h);  
}

void eeprom_read(){
time_s =  EEPROM.read(1);
time_m =  EEPROM.read(2);
time_h =  EEPROM.read(3);
}

.

As you see it is easy to build, it just requires some electronic/programming skills and a lot of patience. Buying a full 6 bottles box and drink them during the building can help the morale, I’m not sure about the results!