Como usar o sensor de rastreamento de movimento MEMS MPU6050 de 6 eixos (giroscópio + acelerômetro) com Arduino

Como usar o sensor de rastreamento de movimento MEMS MPU6050 de 6 eixos (giroscópio + acelerômetro) com Arduino

Sensores de rastreamento de movimento são usados ​​em aplicações como robótica, reconhecimento de gestos, estabilização de veículos, controle de posição em drones/quadricópteros, dispositivos apontadores, controladores de jogos e dispositivos de rastreamento de condicionamento físico. Um dos sensores de rastreamento de movimento populares é o MPU6050. É um sensor de rastreamento de movimento MEMS de seis eixos que inclui um acelerômetro MEMS e um giroscópio MEMS. O sensor também possui um sensor de temperatura integrado onde a medição da temperatura pode ser usada para calibrar o acelerômetro e o giroscópio. Além disso, o MPU6050 pode ser conectado a um magnetômetro externo usando um canal I2C integrado que estende o sensor para 9 DOF (Grau de Liberdade). Com um magnetômetro externo conectado ao MPU6050, um controlador ou computador pode rastrear com precisão o movimento exato.

Sensor de detecção de movimento MPU6050

Exemplo de sensor de detecção de movimento MPU6050

A placa breakout MPU6050 possui um regulador de tensão de 3,3 V que permite fácil interface com computadores de 5 V e 3,3 V. Portanto, podemos conectar facilmente o MPU6050 com Arduino, Raspberry Pi, ESP32 e vários outros microcontroladores e plataformas SBC. Neste projeto, conectamos o rastreador de movimento MPU6050 com o Arduino e exibimos suas leituras de acelerômetro, giroscópio e temperatura em um display OLED SSD1306.

Componentes necessários

  1. Arduino UNO x1
  2. Sensor MPU6050 x1
  3. Módulo OLED SSD1306 x1
  4. Conectando fios/fios de jumper

Software necessário

  1. IDE do Arduino

Como funciona o acelerômetro MEMS
Acelerômetros são usados ​​para a detecção de aceleração linear. Esses sensores podem detectar aceleração linear em uma, duas ou três dimensões. Um acelerômetro possui uma massa de prova suspensa por molas dentro de um referencial. A massa de prova em um acelerômetro unidimensional possui um grau de liberdade. Da mesma forma, a massa de prova em um acelerômetro bidimensional e tridimensional tem 2 DOF e 3 DOF dentro do referencial, respectivamente. A massa de prova atua como uma bola suspensa livre para se mover dentro de uma estrutura cúbica. Quando o sensor se move ao longo de um determinado eixo, a massa de prova suspensa sofre uma força na direção oposta.

Funcionamento do Acelerômetro

Princípio de funcionamento do acelerômetro

Se a aceleração detectada pela massa de prova for equivalente à aceleração gravitacional, ou seja, 9,8 m/s, diz-se que é 1g. Se um acelerômetro tridimensional detecta uma força de 1g na direção Z, ele está detectando a aceleração gravitacional.

O acelerômetro MEMS consiste em uma estrutura microusinada construída sobre um wafer de silício. Uma massa de prova é suspensa por molas de polissilício onde é livre para desviar em uma, duas ou três dimensões ao sofrer uma força externa. A massa de prova desvia entre placas fixas que atuam como eletrodos de um capacitor. Na deflexão ao longo de um eixo, a distância entre a massa de prova e as placas fixas é alterada em proporção à aceleração ao longo desse eixo. Isto produz uma mudança proporcional na capacitância das placas fixas. A diferença na capacitância é detectada por um sensor de alta precisão que emite uma tensão analógica proporcional.

Estrutura do Acelerômetro MEMS

Estrutura do Acelerômetro MEMS

Como funciona o giroscópio MEMS
Um giroscópio é usado para detectar a rotação angular. Ele usa o fenômeno chamado Efeito Coriolis. A força de Coriolis é uma força inercial experimentada por um objeto que se move em um sistema giratório perpendicular à direção do movimento e ao eixo de rotação.

Efeito Coriolis no giroscópio

Exemplo de efeito Coriolis

Um giroscópio consiste em duas massas de prova que estão em movimento oscilante em direções opostas. Quando uma força angular é aplicada a eles devido à rotação da estrutura inercial, as forças de Coriolis atuam sobre as duas massas em direções opostas. Isto provoca uma deflexão das massas em direções opostas ao longo do eixo da Força de Coriolis, causando uma mudança na capacitância entre elas.

Princípio de funcionamento do giroscópio MEMS

Princípio de funcionamento do giroscópio MEMS

O giroscópio MEMS consiste em uma massa de prova dividida em quatro partes. Uma massa fixa suspende cada parte no centro. As massas oscilam continuamente para dentro e para fora ao longo do plano horizontal.

Estrutura do giroscópio MEMS

Estrutura do giroscópio MEMS

Quando o giroscópio gira, as massas de prova que passam por uma força oscilante horizontal experimentam uma força vertical devido ao Efeito Coriolis. Existem três modos baseados no eixo de rotação.

Quando o eixo de rotação é o eixo X, as placas M1 e M3 movem-se para cima e para baixo, desviando-se do plano horizontal. Isso é chamado de modo Roll.

Modo Roll no giroscópio MEMS

Modo Roll no giroscópio MEMS

Quando o eixo de rotação é o eixo Y, as placas M2 e M4 movem-se para cima e para baixo, desviando-se do plano horizontal. Isso é chamado de Modo Pitch.

Modo pitch no giroscópio MEMS

Modo pitch no giroscópio MEMS

Quando o eixo de rotação é o eixo Y, as placas M1 e M3 se movem na direção oposta no plano horizontal, e ao mesmo tempo as placas M2 e M4 também se movem na direção oposta no plano horizontal. Isso é chamado de Modo Yaw.

Modo de guinada no giroscópio MEMS

Modo de guinada no giroscópio MEMS

Quando a deflexão nas massas motrizes causa uma alteração na capacitância detectada por um sensor de alta precisão e é convertida em um sinal de tensão proporcional.

Sensor de rastreamento de movimento MPU6050
MPU6050 é um sensor de rastreamento de movimento de 6 DoF de baixo custo com um acelerômetro no chip de 3 eixos e um giroscópio no chip de 3 eixos. Também inclui um sensor de temperatura que mede a temperatura operacional da matriz de silício na faixa de -40˚C a 85˚C. Deve-se observar que o sensor de temperatura incorporado no MPU6050 não lê a temperatura ambiente; ele lê a temperatura operacional do IC. As medições de temperatura são utilizadas para a calibração do acelerômetro e do giroscópio. A medição de temperatura também pode ser usada para detectar mudanças de temperatura. MPU6050 tem o seguinte diagrama de pinos

Configuração de pinos do sensor MPU6050

Pinagem do acelerômetro MPU6050 mais giroscópio

MPU6050 encontra sua importância devido ao seu processador de movimento digital (DMP) no chip. O DMP do sensor faz todos os cálculos complexos, enviando valores diretos de aceleração e rotação para qualquer controlador/computador externo por meio de uma interface I2C. O sensor possui dois conversores analógico-digitais de 16 bits no chip. Um ADC de 16 bits converte simultaneamente os valores de aceleração linear em três eixos detectados pelo acelerômetro no chip, que pode ser ajustado para quatro escalas programáveis ​​– +/-2g, +/-4g, +/-8g e +/- 16g. Outro ADC de 16 bits converte simultaneamente os valores de aceleração angular em três eixos de rotação (modo de rotação, modo de inclinação e modo de guinada) detectados pelo giroscópio no chip. O giroscópio pode ser ajustado para quatro escalas programáveis ​​de +/-250˚/s, +/-500˚/s, +/-1000˚/s e +/-2000˚/s.

O MPU6050 se comunica com um controlador/computador na interface I2C. Possui dois endereços I2C – 0x68 e 0x69 para evitar qualquer conflito com outros dispositivos I2C que compartilham o mesmo barramento. O endereço I2C do MPU6050 pode ser controlado a partir do pino ADO. Se o pino ADO não estiver conectado, o módulo terá um endereço I2C padrão de 0x68. Se o pino ADO estiver conectado a 3,3V, o módulo terá um endereço I2C de 0x69.

É possível conectar um magnetômetro externo ao MPU6050. A placa breakout possui um barramento I2C separado nos pinos XDA e XCL. A placa de interrupção também possui um pino de interrupção para acionar uma interrupção de hardware na detecção de movimento, choque ou queda.

Interface MPU6050 com Arduino
É simples fazer a interface do MPU6050 com o Arduino. A placa breakout MPU6050 possui um regulador LD3985 3,3V. Assim, podemos conectar o módulo diretamente com qualquer Arduino de 5V. O sensor pode ser alimentado pela fonte do Arduino, e os pinos I2C do módulo devem ser conectados à porta I2C do Arduino. As portas I2C no Arduino UNO são mostradas na imagem abaixo.

Portas I2C no Arduino UNO

Portas I2C no Arduino UNO

O pino de interrupção do MPU6050 pode ser conectado a qualquer GPIO do Arduino.

Conexões de circuito
Este projeto possui uma interface MPU6050 com Arduino UNO e exibe as leituras de temperatura, acelerômetro e giroscópio em um display OLED SSD1306. Para a interface do MPU6050, os pinos VCC e GND do MPU6050 são conectados à saída de 5V e aos pinos de aterramento do Arduino; os pinos SDA e SCL do módulo são conectados à porta I2C do Arduino, e o pino de interrupção do módulo é conectado ao pino D2 do Arduino.

O SSD1306 faz interface com o Arduino usando a porta SPI física do Arduino. Para fazer a interface do SSD1306 OLED via porta SPI física, conecte os pinos D0/SCK e D1/MOSI do SSD1306 OLED aos pinos D13 e D11 do Arduino, respectivamente. Conecte os pinos DC, RESET e CS do SSD1306 aos pinos D9, D10 e D8 do Arduino, respectivamente.

Interface MPU6050 com Arduino

Diagrama de circuito de interface MPU6050 com Arduino

Bibliotecas Arduino para MPU6050
Existem várias bibliotecas Arduino disponíveis para trabalhar com MPU6050. A biblioteca Adafruit MPU6050 da Adafruit é bastante popular. Usamos a biblioteca Arduino-MPU6050 fornecida por jarzebski do Github neste projeto. A biblioteca é licenciada sob GPL 3.0.

Esboço do Arduino

Guia de programação
O esboço começa com a importação das bibliotecas Wire e Arduino-MPU6050 para comunicação I2C com o sensor MPU6050. As bibliotecas para trabalhar com SSD1306 OLED são importadas em seguida. Um 'período' constante é definido para armazenar o intervalo de tempo para leitura dos valores do sensor de temperatura incorporado, acelerômetro e giroscópio, um por um. As constantes para resolução da tela e atribuição de pinos do display OLED são declaradas. Os objetos da classe Adafruit_SSD1306 e MPU6050 são instanciados. A seguir, um bitmap e um array são definidos para armazenar o logotipo do site.

Na função setup , a taxa de transmissão para comunicação serial com o Serial Monitor é definida como 9600 bps. O sensor MPU6050 é testado usando o método mpu.begin e é calibrado chamando o método mpu.calibrateGyro . A escala do sensor é definida chamando o método mpu.setThreshold . A tela OLED é inicializada e o logotipo do site pisca nela.

Na função loop , as leituras do sensor de temperatura integrado, acelerômetro e giroscópio são amostradas com um atraso de 1 segundo e exibidas na tela OLED. A temperatura é obtida chamando o método mpu.readTemperature . As leituras do giroscópio são obtidas chamando os métodos mpu.readRawGyro e mpu.readNormalizeGyro . Os valores normalizados para os modos roll, pitch e yaw são recuperados chamando as propriedades normGyro.XAxis, normGyro.YAxis e normGyro.ZAxis, respectivamente. Os valores de aceleração são obtidos chamando os métodos mpu.readRawAccel e mpu.readNormalizeAccel . Os valores de aceleração normalizados nos eixos X, Y e Z são recuperados chamando as propriedades normAccel.XAxis, normAccel.YAxis e normAccel.ZAxis, respectivamente.

Resultados

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.