Punch / vibration sensor

Hi guys ! I've been working on a little device that measure your reaction speed. Basically it's: when the led lights up, you punch on a pad and the time between these 2 is your reaction time. I've been using this sensor, but the problem is that it always end up, after some time, to have problems. I was wondering if you know any other sensors that could work great for my project ? The sensor if behind a pad like this

Thanks !

Piezo tap flashes a led.

Piezo lights led longer, less bright flash.

If the led is red or IR and you have an IR detector (does not see visible light) it may detect a pad with the piezo-led circuit when hit.

Your Arduino pins stay safe from hard strike making voltage spikes, it only sees the led flash.

Red leds make lots or IR, look at one with a digital camera and it should appear white, no red.

You could also embed 2 layers of foil with non-static foam between. Normally the foam is high resistance but when compressed the resistance drops greatly. That constitutes a switch that can be read as digital.

I've tested piezo sensor like the one with the led in the video with a basic circuit like this. But I haven't been able to get something consistante.

Can you connect the led wires directly to the piezo, no connection to the Arduino, and get the led to flash? You can detect that safely, no need for the charge-bleeding resistor.

Or connect the piezo to one side of an opto-isolator and the Arduino to the other?

Those take a good tap directly on the bare disk (the disk you showed has a plastic buzzer shell) to flash a led.

I have amplified a piezo disk with 2 BJ transistors and 4 diodes to detect touch and release. The piezo leads switch polarity going from press to release. To each lead attach a diode pointing to the lead from ground. To each lead also attach a diode pointing out directly to the Base pin of a BJ transistor. To each transistor Collector connect a wire to 5V (I put a 2.2K resistor in the line but you don't have to.) and then connect the Emitter pin of each transistor to a different Arduino digital pin without any pulldown. Even very light touch caused the transistor on the 'press' lead to load the wire from the Emitter to the pin with a charge that took the pin HIGH. I used a digital read loop to count how many reads it took to empty the charge down to LOW and that was my piezo tap strength analog. Letting up on the disk made the same thing happen on the other pin, giving me press and release data. That circuit worked without breaking even when I smacked the piezo disk hard with the butt of a screwdriver handle, and I am a big guy with Popeye forearms. I literally tested two 13mm piezo disks to destruction and still no damage to diodes or transistors or the Uno.

BUT ----

There is another direction you may try, capacitive sensing. You will probably have to spend a good bit of time tuning the sensor. IIRC higher values for R need hand close to register at all and the numbers jump on touch of paper over foil for me. You would have to line the inside of the front of the pad with a conductive surface such as foil. It's tricky but when it works it works.

You could try using an electret microphone and amplifier to let the Arduino hear the sound of the strike. Problem is that a yell would also trigger the mic.

The thin conductive foam between foil sandwich may be your best bet. Any hit would make a short between the foil layers.

I'm going to test the piezo and the led, but why was I reading something with no constancy ? Would the amplifier correct this ?

Get a phototransistor to detect the led flash. Wire the phototransistor to the Arduino. See if you can detect the flash.

Or get an optoisolator And connect the piezo disk (bare disk, no buzzer-cover) to one side and Arduino to the other. Optoisolator has inside a led and a detector very close.