Timer for UV printing bed.

This is a simple timer intended to control exposure of an UV printing bed used for photographic processes

Similar projects worth following
Some photographers are pacticing historical photographic processes (also called alt processes), like cyanotype, dichromat gum, salt paper, and so on. These processes need an UV source for exposure. The sun is a nice and powerfull one, but is quite fluctuant. So UV printing boxes are often use.
But waiting aside th UV box can be time consuming (a cyanotype can take as long as half an hour to be properly exposed), and having a timer around the neck when doing anything else is not that practical.

So this timer is intended to switch on and off a UV box, and be mounted easily by someone building one.

This project started as a need for a photographic project of mine. I needed to make lot of overlaping exposures on a single print, with variables times. It would have been 80 single exposures, with time going from 3 to 15 minutes each. The whole process would have take more then 12 hours, staying beside the printing box.

So I picked up an Arduino mini I had lying around, a 7 segments clock display and its shift register salvaged from a TV decoder, a rotary encoder from a car audio system, and a few hours later I had already saved a lot of time!

Using it it clearly appeared that this board would have been usefull to me for many years, so I dive into designing one that could be used by photographers knowing nothing of electronics and programming, but in need of such a tool.

The main features of this board are:

  • Arduino based design, running on Atmega 8.
  • a large (48x18) 7 segments clock display driven by a MAX7219 chip.
  • a rotary encoder to setup time.
  • a large push button to start/pause/stop exposure (plus the trace on board for a second one if needed)
  • a relay, for switching 12VDC led strips as well as 240VAC bulbs or tubes.
  • a voltage regulator so it can be powered from led strip power unit, and
  • a USB plug to power it from regular phone charger, when used with 240VAC.
  • exposed pins for I2C, SPI, serial for further developpement or hacking.

The software do the following:

  • set a time (!)
  • start, pause, stop exposure.
  • save some exposure times into persistant memory
  • recall memory saved time.

The board is around 150x50x20mm, intended to be mounted inside a user-made UV box, as well as an existing one. It of course can be mouted also in a dedicated case if the user wants it!
There are screw connectors for power in and power switching on relay side, so there is no soldering needed when mouting it.


A preview from kicad 3D view. Some components don't have a 3D model attached (button, encoder, relay), other are wrong (look at the voltage regulator and th screw terminals!!)

JPEG Image - 93.23 kB - 06/15/2017 at 09:21


Board footprint.pdf

This is the footprint for mounting this board on a UV box. The button placed on the left of screen is a provision on board, but is not planned to be mounted.

Adobe Portable Document Format - 14.37 kB - 06/15/2017 at 09:20



This is the schematics for the board

Adobe Portable Document Format - 72.20 kB - 06/15/2017 at 09:19


minuteur proto.jpeg

The timer I made for myself, that appeared to be something the world needs! :D

JPEG Image - 325.88 kB - 06/15/2017 at 09:18


  • 1 × ATmega328 Microprocessors, Microcontrollers, DSPs / ARM, RISC-Based Microcontrollers
  • 1 × MAX7219 Interface and IO ICs / Display Interface
  • 1 × PB86 push button Discrete Semiconductors / Diode Arrays
  • 1 × relay 240 240VAC 10A Power Supplies / Uninterruptible Power Supplies (UPS)
  • 1 × 7-segments 4 digit clock display

View all 11 components

  • Boards received

    Pierre-Loup M.07/19/2017 at 09:02 0 comments


    The boards have been received a few days ago. They are really nice, beautifully looking, and... almost ok.
    It has been a long way before I could start to debug and fine tune the program running on them. Three hours to figure out how to burn the bootloader and the main program, using an Arduino as ISP. Three hours to find out that some tutorials on Internet advice to set a 10µF cap between ground and reset on the board used as ISP, and that you need to set this cap. At least, on the board I used it was needed.
    Then another three hours to understand why the display was not working. At all. No light, no blink, not even a wink! Three hours to read the program again, looking for anything that could go wrong, looking at the schematics of the board, looking at the gerber files I sent to the PCB supplyer. And finding absolutely nothing that could be the problem. And enventually, following the traces on the PCB, one by one, finding out that the decoupling capacitor and the iset resistor of the MAX7219 chip had been swapped by the manufacturer... 2 minutes, a tweezer and a small blowtorch later, the PCB was OK.

    So, the program has been tested, debugged, re-written in some cases, and everything is fine! I'm really glad that, some program details and the components swapped by the PCBA manufacturer put aside, it came right by the first time! The timer does its job, and does it well! Time's missing this days, but the next step is of course to mount this timer into a UV printing bed to test it in real conditions!

    The finished timer. It just lacks the encoder button.

    The C2 capacitor and the R2 resistor. Very close components, with the same index, I understand they swapped them. But i would have preferred they didn't! :)

    Some considerations about the design, with boards in hand. Even if I tok some time to think about the depth of the trough holes components, it appears that the relay is much more high than the display, button and encoder. I had to mount it on the bottom, to have everything comming at the right level once it will mounted in a printbox.
    Using a Atmega8 was maybe not an idea that good: I program the fuses so there's no bootloader, but the program uses almost all the memory on the board, so there's no more room for someone to expand it to suit his needs. I'm not sure the price difference between the Atmega8 and the Atmega328 is worth it. The footprint being the same, maybe I'll change it...

  • Boards ready to go!

    Pierre-Loup M.07/05/2017 at 19:33 0 comments

    I've received this morning a short e-mail from the PCB manufacturer. The boards are finished, and will be shipped tomorow! I can't wait to receive them!
    Here is the picture they sent me for review.

  • Coding, coding, coding...

    Pierre-Loup M.06/30/2017 at 20:09 0 comments

    The last days have been spent tunning Arduino code running on the timer.

    A library to manage the MAX7219 seven-segments driver has been written, which can access all the chip settings, and three other libraries based on this one:

    • One that won't be used, to drive a 8x8 led matrix, but that can be usefull for another project.
    • One that effectively drives a seven segments display, with convenience functions like setting a digit, clearing it, setting and setting the digit's dot. I've also include a char set to display letters, that differs a bit from what I could find online, that is used by a setChar method that display a char, and a setText method that set several chars.
    • And one that uses the previous, and offers convenience methods to directly set minutes and seconds.

    Besides these libraries, the main code has been updated too. Until now the code was for using a shift register to drive the led display, it now uses the MAX7219 libraries mentionned above. I've also added some functions to naviguate trough a succinct menu. So the timer is now able to:

    • Store a time in EEPROM, if it needs to be used in the future.
    • Read a saved time from EEPROM
    • Set and store the display luminosity
    • Enable or disable the bell ringing at the end of an exposure.

    So, I'm now waiting for the prototype boards to come home, before I can test the program in real condition! That will let some time to think about how using an accelarating feature on the rotary encoder, so that step value increments when turning more than a given time, to speed-up time tunning. And to think about the bell ringing, how long it should ring, if that long should be settable, and things like that...

    All the sources for the main program and the libraries are on my github repository. Feel free to use them for whatever you want. The timer one can be usefull in a lot of programs, I whish I had write it a long time ago!

  • Prototypes ordered

    Pierre-Loup M.06/15/2017 at 09:31 0 comments

    The first batch of prototypes has been ordered. Five boards with SMT soldered, plus one spare sithout components, that I will use/hack for programming. :)
    And all the TH components has been order as well.

    It sould take about a month to have all those in my letter box, I can't wait for it! More to come...

View all 4 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

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