使用Arduino判断两个压力传感器之间的重心

一、前言

最近有人说要靠压力传感器判断站立的位置,然后就有了这篇博客。按理说我们只需要获得xy两个轴的坐标(x,y)就能进行准确的定位。那我们如何通过压力传感器得到重心的坐标呢?

在做一个复杂问题前我们应该先进行分解,找到入手的点。首先只需要测量两个压力传感器反馈力就可以得到一个x轴上的坐标,之后只要加上另外两个就能得到y轴坐标。理论成立开始实验。

(如果不想动脑看公式的可以直接看代码,代码更容易理解)

二、计算步骤:

  1. 数据采集:

    读取每个传感器的电压值。
  2. 转换为压力值:

    假设传感器的输出电压与压力成正比,转换公式为 pressure = voltage * sensitivity,其中 sensitivity 是传感器的标定系数。
  3. 转换为质量:

    使用 mass = pressure * surface_area / gravity,其中 pressure 是传感器测得的压力,surface_area 是传感器的接触面积,gravity 是重力加速度(通常为 9.81 m/s²)。
  4. 计算重心:

    使用以下公式计算重心坐标 (cx, cy)
cx = (mass1 * x1 + mass2 * x2) / (mass1 + mass2) cy = (mass1 * y1 + mass2 * y2) / (mass1 + mass2)

三、程序代码

#include <Wire.h> // 如果使用的是I2C接口的压力传感器

// 假设传感器连接到A0和A1
const int sensorPin1 = A0;
const int sensorPin2 = A1;

// 假定传感器的位置
const float x1 = 0.0;
const float y1 = 0.0;
const float x2 = 10.0; // 假设传感器间隔10cm
const float y2 = 0.0;

// 假设传感器的接触面积
const float surfaceArea = 1.0; // 例如1 cm²,根据实际传感器尺寸调整
const float gravity = 9.81; // 重力加速度

void setup() {
  Serial.begin(9600);
}

void loop() {
  // 读取传感器值
  int sensorValue1 = analogRead(sensorPin1);
  int sensorValue2 = analogRead(sensorPin2);

  // 转换为电压值
  float voltage1 = sensorValue1 / 1023.0 * 5.0;
  float voltage2 = sensorValue2 / 1023.0 * 5.0;

  // 假设电压与压力成正比
  float pressure1 = voltage1;
  float pressure2 = voltage2;

  // 转换为质量
  float mass1 = pressure1 * surfaceArea / gravity;
  float mass2 = pressure2 * surfaceArea / gravity;

  // 计算重心
  float cx = (mass1 * x1 + mass2 * x2) / (mass1 + mass2);
  float cy = (mass1 * y1 + mass2 * y2) / (mass1 + mass2);

  // 输出结果
  Serial.print("Center of Mass: ");
  Serial.print("X: ");
  Serial.print(cx);
  Serial.print(", Y: ");
  Serial.println(cy);

  // 等待一段时间再读取
  delay(1000);
}

四、电路图与测试结果:

和以前一样,信号黄线,正极红线,负极黑线。

测量结果:这里用电位器替代了压力传感器的读数,获得x轴的重心坐标,是根据两个传感器读数的差值来判断坐标,当两个传感器压力平衡时重心坐标为5。根据设置两端分别是0和10。(便于理解说是传感器差值,大佬别打我)

另外的Y轴坐标用加上另外两个压力传感器就能获得,复制粘贴一下,改下IO口就可以了,我就不写出来了,祝各位好运~

另外,可以多看看我的其他文章,给我这个免费分享的作者点点赞,谢谢各位了(✪ω✪)(✪ω✪)。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值