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).
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


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.
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)
/*
* 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
-
ExternoFolha de dados do MPU-9250invensense.com
-
ExternoMapa de registradores do MPU-9250invensense.com
-
ExternoObtenha a biblioteca MPU-9250 do GitHubgithub.com
Arquivos📁
Nenhum arquivo disponível.