Goal is to either sense foot positions, or foot movement, across a large flat pad. This is a prototype to test the concepts below, designed for the STM32F3 Discovery board (in particular due to its [excellent Rust support](https://docs.rust-embedded.org/discovery/f3discovery/)). METHODS ======= Method 1a: Piezoelectric sensing of foot presses --------- Foot presses create mechanical waves. Piezoelectrics can turn these waves into voltages for sensing. Place an array of piezoelectrics along the border of the platform and you can triangulate foot stomps Method 1b: Surface acoustic waves --------- Use a piezoelectric device to insert an acoustic wave onto the pad, and an array of piezos to detect its phase/amplitude at locations along the border. Pressure differences from standing feet will affect the phase/amplitude, and you can create a pressure map of the surface. See: Method 2a: Capacitive displacement sensing --------- Two parallel conductive plates form a capacitor. If pressure on the top plate deforms it, that changes the capacitance. Measure this and triangulate it to find foot locations. This is sort of like turning the pad into a giant microphone, but with triangulation. See: WORK SO FAR =========== Method 1a is demonstrated. It works on rigid surfaces. See [itm-on-table-drop-30lb-halfway-through.wav](doc/data/itm-on-table-drop-30lb-halfway-through.wav): this was achieved using 181.5 clock single-ended ADC sampling with delay(1) between each sample with no external amplification. The piezo was held in place using an empty water glass. On pad: [itm-on-pad-heavy-hit-halfway-through.wav](doc/data/itm-on-pad-heavy-hit-halfway-through.wav) demonstrates the same setup on a Polish pad on carpet but with a full glass of water. [itm-on-pad-tape-big-hit-4clock-1024buffer.wav](doc/data/itm-on-pad-tape-big-hit-4clock-1024buffer.wav) and [itm-on-pad-tape-big-hit-4clock-1024buffer.png](doc/data/itm-on-pad-tape-big-hit-4clock-1024buffer.png) shows what we get with a BIG stomp if the sensor is taped to a pad it's really hard to get. Tried using flat piezos and the L-shaped ones, both behave similarly. Really difficult to get reliable waves. Try: - Differential ADC mode - Add an op-amp - Try using the mic line-in on my computer - Get a USB ADC to prove the concept - Borrow UW's oscilloscope - Buy a cheapo scope? [itm-sandwich-51medianfilt.png](doc/data/itm-sandwich-51medianfilt.png) shows results after taping a piezo to a flat surface, loosely setting an acryllic plate on top of it, and then tapping the plate moderately. There is median filtering on the device side, plus additional filtering on the PC side. Median filter seems to be key. Even without the plate, the device can _detect_ stomps from 4-5 inches away, though not quite as cleanly. Placing the piezo such that half of it is in air seems to help detection. I suspect if the whole platform is oscillating, I want the other end of the piezo somewhere that's more fixed, in order to detect the oscillation of the platform itself. Alternatively, I believe a longer piezo element attached all to the surface could help. A smaller element should still receive everything, but the high frequencies are attenuated. Perhaps then, a HPF could be installed to mitigate this attenuation? Could also try replacing the device-side median filter with a more tuned filter (HPF) [itm-pad-drop-weight-3in-away-covered-tape.png](doc/data/itm-pad-drop-weight-3in-away-covered-tape.png): shows clear signal dropping a 30lb weight near the sensor, even when the sensor is fully attached to the pad. Whole signal is about 5 ms. 51-median filt device side 5000-sample DC removal PC side timescale is accurate Resources (acoustic touch screen): - https://www.youtube.com/watch?v=ZoAslMiukAQ Turning a chalk board into a touch screen using an accelerometer. Requires calibration: I think it works using just one accelerometer by correlating the input against specific waveforms recorded for tapping in specific areas. Because of the reflections from the edges of the surface, it's able to work with just one sensor. - https://www.elotouch.com/touchscreen-components/catalog-product-view-id-82.html off-the-shelf SAW touchscreens (for sale?) - shows how SAW touch screen works (it's like I thought: transmit -> interfere (from finger) -> receive Resources (using Piezos) - https://www.element14.com/community/community/arduino/blog/2014/12/07/tis-the-season-for-arduino Awful, but a video showing that sensing via table vibration IS doable. Also, shows scope waveform but without any scale.