Duvida sobre Acelerômetros (valores retornados na leitura feita usando Arduíno)

Olá meus caros!
Bom, minha duvida é a seguinte!

ao fazer a leitura de um acelerômetro pelo Arduíno, ele nos retorna algo como;

x = 136   y = 124   z = 16388
x = 88     y = 84     z = 16344
 "e por ai vai.."

Gostaria de saber o significado desses números. (sei que ele esta medindo a força exercida sobre ele, e esses números representam isso) Se são valores em milivolts, binário... e sabendo o significado desses números, qual a relação a qual eu consiga converter esses valores em m/s, por exemplo? 

eu tenho dois módulos em mãos, o ADXL345 3-axis e o  GY-521 MPU-6050.

ja dei uma olhada no datasheet, mas alem de não entender muito dos termos técnicos tbm n sou muito bom no inglês kkkkkk então não consegui encontrar algo ainda. kkkkkk

desde já agradeço! :)

Exibições: 1886

Responder esta

Respostas a este tópico

Boa noite WAR,

faltou você ANEXAR o arquivo com o seu code, mas:

o GY-521 MPU-6050 é um giroscópio e  acelerômetro. 


Os valores que voce postou são do acelerometro.
O acelerômetro tem vários ranges     Accelerometer ranges: ±2, ±4, ±8, ±16g

Na biblioteca desse módulo, os limites (range) do MPU é definido dentro da função initialize() através das funções setFullScaleAccelRange() para o acelerômetro e setFullScaleGyroRange() para o giroscópio.

 Assim, se você está fazendo o uso da biblioteca MPU6050.h, basta chamar a função setFullScaleAccelRange(x) 

após a chamada de initialize(), onde x é o range de 2g (MPU6050_ACCEL_FS_2) a 16g (MPU6050_ACCEL_FS_16)  do acelerômetro.


Se você está acessando o MPU sem o uso de sua biblioteca, como no caso do código fornecido nesta página,

aí o processo é um pouco mais complexo, pois será preciso adaptar e simplificar algumas funções de outras bibliotecas.

Os valores valores podem ser transformado em g   ;   1g = 9,806 65 m/s²

Para transformar estes valores lidos em g, use a seguinte formula:


   Valor g(x, y ou z) = Valor-lido/ sensibilidade


A  sensibilidade é a que você definiu.

Em exemplos que vi na internet, sem uso de biblioteca, o valor parece que está definido como 2g ;16.384,

mas não tenho certeza

User-programmable accelerometer full-scale range of ±2g, ±4g, ±8g, and ±16g.

2g                  |    16,384

4g                  |    8,192 

8g                  |    4,096

16g                 |    2,048

No exemplo que voce postou:   
x = 136    ; 136/16384      = 0,00830078125   m/s²

y = 124    ; 124/16384      = 0,007568359375  m/s²

z = 16388  ; 16388/16384 = 1,000244140625  m/s²


RV

Mineirin, Vlw de mais mano!  :)
eu usei um codigo que encontrei na internet msm, e ele n esta usando a biblioteca msm n. mas isso da pra resolver, vou usar um que tenha a biblioteca. mas de inicio eu queria era entender os valores retornados na leitura, mas vc ja me esclareceu bastante coisa e agora (acho) que já consigo fazer oq estava pretendendo  ( q era usar o acelerômetro para determinar a aceleração gravitacional em um experimento e queda livre) 
  

Ola, sou novo do fórum e gostaria da ajuda 

estou querendo exportar os resultados das leituras do giroscópio e acelerômetro para o excel, e com isso fazer gráficos. Como posso fazer?

segue meu código:

// Codigo adaptado de: Usuário do Arduino JohnChi
#include "Wire.h" //Biblioteca para comunicação I2C
#include "MPU6050.h" //Biblioteca MPU6050
#include "I2Cdev.h"
const int MPU_addr=0x68; //Endereço do sensor
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ; //Variaveis para pegar os valores medidos
void setup(){
  Wire.begin(); //Inicia a comunicação I2C
  Wire.beginTransmission(MPU_addr); //Começa a transmissao de dados para o sensor
  Wire.write(0x6B); // registrador PWR_MGMT_1
  Wire.write(0); // Manda 0 e "acorda" o MPU 6050
  Wire.endTransmission(true);
  Serial.begin(9600); //Inicia a comunicaçao serial (para exibir os valores lidos)
}
void loop(){
  Wire.beginTransmission(MPU_addr); //Começa a transmissao de dados para o sensor
  Wire.write(0x3B); // registrador dos dados medidos (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr,14,true); // faz um "pedido" para ler 14 registradores, que serão os registrados com os dados medidos
  AcX=Wire.read()8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
  AcY=Wire.read()8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AcZ=Wire.read()8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp=Wire.read()8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  GyX=Wire.read()8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  GyY=Wire.read()8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  GyZ=Wire.read()8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
  //Agora escreve os valores no monitor serial
  Serial.print("| AcX (m/s2) = "); Serial.print(AcX * (9.81/16384));
  Serial.print(" | AcY (m/s2) = "); Serial.print(AcY * (9.81/16384));
  Serial.print(" | AcZ (m/s2) = "); Serial.print(AcZ * (9.81/16384));
  Serial.print(" | Tmp (ºC) = "); Serial.print(Tmp/340.00+36.53); //Equação da temperatura em Cº de acordo com o datasheet
  Serial.print(" | GyX (deg/s) = "); Serial.print(GyX * (250.0/32768.0));
  Serial.print(" | GyY (deg/s) = "); Serial.print(GyY * (250.0/32768.0));
  Serial.print(" | GyZ (deg/s) = "); Serial.println(GyZ * (250.0/32768.0));
  delay(333);
}

Para isso recomendo fazer direto uma programação no excell em VBA.

https://www.embarcados.com.br/serie/utilizando-o-excel-para-interag...

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço