MPU6050: módulo para posicionamento com Arduino

placa MPU6050

Se você precisa criar um projeto e posicioná-lo, ou seja, conheça como é colocado em relação ao espaço, você pode usar o módulo MPU6050. Ou seja, este módulo é uma unidade de medida inercial ou IMU (Inertial Measurment Units) com 6 graus de liberdade (DoF). Isso graças aos sensores do tipo acelerômetro de 3 eixos e um giroscópio de 3 eixos que ele implementa para funcionar.

Este MPU6050 pode saber como o objeto recipiente é posicionado para uso em aplicações navegação, goniometria, estabilização, controle de gestos, etc. Os telefones celulares geralmente incluem este tipo de sensores para, por exemplo, controlar certas funções por meio de gestos, como parar se o smartphone for virado, dirigir veículos em videogames girando o celular como se fosse um volante, etc.

O que é um acelerômetro e um giroscópio?

Exemplos de MEMS

Exemplos de MEMS

Bem, vamos em partes. A primeira coisa é ver quais são esses tipos de sensores que são capazes de detectar aceleração e curvas, como pode ser deduzido de seus próprios nomes.

  • Acelerômetro: mede a aceleração, ou seja, a mudança na velocidade por unidade de tempo. Lembre-se de que em física, a mudança na velocidade com o tempo (a = dV / dt) é a definição de aceleração. De acordo com a Segunda Lei de Newton, também temos que a = F / m, e é isso que os acelerômetros usam para funcionar, ou seja, usam parâmetros de força e massa do objeto. Para que isso possa ser implementado em eletrônica, são utilizadas técnicas de MEMS (Micro Electro Mechanical Systems), que se diferenciam das técnicas convencionais de fabricação de chips eletrônicos, pois as peças mecânicas são criadas em um MEMS. Neste caso, faixas ou elementos capazes de medir acelerações são criados. Isso implica que muitas outras unidades podem ser tomadas, como velocidade (se a aceleração for integrada no tempo), se for integrada novamente, temos deslocamento, etc. Ou seja, parâmetros muito interessantes para saber a posição ou detectar o movimento de um objeto.
  • Giroscópio: também chamado de giroscópio, é um dispositivo que mede a velocidade angular de um objeto, ou seja, o deslocamento angular por unidade de tempo ou a velocidade com que um corpo gira em torno de seu eixo. Nesse caso, as técnicas de MEMS também são usadas para medir essa velocidade usando um efeito conhecido como Coriolis. Graças a isso, a velocidade angular pode ser medida ou, integrando a velocidade angular em relação ao tempo, o deslocamento angular pode ser obtido.

Módulo MPU6050

Pinagem MPU6050

Agora que você sabe o que são o acelerômetro e o giroscópio, o módulo MPU6050 É uma placa eletrônica que integra esses dois elementos para permitir medir essas mudanças na posição de um elemento e assim ser capaz de gerar uma reação. Por exemplo, quando um objeto se move, um LED acende ou outras coisas muito mais complexas.

Como eu disse, ele tem 6 eixos de liberdade, DoF, Acelerômetro de aceleração de 3 eixos X, Y e Z e outro giroscópio de 3 eixos para medir a velocidade angular. Deve-se levar em conta para não cometer erros na forma como posiciona o módulo e no sentido de rotação para as medições, pois se der o sinal errado ficará um pouco caótico. Observe a imagem a seguir, onde especifica a direção dos eixos (no entanto, observe que o próprio PCB também o tem impresso em um lado):

Folha de Dados MPU6050

Considerando isso e a pinagem, mais ou menos você tem tudo claro para começar a usar o MPU6050. Como você pode ver na imagem anterior, as conexões são bastante simples e permitem que a comunicação I2C seja compatível com a maioria dos microcontroladores, incluindo o Arduino. Os pinos SCL e SDA têm um resistor pull-up na placa para conexão direta com a placa Arduino, então você não precisa se preocupar em adicioná-los.

Para trabalhar com ambas as direções no barramento I2C, você pode usar estes pinos e direções:

  • AD0 = 1 ou Alto (5v): para o endereço I0C 69x2.
  • AD0 = 0 ou Low (GND ou Nc): para o endereço 0x68 do barramento I2C.

Lembre-se que a tensão de operação do modelo é 3v3, mas felizmente ele tem um regulador embutido, então pode ser aliado ao 5v do Arduino sem problemas e irá transformá-lo em 3.3v.

Aliás, tendo uma resistência interna ao GND, se este pino não estiver conectado, o endereço por padrão será 0x68, uma vez que será conectado por padrão à terra, interpretando-o como um 0 lógico.

Integração com Arduino

Conexão Arduino e MPU6050

Você pode ter mais informações sobre o barramento I2C neste artigo. Você já sabe que dependendo da placa Arduino os pinos usados ​​para o barramento variam, mas no Arduino UNO é o pino analógico A4 e A5, para SDA (dados) e SCL (relógio) respectivamente. Eles são os únicos pinos do Arduino, junto com o 5v e o GND para alimentar a placa, que você deve usar. Portanto, a conexão é o mais simples possível.

Para as funções do MPU6050 você pode usar as bibliotecas das quais você pode obter mais informações neste link para o I2C do módulo e do ônibus MPU6050.

A programação da placa Arduino não é muito direta com o MPU6050, portanto, não é para iniciantes. Além disso, conhecendo os limites das acelerações ou faixas dos ângulos, você pode calibrar para determinar qual foi o movimento ou aceleração exata. No entanto, para que você possa pelo menos ter um exemplo de como comentar sobre como usá-lo, você pode ver este código do Esboço de exemplo para seu IDE Arduino que irá ler os valores registrados pelo acelerômetro e giroscópio:

// Bibliotecas necesarias:
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"

// Dependiendo del estado de AD0, la dirección puede ser 0x68 o 0x69, para controlar así el esclavo que leerá por el bus I2C
MPU6050 sensor;

// Valores RAW o en crudo leidos del acelerometro y giroscopio en los ejes x,y,z
int ax, ay, az;
int gx, gy, gz;

void setup() {
  Serial.begin(57600);    //Función para iniciar el puerto serie con 57600 baudios
  Wire.begin();           //Inicio para el bus I2C 
  sensor.initialize();    //Iniciando del sensor MPU6050

  if (sensor.testConnection()) Serial.println("Sensor iniciado correctamente");
  else Serial.println("Error al iniciar el sensor");
}

void loop() {
  // Leer las aceleraciones y velocidades angulares
  sensor.getAcceleration(&ax, &ay, &az);
  sensor.getRotation(&gx, &gy, &gz);

  // Muestra las lecturas que va registrando separadas por una tabulación 
  Serial.print("a[x y z] g[x y z]:\t");
  Serial.print(ax); Serial.print("\t");
  Serial.print(ay); Serial.print("\t");
  Serial.print(az); Serial.print("\t");
  Serial.print(gx); Serial.print("\t");
  Serial.print(gy); Serial.print("\t");
  Serial.println(gz);

  delay(100);
}

Se você é iniciante e não conhece bem como programar com Arduino IDESerá difícil para você entender, então você pode consultar nosso manual com o curso introdutório à programação em Arduino gratuitamente ...


Seja o primeiro a comentar

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.