J-shoes are biofeedback shoes that track and analyze weight distribution between the user’s feet.
When the pressure difference between both feet is below an accepted predetermined value, nothing happens. If however, the pressure difference between the feet goes above the accepted value for more than a given amount of time the shoes vibrate to remind the wearer to stand correctly.
Each shoe has four pressure sensors in the sole. Two are in the front and two under the heel. In order to make sure Julian is standing correctly, and that both of his feet are flat on the ground, the front sensors on both feet are compared to each other and the sensors in the heel side of both feet are compared. Their values should be as similar as possible to each other.
Each shoe has its own micro-controller. As a prototype I am using Arduino Micros. The right shoe is the main controller. It receives readings from the left foot’s sensors and compares them with it’s own current right foot values. While the two sets of values remain within an acceptable difference of each other, nothing happens. If either of the set’s values go above the acceptable difference, for a given amount of time, the right shoe instructs the left shoe to vibrate.
The shoes communicate with each other via Bluetooth. The left foot has one Bluetooth module (HC-05) which communicates with the right foot. The right foot has two Bluetooth modules. One of them communicating with the left foot and the other Bluetooth module communicates with the phone app.
The right shoe transmits values to, and receives settings from, an android app. The right shoe transmits all of the pressure sensor readings to the phone to be displayed. The phone is also sent the percentage difference between the two sets of sensors.
The phone app not only receives data from the shoes, it also controls them. There are two sliders on the app that permit the modification of settings within the shoes.
The first slider adjusts the Acceptable Percentage Difference to be allowed between either set of sensor groups. The acceptable rangers for the permitted percentage difference can be set to any number between 10% to 50%. This means that either foot can be anywhere between 10% to 50% different in pressure on any of the groups of sensors. Setting it to ’50%’, for example, would mean either foot can be twice is heavy as the other for nothing to happen.
With the Seconds Permitted slider setting, the phone tells the microcontroller how long the previously mentioned acceptable percentage difference is allowed to be exceeded before the vibrate signal is transmitted to Julians left shoe. For example if the permitted leniency time is set to 20 seconds, and the acceptable percentage difference on either foot is exceeded for 20 seconds, the vibrate signal will be given—reminding Julian to put his feet down flat.
The circuit layout, on the current prototype, is identical for both shoes. The only difference is that the right shoe has two switches instead of one. The main circuits are switched on for both the right foot on the left foot first. Once the two shoes Bluetooth modules have paired together, the switch for the Bluetooth component which communicate with the phone is then switched on.
These shoes are absolutely the coolest! Apart from their behemoth size…there are quite a few things that need to be addressed.
The biggest problem with the shoes is the Arduinos inability to multitask. Meaning that the controllers can't handle the data throughput needed to get the job done properly. Especially, in the right foot which has four pressure sensors to read and simultaneously needs to communicate with both the left foot and the Android app (recipe for disaster!) They work however albeit a bit 'hiccupy'.
The other minor detail with this version of the prototype is that they are currently coded to address only Julian’s limitations. But this is a minor change to future codes when I can give them to other kids working on their standing/weight-bearing challenges.