基于ESP32的足压测量设备 原创 精华
ITACMI
发布于 2022-4-15 19:12
浏览
4收藏
基于ESP32的足压测量设备
介绍
本仓库主要涉及硬件部分代码,步态测量设备依靠RX-ES-48P矩阵式压力传感器采集足底压力数据,以及MPU6050监测三轴加速度、角度数据,通过ESP32开发板基于MQTT协议上传数据至物联网平台。通过实时采集压力以及加速度数据推算出支撑项、COP压力中心变化曲线、步长等重要步态信息,有助于后续步态分析。
所需设备
-
ESP32-WROOM-32联网上传数据
-
CD74HC4067扩展引脚
-
RX-ES-48P鞋垫式压力传感器
-
MPU6050加速度传感器
资料
- RX-ES-48P
建模
- 初版
实现流程
- 开发环境Arduino IDE
- 代码层面
使用到了三个Arduino库实现WIFI连接,MQTT订阅、以及JSON数据打包
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
- 矩阵式压力传感器的数据读取
传感器的48个点位数据并不是同时测量的,而是采用逐行扫描的方式,可以参考矩阵式键盘
为了方便大家了解矩阵式传感器的读取原理,我在Thinkcad上创建了一个演示Demo
Demo使用Arduino 2650实现,但原理一致,你也可以使用小熊派或者STM32实现
//Third order matrix
int c1 = A3;
int c2 = A4;
int c3 = A5;
int r1 = 7;
int r2 = 6;
int r3 = 5;
int SIG_pin[] = {c1,c2,c3};
void setup(){
pinMode(r1, OUTPUT);
pinMode(r2, OUTPUT);
pinMode(r3, OUTPUT);
digitalWrite(r1, LOW);
digitalWrite(r2, LOW);
digitalWrite(r3, LOW);
Serial.begin(9600);
}
void loop(){
double v;
for(int i=0; i < 3; i++){
readMux(i);
}
Serial.println(" ");
delay(200);
}
int readMux(int channel){
int controlPin[] = {r1,r2,r3};
int muxChannel[3][3] = {
{1,0,0}, //R1
{0,1,0}, //R2
{0,0,1}, //R3
};
//loop through the 4 sig
for(int i=0; i < 3 ; i++){
digitalWrite(controlPin[i], muxChannel[channel][i]);
}
for(int i=0;i<3;i++){
int val = analogRead(SIG_pin[i]);
Serial.print(val);
Serial.print(" ");
}
Serial.println();
}
如果你运行了上面的demo就会发现,上面的那个玩意并不完美,你可以考虑对它进行一些改进,改变他的数据输出值让它更加的直观
比如像这样
MPU6050的数据可视化demo
- 基于processing
- 首先你需要一个脚部的扫描模型(obj格式)
- 然后在程序中加载这个模型,并在串口读取MPU6050的角度数据,并实时的更新在脚部模型
- 这是一个十分简陋的Demo,如果你想实现一些复杂效果,可以尝试Unity、虚幻等功能强大的引擎
import processing.serial.*;
import java.awt.event.KeyEvent;
import java.io.IOException;
Serial myPort;
String data="";
float roll, pitch,yaw;
PShape rocket;
void setup() {
size (800, 600, P3D);
rocket = loadShape("D://OBJ_Model//Man_v1.obj");
myPort = new Serial(this, "COM3", 115200);//need to modify
myPort.bufferUntil('\n');
}
void draw() {
background(200);
translate(width/2, height/2 -100, -3000);
text("Roll: " + int(roll) + " Pitch: " + int(pitch), -100, 265);
rotateX(radians(pitch));
rotateZ(radians(roll));
shape(rocket);
textSize(30);
fill(243, 23, 40);
textSize(25);
fill(200, 250, 250);
}
void serialEvent (Serial myPort) {
data = myPort.readStringUntil('\n');
if (data != null) {
data = trim(data);
String items[] = split(data, '/');
if (items.length > 1) {
roll = float(items[0]);
pitch = float(items[1]);
}
}
}
演示视频
关于作者
- 本项目归属于Maker Studio
- 本项目由快乐星球团队参与开发
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
已于2022-4-15 19:22:33修改
赞
4
收藏 4
回复
相关推荐
作者牛呀,看了这个顿时顿悟了!
这个鞋垫传感器的模拟信号采集是直接使用的串联电阻分压吗?串联的电阻阻值大概是多少啊