Introduction: Back to the Future Time Circuit Clock

I've been a massive fan of the BTTF trilogy, it never gets old and I have a small collection of related memorabilia. Here I will show you how to build a BTTF 'Present Time' clock. It's not movie accurate, it's not the whole time circuits but it's immediately identifiable to anyone who knows of the movies and is a great addition to a fan's collection.

Compared to some of my other projects, this has come together extremely fast, it just all worked out and I ran into very few issues. If you have the right tools, you could probably build this in a day or over a weekend.

Unfortunately, I could not get a camera to capture the true colour of this display. The photos do not do it justice. Here the colour looks quite light but it is a very nice deep green which is closer to the small reflection you can see in the edges of the windows.

Fun fact

No one can actually reproduce a working time circuit that is movie accurate - This is because the month on the original was not actually a segment display, it was just a negative print on acetate sheet that was backlit. If you look over the movie, you will notice two main things. a) the 'D' in December could not have been actually made on a 14/16 segment display and b) there is no light bleed to the other segments that you can see in all the other displays. You can't unsee it now...

Supplies

Required tools:

  • 3d printer or the ability to have the items 3d printed for you
  • Decent Small tip Soldering Iron with solder
  • Wire Strippers
  • Drill press or good skills with a hand drill
  • Hacksaw and/or drop saw (for cutting the tube if you need to)
  • *Benchtop CNC machine
  • Label printer and appropriately colored tape.
  • Small screws and suitable tap/drill (speaker mount)
  • WD40 or a Lanolin based lubricant (Helps when cutting Aluminium)


Electrical components:

  • ESP32 S2 Mini - Other variants should work fine, even ESP8266 but untested.
  • 13 x 0.8" 16 Segment common cathode displays Aliexpress
  • 2 X HT16K33 LED matrix display drivers Aliexpress
  • 16 Way ribbon cable (Rainbow cable makes it much easier)
  • General hookup wire
  • 4 X 3mm green leds
  • 3 X 1n4148 signal diodes (any diode will do, using them for voltage drop to 3mm leds)
  • DC jack and plug for power, or move the ESP32 closer to the end and just power with USB
  • DFPlayer Module Aliexpress (for sound, omit these and the next two components if you don't want sound)
  • Your choice of speaker - I used This one
  • Small MicroSD card - I used an old 128mb one I had laying around

Hardware:

  • 50 x 30 x 2mm Aluminium tube ~320mm long I sourced mine from Bunnings here in Aus
  • Rubber feet
  • Thick double sided tape
  • 3mm tinted Perspex/acrylic to fit inside tube


*For this project is used a CNC machine to cut out the holes in the aluminium and accompanying tinted perspex, however it's not essential to have a cnc machine to complete this project. It will just take some time to cut out the windows by hand with appropriate tools and you can just slot a full (3mm) thickness of perspex in behind. It might make it a slightly tighter fit with the other components. More on this later.

Step 1: 3D Print the Parts

The main component is the frame that holds all of the characters. I was able to print this in one piece on my printer, if you have a smaller bed, you may need to split as required.

There are also holders for the 3mm leds, clips to secure the mechanism in place inside the tube, a cover for the speaker and the end caps.

Step 2: Install the Character Displays Into the Main Frame

The characters I linked to, friction fit inside the frame. Laterally, they are ever so lightly over the size of the allocated hole. This is deliberate as it gives the frame a slight convex shape once all displays are installed, meaning the middle of the display does not need support in the tube, and it keeps it pressed against the perspex.


TIP: Don't remove the protective tape on the displays until final assembly - They get marked easily

Step 3: Wire the Displays

This is the worst part of all. It took me about 3-4 hours but on the second set, I was able to come up with a better technique which is evident in the neater wiring, it was also a lot quicker.

Each of the HT16K33 driver modules are capable of driving up to 8 x 16 segment displays. I broke this up to Month/Day for the first one and then year, hour, min for the second one.

I could have designed and ordered a PCB for this but the wiring is pretty simple and I'm yet to get a PCB 100% right on the first go. Further to that, ordering boards of this dimension is not overly cheap, so manual wiring was the method of choice.

First I bent out the Cathode pin and soldered an appropriate length of wire to each that would reach the driver module, to be mounted somewhere near the middle of the whole unit.

Once that was done, the technique I used for the anodes was to cut a suitable length of wire, strip one end and then solder it to farthest pin on the leftmost display (I'm left handed). From there, I ran the wire to the corresponding pin on the next display and marked the length by using my thumbnail to make an indent in the insulation. Then using the wire strippers, you can split the insulation at that point. You're not cutting the wire, just pushing the insulation back. You can then route the wire around the pin on the other side of the display and solder the wire laterally, low on the pin. Repeat for the rest of the corresponding pin for each of the displays, leaving a length suitable for routing up to the controller boards.

Work down with the leftmost pins, omitting the DP pin and if course the cathode pin.

You can then use the same technique for the right pins on each display but this time you can solder higher on the pin, creating a nice neat solution.

Repeat for the Y/H/M displays, routing wires back towards the middle of the unit.

Step 4: Connecting to the Display Modules

Mount one of the modules over the 'Day' section using some double sided tape, then starting with the leftmost character (the first digit of the month), wire the cathode pins to the 'C' outputs of the display module, up to the last digit of the day (C0-C4).

The segments can then be wired to each of the 'A' outputs. The order I used to do this was purely in order of the pins on the display modules, starting at the corner pin closest to the Cathode pin, working my way up, then starting back at the bottom right of each display (A0-A15). This order is not critical, as it can be changed in code, you just need to make sure both modules are wired the same.

Repeat for the y/h/m displays. While you're at it, place a small solder join over the 'A0' address section on the second module


Step 5: Connecting LED Driver Modules to the ESP32

You can now wire up the power and data lines of the modules to the ESP32.

Mount the ESP32 somewhere over near the 'minutes' display, again using double sided tape.

The corresponding wires for each LED driver module can be paired up and soldered to the corresponding pins on the ESP.

SDA is GPIO 8

SCL is GPIO 9

Then 5v / Gnd connections.

At this point, I also added some extra sections of wire for the 5v and Gnd connections to go to the power jack in the end cover.

Step 6: 3mm Leds

The 3mm leds can be mounted into the holders and placed between the characters.

Carefully route the LED pins between the display wires.

Run a common ground to all 4 leds.

trim two of the 1n4148 diodes to only have short wires, connect each to the AM/PM leds and wire to the corresponding GPIO pins on the ESP32 (35 and 37 respectively).

The 1/2 second leds can be wired in parallel, using the lead from the remaining 1n4148 diode to join them. The other side of the diode is wired to GPIO 39

Step 7: MP3 Player Module

The MP3 player module can be stuck on top of the ESP32 S2 Mini and for me *just* fits nicely inside the tube. Before we mount it, add wires to the ESP32 module for ease of access.

You will need:

  • 3.3v
  • Gnd
  • 17 (Tx)
  • 18 (Rx)

Mount the module and wire as pictured.

CAUTION - Make sure your solder joints to the mp3 module are smooth and as low as possible - There is potential for the pins to short on the aluminium case. It may be worth adding some insulation tape over the whole module for extra protection.

*You can use 5v for the MP3 module for more volume but I found that sharing the 5v rail with the display modules was very noisy which became an audible signal in the speaker. Running from 3v eliminated this. Or, you can reset the MP3 module after playing sounds which seems to turn off the amp until you play another sound.

Step 8: Load the Code and Test

Load the supplied code onto the ESP32 board, taking note of the libraries required, all of which are installable via the Arduino library manager. The specific ht16k33 driver in use is the one by 'lpaseen'.

You will also want to set your own Wifi SSID/Password as well as your TimeZone.


Since access to USB is a little limited once assembled, OTA updates are also enabled in this code - Feel free to set the password for it, and the preferred volume for the MP3 player module.

Also grab your SD card and upload the included MP3 to a folder called \mp3 (so you'll end up with x:\mp3\001.mp3)

Once the code is loaded, you should hear the time circuit sound, followed by the display of the current time/date details.

If it doesn't, then check the serial output for information


The characters are all garbled?

This just means your order of wiring the LED driver modules is not the same as mine - Either recheck your wiring or the 'asciifont-pinout12.h' file can be modified to support your own wiring. Each character is represented by a 16 bit binary value corresponding to the 16 segment display elements. Take note - The bits are in reverse order in the font definition i.e A15 - A0. You can map out your own characters. I done this myself with a spreadsheet to give me the required strings to add.

Sound funny?

This probably means it does not have enough power. My unit only consumes about 250ma but odd things happen with the sound when there is not enough power for the Mp3 module. If you experience weird noises like clicking or the sound being cut short, it's probably because there is not enough power.

Step 9: Making the Enclosure

The enclosure was created from 50X30 aluminium rectangle tube. It has a wall thickness of 2mm.

Using the template attached to this step, I machined the windows into the tube so that they were equally distant from the ends.

Original dimensions to the outside of the character displays are shown in the blueish diagram (taken from the 3d printed frame), the other is 2.2mm less.

The windows are 2mm smaller than the character displays, with the windows being cut 0.2mm less again.

I then machined the tinted 3mm Perspex to a depth of 1.5mm, cutting out the windows 0.2mm less than the ones in the Aluminium. This allows the Perspex to clip into the aluminium and needs no further support.

If you don't have this ability, you can manually cut the windows into the tube, then just slot a suitable piece of 3mm (or 1.5 if you can find it) Perspex behind it. This will add slightly to the overall thickness and it may be a little tight sliding the displays into the tube. You of course have the option of omitting the Perspex all together but this will affect the overall aesthetics of the display.

Since the speaker would not fit inside the tube, I machined a recess for it to mount on the outside. It's 4mm thick so I recessed it by 1mm. I'm sure there are other speakers that might have fit inside but it's what I had and it works.

I designed/printed a speaker grille to hold it in with 4 X 2.5mm screws.

Deburr all cuts as well as possible - Preferably with some sand paper too. This will ensure the perspex does not get scratched.

Step 10: Final Assembly

You can now slide the displays inside the tube, with the Perspex covering the openings. Install the brackets behind the display to hold it in place.

I was able to push one of them in just far enough that it sat over the USB C connection of the ESP32 S2 Mini, leaving access to the port without disassembly if needed.

Carefully slide the display into perfect position using the AM/PM leds as your alignment guide.

Solder the DC jack to the extra sections of wire you added earlier and install the jack into the end cover, and install the other end cover.

Print out and attach appropriate labels for the display, attach adhesive rubber feet and sit back to enjoy the fruits of your labor!

Step 11: For the Future (No Pun Intended)

This is just the first iteration of the code, enough to produce a useful and interesting piece of nostalgia. I intend to add more to the code specific to my use, namely to have it integrate with my home automation, have the ability to play more sounds and interact with my flux capacitor (which is also connected to my home automation) among other things.

Clocks Contest

First Prize in the
Clocks Contest