,

Giroscópio GY-50 L3G4200D com ESP32

Posted by

Vamos começar a aprender como usar o giroscópio GY-50 L3G4200D com ESP32. Este giroscópio eletrônico vem em um módulo chamado GY-50 (compre aqui) e é capaz de medir a velocidade angular.

Isso significa que ele sabe a taxa em que gira, em graus. No passado (e também atualmente em alguns aviões) os giroscópios eram dispositivos mecânicos, como visto na imagem abaixo.

Giroscópio mecânico. Fonte: https://en.wikipedia.org/wiki/Gyroscope
Giroscópio mecânico. Fonte: https://en.wikipedia.org/wiki/Gyroscope

A principal função desse dispositivo é manter a orientação em relação a alguma referência, em geral a Terra. No nosso caso, o L3G4200D feito pela ST Semiconductors é interligado com um ESP32-C6 via código Arduino. Mas ele poderia funcionar sem problemas com qualquer Arduino, ESP8266, ESP32, Raspberry Pi Pico, etc.

A mágica do nosso artigo acontece devido ao fato de que existe uma biblioteca Arduino para esse giroscópio, chamada “L3G” da Pololu. Abra seu IDE Arduino, vá em “Sketch > Include library > Manage library” e digite “L3G”. Instale o da Pololu.

O circuito

Monte o circuito abaixo, que além do i2c também tem o pino SDO conectado a 3V3. O módulo L3G4200D também é alimentado por 3V3.

Diagrama esquemático do giroscópio com ESP32-C6
Diagrama esquemático do giroscópio com ESP32-C6
giroscópio l3g4200d
Montagem do giroscópio em protoboard

Código e testes

Agora que você instalou a biblioteca L3G no seu Arduino IDE e montou o circuito, copie e cole o código abaixo, que é um teste simples (bruto) das leituras.

/*
The sensor outputs provided by the library are the raw 16-bit values
obtained by concatenating the 8-bit high and low gyro data registers.
They can be converted to units of dps (degrees per second) using the
conversion factors specified in the datasheet for your particular
device and full scale setting (gain).

Example: An L3GD20H gives a gyro X axis reading of 345 with its
default full scale setting of +/- 245 dps. The So specification
in the L3GD20H datasheet (page 10) states a conversion factor of 8.75
mdps/LSB (least significant bit) at this FS setting, so the raw
reading of 345 corresponds to 345 * 8.75 = 3020 mdps = 3.02 dps.
*/

#include <Wire.h>
#include <L3G.h>

L3G gyro;

void setup() {
  Serial.begin(9600);
  Wire.begin();

  if (!gyro.init())
  {
    Serial.println("Failed to autodetect gyro type!");
    while (1);
  }

  gyro.enableDefault();
}

void loop() {
  gyro.read();

  Serial.print("G ");
  Serial.print("X: ");
  Serial.print((int)gyro.g.x);
  Serial.print(" Y: ");
  Serial.print((int)gyro.g.y);
  Serial.print(" Z: ");
  Serial.println((int)gyro.g.z);

  delay(100);
}

Conforme declarado no corpo do código, o valor apresentado não é dimensional (não tem uma unidade). Ele precisa ser multiplicado por um fator para que represente algo em dps (graus por segundo). Não consegui encontrar esse fator na folha de dados.

O monitor serial mostra algo como visto abaixo, esse valor muda conforme você gira e rotaciona a breadboard.

Leituras do giroscópio no monitor serial da IDE do Arduino
Leituras do giroscópio no monitor serial da IDE do Arduino

Pra finalizar

Como um Giroscópio GY-50 L3G4200D mede a taxa na qual o dispositivo gira, ele pode ser usado, por exemplo para robôs ou quadricópteros/drones. Os giroscópios são de fato parte dos chamados dispositivos 9-DOF (graus de liberdade), permitindo localização espacial precisa.

Se você quiser comprar um desses dispositivos L3G4200D, use meu link de afiliado aqui. Se quiser saber mais sobre outro sensor interessante (seguidor de linha) clique aqui.

Deixe um comentário

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