This design was done to get a sealed keypad for very wet environments (in my particular case, showers for swimming pools). The keypad needed to be able to detect slight pressure on a stainless steel plate 0.4 mm thick. Apart from water protection, the solution offers an esthetical finish, as the user side is absolutely flat, with nothing visible other than the silkscreened print. Another advantage of this type of keypad is that it is vandal-proof.
The core of the sensor is a piezoelectric disc, the type normally used as a buzzer. I chose the Murata 7BB-35-3. With 35 mm of external diameter, it allows a sensitive area of about 20 mm diameter.
|Figure 1.||PCB layout & cutouts.|
The discs are placed on the PCB, which contains the electronics and has circular holes to allow the ceramic to move freely (Figure 1). They are fixed on the PCB by a layer of self-adhesive rubber foam (EPDM) 3 mm thick (Figure 2), though a thinner rubber layer will provide more sensitivity. The assembly has to be clamped against the front plate with a reasonable pressure.
|Figure 2.||Cross-section of piezo button assembly.|
When the finger touches the external plate, the steel (or other material) is slightly deformed and a small increase in pressure is transmitted through the rubber to the piezoelectric disc. This is enough to produce a voltage that is detected by the microprocessor. The processor then uses all the discs as buzzers and sends an acknowledging beep.
The smaller electrodes of the piezoelectric discs are connected to the ADC inputs of the microcontroller, and to the positive supply via a high value resistor. They are connected also to other port inputs (P7), which start at high impedance state. The other electrodes of the discs (the bigger ones) are connected together to several port bits in parallel (P3) to get low impedance (Figure 3). If you lack ports and have enough output current, this is not necessary. These ports start at a low level. When a disc is slightly deformed by finger pressure, the voltage to the ADC inputs drops.
|Figure 3.||Piezo keypad/beeper schematic.|
At startup, P3 = L and P7 = H to quickly charge the piezoelectric discs, whose capacitance is about 30 nF. Then, after some tenths of microseconds, P7 is set to a high impedance input.
The program continuously scans the ADC inputs. Because the discs have a high capacitance, the voltage changes very slowly, and a fast scan frequency is not required. In my specific application, there was a voltage measurement every 1 ms, so each disc was checked every 4 ms.
When an input voltage drops below a preset level due to a button press, the controller processes the input, and then uses all the discs in parallel as buzzers. With a steel plate 0.4 mm thick, a threshold 1.5 V below the 5 V supply was enough to get good sensitivity; if a thicker front plate is used, there is lots of margin to increase the sensitivity.
To beep, P7 is set to low impedance output and with P3 in opposed polarity, they output a square wave at the resonant frequency of the piezoelectric discs (2800 Hz in this case).The beep sounds for 250 ms. R5 limits the drive current. After the beep, P3 returns to 0, and P7 is again momentarily set to 5 V to charge the discs.
The use of piezoelectric diaphragms not only provides a very effective solution but also a very cheap one.