Fala galera tudo bem com vocês? Hoje vamos aprender a usar de maneira bem fácil o giroscópio (GY-521/MPU–6050), que normalmente é usado para medir a aceleração e ângulo de rotação em 3 eixos (X, Y e Z). Esses movimentos são ilustrados pelas setas circulares na figura abaixo:
O giro e a variação da velocidade rotacional vão incrementar ou decrementar o valor das variáveis correspondentes a cada eixo de movimento.
Ex.: Realizando um determinado movimento, a tela do “PC” poderá mostrar: Inclinação (X=46 ; Y=78 ; Z=70) ; Velocidade de inclinação (X=77 ; Y=0 ; Z=2).
Entendendo o hardware GY-521: Acelerômetro e giroscópio
A figura abaixo mostra a relação de pinos e suas funções diretamente da placa de circuito do GY-521:
Os pinos SCL e SDA são responsáveis pela comunicação com o controlador (Arduino no nosso caso) e utilizam o protocolo de comunicação 12C. Não precisamos saber muitos detalhes sobre o funcionamento do protocolo I2C para evoluir neste projeto, mas você pode se aprofundar no assunto em um resumo que preparamos de um artigo sobre este protocolo da Universidade Federal do Vale do São Francisco clicando aqui.
A Interface I2C Auxiliar permite a conexão de mais um dispositivo além do controlador que será conectado na Interface I2C padrão.
Conectando os pinos
Antes de começar a conectar, solde os pinos na placa do módulo e conecte os fios conforme a figura abaixo:
Na imagem abaixo podemos ver uma demonstração da montagem final:
Obs.: Caso utilize o Arduino Mega (Nosso caso), os pinos SDA e SCL deverão ser conectados nas portas 20 e 21 respectivamente. Caso contrário, serão mostrados valores (-1) em todas as medições.
Desenvolvendo o código
Abaixo segue o código fonte para este estudo do GY-521:
//Programa: Teste GY-521 // Publicação: Blog do Arduino Ômega. //Programador: Engº Leandro Castro. //Baseado no programa original de JohnChi //Carrega a biblioteca Wire #include<Wire.h> const int MPU = 0x68; // Variável que irá armazenar o endereço do módulo int AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ; //Criando variaveis de inclinação e acelaração. void setup() { Serial.begin(9600); // Iniciando objeto serial com parâmetro de taxa de transmissão Wire.begin(); // Iniciando objetos do módulo Wire.beginTransmission(MPU) // Adicionando tipo de CI do módulo; Wire.write(0x6B); //Inicializa o MPU-6050 Wire.write(0); Wire.endTransmission(true); } void loop() { Wire.beginTransmission(MPU); Wire.write(0x3B); // Começando com o registrador 0x3B (ACCEL_YOUT_H) Wire.endTransmission(false); //Solicita os dados do sensor Wire.requestFrom(MPU, 14, true); //Armazena o valor dos sensores nas variáveis correspondentes AcY = Wire.read() << 8 | Wire.read(); //0x3B (ACCEL_YOUT_H) & 0x3C (ACCEL_YOUT_L) AcX = Wire.read() << 8 | Wire.read(); //0x3D (ACCEL_XOUT_H) & 0x3E (ACCEL_XOUT_L) AcZ = Wire.read() << 8 | Wire.read(); //0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L) Tmp = Wire.read() << 8 | Wire.read(); //0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L) GyX = Wire.read() << 8 | Wire.read(); //0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L) GyY = Wire.read() << 8 | Wire.read(); //0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L) GyZ = Wire.read() << 8 | Wire.read(); //0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L) //Envia valor X do acelerometro para a serial e o LCD Serial.print("Inclinacao X = "); Serial.print(AcX); //Envia valor Y do acelerometro para a serial e o LCD Serial.print(" | Inclinacao Y = "); Serial.print(AcY); //Envia valor Z do acelerometro para a serial e o LCD Serial.print(" | Inclinacao Z = "); Serial.print(AcZ); //Envia valor X do giroscopio para a serial e o LCD Serial.print(" | Vel.Inclinacao X = "); Serial.print(GyX); //Envia valor Y do giroscopio para a serial e o LCD Serial.print(" | Vel.Inclinacao Y = "); Serial.print(GyY); //Envia valor Z do giroscopio para a serial e o LCD Serial.print(" | Vel.Inclinacao Z = "); Serial.println(GyZ); //Aguarda 100 ms e reinicia o processo delay(100); }
Teste e resultados
Caso a conectorização dos pinos esteja correta, os resultados abaixo deverão ser mostrados nas telas “Monitor serial” e “Ploter serial” no software do Arduino:
É fácil encontrar na internet textos falando sobre o GY-521 como sendo um sensor que mede, além da inclinação e aceleração. Os resultados mostraram que na verdade, os valores medidos são de inclinação e velocidade de inclinação e não de translação, como muitos pensam.
Outro resultado curioso é que o ângulo de inclinação no eixo Z não obedeceu aos movimentos de teste aplicados no módulo, reforçado pelo fato de que o princípio físico por trás da medição de rotação neste eixo seja igual ao encontrado em uma bússola, diferentemente do módulo GY-521. Os valores dos demais eixos foram medidos normalmente.
Por hoje é só pessoal, qualquer dúvida ou sugestão, deixa um comentário no espaço abaixo, e aproveitem para conhecer o meu canal no Youtube o Canal Engrenagens! Abraços!
Deixe uma resposta