Pinewood Derby Tools

Timer Construction

This page provides information and photos to aid in the construction of the Pinewood Derby Timer (PDT).  The focus for this page is on the PDT hardware and circuits. Refer to the Software page for details on how to configure/load the Arduino sketch (software) and interface to software running on a PC.

The following subjects are covered:

Parts List

The tables below list the components required to build each part of the PDT.  Refer to the schematics for the layout of each circuit. The ID of each component in the tables below corresponds to the designator shown on the schematics.  Note that the quantity needed for some components is dependent on the number of lanes of your track.

Most of components listed below can be purchased directly from this site - visit the Derby Store page for more information.
Timer Components

The following components are needed to build the core PDT circuit.

ID Item Description Part # Quantity
U1 Microcontroller Arduino Uno Uno 1 [x]
- PDT shield PCB Shield PCB to aid with wiring 1 [o]
LED1 Power light Red LED (3mm) Adafruit 777 1
LED2 Status light RGB LED (5mm, common anode) Adafruit 159 1
R7, R8 Current limiting resistors (CLR) 330 OHM resistor (axial, 1/4W, 5%) Digi-Key 330QBK-ND 2
R9 Display dimmer Breadboard trim potentiometer (10K) Adafruit 356 1 [o]
S1, S2 Reset buttons Tactile button switch (6mm) Adafruit 367 2
- Headers Break-away 0.1" male headers (36 pin) Adafruit 392 2
JP1-8 Headers Break-away 0.1" male headers (36 pin) Adafruit 392 1 [o]
S3 Start gate switch Lever (snap) switch (SPDT) Digi-Key 480-2990-ND 1
- I2C splitter PCB PCB to aid with wiring displays 1 [o]

Key: o=optional component, x=NOT available in the Derby Store

Lane Components

The following components are needed to build the detection circuits needed to register when the cars cross the finish line and optionally display each car's place order and race time.

ID Item Description Part # Quantity
LED3 Light LED (5mm, white/clear) Digi-Key VAOL-5GWY4-ND 1 / lane
Rx Light CLR 100 OHM resistor (axial, 1/4W, 5%) Digi-Key 100QBK-ND 1 / lane
T1 Detector Phototransistor (NPN, 5MM) Digi-Key BPW96C-ND 1 / lane
DISx Place / time display 0.56" 4-digit 7-segment display (I2C, RED) Adafruit 878 1 / lane [o]

Key: o=optional component, x=NOT available in the Derby Store, x=lane # (1-6)

Remote Start Components

The following components are needed to build the optional remote start gate release circuit that allows the start gate to be release via computer (software) control.

ID Item Description Part # Quantity
Diode Diode (1A) Radio Shack 276-1102 1 [x]
Relay Signal relay (5V, 2A) Jameco 139977 1 [x]
Transistor Transistor (2N2222, NPN) Jameco 38236 1 [x]
CLR 1 KOHM resistor (axial, 1/4W, 5%) Radio Shack 271-1321 1 [x]
Solenoid Solenoid (24VDC) Jameco 1919191 1 [x]
Switch Momentary switch (mini, SPST, NO) Radio Shack 275-1547 1 [x]

Key: o=optional component, x=NOT available in the Derby Store


Finish Line Bridge

The finish line 'bridge' (or 'arch') holds a light (LED) directly over each lane which shines light on a corresponding detector (phototransistor) mounted on (or under) the track.  As cars pass between the lights and detectors the PDT registers the elapsed time for each lane. Optionally the bridge can also contain a digital display over each lane to show the place order and elapsed time of the cars as they finish the race.

The design of the finish line bridge will be heavily dependent on your particular track and can range from the strictly utilitarian to the artfully designed. A sample of PDT designs is shown below and you can visit the Timer Builds page for more examples.

Pack 317 (Peoria, Illinois)

Philadelphia Church of God (Southern California)

46th Kingswood, 1st Longwell Green (Bristol UK)

Here are a few things to consider when designing your finish line bridge:

Timer circuit: The timer's 'brain', an Arduino Uno microcontroller with the PDT circuit, must also be housed in the finish line enclosure or be placed in a nearby control box.

Cable connections: Wiring connections to the PDT are the following:

Bridge height: For maximum reliability the distance between the lights (in the bridge) and the detectors (on or below the track) should typically be set between 5 and 9 inches (13 and 23 cm).  Your track's construction and your derby's ruleset (maximum car height, for example) will also be factors to consider.

Light / detector mounting: Care should be taken that each lane's light and detector are exactly in line with one another. The design for this will be heavily dependent on your track and bridge design but LED holders - which can be found at Amazon or any general electronics store - could be helpful.


Circuit Construction

Although optional the shield PCB simplifies the construction of a PDT by providing mounting and wiring points for the various components. It has the standard Arduino shield format that allows it to be stacked directly on top of the Arduino microcontroller board.  Most of the instructions below refer to the use of the shield PCB - if this is not the case for your build simply refer to the schematic for the appropriate Arduino Uno pin number for each connection.

Soldering: Basic soldering is required to attached all components, headers and wires to the PDT shield PCB.  If you are new to soldering here are a few suggestions:
- Search YouTube (or your favorite video site) for videos covering the basics.
- Start with the headers and resistors - they are the most heat tolerant.
- Save the LEDs and phototransistors for last - they are the most heat sensitive.
Shield Headers

The headers used to mount the shield to the Arduino microcontroller board are standard break-away 0.1" male header strips.  The strips can be cut to length using a utility knife or wire cutters. Two sets of 8 pin headers are needed for the top and two sets of 6 pin headers are needed for the bottom.  The two left-most header holes on the top of the PCB board (highlighted red in the picture below) are not utilized for the Uno and do not require headers.

Shield header locations

The headers should be mounted so that the black plastic 'body' is on the bottom of the PCB board (in between the PCB board and Arduino when the shield is mounted) as shown below on the left. Note that the headers are only soldered to the PDT shield PCB and simply slide into the Arduino's female headers as shown below on the right (partially mounted on an Arduino):

Component polarity! All of the LEDs (status, power and lane lights) and phototransistors (lane detectors) have a polarity. This means that one lead of the component is the positive, the other lead is the negative and the component must be connected to the circuit in the correct direction (or orientation). Resistors do not have a polarity and can be attached without regard to direction.

The sections below describe how to identify the correct component leads for the components available from this site. If you source your components elsewhere, please double check the associated data sheets to verify you are using the correct polarity.
Power and Status LEDs

The white/clear status LED (5mm RGB) has four (4) leads and should be orientated so that the flat spot (on the base of the LED) is facing to the right. The red power LED (3mm) has two (2) leads and should also be oriented so that the flat spot (on the base of the LED) is facing to the right.  The LEDs can be soldered directly to the shield PCB or attached via wire if they will be mounted on the outside of the bridge or project box.

The corresponding current limiting resistors (CLRs) for the LEDs are mounted in the resistor spots labeled 'Power' and 'Status'.  The CLRs in the base component package available from this site are sized to the specifications of the status and power LEDs. If you source your components elsewhere, please refer to the note below regarding calculating the CLR values.

Current limiting resistor (CLR) value calculation: Anytime a LED is used a current limiting resistor must be placed in series to protect it from over current (and burning out).  The value of the CLR has to be calculated based on the specific LED used. Here is a good overview of that calculation.  Note for the calculation the supply voltage is 5V.
Reset Switches

The two reset switch positions are designed to utilize small 6mm tactile button switches.  If an enclosure is used the wire leads from any momentary switch can be soldered to the PCB in place of the tactile switches.  The Arduino reset switch resets the microcontroller board (a complete 'reboot') and isn't normally used. The PDT switch has two uses and should be accessible for normal use. Its main use is to reset the status of the timer. Its secondary use is to enter the hardware test mode during startup and to step through each stage of the test mode. Refer to the Software page for information about the hardware test mode.

Start Gate Bus
Start gate switch on BestTrack track

This 4-pin bus (2x2) is for connecting the PDT to the start gate circuit(s).  A small 2x2 male or female header can be utilized or wire leads can be soldered to the PCB that go to another connector or the start gate itself.

The start gate circuit utilizes the normally closed (NC) terminal of a simple snap switch.  The switch should be mounted so that the closed start gate (pre-race) engages the switch (opening the connection) and releases the switch (closing the connection) when the start gate is opened (at race start).  A switch mounted on a BestTrack track is shown to the right.

The pins in this bus are:

A diagram of the start gate switch connection is shown below (click to enlarge):

Start gate switch circuit
Lane Busses

The six 3 pin busses (1x3) are for connecting the PDT to the lane light and detector circuit(s).  A small 1x3 male or female header can be utilized or wire leads can be soldered to the PCB that go to another connector or the lanes themselves.  The pins in each bus are:

A diagram of a lane light/detector circuit for lane 1 is shown below (click to enlarge). Note that the CLR for each lane's light (LED) goes on the PCB in the spots indicated. This circuit would be repeated for each lane of the timer:

Note the polarity of the phototransistor in the following diagram. If installed incorrectly the timer will not function correctly - the main symptom being that the races finish almost instantly after race start for the affected lane(s).
Start gate switch circuitBACK TO TOP

Place / Time Displays

The optional Adafruit 0.56" 7-segment displays are mounted in the finish line bridge over each lane to display the place order and elapsed time of each car as it finishes the race.  Normally only one display per lane is supported but if your track has four or less lanes the PDT sketch can be modified to drive two displays per lane - this allows a display on each side of the finish line bridge for each lane. Another dual display option is to have a Adafruit 8x8 matrix display showing the finish order on the same side as the 7-segment display showing the finish time.

The Adafruit 0.56" 7-segment display and backpack are shown in the picture above. When mounting (soldering) the display onto the backpack make sure it is correctly oriented so that the display's decimal points are at the bottom of the backpack (near the lettering) - see the picture above.

With a little extra work, the Adafruit 1.2" displays can also be utilized with the PDT.  Please refer to the section below for more information.
Display Addressing

When there is more than one lane each display needs its own address so that the PDT can communicate the correct information to each display.  Changing an address is done utilizing a set of three jumpers on the display's circuit board - see the yellow square in the above picture.  Using the table below determine the jumpers that need to be set for each display and use a blob of solder to connect the jumper's pads.

PDT Lane # PDT Lane # I2C Address # Jumpers
A0 A1 A2
1 1 F 0 - - -
2 2 F 1 x - -
3 3 F 2 - x -
4 4 F 3 x x -
5 1 B 4 - - x
6 2 B 5 x - x
- 3 B 6 - x x
- 4 B 7 x x x

Key: - = open, x = shorted; F = front, B = back

Note: Use the first lane column for the normal display configuration (up to 6 lanes), use the second column for the two displays per lane option (front & back, up to 4 lanes).  The default address of the Adafruit display is 0 so nothing needs to be done for the lane 1 display.

WARNING: If utilizing the Adafruit 8x8 matrix displays for the dual display option to show the place order, be aware that the A1 and A2 labels are swapped on the PCB board for the display.

Display Dimmer Potentiometer

The display dimmer position on the shield PCB can utilize any (small) 3-terminal potentiometer. The resistance value is not important since it is being utilized as a voltage divider. Linear taper would be preferred to audio taper but either would work.

Display Bus

This 4-pin bus (1x4) is for connecting the PDT to the optional displays.  A small 1x4 male or female header can be utilized or wire leads can be soldered to the PCB that go to another connector or the displays themselves.  The pins in this bus are:

A diagram of the optional display circuit is shown below (click to enlarge).

Display circuit
I2C Splitter Board
Start gate switch on BestTrack track

The I2C splitter board is an optional PCB that aids in wiring the displays in parallel. It can be utilized with the optional pre-made jumper wires or by soldering wires directly to the board.  Note that the left side of the PCB has two spots for the connection to the PDT - utilize the spot that matches the revision number of the shield PCB you are using.


Power Requirements

There are two ways to power the PDT/Arduino:

The first option, using the USB connection, should only be used for very simple setups - no displays or only 1 lane with a display.

The second option, an external power supply, is the recommended setup. But even with an external power supply the power requirements of the displays and the capability of the on-board 5V regulator of the Arduino should be taken into consideration when utilizing three or more displays. To maximize the output and reliability of the on-board regulator use a power supply with an output voltage as near to 7V as possible (but don't go below 7V).

Reducing the maximum brightness of the displays can also be used to limit the power draw of the circuit. The table below summarizes the power draw of one display for various brightness levels.  Note this is for the worst-case scenario with all LED segments lit. Refer to the PDT manual for instructions on how to set the maximum brightness of the displays.

Brightness Current (mA)
15 98.8
10 68.3
5 37.6
0 6.6

Adafruit #878 0.56" 7-segment display

PDTs with 5-6 lanes and displays will need to power the displays with a separate power supply and regulator (always maintain a common ground with the PDT/Arduino circuit).


Start Gate Solenoid

The optional solenoid (and supporting circuit) allows the start gate to be opened remotely (usually via software).  


Adafruit 1.2" Displays

The standard PDT construction optionally utilizes the Adafruit 0.56" displays for showing each lane's place order and finish time.  The digits on the displays are 0.56" tall and are similar to the displays utilized on other timers.

In some cases, it is desirable to have larger displays.  An option for this is the Adafruit 1.2" display which, with a little work, can be utilized by the PDT timer.  The photo below shows a 1.2" display compared to a 0.56" display (the measurement in each case indicates the height of the digits).

Adafruit display comparison
Hardware Setup

The 1.2" displays are setup almost identically to the 0.56" displays as described on the Construction page.  There are two differences:  one is the 1.2" displays have an extra pin in its header - it is labeled V_IO.  This pin should be connected to +5V - one option is to simply connect it to the neighboring +5V pin on the header as shown below:

Display header

The other difference is because the only decimal point on the display is on the top - the display must be mounted/used upside down as shown below:

Display upside down
Software Changes

Since the 1.2" displays must be used upside down the corresponding Adafruit library must be modified to drive the displays correctly.  You will need to modify the following file (change 'USERNAME' below to your Windows username):


Find the definition for 'numbertable' and change it to the following:

static const uint8_t numbertable[] = {
       0x3F, /* 0 */
       0x30, /* 1 */
       0x5B, /* 2 */
       0x79, /* 3 */
       0x74, /* 4 */
       0x6D, /* 5 */
       0x6F, /* 6 */
       0x38, /* 7 */
       0x7F, /* 8 */
       0x7D, /* 9 */
       0x7E, /* a */
       0x67, /* b */
       0x0F, /* C */
       0x73, /* d */
       0x4F, /* E */
       0x4E, /* F */

Then find the definition for 'Adafruit_7segment::writeDigitRaw' and change it to the following:

void Adafruit_7segment::writeDigitRaw(uint8_t d, uint8_t bitmask) {
 if (d > 4) return;
 displaybuffer[4-d] = bitmask;

Finally, you will need to enable the LARGE_DISP parameter in the PDT sketch as described on the Software page.

Power Considerations

Although they are bigger the 1.2" displays do not draw more power than the 0.56" displays.  The power considerations are the same, refer to the power section on the Construction page.


Created: 28 Feb 2013
Last updated: 1 May 2022