O MPU6050 é um sensor bastante completo e muito querido no mercado pelos “maker’s” em inúmeros projetos que necessitem não só de obter a posição em relação aos eixos tridimensionais como também a aceleração.
Aplicações
- Smartphones;
- Sistema de navegação;
- Óculos swift;
- Pêndulo invertido;
- Robô bípede ou de duas rodas;
Especificações
- Voltagem de Trabalho: 2.5V±5%, 3.0V±5%, ou 3.3V±5%;
- Consumo: 6mA com giroscópio e acelerômetro;
- Tamanho: 4,0mm x 4,0mm x 0,9mm;
- Interface de comunicação: I²C.
Faixas de Leitura
- Giroscópio programável na faixa de: ± 250, ± 500, ± 1000 e ± 2.000 ° / s (dps);
- Acelerômetro programável na escala de: ± 2g, ± 4g, ± 8g e ± 16g.
O que é Acelerômetro e Giroscópio?
Certamente esses dois temos por mais que não saiba o conceito, tem noção por ser presente no nosso dia dia como os smartphones, mas do que se trata cada um deles?
Acelerômetro
A aceleração é a diferença de velocidade em relação ao período de tempo, o acelerômetro é um dispositivo capaz de perceber a aceleração, no caso do MPU6050 é por meios de “molas” de silício que varia sua tensão. A imagem abaixo é um exemplo de um modelo eletrônico que foi retirado do site Tecmundo.

Giroscópio
O giroscópio é um dispositivo capaz de indicar a direção/rotação de um objeto, o rotor em rotação sempre estará nivelado em posição a terra.

O exemplo acima é o mais comum, o giroscópio mecânico. Nos componentes integrados não é muito diferente, porém é em uma escala muito pequena e com sensores que detectam a variação do sistema mecânico, são denominados de MEMS (Micro Electro Mechanical Systems).
Peculiaridades
A maior característica do MPU6050 é por ser dois em um, tendo não só giroscópio mas também um acelerômetro sendo ambos de três eixos em apenas um único chip.

Uma característica muito positiva para esse sensor é que ele possui um conversor ADC de 16bit para cada canal, o que possibilita a leitura simultânea. Além disso, o MPU6050 tem um buffer FIFO de 1024 bytes que pode ser usados para armazenar a leitura e depois lida, a depender da configuração desejada.

Leitura
Quando foi feito o teste usando a biblioteca da Adafruit para o MPU6050 foi notado a gravidade da terra em relação a região de Lauro de Freitas – Bahia – Brasil onde marcou uma a aceleração de 9,57m/s² sendo que a gravidade da terra é 9,8m/s² como mostra na imagem abaixo:

Essa diferença representa 2,35% em relação ao valor gravitacional da terra e o valor lido pelo MPU6050 porém essa diferença pode ter ocorrido devido a margem de erro (não foi encontrada a respeito do acelerômetro), localidade geográfica ou esses dois fatores combinados.
A respeito das demais leituras, o MPU6050 apresenta uma certa variação positiva e negativa mas é normal na maioria dos sensores ADC, o ideal é sempre fazer uma média móvel para filtrar o máximo essas variações.
MPU6050 Dimensões
Com 4,0mm x 4,0mm x 0,9mm o MPU é muito similar aos encapsulamentos padrões do mercado, caso seja visto em uma placa e não tenha conhecimento do que se trata esse chip passará desapercebido.

MPU6050 com Arduino
Esse sensor é muito fácil de ser usado com o Arduino e qualquer outro microcontrolador, principalmente por ser popular na comunidade.
MPU6050 Esquemático Arduino
É fundamental verificar os níveis de tensões que serão trabalhadas em qualquer aplicação com o Arduino, no caso do MPU fica abaixo dos 5v. Alguns módulos já possuem regulador de tensão integrados mas é sempre bom analisar antes de fazer as conexões.

Código
Para usar o MPU6050 é necessário ter uma biblioteca instalada na IDE do Arduino, nesse caso foi usado a biblioteca MPU6050_tockn. O código abaixo nada mais é do que o próprio exemplo da biblioteca, por esse motivo não está disponível o arquivo .ino para download.
#include <MPU6050_tockn.h>
#include <Wire.h>
MPU6050 mpu6050(Wire);
long timer = 0;
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
}
void loop() {
mpu6050.update();
if(millis() - timer > 1000){
Serial.println("=======================================================");
Serial.print("temp : ");Serial.println(mpu6050.getTemp());
Serial.print("accX : ");Serial.print(mpu6050.getAccX());
Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());
Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());
Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());
Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());
Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());
Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());
Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());
Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());
Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());
Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());
Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());
Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());
Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());
Serial.println("=======================================================\n");
timer = millis();
}
}
Funcionamento
Por fins demonstrativos, o MPU6050 foi usado junto com um display OLED de 0.96” porém no canto inferior direito apresentou um bug mas de qualquer forma não impediu a demonstração. Vale salientar que no exemplo foi usado apenas o ângulo dos eixos X e Y por ser limitado ao tamanho da tela, na imagem abaixo mostra a saída serial do exemplo da biblioteca.

Considerações
O MPU6050 é um dos sensores indispensáveis, tendo uma estrutura de leitura ADC de 16bit independente para cada eixo, buffer FIFO. Além de ser dois em um, o que é um ponto muito positivo em termos de custo e benéfico.
Você precisa fazer log in para comentar.