módulo acelerômetro e giroscópio MPU6050 é um componente de alta precisão que conta também com um sensor de temperatura para leituras entre -40 e +85 °C. Controlado pelo CI MPU-6050 (datasheet), ele é um sensor de 6 eixos (6 DOF – Degrees of Freedom, ou 6 Graus de Liberdade), fornecendo 6 valores de saída, sendo 3 do acelerômetro e 3 do giroscópio. 

acelerometro e giroscopio mpu6050

Esse CI tem um recurso chamado DMP (Digital Motion Processor), um acelerador de hardware que cuida da parte dos complexos cálculos do sensor. 

Por ser um sensor de baixo custo, preciso e econômico em termos de consumo de energia, é ideal para projetos envolvendo robôs e simuladores, além é claro das aplicações em dispositivos portáteis, como smartphones e tablets, projetos de realidade aumentada e monitoração de equipamentos, entre outras. 

Conexão do módulo MPU6050 ao Arduino

O módulo utiliza a comunicação via interface I2C, assim a conexão com o Arduino é bastante simplificada, utilizando apenas os pinos analógicos A4 (SDA) e A5 (SCL) e a alimentação, que pode variar entre 3 e 5V.

Pinos MPU-6050

Os pinos XDA e XCL podem ser utilizados para ligação de outros dispositivos I2C ao módulo. Por meio do pino AD0 você pode selecionar o endereço I2C: em nível baixo o endereço é 0x68, e em nível alto (3.3V), o endereço é 0x69

Neste artigo vou mostrar dois exemplos de utilização dos dados do MPU6050, conectado ao Arduino Uno:

Circuito acelerômetro e giroscópio MPU6050 e Arduino Uno

Se possível, utilize fios e conectores macho/fêmea para ligação do módulo ao Arduino, já que os testes envolvem a movimentação da placa em várias direções.

Mostre os dados do acelerômetro e giroscópio MPU6050 no Serial Monitor

Para efetuar a leitura dos dados “puros” do sensor, carregue o programa abaixo no Arduino:

//Programa: Teste MPU6050
//Alteracoes e adaptacoes: Arduino e Cia
//
//Baseado no programa original de JohnChi
 
//Carrega a biblioteca Wire
#include<Wire.h>
 
//Endereco I2C do MPU6050
const int MPU=0x68;  

//Variaveis para armazenar valores dos sensores
int AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  Wire.beginTransmission(MPU);
  Wire.write(0x6B); 
   
  //Inicializa o MPU-6050
  Wire.write(0); 
  Wire.endTransmission(true);
    
}

void loop()
{
  Wire.beginTransmission(MPU);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  
  //Solicita os dados do sensor
  Wire.requestFrom(MPU,14,true);  
  
  //Armazena o valor dos sensores nas variaveis correspondentes
  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)

   
  //Mostra os valores na serial
  Serial.print("Acel. X = "); Serial.print(AcX);
  Serial.print(" | Y = "); Serial.print(AcY);
  Serial.print(" | Z = "); Serial.print(AcZ);
  Serial.print(" | Gir. X = "); Serial.print(GyX);
  Serial.print(" | Y = "); Serial.print(GyY);
  Serial.print(" | Z = "); Serial.print(GyZ);
  Serial.print(" | Temp = "); Serial.println(Tmp/340.00+36.53);
    
  //Aguarda 300 ms e reinicia o processo
  delay(300);
}

Abra o serial monitor, onde serão apresentados os valores de X, Y e Z do acelerômetro e do giroscópio, além da temperatura:

Dados Acelerometro Giroscopio Temperatura

Integrando o MPU6050 com o Processing

Uma das aplicações mais interessantes para mostrar o funcionamento do MPU-6050 é a sua integração com o Processing. Com ele podemos efetuar a leitura do sensor conectado ao Arduino e apresentar esses dados de forma gráfica em uma janela na tela do computador.

(No tutorial Processing : mostre as informações do Arduino no seu computador você encontra informações sobre como instalar o Processing e os passos básicos para utilização do programa)

Um dos melhores exemplos que eu encontrei de utilização do MPU-6050 com o Processing foi no site Varesano.net. O programa desse site gera na tela um retângulo, que se movimenta conforme movimentamos o sensor:

Tela Processing - Cube

Mais tarde achei uma evolução desse programa, que substitui o retângulo por uma representação do próprio módulo:

Processing - Módulo MPU6050

Para realizar esses testes com o seu módulo MPU6050, você vai precisar de dois programas, que estão no Github do Arduino e Cia:

  • MPU_6050_test.zip: Faça o download, descompacte e carregue o programa MPU_6050_test.pde no Arduino
  • FreeIMU_cube1.zip: Faça o download, descompacte e carregue o programa FreeIMU_cube1.pde no Processing

No programa FreeIMU_cube1.pde, altere a linha abaixo de acordo com a porta serial utilizada pelo seu Arduino:

final String serialPort = “/dev/tty.usbmodem1d11“;

No caso da porta COM5, por exemplo, o código ficará assim:

final String serialPort = “COM5“;

Após as alterações, acione o botão RUN, conforme destacado abaixo, para que seja aberta uma nova janela e o Processing comece a receber os dados do sensor ligado ao Arduino:

Processing - Executar programa

Utilize o teclado e pressione H para definir a posição de origem do sensor. Movimente o sensor em várias direções para que o movimento seja reproduzido na tela.

No vídeo abaixo você confere o teste do módulo com Arduino e Processing:


Gostou? Confira outros post com acelerômetro aqui mesmo no Arduino e Cia!

5/5 - (1 vote)