O módulo GY-521 utiliza o sensor MPU-6050.
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).
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:
Para montar o circuito, visualize na imagem a seguir como conectar os componentes entre a placa Arduino e a breadboard.
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);
}