Magos do Arduino

Acelerômetro e giroscópio GY-521

Aprenda a utilizar um acelerômetro e giroscópio GY-521 com o Arduino

Magos do Arduino

Acelerômetro e giroscópio GY-521

O módulo GY-521 utiliza o sensor MPU-6050.

Acelerômetro e giroscópio GY-521

Ele combina um acelerômetro e um giroscópio em um único módulo.

O acelerômetro mede aceleração e inclinação, enquanto o giroscópio mede a velocidade de rotação e a orientação angular.

O acelerômetro do GY-521 possui três eixos: X, Y e Z.

O giroscópio do módulo também mede rotação nos eixos X, Y e Z.

O GY-521 se comunica com o Arduino por meio do protocolo I2C.

I2C é um método de comunicação serial que permite a troca de dados entre dispositivos usando apenas dois fios: um para dados (SDA) e outro para clock (SCL).

O endereço I2C padrão do módulo é 0x68.

O módulo pode operar com alimentação de 3.3v ou 5v.

Ele também faz leitura da temperatura do ambiente.

O GY-521 pode ser aplicado em drones e veículos autônomos.

Ele possui boa precisão para projetos educacionais e amadores.

Utilizaremos a biblioteca GY521 para controlá-lo, que pode ser instalada via gerenciador de bibliotecas da IDE do Arduino.

Pinagem:

VCC: pino de alimentação do módulo, normalmente ligado a 3.3V ou 5V.

GND: pino de terra do módulo.

SCL: linha de clock do protocolo I2C, conectada ao pino SCL do microcontrolador.

SDA: linha de dados do protocolo I2C, conectada ao pino SDA do microcontrolador.

INT: pino de interrupção, usado para avisar o microcontrolador sobre novos dados ou eventos.

ADO: define o endereço I2C do módulo, permitindo escolher entre 0x68 ou 0x69.

XCL: pino de clock auxiliar para sensores externos (pouco utilizado).

XDA: pino de dados auxiliar para sensores externos (pouco utilizado).

Acelerômetro e giroscópio GY-521

Neste projeto você criará um circuito que faz o uso de um acelerômetro e giroscópio GY-521 com o Arduino.

Para a criação deste circuito serão necessários os seguintes componentes:

  • 1x Breadboard (opcional)
  • 1x Arduino UNO
  • 1x Módulo acelerômetro GY-521
  • 2x LEDs de qualquer cor
  • 2x Resistores de 220-330Ohms
  • Jumpers

Circuito Acelerômetro e giroscópio GY-521

Para montar o circuito, visualize na imagem a seguir como conectar os componentes entre a placa Arduino e a breadboard.

Circuito Acelerômetro e giroscópio GY-521

Código fonte para o circuito do acelerômetro e giroscópio GY-521

Uma vez criado o circuito, use o código fonte a seguir no Arduino IDE para fazer o upload dele na placa Arduino e assim ver o resultado do circuito em funcionamento.

/**
 * Código do curso Magos do Arduino para utilizar o acelerômetro e giroscópio GY-521 
 * com o Arduino. 
 * 
 * Código que imprime no monitor serial os valores lidos do acelerômetro e giroscópio. 
 * Ele também controla dois LEDs que indicam a inclinação do eixo Y do acelerômetro.
 * 
 * Depende da biblioteca GY521, que pode ser instalada via gerenciador de bibliotecas 
 * da IDE do Arduino.
 *
 * (c) Copyright KazaleIT
 * @kazaleitoficial no YouTube
 **/

#include "GY521.h"

#define GY521_ENDERECO 0x68
#define PINO_LED_1 2
#define PINO_LED_2 3

// cria instância do sensor GY521
GY521 sensor(GY521_ENDERECO);

void setup() {
  pinMode(PINO_LED_1, OUTPUT);
  pinMode(PINO_LED_2, OUTPUT);

  Serial.begin(115200); // inicializa conexão serial

  Wire.begin(); // inicializa conexão I2C para o GY521

  // aguarda sensor estar pronto para leitura dos dados
  delay(100);
  while (sensor.wakeup() == false) {
    Serial.println("erro conectando ao sensor GY521, verifique se a conexão está correta.");
    delay(1000);
  }

  // define configurações padrões para o sensor
  sensor.setAccelSensitivity(0); // 2g
  sensor.setGyroSensitivity(0); // 250 graus
  sensor.setThrottle();

  // define valores padrões de calibração
  sensor.axe = 0;
  sensor.aye = 0;
  sensor.aze = 0;
  sensor.gxe = 0;
  sensor.gye = 0;
  sensor.gze = 0;
}

void loop() {
  sensor.read(); // realiza a leitura dos valores do sensor
  // leituras do acelerômetro
  float ax = sensor.getAccelX();
  float ay = sensor.getAccelY();
  float az = sensor.getAccelZ();
  // leituras do giroscópio
  float gx = sensor.getGyroX();
  float gy = sensor.getGyroY();
  float gz = sensor.getGyroZ();
  // leitura da temperatura em graus celsius
  float t = sensor.getTemperature();

  char buffer[200];
  sprintf(buffer, "Acelerômetro: (x:%4f, y:%4f, z:%4f), Giroscópio: (x:%4f, y:%4f, z:%4f), Temperatura: %f", 
    ax, ay, az, gx, gy, gz, t);
  Serial.println(buffer);

  // controlam os leds que monitoram o eixo Y do acelerômetro
  if (ay > 0.5) {
    digitalWrite(PINO_LED_1, HIGH);
  } else {
    digitalWrite(PINO_LED_1, LOW);
  }
  if (ay < -0.5) {
    digitalWrite(PINO_LED_2, HIGH);
  } else {
    digitalWrite(PINO_LED_2, LOW);
  }

  delay(500);
}