Aprenda a utilizar o acelerômetro MPU6050
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
Olá, consegue sim, no momento não temos um código que desempenhe essa tarefa,
colocaremos como assunto pra um post futuro. Abraço.
Ótimo conteúdo! Me ajudou a compreender o sensor para utilizar no meu projeto da escola. Parabéns a toda equipe pelo excelente artigo!