自制智能鞋垫:基于 Arduino MKR1000 的足底压力分布实时监测
所需组件与物料
| 组件 | 数量 | 备注 |
|---|---|---|
| Arduino MKR1000 | 1 | 大多数 3.3V/5V 带 Wi-Fi 开发板均可,不推荐 ESP 系列(实测读数不稳) |
| 力敏电阻 (FSR) Interlink 402 | 3 | 量程 100N,也可用 406 型,增加数量可提升精度 |
| 导线 | 1 | 按英尺购买 |
| 10kΩ 电阻 | 3 | 调整分压比例以适配量程 |
| 移动电源 | 1 | |
| ADXL345 三轴加速度计模块 | 1 | 16g 量程,用于步态周期分析(可选) |
所需工具
- 电烙铁(需配焊锡、热缩管等),夹子在鞋内不可靠,必须焊接
所需应用与在线服务
- Thinger.io 物联网平台(数据上传与仪表盘可视化)
- Arduino IDE
项目简介
足底压力测广泛应用于步态分析、临床诊断与运动表现评估。本项目通过 3 个 FSR 传感器采集关键受力点数据,结合加速度计辅助步态识别,通过 Wi-Fi 实时上传至 Thinger.io 云端仪表盘可视化压力分布热力图。
硬件接线

关键提示:
- FSR 焊接极其考验技巧:塑料基材极易熔化,必须极快完成焊接,否则报废。我是吃过亏才学会的……
- FSR 无极性,随意接线。
- 分压电阻可更换以调整量程映射范围,详见 Adafruit FSR 指南。
- 所有传感器共用 5V 与 GND 总线。
- 加速度计非必需,仅用于步态周期分析,仅做压力测量可省略。
硬件固定在鞋垫上

建议先跑通代码再固定硬件,避免焊接不良需返工。三个 FSR 分别贴在鞋垫:
- 左前脚掌(测外翻)
- 右前脚掌(测内翻)
- 后跟(测跟骨压力)
最佳贴合位置需反复试走,选模拟量变化最大处。导线用胶带固定防位移干扰读数。鞋垫底部与鞋内贴魔术贴防滑。加速度计用双面胶贴在鞋后跟外侧。
力值测量与数据处理
代码大量使用数组管理三路 FSR 数据。完整代码见文末,此处解析核心逻辑:
Thinger.io 连接与数据上传结构
#define _DEBUG_
#include
#include
#include
#include
#include
#define USERNAME "yourUsername"
#define DEVICE_ID "yourDeviceID"
#define DEVICE_CREDENTIAL "yourDeviceCredential"
#define SSID "yourSSID"
#define SSID_PASSWORD "yourSSIDPassword"
#define noFSRs 3
#define FSR1 A1
#define FSR2 A2
#define FSR3 A3
float fsrVoltageArray[3], fsrForceArray[3], fsrWeightInGramsArray[3];
int pinArray[3] = {FSR1, FSR2, FSR3};
float forceMaxArray[3] = {100.0, 100.0, 100.0};
float voltageMax = 0.98 * 5000; // 5V 系统取 4900mV 作为饱和阈值
ThingerWifi101 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);
void setup() {
Serial.begin(115200);
thing.add_wifi(SSID, SSID_PASSWORD);
// 原始 ADC 值
thing["pressure"] >> [](pson& out) {
out["FSR1"] = analogRead(FSR1);
out["FSR2"] = analogRead(FSR2);
out["FSR3"] = analogRead(FSR3);
};
// 电压值 (mV)
thing["voltage"] >> [](pson& out) {
for (int i=0; i> [](pson& out) {
for (int i=0; i> [](pson& out) {
for (int i=0; i> [](pson& out) {
sensors_event_t event;
accel.getEvent(&event);
out["x"] = event.acceleration.x;
out["y"] = event.acceleration.y;
out["z"] = event.acceleration.z;
};
}
}
void loop() { thing.handle(); }
Thinger.io 仪表盘效果

加速度计测量
通过 I2C 读取 ADXL345 三轴加速度(m/s²),同上传至云端,便于步态周期分割与动作识别。
Thinger.io 库使用要点
- 所有周期性更新的代码必须放在
thing["name"] >> [](pson& out){...};这种 lambda “thing” 内部,loop()只需调用thing.handle()。 >>表示纯输出,<<纯输入,=双向。pson是灵活的 JSON 兼容数据结构,用out["key"] = value发送数据。- 不要在 thing 内部使用
delay(),刷新率在 Thinger.io 控制台设置。
常见问题 FAQ
- 无任何输出:检查接线、确认
#define _DEBUG_在首行、排查 TLS 干扰、验证 Thinger.io 连接。 - 输出异常:确认计算代码在 thing 内部;ESP 系列板卡配合 FSR 易出异常值。
- 数据不刷新:移除代码中所有
delay()。 - 想合并图表:将多路数据写入同一个 thing。
完整代码
#define _DEBUG_
#include
#include
#include
#include
#include
#define USERNAME "yourUsername"
#define DEVICE_ID "yourDevice"
#define DEVICE_CREDENTIAL "yourCredential"
#define SSID "yourSSID"
#define SSID_PASSWORD "yourSSIDPassword"
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
int x=0, y=0, z=0;
#define noFSRs 3
#define FSR1 A1
#define FSR2 A2
#define FSR3 A3
float fsrVoltageArray[3], fsrForceArray[3], fsrWeightInGramsArray[3];
int pinArray[3] = {FSR1, FSR2, FSR3};
float forceMaxArray[3] = {100.0, 100.0, 100.0};
float conversionToKgrams = 1.0/9.80665;
long Vcc = 5000;
float voltageMax = 0.98 * Vcc;
ThingerWifi101 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);
void setup() {
Serial.begin(115200);
thing.add_wifi(SSID, SSID_PASSWORD);
if(!accel.begin()) Serial.println("No ADXL345 detected.");
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;
};
}
thing["pressure"] >> [](pson & out) {
out["FSR1"] = analogRead(FSR1);
out["FSR2"] = analogRead(FSR2);
out["FSR3"] = analogRead(FSR3);
};
thing["voltage"] >> [](pson & out) {
for (int FSR=0; FSR> [](pson & out) {
for (int FSR=0; FSR> [](pson & out) {
for (int FSR=0; FSR
原理图

制造工艺
- 智能调酒师:树莓派驱动的自动鸡尾酒机
- 用 Arduino Nano 和 Nokia 5110 LCD 自制 20kHz 示波器:简易 DIY 指南
- DIY ADXL335 地震检测仪 — 低功耗三轴加速度计项目
- Arduino UNO 精准视觉反应时间测试仪
- 家用增压泵故障排查:常见原因与解决方案全指南
- 季度供应链体检:保障运营顺畅
- 压缩空气系统压降控制实战指南
- ABB推出智能传感器监测轴承健康,减少停机
- 智能家居演进:未来连接生活展望
- 最大化物联网投资回报:从盲区到自动化运营的四阶段进阶
- 楼宇管理系统(BMS)赋能智慧城市:IoT驱动能效、安防与个性化体验
- 使用 sys.getsizeof() 高效测量 Python 对象内存占用