BNO055(arduino)的问题

问题描述 投票:0回答:1

我面临着一个问题,我已经尝试了所有方法但没有解决它,我现在只想读取串行监视器和绘图仪上的加速度,代码运行,工作并且没问题,我已经更改并测试了 Arduino、传感器、面包板...,一切正常。一切正常,但它只是重复初始行“start 0”,换句话说,就好像它没有传感器一样,它只是不读取,不更新。有时它会出现峰值并在几秒钟内或在开始时显示不同的值,但这种情况非常罕见。我已经希望库已下载并正常工作,端口设置正确,我已经焊接了传感器(再次测试,它有效)并且它已连接到 5v,所以我怀疑它可能不会适用于这个传感器,它是原始传感器的更便宜版本(但具有相同的名称:BNO055),或者它也可能是协议错误,无论如何我不知道它可能是什么。 (忽略图中的MPU,我是用它来测试的)

代码:

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>
#include <math.h>

#define BNO055_SAMPLERATE_DELAY_MS (100)
Adafruit_BNO055 myIMU = Adafruit_BNO055();

float thetaM;
float phiM;
float thetaFold=0;
float thetaFnew;
float phiFold=0;
float phiFnew;

void setup() {
  Serial.begin(115200);
  myIMU.begin();
  delay(1000);
  int8_t temp=myIMU.getTemp();
  //Serial.printIn(temp);
  myIMU.setExtCrystalUse(true);
}

void loop() {
  uint8_t system, gyro, accel, mg = 0;
  myIMU.getCalibration(&system, &gyro, &accel, &mg);

  imu::Vector<3> acc = myIMU.getVector(Adafruit_BNO055::VECTOR_ACCELEROMETER);
  thetaM=-atan2(acc.x()/9.8,acc.z()/9.8)/2/3.141592654*360;
  phiM=atan2(acc.y()/9.8,acc.z()/9.8)/2/3.141592654*360;

  thetaFnew=.9*thetaFold+.1*thetaM;
  phiFnew=.9*phiFold+.1*phiM;

  Serial.print(acc.x()/9.8);
  Serial.print(",");
  Serial.print(acc.y()/9.8);
  Serial.print(",");
  Serial.print(acc.z()/9.8);
  Serial.print(",");

  Serial.print(accel);
  Serial.print(",");
  Serial.print(gyro);
  Serial.print(",");
  Serial.print(mg);
  Serial.print(",");

  Serial.print(system);
  Serial.print(",");
  
  Serial.print(thetaM);
  Serial.print(",");
  Serial.print(phiM);

  Serial.print(thetaFnew);
  Serial.print(",");
  Serial.println(phiFnew);

  phiFold=phiFnew;
  thetaFold=thetaFnew;

  delay(BNO055_SAMPLERATE_DELAY_MS);
}

监控

电路

arduino accelerometer arduino-uno i2c gyroscope
1个回答
0
投票

检查您的设备是否已正确初始化会很有用。使用类似的东西:

  if(!myIMU.begin())
  {
    /* There was a problem detecting the BNO055 ... check your connections */
    Serial.print("No BNO055 detected ... Check your wiring or I2C ADDR!");
    while(1);
  }

在 setup() 中。

还要检查您使用的 I2C 地址是否正确。

尝试运行来自 Adafruit 的示例代码可能是个好主意。如果这有效,它将为您提供一个非常好的起点。有趣的是,他们的示例使用 I2C 地址 0x37。这是这一行中的 55 Adafruit_BNO055 bno = Adafruit_BNO055(55);

 但我想知道这是否是一个拼写错误 - 在这种情况下你应该尝试使用 
Adafruit_BNO055(55)

© www.soinside.com 2019 - 2024. All rights reserved.