Control de giroscopios con Arduino

Aprender sobre el control de giroscopios con Arduino será sumamente interesante para cualquier novato que esté iniciando en la programación de Arduino. Los giroscopios , pueden usarse para controlar la orientación de drones, robots y vehículos autónomos.

En este proyecto conectaremos un giroscopio de 3 ejes modelo L3GD20H, que probablemente es el giroscopio más popular para proyectos Arduino.

Proyecto de control de giroscopios con Arduino

Como ya te enteraste en el párrafo anterior, para este proyecto usaremos un módulo L3GD20H, que si no lo conoces, en la siguiente figura se muestra:

Diagrama de pin de giroscopio L3GD20H.jpg

El módulo L3GD20H se alimenta mediante 3,3 voltios, siendo posible alimentarlo con el suministro de 5 voltios de Arduino.

El giroscopio posee ocho pines para conexión con Arduino:

  • VIN: entrada de energía. Normalmente 3,3 voltios pero puede ser de 5 voltios si hay un regulador de voltaje.
  • GND: Se conecta a tierra en el Arduino.
  • SCL: Para comunicación I2C.
  • SDA: Para comunicación I2C.
  • SDO: para comunicaciones SPI.
  • CS: para comunicaciones SPI.
  • INT2: pin de interrupción de hardware.
  • INT1: pin de interrupción de hardware.

Las flechas direccionales están impresas en la parte superior de la placa para indicar cómo se orientan los ejes del sensor en relación con la PCB.

El eje z apunta hacia arriba y hacia abajo a 90° del plano de la PCB.

Conexión del giroscopio L3GD20H a la placa Arduino

El L3GD20H puede comunicarse con Arduino a través de los protocolos I2C o SPI. Conectaremos el sensor con el protocolo I2C porque usa menos cables.

La figura a continuación ilustra el montaje físico para este proyecto:

Diagrama de cableado L3GD20H.png

Intalación de librerías y código de Arduino

En esta oportunidad se debe hacer uso de la librería 3GL de Pololu. Puedes encontrar esta librería en GitHub.

Luego de que hayas instalado tu nueva librería en tu IDE de Arduino, sube el código siguiente:

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

L3G gyro;

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

  if (!gyro.init()) {
    Serial.println("Error al detectar el tipo de giroscopio");
    while (1);
  }

  gyro.enableDefault();
}

void loop() {

  gyro.read();

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

  delay(200);
}

Como puedes observar lo primero es llamar las librerías.

La librería L3G y ya que se usa el protocolo I2C, se debe incluir también la librería Wire.

Se crea un objeto llamado gyro para clasificar L3G.

En bloque de código de setup() se inicializa el monitor serial y el protocolo I2C llamando a Wire.begin().

Luego se crea una sentencia if con el init() como una condición.

La función init() detectará el tipo de giroscopio conectado al Arduino y su dirección I2C.

Si no se detecta el tipo de giroscopio, la función init() devolverá un valor falso.

En este caso, el operador NOT invierte la salida.

Si la condición es verdadera, se ejecuta el cuerpo de la instrucción if y se imprime el texto: «Error al detectar el tipo de giroscopio», seguido de un ciclo while vacío que continúa indefinidamente.

Si se detecta el tipo de giroscopio, la función init() devuelve un valor verdadero.

Pero el operador NOT invierte la salida, siendo una declaración falsa el programa ignora la instrucción if.

Finalizando el bloque de setup(), se hace uso de la función enableDefault() que es llamada a través de del objeto gyro. Esto enciende el giroscopio y establece su rango de sensibilidad en ±245º por segundo.

Dentro de la sección loop(), se registran los valores brutos de cada eje del sensor llamando a la función read() a través del objeto gyro.

El sensor generará un valor de 16 bits para cada eje.

Se puede acceder a las lecturas para cada eje usando las siguientes variables:

  • eje X: gyro.g.x
  • eje Y: gyro.g.y
  • eje Z: gyro.g.z

Usando las variables anteriores, usamos varios llamados a la función Serial.print() para imprimir el valor bruto de cada eje enviados por el sensor.

Al final del bloque de loop(), retrasamos 200 ms para que la salida sea más fácil de leer.

Una vez el giroscopio esté conectado la placa Arduino y se haya descargado el código anterior,  el monitor serie presentará los datos sin procesar desde el sensor:

Salida sin procesar del giroscopio L3GD20H en el monitor serie Arduino.png
Esperamos que este sencillo proyecto sea de utilizad para mostrarte cómo configurar el control de giroscopios con Arduino.

Deja un comentario

programar en arduino logo

En este sitio aprenderas a programar en Arduino de forma gratuita a través de sencillos tutoriales y distintos proyectos.