Introduction: Thermochromic Temperature & Humidity Display

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 have been working on this project for quite some time. The original idea came to me after building a TEC controller demonstrator at work for a trade fair. To show the TECs heating and cooling capabilities we were using thermochromic paint that changes from black to transparent.

In this project I have taken the idea further and build a two digit 7-segment display using copper plates that are covered with thermochromic sheets based on liquid crystals. Behind every copper plate sits a TEC element that controls the temperature and thereby changes the color of the liquid crystal sheet. The numbers will show the temperature and humidity from a DHT22 sensor.

You may appreciate the irony of having a device that displays the ambient temperature by changing it's own temperature ;-)


  • 3 pcs, 150x150 mm liquid crystal sheet (29-33°C) (see here).
  • 17 pcs, copper plates, 1mm thick (dimensions see below)
  • 401 x 220 x 2 mm aluminium plate (grey/black anodized)
  • 401 x 220 x 2 mm acrylic plate (white)
  • 18 pcs, TES1-12704 peltier element
  • 9 pcs, TB6612FNG dual motor driver
  • 6 pcs, Arduino Nano
  • 2 pcs, 40x40x10 mm cooling fan
  • 18 pcs, 25x25x10 mm heat sink
  • 12 V, 6 A power supply
  • DHT22 (AM2302) temperature and humidity sensor
  • 6 pcs, 40 mm long PCB standoffs

In addition, I used this thermally conductive epoxy which was rather cheap and has a long pot life. A drill and dremel tool was used to make the necessary holes in the aluminium and acrylic plates. Holder for the arduinos and motor driver PCBs were 3D printed and attached with hot glue. Also, I used lots and lots of dupont wires to make all the connections. Furthermore, this PCB with screw terminals came in very handy to distribute the 12 V power supply.

Attention: Apparently, many of the TB6612FNG boards do have the wrong capacitors installed. Although all sellers specify the board for motor voltages up to 15 V, the capacitors are often only rated for 10 V. After I blew the capacitors on my first two boards, I desoldered all of them and replaced them with proper ones.

Step 1: Making the Copper Plates

For the copper plates I used an online laser cutting service (see here) where I could upload the attached dxf files. However, since the shapes are not very complicated, laser cutting is not a must and there are probably cheaper manufacturing techniques (e.g. punching, sawing). In total, 14 of the segments, two circles and one dash are needed for the display. The thickness of the copper plates was 1 mm but could probably be decreased to 0.7 or 0.5 mm which would need less heating/cooling power. I used copper because the heat capacity and thermal conductivity is superior to aluminium but the latter should also work reasonably well.

Step 2: Attaching Liquid Crystal Sheet

The key component of this project is the thermochromic liquid crystal foil which I obtained from SFXC. The foil is available in different temperature ranges and changes color from black at low temperatures over red, orange and green to blue at high temperatures. I tried out two different bandwidths 25-30°C and 29-33°C and ended up choosing the latter. Because heating with a peltier element is easier than cooling the temperature range should be slightly above room temperature.

The liquid crystal foil has a self adhesive backing that sticks very well to the copper plates. The excess foil was cut around the plate using an exacto knife.

Step 3: Attaching TEC Element

The peltiers were attached to the center of each copper plate using thermally conductive epoxy. The plates are a bit larger than the peltiers so that they stay completely hidden behind. For the longer plate that constitutes the dash of the percent symbol I used two peltiers.

Step 4: Preparing Aluminium Plate

To save some money I drilled all holes in aluminium plate myself. I just printed out the attached pdf on A3 paper and used it as as drilling template. There is a hole for every segment where the TEC cables run through and 6 holes on the edges for attaching the acrylic plate later.

Step 5: Attaching Segments

One of the hardest parts in this project was to attach the segments correctly to the backplate. I 3D printed several jigs that would help me with the alignment of the segments but this only worked partially because the segments were constantly sliding away. In addition, the cables push on the peltier so that it loosens from the plate. I somehow managed to glue all the segments in the right place but one of the peltiers in the dash segment has very bad thermal coupling. It might be better to use self-adhesive thermal pads instead of epoxy although I suspect it may loosen over time.

Step 6: Attaching Heatsinks and Holders

My original idea was to just use the aluminium plate as heatsink for the peltiers even without any fan. I thought that the total temperature of the plate will only rise slightly since some segments are cooled while others are heated. However, it turned out that without additional heatsinks and no cooling fan the temperature will keep rising to a point where the copper plates cannot be cooled down any more. This is especially problematic since I do not use any thermistors to control the heating/cooling power but always use a fixed value. Therefore, I bought small heatsinks with a self-adhesive pad that were attached to the backside of the aluminium plate behind every peltier.

After that, 3D printed holders for the motor drivers and arduinos were also attached to the backside of the plate using hotglue.

Step 7: Uploading Code

Each arduino can only control up to two motor drivers since they need two PWM and 5 digital IO pins. There are also motor drivers that can be cotrolled via I2C (see here) but they are not compatible with 5 V logic of the arduinos. In my circuit there is one "master" arduino that communicates with 5 "slave" arduinos via I2C that in turn control the motor drivers. The code for the arduinos can be found here on my GitHub account. In the code for the "slave" arduinos the I2C address has to be changed for every arduino in the header. There are also some variables that allow changing the heating/cooling power and the corresponding time constants.

Step 8: Wiring Madness

The wiring of this project was a total nightmare. I have attached a fritzing diagram that shows the connections for the master arduino and a single slave arduino as an example. In addition, there is a pdf documenting which TEC is connected to which motor driver and arduino. As you can see on the pictures due to the large amounts of connections the wiring gets very messy. I used dupont connectors wherever it was possible. The 12 V power supply was distributed using a PCB with screw terminals. On the power input I attached a DC cable with flying leads. To distribute the 5 V, GND and I2C connections I equipped some prototype PCBs with male pin headers.

Step 9: Preparing Acrylic Plate

Next, I drilled some holes in the acrylic plate so that it can be attached to the aluminium plate via PCB standoffs. In addition, made some cutouts for the fans and a slit for the DHT22 sensor cable using my dremel tool. After that the fans were attached to the backside of the acrylic plate and the cables were fed through some holes I drilled. Next time I will probably make the plate by laser cutting.

Step 10: Finished Project

Finally, the acrylic plate and aluminium plate were attached to each other using 40 mm long PCB standoffs. After that the project is finished.

When connected to the power supply the segments will show the temperature and humidity, alternately. For the temperature, only the upper dot will change color while also the dash and lower dot are highlighted when showing the humidity.

In the code each active segment gets heated for 25 seconds while simultaneously cooling the non-active segments. After that the peltiers are switched off for 35 seconds so that the temperature can stabilize again. Nevertheless, the temperature of the copper plates will rise over time and it takes some time until the segments do a full color change. The current draw for a single digit (7 segments) was measured to be about 2 A so the total current draw for all segments is probably close to the maximum of 6 A that the power supply can provide.

One could certainly reduce the power consumption by adding thermistors as feedback to adjust the heating/cooling power. Going one step further would be to use a dedicated TEC controller with PID loop. This should probably allow constant operation without much power consumption. I am currently thinking about building such a system using Thorlabs MTD415T TEC drivers.

Another disadvantage with the current configuration is that one can hear the 1 kHz PWM output of the motor drivers. It would also be nice if one could get rid of the fans because they are also quite loud.

Metal Contest

First Prize in the
Metal Contest