2.1.3. Illumination Control Board and Brightness Control Algorithm

The schematic structure of the control board is depicted in Figure 5. The two main components of the illumination control board are an Arduino Nano board [36] and a Texas Instruments TLC59401 [37]. The Arduino Nano is a complete, breadboard-friendly microcontroller development board based on the Microchip ATmega328P microcontroller [38,39]. The Texas Instruments TLC59401 is an integrated 16-channel LED driver with dot correction and greyscale pulse width modulation (PWM) control enabling a convenient brightness control of LEDs without the need for external components like dropping resistors. Each output can be controlled separately (4096 steps) and has a drive capability of 120 mA. It operates as a constant-current sink and the desired current can be set using one external resistor only. In addition there are external PNP transistors (BC808-25 [40]) to drive the laser modules as

their operating current exceeds the maximum current of the TLC59401. The reflected light illuminators are connected to one of the PWM outputs on the Arduino Nano using some external n-channel MOSFET transistors (AO3418 [41]) to drive them. The whole control board is interfaced using a simple, fixed-length, text-based serial protocol to control each of the individual LEDs/laser modules as well as the reflected light illuminators, to set a whole stripe at once and to turn off all illuminators again. On the PC side there is a graphical user interface based capturing control software which facilitates an easy and straight forward data acquisition. At the moment, the capturing process is initiated manually once the data subject placed their hand/finger in the sensor. This process will be automated in the future as well.

The brightness control algorithm controls each of the single light transmission illuminator's laser modules as well as the reflected light illuminators as a whole. We decided to implement a simple, iterative algorithm based on a comparison against a target grey level, which works as follows—at first the laser centres have to be configured, including the determination of the area of influence for each laser, which is the area in the image a single laser illuminates. Then all lasers are set to an initial intensity level/brightness value which is half of their maximum intensity (*Imax*). The live image of the camera is analysed and the current grey level in the circle of influence of each laser is determined (*GLcurrent*) and compared against the set target grey level (*GLtarget*). The new brightness value is then set according to: *In*+<sup>1</sup> = *In* + *Icorr*, where *In*+<sup>1</sup> is the new intensity level, *In* is the current intensity level and *Icorr* <sup>=</sup> *GLtarget*−*GLcurrent GLmax* · *Imax* <sup>2</sup>·*<sup>n</sup>* , where *GLmax* is the maximum grey value and *<sup>n</sup>* is the current iteration. The iteration stops if either the target grey level *GLtarget* has been reached or if no more intensity changes are possible. The algorithm finishes in at most *log*2(*Imax*) iterations. Both, the Arduino Nano firmware as well as the capturing software, including our brightness control algorithm are available on request as well.

**Figure 5.** Schematic structure of the illumination control board.
