Tabla de contenido:

Interfaz del sensor de giroscopio de 3 ejes BMG160 con Raspberry Pi: 5 pasos
Interfaz del sensor de giroscopio de 3 ejes BMG160 con Raspberry Pi: 5 pasos

Video: Interfaz del sensor de giroscopio de 3 ejes BMG160 con Raspberry Pi: 5 pasos

Video: Interfaz del sensor de giroscopio de 3 ejes BMG160 con Raspberry Pi: 5 pasos
Video: Учебное пособие по Python для трехосного гироскопа Raspberry Pi BMG160 2024, Noviembre
Anonim
Image
Image

En el mundo actual, más de la mitad de los jóvenes y los niños son aficionados a los juegos y todos los que les gustan, fascinados por los aspectos técnicos de los juegos, conocen la importancia de la detección de movimiento en este ámbito. También nos sorprendió lo mismo y solo para traerlo a las placas, pensamos en trabajar en un sensor de giroscopio que pueda medir la velocidad angular de cualquier objeto. Entonces, el sensor que usamos para hacer frente a la tarea es BMG160. BMG160 es un sensor de giroscopio triaxial digital de 16 bits que puede medir la velocidad angular en tres dimensiones de habitación perpendiculares.

En este tutorial, vamos a demostrar el funcionamiento de BMG160 con Raspberry pi, utilizando Java como lenguaje de programación.

El hardware que va a necesitar para este fin es el siguiente:

1. BMG160

2. Raspberry Pi

3. Cable I2C

4. Escudo I2C para Raspberry Pi

5. Cable Ethernet

Paso 1: Descripción general de BMG160:

Que necesitas..!!
Que necesitas..!!

En primer lugar, nos gustaría familiarizarlo con las características básicas del módulo sensor que es BMG160 y el protocolo de comunicación en el que funciona.

BMG160 es básicamente un sensor de giroscopio triaxial digital de 16 bits que puede medir velocidades angulares. Es capaz de calcular velocidades angulares en tres dimensiones de habitación perpendiculares, los ejes x, y y z, y proporcionar las señales de salida correspondientes. Puede comunicarse con la placa Raspberry Pi mediante el protocolo de comunicación I2C. Este módulo en particular está diseñado para cumplir con los requisitos de aplicaciones de consumo, así como con fines industriales.

El protocolo de comunicación sobre el que trabaja el sensor es I2C. I2C significa circuito interintegrado. Es un protocolo de comunicación en el que la comunicación se realiza a través de líneas SDA (datos en serie) y SCL (reloj en serie). Permite conectar varios dispositivos al mismo tiempo. Es uno de los protocolos de comunicación más simples y eficientes.

Paso 2: ¡¡Lo que necesitas …

Que necesitas..!!
Que necesitas..!!
Que necesitas..!!
Que necesitas..!!
Que necesitas..!!
Que necesitas..!!

Los materiales que necesitamos para lograr nuestro objetivo incluyen los siguientes componentes de hardware:

1. BMG160

2. Raspberry Pi

3. Cable I2C

4. Escudo I2C para Raspberry Pi

5. Cable Ethernet

Paso 3: Conexión de hardware:

Conexión de hardware
Conexión de hardware
Conexión de hardware
Conexión de hardware

La sección de conexión de hardware básicamente explica las conexiones de cableado necesarias entre el sensor y la Raspberry Pi. Asegurar las conexiones correctas es la necesidad básica al trabajar en cualquier sistema para obtener la salida deseada. Entonces, las conexiones requeridas son las siguientes:

El BMG160 funcionará sobre I2C. Aquí está el diagrama de cableado de ejemplo, que demuestra cómo cablear cada interfaz del sensor.

Fuera de la caja, la placa está configurada para una interfaz I2C, por lo que recomendamos usar esta conexión si, por lo demás, es agnóstico. ¡Todo lo que necesitas son cuatro cables!

Solo se requieren cuatro conexiones Vcc, Gnd, SCL y pines SDA y estos se conectan con la ayuda del cable I2C.

Estas conexiones se muestran en las imágenes de arriba.

Paso 4: Medición del giroscopio de 3 ejes con código Java:

Medición con giroscopio de 3 ejes mediante código Java
Medición con giroscopio de 3 ejes mediante código Java
Medición con giroscopio de 3 ejes mediante código Java
Medición con giroscopio de 3 ejes mediante código Java

La ventaja de usar raspberry pi es que le brinda la flexibilidad del lenguaje de programación en el que desea programar la placa para conectar el sensor con ella. Aprovechando esta ventaja de esta placa, estamos demostrando aquí su programación en Java. El código Java para BMG160 se puede descargar de nuestra comunidad github que es Dcube Store Community.

Además de para la facilidad de los usuarios, también estamos explicando el código aquí: Como primer paso de la codificación, debe descargar la biblioteca pi4j en el caso de Java, porque esta biblioteca admite las funciones utilizadas en el código. Entonces, para descargar la biblioteca puede visitar el siguiente enlace:

pi4j.com/install.html

También puede copiar el código Java de trabajo para este sensor desde aquí:

import com.pi4j.io.i2c. I2CBus;

import com.pi4j.io.i2c. I2CDevice;

import com.pi4j.io.i2c. I2CFactory;

import java.io. IOException;

clase pública BMG160

{

public static void main (String args ) arroja una excepción

{

// Crear bus I2C

Bus I2CBus = I2CFactory.getInstance (I2CBus. BUS_1);

// Obtener dispositivo I2C, la dirección BMG160 I2C es 0x68 (104)

I2CDevice device = bus.getDevice (0x68);

// Seleccionar registro de rango

// Configurar rango de escala completa, 2000 dps

device.write (0x0F, (byte) 0x80);

// Seleccionar registro de ancho de banda

// Ancho de banda 200 Hz

device.write (0x10, (byte) 0x04);

Hilo.sueño (500);

// Leer 6 bytes de datos

// xGyro lsb, xGyro msb, yGyro lsb, yGyro msb, zGyro lsb, zGyro msb

byte datos = nuevo byte [6];

device.read (0x02, datos, 0, 6);

// Convertir datos

int xGyro = ((datos [1] y 0xFF) * 256 + (datos [0] y 0xFF));

si (xGyro> 32767)

{

xGyro - = 65536;

}

int yGyro = ((datos [3] y 0xFF) * 256 + (datos [2] y 0xFF));

si (yGyro> 32767)

{

yGyro - = 65536;

}

int zGyro = ((datos [5] y 0xFF) * 256 + (datos [4] y 0xFF));

si (zGyro> 32767)

{

zGyro - = 65536;

}

// Salida de datos a la pantalla

System.out.printf ("Eje X de rotación:% d% n", xGyro);

System.out.printf ("Eje Y de rotación:% d% n", yGyro);

System.out.printf ("Eje Z de rotación:% d% n", zGyro);

}

}

La biblioteca que facilita la comunicación i2c entre el sensor y la placa es pi4j, sus diversos paquetes I2CBus, I2CDevice e I2CFactory ayudan a establecer la conexión.

importar com.pi4j.io.i2c. I2CBus; importar com.pi4j.io.i2c. I2CDevice; import com.pi4j.io.i2c. I2CFactory; import java.io. IOException;

Esta parte del código hace que el sensor mida la velocidad angular escribiendo los comandos respectivos usando la función write () y luego los datos se leen usando la función read ().

// Seleccionar registro de rango // Configurar rango de escala completa, dispositivo de 2000 dps.write (0x0F, (byte) 0x80); // Seleccionar registro de ancho de banda // Dispositivo de ancho de banda 200 Hz.write (0x10, (byte) 0x04); Hilo.sueño (500);

// Leer 6 bytes de datos

// xGyro lsb, xGyro msb, yGyro lsb, yGyro msb, zGyro lsb, zGyro msb byte data = new byte [6]; device.read (0x02, datos, 0, 6);

Los datos recibidos del sensor se convierten al formato apropiado usando lo siguiente:

int xGyro = ((datos [1] y 0xFF) * 256 + (datos [0] y 0xFF)); si (xGyro> 32767) {xGyro - = 65536; } int yGyro = ((datos [3] y 0xFF) * 256 + (datos [2] y 0xFF)); if (yGyro> 32767) {yGyro - = 65536; } int zGyro = ((datos [5] y 0xFF) * 256 + (datos [4] y 0xFF)); si (zGyro> 32767) {zGyro - = 65536; }

La salida se imprime utilizando la función System.out.println (), en el siguiente formato.

System.out.println ("Eje X de rotación:% d% n", xGyro); System.out.println ("Eje Y de rotación:% d% n", yGyro); System.out.println ("Eje Z de rotación:% d% n", zGyro);

La salida del sensor se muestra en la imagen de arriba.

Paso 5: Aplicaciones:

Aplicaciones
Aplicaciones

BMG160 tiene una variedad de aplicaciones en dispositivos como teléfonos celulares, dispositivos de interfaz hombre-máquina. Este módulo de sensor ha sido diseñado para cumplir con los requisitos de aplicaciones de consumo tales como estabilización de imagen (DSC y teléfono con cámara), juegos y dispositivos señaladores. También se emplea en sistemas que requieren reconocimiento de gestos y los sistemas utilizados en la navegación interior.

Recomendado: