Código de Pesquisa

Como usar o módulo MPU-6050 (acelerômetro e giroscópio)

Como usar o módulo MPU-6050 (acelerômetro e giroscópio)

O MPU-6050 é um sensor versátil que combina um acelerômetro de 3 eixos e um giroscópio de 3 eixos em um único pacote. Neste tutorial, vamos explorar como conectar este módulo a um Arduino para medir aceleração e velocidade angular. O resultado será um programa simples que exibe dados em tempo real do sensor, permitindo que você monitore tanto a aceleração quanto a orientação do seu dispositivo.

Seguindo este guia, você aprenderá como configurar o hardware, conectar corretamente os componentes e escrever o código necessário para colocar o MPU-6050 em funcionamento. Isso lhe dará uma base para projetos futuros envolvendo detecção de movimento e orientação. Para maior clareza, não deixe de ver o vídeo que acompanha este tutorial (no vídeo em 00:00).

Hardware explicado

O componente principal deste projeto é o sensor MPU-6050, que fornece dados tanto do acelerômetro quanto do giroscópio. O acelerômetro mede a aceleração linear ao longo dos eixos X, Y e Z, enquanto o giroscópio mede as taxas de rotação em torno desses mesmos eixos. Esta combinação torna o MPU-6050 uma excelente escolha para aplicações que requerem rastreamento de movimento.

Além disso, o módulo usa uma interface I2C para comunicação, o que simplifica as ligações e permite que vários dispositivos sejam conectados no mesmo barramento. O sensor é alimentado através do pino VCC, que normalmente requer uma tensão entre 3.3V e 5V. O pino GND está conectado ao terra comum do Arduino.

Detalhes da ficha técnica

FabricanteInvenSense
Número da peçaMPU-6050
Tensão lógica/E/S3.3 - 5 V
Tensão de alimentação3.3 - 5 V
Corrente de saída (por canal)...
Corrente de pico (por canal)...
Orientações sobre a frequência PWM...
Limiares de entrada lógica...
Queda de tensão / RDS(on)/ saturação...
Limites térmicos...
PacoteQFN
Notas / variantes...

  • Conecte o pino VCC a 3,3 V ou 5 V.
  • Conecte o pino GND à terra.
  • Use a comunicação I2C via SDA (dados) e SCL (relógio).
  • Certifique-se de que haja resistores pull-up nas linhas SDA e SCL.
  • Verifique os níveis de tensão adequados para evitar danificar o sensor.

Instruções de fiação

arduino_wiring_MPU-6050

Comece conectando o pino VCC do MPU-6050 ao pino 5V do Arduino. Em seguida, conecte o pino GND do MPU-6050 a um dos pinos GND do Arduino. Para comunicação I2C, conecte o pino SDA do MPU-6050 ao pino A4 do Arduino e o pino SCL ao pino A5. Certifique-se de que seu Arduino esteja configurado para usar comunicação I2C incluindo as bibliotecas apropriadas no seu código.

Verifique novamente suas conexões antes de alimentar o sistema. Se estiver usando uma protoboard, certifique-se de que as conexões estejam seguras e de que não haja curtos-circuitos. Se o módulo não responder como esperado, verifique a fiação e confira o endereço I2C do MPU-6050 no seu código.

Exemplos de código e guia passo a passo

O trecho de código a seguir inicializa o MPU-6050 e começa a ler dados dele. Os identificadores-chave incluemmpu6050, que é a instância da classe MPU6050, etimer, que é usado para controlar a temporização da saída de dados.

MPU6050 mpu6050(Wire);
long timer = 0;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

Nesta função setup, inicializamos a comunicação serial e o sensor MPU-6050. Ompu6050.calcGyroOffsets(true)A chamada é crucial, pois calibra os offsets do giroscópio, garantindo leituras precisas.

Na função loop, atualizamos continuamente os dados do sensor e os imprimimos no monitor serial. O trecho de código a seguir mostra como ler e imprimir os dados de temperatura e aceleração:

if(millis() - timer > 1000){
  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());
}

Este bloco verifica se passou um segundo desde a última saída. Em seguida, obtém os valores de temperatura e aceleração do MPU-6050 e os imprime no monitor serial. Você pode observar esses valores sendo atualizados em tempo real.

Demonstração / O que Esperar

Uma vez que tudo esteja ligado e o código carregado, você pode esperar ver os dados de temperatura e aceleração exibidos no monitor serial a cada segundo. Se você inclinar ou mover o MPU-6050, os valores de aceleração deverão mudar de acordo. Fique atento: fiação incorreta ou alimentação insuficiente podem resultar em leituras erráticas ou na ausência total de dados (no vídeo em 01:30).

Imagens

arduino_wiring_MPU-6050
arduino_wiring_MPU-6050
MPU-6050-module-1
MPU-6050-module-1
MPU-6050-module-2
MPU-6050-module-2
MPU-6050-module-schematic
MPU-6050-module-schematic
MPU-6050-module-1
MPU-6050-module-1
116-Arduino code for the MPU-6050 accelerometer and gyroscope sensor (all data)
Idioma: C++
/*
 * 
 * This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
 * 
 * This code displays all data:
 * -Gyroscope X, Gyroscope Y, Gyroscope Z
 * -Gyroscope Angle X, Gyroscope Angle Y, Gyroscope Angle Z 
 * -Accel X, Accel Y, Accel Z
 * -Accel Angle X, Accel Angle Y, Accel Angle Z,
 * 
 * Library and code have been taken from:
 * https://github.com/tockn/MPU6050_tockn
 * 
 * Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
 * 
 */
#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();
    
  }

}
117-Arduino code for an MPU-6050 accelerometer and gyroscope sensor (just angle)
Idioma: C++
/*
 * 
 * This code is basic usage of the MPU-6050 Accelerometer and Gyroscope.
 * 
 * This code displays:
 * - Angle X, Angle Y, Angle Z,
 * 
 * Library and code have been taken from:
 * https://github.com/tockn/MPU6050_tockn
 * 
 * Updated by Ahmad Shamshiri on July 03, 2018 in Ajax, Ontario, Canada
 * for Robojax.com
 * Get this code from Robojax.com
 * Watch video instructions for this code at: https://youtu.be/uhh7ik02aDc
 * 
 */
#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();
    
  }

}

Coisas que você pode precisar

Recursos e referências

Arquivos📁

Bibliotecas do Arduino (zip)