Aprenda a utilizar o acelerômetro MPU6050

MPU6050
Font Size

Nesse tutorial vamos abordar dois sensores muito utilizados em nossos dia-a-dia, que são o acelerômetro e o giroscópio, o acelerômetro nada mais é que um sensor eletrônico  para medir aceleração ou para detectar e medir vibrações, já o giroscópio serve para medir rotações ou inclinações.

Aposto que você está com esses dois bem pertinho de você mas nem reparou, nos Smartphone e tablets o acelerômetro e o giroscópio são sensores fundamentais, graças a eles esses dispositivos tem a função de rotação de tela automático, ajuste do modo de fotografia automaticamente entre outros, entre isso esses sensores estão presentes em diversas outras coisas, como carros mais modernos, Smartwatches, maquinas fotográficas e diversos outros equipamentos.

Então já repararam como esse sensor tem diversas aplicações? Agora vamos uma plaquinha que tem os dois sensores em só um módulo, o MPU6050!

MPU6050

O MPU6050 é um  sensor de seis eixos, o que significa que ele fornece seis valores como saída. Três valores do acelerômetro (correspondentes aos eixos X,Y e Z) e três do giroscópio. Tanto o acelerômetro como o giroscópio são incorporados dentro de um único chip que utiliza o protocolo I2C para se comunicar com o controlador, no nosso caso o arduino.

Como funciona um acelerômetro

Um acelerômetro funciona com o princípio do efeito piezoelétrico, que é a capacidade de alguns cristais gerarem tensão elétrica por resposta a uma pressão mecânica. Agora Imagine uma caixa com uma bola pequena dentro dela, como na imagem abaixo.

Figura 01: Exemplificação do funcionamento interno de um acelerômetro
Fonte: DiY Hacking

As paredes desta caixa são feitas com cristais piezoelétricos. Sempre que você inclina a caixa, a bola é forçada a se mover na direção da inclinação, devido à gravidade. A parede em que a bola colide cria pequenas correntes conforme ele toca em alguma das seis paredes do cubo.

Cada par de paredes corresponde a um eixo no espaço 3D: eixos X, Y e Z. Dependendo da corrente produzida a partir das paredes piezoelétricas, podemos determinar a direção da inclinação e sua magnitude.

Como funciona um giroscópio

O funcionamento do giroscópio já um pouco mais complexo. Imagine que existe uma estrutura semelhante a um garfo que esteja em constante balançando. É mantida no lugar usando cristais piezoelétricos. Sempre que você tenta inclinar esse arranjo, a pontas do garfo se moverão, mas a oposta ao movimento se moverá muito mais que a ponta que está do lado do movimento.

Isso é causado como resultado da inércia do garfo. Os cristais produzem assim uma corrente em consenso com o efeito piezoelétrico, e esta corrente é amplificada e mandadas para o controlador.

Ufa, um pouco complicado né? mas relaxa, não é necessário cálculos gigantescos e complexos para utilizarmos esse sensor.

O MPU6050 possui 8 pinos (como mostra na imagem abaixo), sendo 2 para o GND e o VCC e 6 para comunicação, mas nesse tutorial só utilizaremos dois, que são os do I2C.

Figura 02: Sensor MPU 6050 e seus pinos
Fonte: Autocore Robótica

Agora que já conhecemos melhor o sensor vamos lá montar o circuito!

Especificações:

Chip: MPU-6050;
Tensão de Operação: 3-5V;
Conversor AD 16 bits;
Comunicação: Protocolo padrão I2C;
Faixa do Giroscópio: ±250, 500, 1000, 2000°/s;
Faixa do Acelerômetro: ±2, ±4, ±8, ±16g;
Dimensões: 2 x 1,6 x 0,1mm.

Material Necessário

Materiais Utilizados:

Montagem:

O circuito é bem simples, basta conectar os seguintes fios:

Sensor       Arduino
VCC     ->     5V
GND    ->   GND
SCL     ->     A5
SDA    ->     A4

O circuito deve ficar assim :

Figura 03:  Circuito arduino e MPU 6050
Fonte: Autocore Robótica

agora que já está tudinho pronto vamos programação ;D

Código comentado:

Para utilizar esse sensor não é necessário instalar nenhuma biblioteca, a única que vamos utilizar é a Wire, que já vem na IDE.

//Programa : Aprenda a utilizar o acelerômetro MPU 6050
//Autor: Saulo Alexandre - Autocore Robotica

//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 acelerômetro
  Wire.write(0); 
  Wire.endTransmission(true);
    
}

void loop()
{
  Wire.beginTransmission(MPU);
  Wire.write(0x3B);  
  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();      
  AcY=Wire.read()<<8|Wire.read(); 
  AcZ=Wire.read()<<8|Wire.read(); 
  Tmp=Wire.read()<<8|Wire.read(); 
  GyX=Wire.read()<<8|Wire.read(); 
  GyY=Wire.read()<<8|Wire.read(); 
  GyZ=Wire.read()<<8|Wire.read(); 

   
  //Mostra os valores na serial
  Serial.print("AcX = "); 
  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 antes de reiniciar o processo
  delay(300);
}

Conclusão:

Os dados obtidos com os arduino e o MPU6050 foram os seguintes :

Figura 04: Serial monitor mostrando os dados quando o sensor está parado
Fonte: Autocore Robótica

Figura 04: Serial monitor mostrando os dados depois de balançar bastante o sensor
Fonte: Autocore Robótica

Gostaram do projeto? Esse sensor tem diversas aplicações, como robótica, automação etc.

Deixe seu comentário ai embaixo, seu curtir  no nosso Facebook – e não perca o nosso próximo post.

Veja também – Como criar melodias com o Arduino

Posts relacionados

Tanque Esteira Bluetooth com Arduino

por Arthur Silvino
4 anos ago

Como Construir sua Primeira CNC – Parte 1

por Davi Colares
4 anos ago

Mensagem de Alerta para Whatsapp com ESP8266

por autocore
4 anos ago
Sair da versão mobile