Bouw een slimme voetzool voor nauwkeurige monitoring van voetdrukverdeling
Onderdelen en benodigdheden
| Arduino MKR1000 (of een vergelijkbaar 3,3 V/5 V bord met Wi-Fi) | 1 |
| Krachtgevoelige weerstanden (FSR) – Interlink model 402 (100 N) | 3 |
| OpenBuilds draadkabel (per meter) | 1 |
| Weerstand 10 kΩ | 3 |
| Powerbank | 1 |
| SparkFun ADXL345 driedimensionale versnellingsmeter | 1 |
Benodigde tools en machines
- Solderbout (met soldeer, krimpkousen en accessoires)
Apps en online diensten
- Thinger.io platform
- Arduino IDE
Over dit project
Drukmeting wordt al in diverse situaties toegepast. Het biedt inzicht in loopmechaniek en heeft toepassingen in zowel klinische omstandigheden als sport. In dit project worden sensoren gebruikt om gewichtsverdeling in kaart te brengen. Realtime visualisatie van drukverdeling is opgenomen omdat dit de interpretatie van de data sterk vergemakkelijkt.
Benodigde hardware
- Arduino MKR1000 – De meeste 3,3 V of 5 V borden met Wi-Fi zijn geschikt, maar ESP-borden worden afgeraden omdat ze tijdens de ontwikkeling onnauwkeurige metingen gaven.
- Krachtgevoelige weerstanden (FSR) – 3 stuks Interlink 402 (100 N). Meer FSR's verbeteren de nauwkeurigheid.
- 10 kΩ weerstanden – Pas de weerstand aan om het meetbereik te schalen. Hogere weerstanden geven grovere stappen.
- Versnellingsmeter ADXL345 (16G) – Meet versnelling en beweging van de voet. Optioneel, maar nuttig voor ganganalyse.
- Solderbout – Alligatorklemmen werken niet betrouwbaar in een schoen.
Aansluitschema
Belangrijke opmerkingen over de schakeling:
- FSR's: Wees extreem voorzichtig bij het solderen. Het plastic smelt snel; soldeer heel kort. Er is geen polariteit, dus plus/minus speelt geen rol.
- Weerstanden: Door de 10 kΩ weerstanden te veranderen schaal je de uitgang naar het gewenste bereik.
- Massa/5 V: Alle sensoren zijn aangesloten op de 5 V lijn en de gemeenschappelijke ground.
- Versnellingsmeter: Optioneel. Laat hem weg als je alleen druk wilt meten.
Hardware bevestigen aan de voetzool
Test de code eerst voordat je de hardware permanent bevestigt. Zo ontdek je solderfouten voordat je de zool in de schoen plaatst.
De drie FSR's worden op strategische punten geplaatst:
- Boven-links: meet eversie (buitenkant voet)
- Boven-rechts: meet inversie (binnenzijde voet)
- Hiel: meet hieldruk
De optimale positie is waar de analoge waarde het meest verandert tijdens lopen. Gebruik tape om draden te fixeren – beweging veroorzaakt ruis. Klettband aan de onderzijde houdt de voetzool op zijn plaats. De versnellingsmeter (indien gebruikt) wordt met dubbelzijdige tape aan de hiel van de schoen bevestigd.
Krachten meten
De code gebruikt de Thinger.io bibliotheek voor Wi-Fi communicatie en datavisualisatie. Hieronder de kernonderdelen.
Codestructuur – Header en variabelen
#define _DEBUG_ // Schakelt Serial Monitor in
#include <WiFi101.h>
#include <ThingerWifi101.h>
#include <Wire.h> // Versnellingsmeter
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>
#include <Adafruit_NeoPixel.h>
#define USERNAME "jouwGebruikersnaam"
#define DEVICE_ID "jouwDeviceID"
#define DEVICE_CREDENTIAL "jouwDeviceCredential"
#define SSID "jouwSSID"
#define SSID_PASSWORD "jouwWachtwoord"
// FSR sensoren
#define noFSRs 3
#define FSR1 A1
#define FSR2 A2
#define FSR3 A3
float fsrVoltageArray[3];
float fsrForceArray[3];
float fsrWeightInGramsArray[3];
int pinArray[3] = {FSR1, FSR2, FSR3};
float forceMaxArray[3] = {100.0, 100.0, 100.0};
float million = 1000000.0;
float conversionToKgrams = 1.0/9.80665;
long K = 1000;
long R = 10*K; // 10 kΩ
long Vcc = 5000; // 5 V = 5000 mV
float voltageMax = 0.98 * Vcc; // 95% van Vcc
ThingerWifi101 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);
Setup en Hoofdloop
Alle logica staat in setup(). De loop() roept alleen thing.handle() aan – Thinger.io vereist dit.
void setup(void) {
Serial.begin(115200);
thing.add_wifi(SSID, SSID_PASSWORD);
// FSR "pressure" – ruwe analoge waarden
thing["pressure"] >> [](pson & out) {
out["FSR1"] = analogRead(FSR1);
out["FSR2"] = analogRead(FSR2);
out["FSR3"] = analogRead(FSR3);
};
// FSR "voltage" – omrekenen naar millivolt
thing["voltage"] >> [](pson & out) {
for (int FSR = 0; FSR < noFSRs; FSR++) {
fsrVoltageArray[FSR] = 0.0;
fsrForceArray[FSR] = 0.0;
int fsrPin = pinArray[FSR];
int fsrReading = analogRead(fsrPin);
fsrVoltageArray[FSR] = (float) map(fsrReading, 0, 1023, 0, 5000);
}
out["FSR1voltage"] = fsrVoltageArray[0];
out["FSR2voltage"] = fsrVoltageArray[1];
out["FSR3voltage"] = fsrVoltageArray[2];
};
// FSR "newton" – spanningsomrekening naar kracht (N)
thing["newton"] >> [](pson & out) {
for (int FSR = 0; FSR < noFSRs; FSR++) {
float force_value = (forceMaxArray[FSR]/voltageMax) * fsrVoltageArray[FSR];
if (fsrVoltageArray[FSR] < voltageMax) {
if (force_value <= 1.00) {
fsrForceArray[FSR] = 0.0; // Ruisonderdrukking
} else {
fsrForceArray[FSR] = log10(force_value); // Logaritmische schaling
}
} else {
fsrForceArray[FSR] = log10(forceMaxArray[FSR]); // Afkapping bij te hoge spanning
}
}
out["FSR1newton"] = fsrForceArray[0];
out["FSR2newton"] = fsrForceArray[1];
out["FSR3newton"] = fsrForceArray[2];
};
// FSR "weight" – kracht omrekenen naar gewicht (gram)
thing["weight"] >> [](pson & out) {
for (int FSR = 0; FSR < noFSRs; FSR++) {
fsrWeightInGramsArray[FSR] = fsrForceArray[FSR] * conversionToKgrams * 1000.0;
}
out["FSR1weight"] = fsrWeightInGramsArray[0];
out["FSR2weight"] = fsrWeightInGramsArray[1];
out["FSR3weight"] = fsrWeightInGramsArray[2];
};
}
void loop(void) {
thing.handle();
}
Versnelling meten (ADXL345)
De versnellingsmeter is optioneel, maar waardevol voor gangcyclusanalyse. De code initialiseert de sensor en stuurt x, y, z waarden (in m/s²) naar Thinger.io.
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
int x = 0, y = 0, z = 0;
void setup(void) {
Serial.begin(115200);
if(!accel.begin()) {
Serial.println("Geen ADXL345 gedetecteerd");
} else {
accel.setRange(ADXL345_RANGE_16_G);
thing["accelerometer"] >> [](pson& out) {
sensors_event_t event;
accel.getEvent(&event);
out["x"] = event.acceleration.x;
out["y"] = event.acceleration.y;
out["z"] = event.acceleration.z;
};
}
// ... FSR definities hier ...
}
Alles samenvoegen
De complete, werkende code vind je aan het einde van deze tutorial. Zorg dat je het Thinger.io dashboard correct configureert om de drie drukwaarden, de berekende krachten en gewichten, en optioneel de versnellingsdata te visualiseren.
Veelgestelde vragen (FAQ)
- Niets gebeurt! Controleer bedrading, schakel
#define _DEBUG_in, controleer TLS-instellingen en Thinger.io verbinding. - Onverwachte uitvoer – Staat alle code in een "thing"? Code buiten "things" wordt niet geüpdatet. ESP-borden werken slecht met FSR's.
- Data ververst niet regelmatig – Verwijder
delay()calls. Stel verversinterval in op Thinger.io dashboard. - Alles in één grafiek – Combineer alle berekeningen in één "thing".
Gefeliciteerd!
Je hebt nu een werkende slimme voetzool die voetdrukverdeling in realtime meet en visualiseert. Experimenteer met meer FSR's voor hogere resolutie, of integreer de data in loopanalyse-applicaties. Deel jouw verbeteringen en creaties!
Complete code
De volledige, gecombineerde sketch (inclusief versnellingsmeter) is beschikbaar als download: Smart-Insole-Tutorial.ino.
Schema
Productieproces
- Slimme Barman: Bouw Je Eigen Raspberry Pi-Cocktailstation
- Bouw een 20 kHz Arduino Oscilloscoop op een Nokia 5110 LCD – Eenvoudige DIY Handleiding
- Precisie Reactietijd Test met Arduino UNO
- Waarom de Waterpomp van Uw Huis Sufferd: Veelvoorkomende Oorzaken & Oplossingen
- Kwartaallijkse toeleveringsketengezondheidscheck: Zorg voor soepel operaties
- Drukverlies in uw gecomprimeerd luchtsysteem minimaliseren
- ABB lanceert slimme sensor voor lagerbewaking en downtime-reductie
- Slimme Huis Evolutie: Wat de Toekomst Inhoudt voor Verbonden Leven
- Maximaliseer ROI op uw IoT-investeringen: Een praktische gids
- Building Management Systems: Slimme steden aandrijven met IoT
- Efficiënt Python-objectgeheugen meten met sys.getsizeof()