I’ve been thinking about pressure sensing for the ABSS project, and I’ve been considering using force sensing resistors (FSRs). These specialized thin-film polymer sensors are great for measuring compressive forces and can be used with a flexible substrate with some care. However, there are some problems with this approach. Firstly, there aren’t many manufacturers to choose from, and the available sizes and force limits are very limited. I found a few manufacturers that work in the footwear and sports performance industries, but I would still be limited to discrete sensors. Their design services for building a custom sensor array would be too expensive.
Then, I wrote a story about an electronic DIY marimba for Hackaday. This fab lab project utilised multiple DIY force sensors constructed from a simple copper electrode pattern and a graphite-coated moveable layer. I could do this myself, with the equipment and materials already in my workshop, and I could experiment with some thoughts I have been having about utilising differential force sensing. More on that later.
Making a pressure sensor
The marimbatron project utilised custom-made flexible PCBs for the final implementation. Still, for initial testing, sensors were constructed by hand using a standard vinyl cutter machine working with copper foil. The first step was to make some electrode designs in Inkscape and set up the vinyl cutter to produce them.
A single pair of electrodes in contact with the graphite layer would result in a rather high resistance due to the high resistivity of a graphite sheet. This is compounded due to a lack of access to the ideal material, being forced to substitute a graphite spray. This still has a measurable resistivity, but it is pretty high. To mitigate this, multiple fingers or other interlocking patterns can be used. I made a simple shape with six finger pairs spaced over approximately 60mm. The vinyl cutter could easily make these shapes with excellent quality, and I could reproduce these in copper and take some measurements.
The chosen graphite spray was ‘Graphit-33’ from Kontact-Chemi.
The Vinyl Cutter
The vinyl cutter used was a Chinese clone of the Refine 361 cutter. I bought this on Gumtree for very little. There aren’t a lot of settings to tweak beyond the cutting pressure and speed. The initial knife height is also adjustable via the knurled knob at the top of the knife holder.
By some experimentation, cutting through the copper tape needed a force of only 50g at a speed of 10mm/s. There’s no benefit to going faster, and more force cuts the Kapton as well, making weeding harder. For cutting mylar shapes, I needed to increase the force to 300g. However, my mylar sheet was quite thick, or maybe my knife was too dull.
An Inkscape Warning
An important point regarding Inkscape became painfully obvious: that of the path connectivity and direction. When using the Inkscape ‘Plot’ extension to drive the Vinyl cutter, you must ensure the path directions are aligned in a continuous loop. As you form a shape, it is easy to end up with reversed segments during normal editing. In Inkscape, you can visualise path direction by enabling the direction arrows in the preferences by searching for the ‘show path direction on outlines.’ When you visually trace an outline, as if the machine was cutting it, arrows pointing the wrong way stand out. You can correct the segment with the path>reverse menu.
First results in copper
I started with a substrate of mylar OHP sheet, with Kapton tape placed on top. I only had narrow 15mm tape to hand, so I needed to line up several pieces side-by-side. This is definitely not ideal, but it works well enough. On top of this, I stuck a single piece of 80mm wide copper tape. The assembly was smoothed down with a fibre cloth and polished up as best I could to give an even, wrinkle-free finish. This assembly was stuck down to a vinyl cutter ‘sticky mat’ of ‘standard’ stickiness and loaded into the cutter. The Kapton tape was necessary because the adhesive on the copper tape was so strong that when stuck directly to the mylar sheet, it was impossible to ‘weed out’ the cut portions of the copper to reveal the pattern!
Perhaps my knife blade is a little dull, making some of the edges a little rough. Other than that, the results are quite usable for a few ballpark measurements.
The graphite disk layer was created by sticking some tape to a second mylar sheet. I cut out a circle from the tape and applied two layers of graphite spray. Once this was dry, the tape was removed. The edge looks a little rough due to the solvent in the spray leaking under the edges of the tape by capillary action. I don’t think this is to be an issue.
First measurements of the sensor
After making several connections, a quick test showed that a nice low resistance could be measured. Around 100Ω is quite a usable value for an analogue sensor. I figured that for testing, the contact shape would affect the measurements significantly. The solution is to create a “force concentrator puck”, which spreads the total force across the full size of the contact shape. These pucks will be critically important to achieving reproducible measurements for our application. A simple flat cylinder 3D printed with PETG was stuck down to the top sheet using double-sided adhesive tape.
Adding some more anatomical details
My aim is to create a single-sheet sensor array with the minimum number of discrete sensor elements needed to detect the shift in foot pressures indicative of an ankle roll. Initial thoughts were to measure both normal (vertical to the ground) and orthogonal (sideways) force components and determine the ankle angle from there. The issue is with that second measurement: determining the force sideways at the ankle inside a shoe. This would mean some kind of expanding band sensor pressed against the side of the foot. Whilst expanding force sensors exist, they’re even more expensive than compressive FSRs. Also, I just can’t imagine how to construct such a thing, nor do I expect it to be a comfortable thing to wear. The aim is to create footwear that supports, not distracts.
It would be better to try to do everything inside the sole from multiple force measurements across the sole. I believe is possible and worth some experiments. The first task is to get a foot model. Since I don’t have any special foot scanning equipment or even a generic 3D scanner, I devised a simpler way to proceed.
Making a model of my foot
Using a normal consumer optical flatbed scanner (the kind used for document scanning) and a cardboard box, I constructed a rudimentary foot scanner. I cut a hole in the top of the box, large enough to get my foot through, and placed the scanner inside the box. My left foot was ‘jacked up’ with some wood, so I was still standing level. The gap in the box around my leg was blocked off with a small towel to keep all the ambient light outside the box, and the main room lights were dimmed. The resulting optical scan came out just fine.
After a few tries, I found that I could control the amount of pressure on the glass plate of the scanner to not damage it but enough to visualise where the skin on my sole was flattening due to the concentration of pressure. This is made more visible by switching to a false-colour map (I used the ‘alien’ map colour filter in Gimp), which can be seen in the right-hand image. This is not measuring the height of the foot from the glass plate directly but is a simple consequence of the squared power law of light. The further away from the light source a part of the sole is, the darker it shows. The high-pressure regions show up as regions of maximum intensity. This can be directly interpreted as a relative measure of height and thus translated into a height map and a 3D model reconstructed.
The lighter magenta areas are clearly visible and correspond to the heel, mid-section (the metatarsals) and big toe regions, which are usual for people with healthy feet. People with ‘fallen arches’ will have a different pressure distribution. Note: the diagonal orientation was necessary; my UK size 11 foot is longer than the A4 scanner, but it fits nicely with this orientation!
All the proceeding work is done by working with flat images derived as above. First, I pulled the false-colour image into Inkscape as a reference bitmap and set it to highlight the three pressure regions using the trace option. This was not particularly scientific, just done by eye to match the area of the skin flattening. This likely represents the higher-pressure regions and where we will be concentrating. The left-hand image I refer to as my ‘pucks’ layer. This is the bounding area for each section, determining the size and shape of the force concentration pucks. It also determines the sensor element shapes.
Dividing the contact points into regions
The top-right image shows where things are getting interesting. I decided to break each section into a minimum of two lateral subsections by eye, just looking at the pressure pattern image. I decided the toe is just a single pressure region, as during an ankle roll, this is likely the first area to simply be completely unloaded. The heel makes sense to me to be split into two regions and likely bears most of the contact force. From reading some sports therapy literature, during normal gaits, the ‘heel strike’ is the first event that occurs as a foot hits the ground, with a pressure transfer forward towards the toe region coming later. Even standing still, I expect most of the contact pressure to be at the heel, but I can determine this once I’ve built it!
The mid-section is broken into three regions, as it seems that a little more information can be gathered here about finer degrees of pressure transfer during the build-up to an ankle roll. This is really just a first guess at the moment, but I feel I’m on the right track. Finally, I added a connecting bar covering the lateral and middle arch regions. The pressure map showed some contact force along this region. It may not contribute to the final design, but more data is good. This defines an eight-channel sensor array with some anatomical features that I can use for basic data gathering and some experiments in angle ankle measurements. How this translates into a scheme to detect an impending ankle roll before becoming injurious is yet to be determined. This was never going to be a simple project!
Making the first dual-element sensor
To try out my idea of a differential pressure sensor, it made sense to make it more compact by using a common central electrode. This common point could just be a ground connection, with the other two sides of the sensor feeding into a typical instrumentation amplifier configuration. It could also easily be wired as two single-ended inputs, just with a common ground. This layout was simple to create in Inkscape by first rotating the mask to be orientated vertically and then working with a simple grid for electrodes as branching rectangles. The Inkscape path effects editor was then used to add a fillet to the edges. Once the shape was complete I rotated it back to the original orientation. This doesn’t help with making an individual sensor pair, but it does help drop it back into the original reference heightmap image for keeping track of the whole assembly.
Once the sensor electrode design was done, I needed to define some shapes for the different graphite layers. I decided it was simple enough to extract the outlines of all relevant shapes so I could cut them all into a single masking sheet and spray-coat the graphite layers onto the mylar substrate. Once coated, the shapes can be roughly cut to allow them to be placed over the relevant sensor and taped into place.
I tried a few methods of producing these small shapes with slots in, but the most reliable way was to use Kapton tape on a mylar sheet, spray coat it with graphite, and then peel away the Kapton with a scalpel. The spray really likes to leak under the edges, making forming the central slot tricky.
After a quick trial cut with the paper directly on the sticky mat, I was confident the outline was correct, and the cutter could be let loose on some copper. I quickly discovered another annoying glitch; my alignment marker was causing some erroneous travel moves of the knife, but it was not retracting fast enough. There were some cuts through my electrodes, easily visible when a light was shone through from behind. There were no settings in Inkscape I could find to change this behaviour, but simply removing the circular alignment marker from the design ‘fixed’ the issue.
The results were a little rough but usable, so I pressed on to assembly.
Testing the dual-element sensor
As before, some pucks were 3D printed to match the shape outlines, and wires for sensing were attached. This is the current point of progress, with budget and time both exhausted.
Modeling a Dual-force sensor
We start first with a simplistic static model, in which, instead of measuring differentially, we simply take a pair of single-ended measurements from adjacent contacts.
The pucks are centred along the X-axis like this: $x_1=0$ and $x_2 = d$ The foot centre of mass is at $x_{cm}$.
The sum of the forces on the two pucks equals the weight of the object: \[F_1 + F_2 = W\]
To determine the tilt angle, we must consider the torque about the centre of mass. The torque due to the forces $F_1$ and $F_2$ should balance out. Assuming the torques are due to the horizontal distance from the centre of mass to the contact points:
\[\tau_1 = F_1 \cdot (x_{cm} – x_1)\]
\[\tau_2 = F_2 \cdot (x_2 – x_{cm})\]
For the system to be in equilibrium, the sum of torques should be zero: $\tau_1 = \tau_2$
\[F_1 \cdot (x_{cm} – x_1) = F_2 \cdot (x_2 – x_{cm})\]
The tilt angle $\theta$ affects the positions where the forces $F_1$ and $F_2$ act. For simplicity, assume that as the object tilts, its centre of mass moves horizontally by $\Delta x$ due to the deformation of the contact points.
If the object tilts, the centre of mass will shift horizontally by $\Delta x$. We can use the measured forces to find this shift:
\[\Delta x = \frac{F_2 \cdot d}{F_1 + F_2}\]
The new position of the centre of mass:
\[x_{cm} = \frac{F_2 \cdot d}{W}\]
Assuming small angles, the horizontal shift $\Delta x$ can be related to the tilt angle $\theta$ using the geometry of the deformation at the contact points. If $h$ is the height of the object from the contact point to the centre of mass:
\[\theta \approx \tan^{-1}\left(\frac{\Delta x}{h}\right)\]
Next Steps
- Finish building the dual sensor and make some simple measurements with a few circuit types.
- Look into passivating the copper surface with some kind of plating, perhaps immersion tin.
- Build an angle testing jig with an adjustable angle to simulate a foot contact. Correlate this with an accelerometer.
- Take some longer-term measurements to identify temperature correlation effects and drift
- Evaluate whether differential measurement mode can cancel out the above effects
- Build the rest of the sensors to build a complete sole sensor array
- Construct an eight-channel datalogger.
- Develop the mathematic model a lot more, including a study into sensor fusion with an accelerometer.