Material I can print on, electrically transparent but NOT conductive?

I have a keyboard made of steel keys that are capacitive touch sensitive, and I want to put different designs over it. To do this, I need paper or fabric that is electrically transparent, but won’t conduct which would interfere with the other keys. Typical typing paper will work on most touchscreens, but for it to work on this I have to either press really hard which isn’t very practical, or turn the sensitivity way up which results in picking up electrical noise. Got anything better?

On a related note, does anyone have a good way to reduce the noise it picks up? The way it works is I wear a metal bracelet with a wire going to the base of a transistor, the emmitter of which goes to pin A0 on the Arduino, and the keys are connected to a shift register that checks each one individually and then I can ultimately get an analog reading of each key (high if I’m touching it). The problem with this is that neither a capacitor nor a resistor will work for noise reduction. Got any ideas for that?

Not every touch sensor is a capacitive sensor.
I don't know what you're using, but in general, capacitive sensors should have no problems sensing a finger through 1cm of paper/glass/plastic/etc.

I would call a bracelet-wire-emitter follower a "wideband aerial".
Where did you get the circuit from.
Leo..

I think the keyboard must be conductive touch-sensitive if you need to wear a wire bracelet.

An old TV I inherited had conductive buttons that were two half-moons facing each other. Your finger would bridge the two and it would know you pressed the button.

3M makes adhesive tape which is conductive in the Z direction (through the thickness of the tape) but not in the X-Y directions (along the tape.) I don't know how it works. It's probably not even expensive.

If you've ruled out capacitors and resistors, then an inductor might be the correct noise reduction component. I suspect that you can't get there from here and you need to re-think your keyboard idea.

Yeah I suppose my terminology isn't quite right there... Essentially it's just a button with insanely high resistance (my body) and I use a transistor to amplify it. The current goes from the shift register to whichever key it's checking, and if I'm touching it, through my body to the wideband aerial, then to the base of the transistor. The transistor is constantly getting current to its collector from the 5V pin, and the emmitter goes to the analog pin to be read (and to gnd through 20k ohm resistance).

Wawa:
Where did you get the circuit from

I created this circuit myself based on several other circuits I've seen, including general usage of the 74HC595 shift register, general usage of a transistor, analog input, digital input, and a simple speaker for tone generation.

MorganS:
3M makes adhesive tape which is conductive in the Z direction (through the thickness of the tape) but not in the X-Y directions (along the tape.) I don't know how it works. It's probably not even expensive.

If you've ruled out capacitors and resistors, then an inductor might be the correct noise reduction component. I suspect that you can't get there from here and you need to re-think your keyboard idea.

Thanks for the inductor idea and the tape; I'll look into those. I'm not giving up on it yet!

You could try using the MPR121 capacitive touch sensitive controller as here.

I have been experimenting with using an Arduino analogue input directly for a touch switch. I am sceptical whether most touch switches are genuinely detecting change in capacitance or just detecting pick up of electrical noise, mainly hum from the electricity supply frequency (i.e. 50 or 60 Hz). Anyone using an oscilloscope will have noticed how much signal is picked up if you touch its probe. I am therefore aiming to detect the presence of a finger by detecting an increase in electrical noise, not by detecting change of capacitance.

I have been using a smallish sheet of metal covered by an paper label and adhesive plastic film (as available from stationers). There is therefore no contact with the finger, only capacitive coupling through the paper and film. The metal is connected directly to the A2 pin of my Arduino Micro. The Arduino is powered by 5 volts (supplied by USB) and the metal is biased by a 1 MΩ resistor connected from A2 to the 3.3V pin. I am investigating whether a 1.8nF capacitor across this resistor helps.

With the metal biased to 3.3V, the value read by the Arduino’s analogue-to-digital convertor is expected to be close to 675 in the absence of electrical noise. My code starts with 675 but uses a modified moving average calculation to get closer to the actual average.

The electrical noise ‘power’ is derived by calculating the short-term average of the square of the deviation from the average voltage. It is expected that using the square of the deviation will be better for determining whether a finger is touching the insulated metal sheet than using the modulus of the deviation. Some other mathematical function could be used.

Using the short-term average of deviation squared, the code currently interprets over 120 as being a touch and under 60 as being a release. I am thinking of making these threshold values adaptive. If you try the code below, you may need to modify the two thresholds.

My code will send data over the USB but currently only lights the on-board LED when a finger is detected.

I require four touch keys so will use four analogue inputs. If you need more keys than available analogue inputs, you could try multiplexing using one or more analogue gates such as the CMOS 4067.

int adc ;                   // value from ADC
float average=675 ;         // initial moving average ADC value based on 3.3V
int nAverage = 100 ;        // n in modified moving average calculation of ADC reading

float deviation ;           // deviation from average
float avDeviationSq = 0 ;   // deviation squared and averaged
int nDeviation = 10 ;       // n in modified moving average calculation of deviation squared

void setup() {
  pinMode(13, OUTPUT);      // for on-board LED
  delay(2000);              // allow time for moving average to settle, probably unnecessary
}

void loop() {
  adc = analogRead(A2) ;                                         // using A2 pin
  average = ( average * (nAverage - 1) + adc ) / nAverage;       // compute modified moving average of ADC value
  
  deviation = adc - average ;
  avDeviationSq = ( avDeviationSq * (nDeviation - 1) + deviation * deviation) / nDeviation ;    // compute modified moving average of deviation squared
   
  if (avDeviationSq > 120) digitalWrite(13, HIGH);        // finger touching threshold
  if (avDeviationSq < 60 ) digitalWrite(13, LOW );        // finger release threshold
  
  delay(10);      // loop delay (ms)
}

I think the capacitive touch breakout board you linked me to will do nicely. Related to that, will transistors work on capacitive touch? Like if I have one electrode pin hooked up to the emitters of 4 transistors, and the collectors each hooked to a different electrode, and the bases to a shift register to multiplex them, could that effectively quadruple my inputs?

Squirt_5432:
I think the capacitive touch breakout board you linked me to will do nicely. Related to that, will transistors work on capacitive touch? Like if I have one electrode pin hooked up to the emitters of 4 transistors, and the collectors each hooked to a different electrode, and the bases to a shift register to multiplex them, could that effectively quadruple my inputs?

You could try multiplexing by using an analogue switch but that may confuse the complex processing that goes on within the MPR121 chip. I suggest you use more than one MPR121 breakout board.

If you wish to try 4-way multiplexing, consider using CMOS 4052 chips.

Meh.. I was kind of hoping to avoid that since I'd need at least 4 of them and would like not to spend $40 if it isn't necessary... What exactly is multiplexing with an analog switch? And if that doesn't work, how would I go about using more than one breakout board?

Squirt_5432:
Meh… I was kind of hoping to avoid that since I’d need at least 4 of them and would like not to spend $40 if it isn’t necessary… What exactly is multiplexing with an analog switch? And if that doesn’t work, how would I go about using more than one breakout board?

The CD4052BE is $0.517USD at Farnell for example.

That particular analogue switch works like a 2-gang 4-way rotary switch; two digital inputs control the position of the switch. You can use the two digital inputs to control more than one chip. It should be noted however that there is significant resistance and capacitance (to ground) when a switch is conducting. The capacitance is especially worrying if you are using it for multiplexing capacitive touch switches. I have not considered how you would use 4052 chips (or any other analogue switches) in conjunction with a MPR121 breakout board; you may need to have a negative power supply. I still think it unlikely that multiplexing touch switch inputs to a MPR121 will work satisfactorily.

The datasheet for the MPR121 chip is very challenging! I understand from Table 7 (page 24) you can set one of four I2C addresses for each chip. So you should be able to connect four MPR121 chips to an Arduino without any other components. I understand from Sparkfun’s description of the breakout board that you can select the I2C address by cutting a jumper on the board and adding a connection for the chip’s ADD pin. I expect you would have to make significant changes to the software to cater for more than one breakout board.

I have never used the breakout board but may order one soon for a project I am currently working on.

The chips the selves are less than $1, you are paying for the PCB, you can get cheap PCB from eBay making it a $2.00 per chip soloution.