Introduction: Thermochromic Clock - Frame Version

About: I am a physicist, part time maker and electronics enthusiast. My projects revolve mainly around daily-use items, toys and decoration with a focus on unconventional mechanisms and high standard of design.

I am repeating myself lately but here is yet another thermochromic project because I really like the effect of these liquid crystal sheets. This time I wanted to make a large clock that you can hang on your wall. The clock uses a 4-digit 7-segment display with the hours and minutes arranged vertically with a slight offset. Each segment consists of a PCB heater that is covered with a thermochromic liquid crystal sheet that changes color when the segment is heated.


  • 28 pcs, custom segments PCB
  • custom controller PCB
  • 350x450mm thermochromic liquid crystal sheet, 30-35°C
  • 280x350x20mm aluminum frame
  • 280x350x2mm black anodized aluminum plate
  • 56 pcs, PCB spacers, 5mm
  • 28 pcs, JST PH to Dupont cable, 30cm
  • 5V, 5A power supply

A detailed BoM can be found on my GitHub account.

You will also need

  • SMD soldering equipment
  • 2K epoxy glue
  • exacto knife

Step 1: Segment PCBs

The segments were designed in KiCAD. It is a 2-layer PCB with heating traces on the top layer and a JST PH SMD type connector on the bottom. The bottom also includes marks on the silkscreen for the PCB spacers which are later used to attach the segments to the aluminum plate. I ordered the PCBs from PCBWay with a black solder mask.

At first, I attached the connectors using solder paste and my hot air soldering gun. Then I glued two PCB standoffs on each PCB at the marked regions using epoxy glue. Finally, I attached the thermochromic sheet to the top and cut the remaining foil using an exacto knife.

The PCB files can be found on my GitHub account.

Step 2: Controller PCB

The PCB that is controlling the segments was also designed in KiCad. It is based on a WEMOS D1 mini ESP8266 board and uses 74HC595 shift registers that are connected to n-channel MOSFETs to heat the segments. The segments are connected to the controller PCB using common male pin headers. I also included a DS18B20 temperature sensor so that the heating power/time can be adjusted according to the ambient temperature which is something I learned from my previous thermochromic projects.

The PCB files can again be found on my GitHub account.

Step 3: Frame

The clock is mounted in a 280x350x20mm aluminum frame. The segments are attached to a custom plate made from black anodized aluminum that was unfortunately rather expensive (~90 EUR). But I wanted to have the holes cut professionally so that the segments are well aligned. You will get cheaper plates from laser-cut acrylic but with only 2mm thickness it might not be stiff enough and also the aluminum looks more quality.

The dxf file of the plate can be found on my GitHub account. I ordered it with the front plate design tool from Schaeffer AG.

Step 4: Assembly

The frame is assembled from four aluminum extrusions. With one side left open, the front and backplate can be slid in. The segments are bolted to the aluminum plate using the PCB standoffs. Next, the cables were attached to each segment. The controller PCB was glued to the backside of the aluminum plate using PCB standoffs. I fixed the cables with some cable ties and the DC cable for the power supply was fed through a hole that I cut into the backplate made from hard foam. I also added a small logo to the bottom that was made with a plotter from holographic vinyl foil.

Step 5: Code

The ESP8266 gets the current time from an NTP server and shows it by heating the corresponding segments.

The resistance of each segment is about 6 Ohm so when powered by 5 V each segment draws ~1A. In order to decrease the total current consumption, the segments are heated by software PWM that I implemented very lazily and should be improved using interrupts. Next time, I will just use PWM capable shift registers like PCA9685.

Getting the right amount of heating power was not easy and the duty cycle needed a lot of tweaking and is adjusted according to the ambient temperature measured by the DS18B20. To get all segments heated evenly those which were not active before are heated with a higher duty cycle. Still in the video below you can see that the last digit is not always clearly distinguishable as it takes a rather long time for all segments to reach thermal equilibrium. I am currently working on a version that has a temperature sensor attached to each segment so that it will always reach the same temperature.

The clock can draw >3A so a 5A power supply is recommended.

The code can be found on my GitHub account.

Step 6: Finished Clock

Here are some nice pictures of the finished clock.

I may make another version where each segment includes a temperature sensor. One could make the segments flush with the front plate and cover the whole area with liquid crystal sheet but this would certainly lead to a "bleaching effect" as I have observed it on the smaller resistor-based clock. I am also thinking about selling the clock on Tindie or Etsy as I am running out of space in my flat and certain household members have already started to complain.

Anything Goes Contest 2021

Participated in the
Anything Goes Contest 2021