Touch Sensors - Enabling fingery pokery

Scalable capacitive touch sensing, presented in Circuit Cellar #234


 

Bluetouch 20 channel touch sensor device. The Bluetooth DIP module can be seen on the top. The blue connector on the left shows how sensor lines attach to the 0.1" pins visible on the edges of the sensor board. Underneath the sensor board is the dsPIC33FJ128GP706 controller board. The bottom board houses the battery management hardware and a lithium battery. Thanks to Jessica Froude for taking the photo.

I lashed together five of these devices to create 100 channels of touch sensor. These were incorporated into a keyboard built by Florian Block for his PhD. This can be seen in the YouTube video which Florian made below. Florian did all of the projector programming and implementation. You can see the hardware that I built flashing on the bottom of the keyboard each time that a key triggers.

Touch-Display Keyboard


Full details of this project are published in Circuit Cellar January 2010, issue 234. Full schematics and source code are available from their ftp site. The article even got its own design on the front cover!

Due to popular demand, Hardware Lab Enterprises are proud to present multi-channel touch sensors. I was tasked to 'enhance surfaces with touch capability'. I developed 20 channel touch sensor boards using the QT1103 IC made by Qprox, now a subsidiary of Atmel. The link to the device homepage is here. Basically, the device works by magic and allows you to detect when someone touches a pad, wire or surface. Details of how it really works are best explained on p7 of the QST104 touch sensor manual here .This IC was a predecessor of the QT1103 but the explanation of the underlying physics is better. Shame on you Qprox for 'dumbing down' your datasheets! But praise to you Qprox for bringing out a smaller, more functional IC.

In all honesty, I copied the example circuit in the datasheet. Which is an honorable approach to Engineering. Who am I to question the manufacturer's circuit design? The chip can be controlled via two wires - one signals a change of state, the other spits out the status of all ten channels in two bytes after receiving a control code from the microcontroller. Note, the communication is all in standard UART, but send and receive can take place on the same wire. This is not the 'one-wire' protocol from Maxim - it is UART, using just 'one wire'. A subtle semantic difference - but trust me, that can cost a few days of using the wrong software library!

 Close up of the sensor board. The QT1103 chips are the two black squares.

All code was in Mikroe C, using the Mikroelektronika dsPIC compiler. I recycled a bunch of Cube boards to get the first device working, as I knew those boards worked. That way I only had the one new touch sensor board to doubt. Doubt I did! 'When all you have is a hammer, every problem looks like a nail'. So when it didn't work, having an expanding collection of soldering irons, I doubted my soldering. Turned out that I had copied an error from the compiler's manual into the fimware! It took one of the computer science PhD students about 10 seconds to point out my incorrect pointer call error, which sent the device into convolutions each time I repowered the device. I did email this information to the manufacturer. So I got it all working! Hurrah! I cobbled a Bluetooth DIP module on to the communications board, as that's what the customer wanted.

For Florian's keyboard I had to lash five of the twenty channel boards together to make a 100 channel confabulator. Hurrah! Soldering QFN packages by hand. Lovely. I am exeprimenting using a clothes iron for surface mount after seeing impressive results on You Tube videos. Hopefully the department will allow me to order a small oven. Otherwise I will go even more insane.

Naturally, the week after I finished this project a much easier way to implement touch sensors came out, which I have moved to - mTouch.