Código de Pesquisa

Código do Acelerômetro, Giroscópio e Magnetômetro MPU-9250

Código do Acelerômetro, Giroscópio e Magnetômetro MPU-9250

Neste tutorial, iremos explorar como usar o sensor MPU-9250, que combina um acelerômetro, giroscópio e magnetômetro em um único módulo compacto. Ao final deste guia, você será capaz de ler os dados do sensor e interpretar seu significado em seus projetos. Este sensor é particularmente útil para aplicações como robótica e drones, onde a orientação e o rastreamento de movimento são críticos. Você pode consultar o vídeo para mais esclarecimentos sobre a configuração e o código (no vídeo às 00:20).

ELE_MPU6050_208
ELE_MPU6050_208

Hardware Explicado

O módulo MPU-9250 integra três sensores: um acelerômetro, um giroscópio e um magnetômetro. O acelerômetro mede forças de aceleração, permitindo determinar a velocidade e a orientação. O giroscópio fornece velocidade angular, ajudando a entender a mudança de orientação ao longo do tempo. Por fim, o magnetômetro atua como uma bússola, fornecendo dados do campo magnético que auxiliam na navegação.

Esta combinação de sensores é particularmente benéfica em aplicações onde o rastreamento de movimento preciso é necessário, como em drones ou smartphones. O MPU-9250 se comunica via I2C ou SPI, tornando-o versátil para diferentes configurações de microcontroladores.

Detalhes da Ficha Técnica

Fabricante InvenSense
Número da peça MPU-9250
Tensão lógica/IO 1,8 V (I/O), 3,3 V (suprimento)
Tensão de alimentação 2,4 - 3,6 V
Corrente de saída (por canal) 3,2 mA (operação normal)
Corrente de pico (por canal) 19,8 mA (máx)
Orientação sobre frequência PWM N/A
Limiares de lógica de entrada 0,3 * VDD(baixo), 0,7 * VDD(alto)
Queda de tensão / RDS(on)/ saturação N/A
Limites térmicos -40 a 85 °C
Pacote QFN
Notas / variantes Inclui regulador de tensão interno
  • Garanta o fornecimento adequado de tensão (2,4 - 3,6 V) para evitar danificar o módulo.
  • Use um resistor de pull-up para as linhas SDA e SCL, se já não estiver incluído na sua placa de quebra.
  • Verifique o endereço I2C (o padrão é 0x68) e ajuste o pino ADO de acordo para endereços alternativos.
  • Verifique as conexões quanto à estabilidade para evitar leituras errôneas.
  • Calibre os sensores regularmente para medições precisas.

Instruções de Fiação

Fiação Arduino para MPU6050 usando A4 e A4 para SDA e SCL
Fiação do Arduino para MPU6050 usando A4 e A4 para SDA e SCL
Arduino Wiring for MPU-6050
Arduino Wiring for MPU-6050
Arduino wiring for  MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for MPU6050 using A4 and A4 for SDA and SCL

Para conectar o MPU-9250 ao seu Arduino, comece conectando o pino VCC do MPU-9250 ao pino de 5V do Arduino. O módulo possui um regulador interno, portanto, é seguro alimentá-lo com 5V. Em seguida, conecte o pino GND ao terra (GND) do Arduino. Para comunicação de dados, conecte o pino SDA ao pino A4 do Arduino e o pino SCL ao pino A5. Esta configuração é padrão para muitas placas Arduino.

Se você estiver usando um Arduino Mega, os pinos SDA e SCL estão localizados nos pinos 20 e 21, respectivamente. Certifique-se de que as conexões estejam seguras para evitar erros de comunicação. Se você precisar alterar o endereço I2C do MPU-9250, conecte o pino ADO a 5V para defini-lo como 0x69. Desconectá-lo reverterá para 0x68.

Esquema do Arduino para MPU6050 utilizando A4 e A4 para SDA e SCL.
Esquema Arduino para MPU6050 usando A4 e A4 para SDA e SCL

Exemplos de Código e Guia passo a passo

No esboço do Arduino, começamos incluindo a biblioteca MPU9250 e criando uma instância do sensor:

#include "MPU9250.h"
MPU9250 IMU(Wire,0x68);

O código inicializa o sensor e começa a comunicação nosetup()função:

void setup() {
  Serial.begin(115200);
  status = IMU.begin();
  if (status < 0) {
    Serial.println("IMU initialization unsuccessful");
    while(1) {}
  }
}

Dentro doloop()função, nós continuamente lemos e imprimimos os dados do sensor:

void loop() {
  IMU.readSensor();
  Serial.print("AccelX: ");
  Serial.print(IMU.getAccelX_mss(),6);
  // More print statements for other axes
}

Esta seção lê os valores do acelerômetro, giroscópio e magnetômetro, exibindo-os no Monitor Serial. Certifique-se de verificar o código completo carregado abaixo do artigo para a implementação completa.

Demonstração / O que Esperar

Quando você executar o código, deverá ver os valores do sensor sendo atualizados em tempo real no Monitor Serial. Os valores do acelerômetro vão flutuar à medida que você mover o sensor, enquanto os valores do giroscópio mostrarão a taxa de rotação. O magnetômetro fornecerá a intensidade do campo magnético em três eixos, que podem ser usados para determinar a orientação. Tenha cuidado com entradas flutuantes, pois podem levar a leituras imprecisas (no vídeo às 12:30).

Capítulos

  • Introdução (00:00)
  • Hardware Explicado (01:30)
  • Instruções de Fiação (04:00)
  • Exemplos de Código e Passo a Passo (06:00)
  • Demonstração (10:00)

Imagens

ELE_MPU6050_208
ELE_MPU6050_208
Arduino Wiring for MPU-6050
Arduino Wiring for MPU-6050
Arduino Schematic for  MPU6050 using A4 and A4 for SDA and SCL
Arduino Schematic for MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for  MPU6050 using A4 and A4 for SDA and SCL
Arduino wiring for MPU6050 using A4 and A4 for SDA and SCL
126-Arduino code for an MPU-9250 accelerometer, gyroscope, and magnetometer
Idioma: C++
/*
 * Library: https://github.com/bolderflight/MPU9250
Basic_I2C.ino
Brian R Taylor
brian.taylor@bolderflight.com

Copyright (c) 2017 Bolder Flight Systems

Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
and associated documentation files (the "Software"), to deal in the Software without restriction, 
including without limitation the rights to use, copy, modify, merge, publish, distribute, 
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or 
substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
 * Updated by Ahmad Shamshiri on July 9, 2018 for Robojax.com
 * in Ajax, Ontario, Canada
 * Watch instruction video for this code: 
For this sketch you need to connect:
VCC to 5V and GND to GND of Arduino
SDA to A4 and SCL to A5

S20A is 3.3V voltage regulator MIC5205-3.3BM5
*/

#include "MPU9250.h"

// An MPU9250 object with the MPU-9250 sensor on I2C bus 0 with address 0x68
MPU9250 IMU(Wire,0x68);
int status;

void setup() {
  // Serial to display data
  Serial.begin(115200);
  while(!Serial) {}

  // Start communication with IMU 
  status = IMU.begin();
  if (status < 0) {
    Serial.println("IMU initialization unsuccessful");
    Serial.println("Check IMU wiring or try cycling power");
    Serial.print("Status: ");
    Serial.println(status);
    while(1) {}
  }
}

void loop() {
  // Read the sensor
  IMU.readSensor();
  // Display the data
  Serial.print("AccelX: ");
  Serial.print(IMU.getAccelX_mss(),6);
  Serial.print("\t");
  Serial.print("AccelY: ");  
  Serial.print(IMU.getAccelY_mss(),6);
  Serial.print("\t");
  Serial.print("AccelZ: ");  
  Serial.println(IMU.getAccelZ_mss(),6);
  
  Serial.print("GyroX: ");
  Serial.print(IMU.getGyroX_rads(),6);
  Serial.print("\t");
  Serial.print("GyroY: ");  
  Serial.print(IMU.getGyroY_rads(),6);
  Serial.print("\t");
  Serial.print("GyroZ: ");  
  Serial.println(IMU.getGyroZ_rads(),6);

  Serial.print("MagX: ");  
  Serial.print(IMU.getMagX_uT(),6);
  Serial.print("\t");  
  Serial.print("MagY: ");
  Serial.print(IMU.getMagY_uT(),6);
  Serial.print("\t");
  Serial.print("MagZ: ");  
  Serial.println(IMU.getMagZ_uT(),6);
  
  Serial.print("Temperature in C: ");
  Serial.println(IMU.getTemperature_C(),6);
  Serial.println();
  delay(200);
}

Recursos e referências

Arquivos📁

Nenhum arquivo disponível.