Paso 4:3-eje giroscopio medida de código Java:
La ventaja de usar frambuesa pi es, que le proporciona la flexibilidad del lenguaje de programación en la que desea programar el tablero para interfaz del sensor con él. Aprovechando esta ventaja de esta junta, estamos demostrando aquí su programación en Java. El código Java para BMG160 puede ser descargado de nuestra comunidad de github que es Comunidad de Control de todo.
Así como por la facilidad de los usuarios, nos estamos explicando el código aquí también: como el primer paso de la codificación es necesario descargar la biblioteca de pi4j en el caso de java, porque esta biblioteca es compatible con las funciones utilizadas en el código. Por lo tanto, para descargar la biblioteca puede visitar el siguiente enlace:
Puede copiar el código java de trabajo para este sensor de aquí también:
import com.pi4j.io.i2c.I2CBus;import com.pi4j.io.i2c.I2CDevice;import com.pi4j.io.i2c.I2CFactory;import java.io.IOException;public class BMG160{ public static void main(String args[]) throws Exception{ // Create I2C bus I2CBus bus = I2CFactory.getInstance(I2CBus.BUS_1); // Get I2C device, BMG160 I2C address is 0x68(104) I2CDevice device = bus.getDevice(0x68);// Select range register // Configure full scale range, 2000 dps device.write(0x0F, (byte)0x80); // Select bandwidth register // Bandwidth 200 Hz device.write(0x10, (byte)0x04); Thread.sleep(500); // Read 6 bytes of data // xGyro lsb, xGyro msb, yGyro lsb, yGyro msb, zGyro lsb, zGyro msb byte[] data = new byte[6]; device.read(0x02, data, 0, 6);// Convert data int xGyro = ((data[1] & 0xFF) * 256 + (data[0] & 0xFF)); if(xGyro > 32767) { xGyro -= 65536; }int yGyro = ((data[3] & 0xFF) * 256 + (data[2] & 0xFF)); if(yGyro > 32767) { yGyro -= 65536; }int zGyro = ((data[5] & 0xFF) * 256 + (data[4] & 0xFF)); if(zGyro > 32767) { zGyro -= 65536; } // Output data to screen System.out.printf("X-Axis of Rotation : %d %n", xGyro); System.out.printf("Y-axis of Rotation : %d %n", yGyro); System.out.printf("Z-axis of Rotation : %d %n", zGyro); }}
La biblioteca que facilita la comunicación i2c entre el sensor y la placa es pi4j, sus diferentes paquetes I2CBus, I2CDevice y I2CFactory ayudan a establecer la conexión.
import com.pi4j.io.i2c.I2CBus;import com.pi4j.io.i2c.I2CDevice; import com.pi4j.io.i2c.I2CFactory; import java.io.IOException;
Esta parte del código hace que el sensor mide la velocidad angular por escrito los respectivos comandos utilizando la función write() y luego se leen los datos mediante la función read().
// Select range register // Configure full scale range, 2000 dps device.write(0x0F, (byte)0x80); // Select bandwidth register // Bandwidth 200 Hz device.write(0x10, (byte)0x04); Thread.sleep(500);// Read 6 bytes of data // xGyro lsb, xGyro msb, yGyro lsb, yGyro msb, zGyro lsb, zGyro msb byte[] data = new byte[6]; device.read(0x02, data, 0, 6);
Los datos recibidos del medidor se convierten en el formato adecuado mediante el uso de los siguientes:
int xGyro = ((data[1] & 0xFF) * 256 + (data[0] & 0xFF)); if(xGyro > 32767) { xGyro -= 65536; } int yGyro = ((data[3] & 0xFF) * 256 + (data[2] & 0xFF)); if(yGyro > 32767) { yGyro -= 65536; } int zGyro = ((data[5] & 0xFF) * 256 + (data[4] & 0xFF)); if(zGyro > 32767) { zGyro -= 65536; }
La salida se imprime utilizando la función System.out.println(), en el siguiente formato.
System.out.println("X-Axis of Rotation : %d %n", xGyro); System.out.println("Y-axis of Rotation : %d %n", yGyro); System.out.println("Z-axis of Rotation : %d %n", zGyro);
La salida del sensor se muestra en la foto de arriba.