Need help with large thermochromic matrix design


I'm doing a feasibility study for a large (27 x 46) matrix display, but despite trawling the web for a few days I can't find any examples of circuits I can base my design on. I have a very crude knowledge of shift registers (I have a simple 8x8 LED matrix working happily in a breadboard) but I can't find any clues on how to build exactly what I want.

The problem is I DON'T want to use LEDS! :astonished:

I have a tonne of 10ohm SMD resistors and want to mount these in a matrix under a sheet of thermochromic film. The resistors warm up nicely with the tiniest voltage through them and show up as a rainbow spot on the thermochromic sheet. I'm guessing there'll be sneaking paths in the matrix and resistors around the selected one may 'illuminate' at quarter brightness, but as this display is for artistic purposes it's not much of an issue. That, and I don't really want to spend £100 on 1242 SMD diodes!

I have a handful of ULN2003As, and have been trying to introduce these into my typical LED matrix circuit to see if I can get more power in, but applied to the anode or cathode side, the Arduino just crashes and resets. I'm getting the extra voltage from using an external supply and pinning the ULN2003A's COM to the Arduino's Vin, which has worked fine in other projects.

Any input would be very greatfully received,


How much heat will be produced in total? temp? as first thing that came in my mind was: "Fire!!"

Hey Thomas,

First impression - this sounds like a freaking awesome idea! Nice one.

When it comes to addressing the matrix array, don't worry about it. The biggest issue with LEDs is going fast enough that you don't see the flickering, but this won't be an issue with you as, I'm guessing here, the heat will take a little time to decay away.

Two thoughts strike me instantly - the heating effect in resistors is all about I2R :: Power = Current * Current * Resistance, the voltage is secondary. Also remember that resistance may change significantly (and non-linearly) depending on the resistors (check your datasheet with a fine toothcomb for absolute limits too)

Second thought: What is the active temperature range of the thermochromic film? Is it going to look the same in an museum gallery at 10 degC as it will on a tradeshow exhibition floor at 35 degC ?

As for the crashing issue, maybe some schematics could help us. Sketch it on a napkin and take a photo for us.


Since you have UNL2003s, how about this (I can draw up a schematic when I get home). Picture as a 3x3 array to start, for discussion sake. QT1 QT2 QT3 QS1 R1 R2 R3 QS2 R4 R4 R6 QS3 R7 R8 R9

You have 3 transistors (which are the ULN2003 output pins) across the top of the array, and 3 down one side. Side 1 (tops) of resistors R1, R4, R7 connect to collector of QT1. Side 2 (bottoms) of resistors R1, R2, R3 connect to collector of QS1. and so on to complete the matrix. Emittors are at ground (which is the ULN2003 design anyway). R1 heats up when QT1 is off and QS1 is on. R4 and R7 would also heat up if QS2 and QS3 were on respectively. To heat up R2, R4, R8, then QT2 would turn off and QS1,2,3 on respectively.

Multiplexing is the key to control of course.

Need resistor between Vsuppy and collectors of QT1,2,3 so they are not shorting supply to ground when turned on.

If you had ULN2803’s you could put one the output of a shift register like 74HC595, and each shift register/ULN2803 could control one 4x4 area.
Then your display could be as many strings of 4x4 blocks arranged as rows, or columns, or larger squares, or however you wanted to arrange them (contiguous, spread out, different sized clumps, etc).

But the building block could be the same: shift register, driver, resistors, and power/ground/3 control lines (data, serial clock in, load signal)

That sounds like a good idea and remember that you won't have to refresh the matrix as often as a visual matrix because the thermal time constant is quite long. I imagine the main problem will be getting the "pixels" to turn off fast enough you might have to use a fan.

Lots of good suggestions here, thanks!

I've done some simple measurements with one of these 10ohm 0805 resistors, and with a 1.5v AA battery I'm getting a draw of about 180mA and about 40 degrees Celsius (given the difficulty of trying to measure the temperature of something so tiny!). The thermochromic film behaves very much like those strips you use to measure the temperature from your forehead - black at room temperature, but starting to change colour over 30C. Recovery time from a resistor-sized dot is about 4 seconds, fine for my application, and I'll be able to get away with code that's less 'tight' (no need for interrupts?).

I do have a bunch of ULN2803s on order to simplify the hookup with my 74HC595s, but without a schematic I'm still a bit flummoxed at how each resistor in the matrix gets powered and grounded. I'm a bit green with electronics (can you tell?) though excellent with schematics and fairly handy with a soldering iron ('m just finishing off a 6-DOF pick 'n' place robot). The frame needs to be as small as possible, so I need to stick to a matrix arrangement to keep my chip-count down.

Sorry if I haven't addressed all your posts individually, it's been a loooong day. I'm very glad of all your help, and will re-read them all tomorrow with a clear head!



Here’s what I was thinking.
Assume 5V source, 10 ohm current limit resistor and ULN2803 Vce of 1V - top Qs then sink 400mA to turn Off a column.
When One column and a Row is On, the side Q will sink 200mA, seeing 20 ohm of resistance.
Heating resistors then dissipate 400mW.
If not enough, then N-channel MOSFET for side resistor, with Rds around .005 ohm, will let 250mA flow, so heating will be 625mW.
If that’s still not enough, then P-channel MOSFET will need to replace the top current limit resistor, for dissipation of up to 2.5W, depending on the MOSFETs selected.
If you need higher, than higher source voltage is needed.

Great stuff Crossroads, we’re getting closer.

I will try this in the workshop today.

So, you’re saying that the ULN2803s COM is connected to 5v (basically the logic supply), with it’s switching controlled by a second 595. I wonder how this arrangement would change if I used a separate driver for each row and column. If I did it in 4 x 4 blocks, I’d need 78 74HC595 and ULN2803 pairs! I’m hoping to get away with 4 pairs for columns and 6 for rows (obviously multiplexing the shortest line each time to get the best ‘brightness’ maybe).

When you mention MOSFET options, you mean buying beefier transistor arrays, right? Could I just double-up/piggyback my ULN2803s?

Thanks for your hard work, I’ll let you know how it goes!



I've done some simple measurements with one of these 10ohm 0805 resistors, and with a 1.5v AA battery I'm getting a draw of about 180mA

But even simpler maths will show that you actually have a current of 150mA (it's called Ohm's law).

When you mention MOSFET options, you mean buying beefier transistor arrays, right?

No MOSFETS are a completely different device. I used them in this project to drive my 8 X 8 matrix. You can do the same just replace the LEDs with resistors and omit the switches and diodes.

Yes, you could make the array wider & deeper to use less drivers. In that case I would go with P-channel mosfets along the top, such as and you could stay with ULN2803 for the sides as long as you don't turn on too many colums at once. Or if you do, then go with N-channel MOSFETs down the sides for better current handling. Still need an output bit per row & column, shift register is good because it allows latching of the state.

The ULN2803 COM is not used in this application - just the input pin, the NPN transistor collector, and the shared ground pin. The COM pin is for when you are driving inductive loads to give the EMF back current someplace to go (created by the inductor when current flow stops). You could double up the drivers for more current sink capability.

27 x 46, you still need 4 shift register (4x8=32) & 6 shift register (6x8=48) to control the individual bits, with a driver for each row & column. "multiplexing the shortest line each time " I don't follow that. Do you want individual element control or not?

Well I had a tinker and finally started to understand how this thing works!

I had doubts about CrossRoads’ design until I added the current-limiting resistors and, bingo, it worked. Brilliant!

I also split the rows and columns through separate drivers, which seemed to work okay too. There was a tiny bit of ‘leakage’ across the unused heating resistors on the selected column, but it was negligable. If I have any concerns now, I would list them as follows:

  1. Get more power in (so I need to go MOSFET shopping) and
  2. Find a way or reducing (or managing) the heat from the current-limiting resistors on the column driver

Those current-limiting resistors got pretty hot (I’m guessing around 50C, too hot to keep a finger on at least) and started to whiff a bit. I tried higher values, but of course that blocked the current from getting to the ‘heaters’, I didn’t dare try any lower values. I was using wire-wound through-hole types in my tests today, maybe I can get some with a higher power handling capacity.

I did a quick’n’dirty 8x8 test board with the SMDs a couple of days ago, though I’ll have to find a better hook-up wire for the columns as I had a hard time getting my thick wire to bridge properly. Hopefully it’s attached to this post.

@CrossRoads - You queried the line where I was thinking about how best to multiplex my long array. Should I go for short rows down or long columns across?
@Grumpy Mike - Cracking looking Monome clone, and thanks for the tranny info. Got any tunes online?

Thanks again for all your help.



Where your current limit resistors along the top are already too hot, I would go with limiting the number of elements in each [sorry, each column]. Make the rows as long as you want if you will be limiting the number of columns turned on. Replacing the current limit resistors with P-Mosfets will help.

That is very compact.

I’m back…

Had my MOSFETs delivered this morning so I did a quick 3x3 mockup to test on the rig I patched into VB last night.

Patching it straight into my VB’d breadboard (pictured) caused the Arduino to reset (as I suspected it might). Previously I had hand-switched the channels on a breadboard using the Arduino board purely as a 5v power source. The power lamp would dim slightly as I connected the resistor array, and the green lamp (on pin 13) would blink as I disconnected it, so I knew something was up!

With the MOSFETS on my columns the selection is now inverted! Where I used to use say, ‘101’ to pick the central column, now I just use ‘010’. Is that right? At least they don’t overheat now!

There’s a bit of ‘bleed’ to neighboring resistors, but as it’s an art thing I’m not too fussed at the moment. The big problem for me is decoupling the supply so that I can use the Arduino’s logic to do the switching.

I’m aware that if I wanted to use a higher voltage supply, I’d add an NPN to feed the MOSFET (scribble attached) but I don’t need any more power, and I’d really like to have only one supply going to the whole thing.

Any ideas?



Where I used to use say, '101' to pick the central column, now I just use '010'. Is that right?

Yes if you have that sketch implemented, high on the output turns the NPN transistor on. This puts the gate of the FET to ground which in turn switches it on and allows current to flow through it. If you have not got the NPN transistor and are connecting the output of the arduino directly to the FET then it looks like you have N-channel FETs instead of P-channel ones.

Out of desperation to get the thing working, I did try the NPNs as per my sketch and used a separate battery supply for the resistor matrix. It does seem to work now, though I really need a single supply fix. I tried a higher supply voltage to avoid the brown-outs, but even though I stopped the Arduino from resetting I still found the shift registers halted while the matrix was connected. Drat!

Yes Grumpy, the column MOSFETs are the TPC6108s as per your project (you can just see them peeking out from the top of the black thermochromic film in one of the photos). They're switched by the 595 shift registers. They're nice and small, don't get hot, and didn't cost the earth.

Really need to figure this supply out...



Where are you located? I thought I posted a link to a 5V, 4A supply that would do the trick for you nicely. , $7

Ah, nice one CrossRoads!

I'm UK-based, but I'm sure I can get myself something similar fairly easily. So, as long as the amps are high enough (>2.5A?) my board won't brown-out?

Sounds too good to be true, but all the advice I've had so far has been solid so I'm not arguing. This'll slash my component count too, as I won't have to use my NPNs on the final board. Fingers crossed.



Thomas, Update your profile to show location, you'll get better suggestions for sources that way.

You could also use seperate sources while you figure out your current needs.


I've ordered a local supply to your spec, will try it in a day or two.

Thanks again,