The GY-BNO085 is an advanced Inertial Measurement Unit (IMU) manufactured by Teyleten Robot. This IMU integrates accelerometers, gyroscopes, and magnetometers to provide precise measurements of specific force, angular rate, and magnetic field. It is widely used in applications requiring accurate motion tracking and orientation sensing.
Common applications include:
The GY-BNO085 is a high-performance IMU with the following key specifications:
Parameter | Value |
---|---|
Manufacturer | Teyleten Robot |
Part Number | GY-BNO085 |
Operating Voltage | 3.3V - 5V |
Communication Protocols | I2C, SPI |
Accelerometer Range | ±2g, ±4g, ±8g, ±16g |
Gyroscope Range | ±125°/s, ±250°/s, ±500°/s, ±1000°/s, ±2000°/s |
Magnetometer Range | ±4900 µT |
Operating Temperature | -40°C to +85°C |
Dimensions | 15mm x 15mm |
The GY-BNO085 has the following pinout:
Pin | Name | Description |
---|---|---|
1 | VIN | Power input (3.3V - 5V) |
2 | GND | Ground |
3 | SCL | I2C Clock Line (or SPI Clock in SPI mode) |
4 | SDA | I2C Data Line (or SPI MOSI in SPI mode) |
5 | CS | Chip Select (used in SPI mode; connect to GND for I2C mode) |
6 | INT | Interrupt pin (used for event notifications) |
7 | RST | Reset pin (optional, used to reset the module) |
0x4A
. Verify this in your setup.Below is an example of how to interface the GY-BNO085 with an Arduino UNO using the I2C protocol:
#include <Wire.h> // Include the Wire library for I2C communication
#define BNO085_I2C_ADDRESS 0x4A // Default I2C address of the GY-BNO085
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Start serial communication for debugging
// Check if the IMU is connected
Wire.beginTransmission(BNO085_I2C_ADDRESS);
if (Wire.endTransmission() == 0) {
Serial.println("GY-BNO085 connected successfully!");
} else {
Serial.println("Failed to connect to GY-BNO085. Check wiring.");
while (1); // Halt execution if the IMU is not detected
}
}
void loop() {
// Example: Request data from the IMU
Wire.beginTransmission(BNO085_I2C_ADDRESS);
Wire.write(0x00); // Example register address (replace with actual register)
Wire.endTransmission();
Wire.requestFrom(BNO085_I2C_ADDRESS, 6); // Request 6 bytes of data
if (Wire.available() == 6) {
int16_t accelX = Wire.read() | (Wire.read() << 8); // Read X-axis acceleration
int16_t accelY = Wire.read() | (Wire.read() << 8); // Read Y-axis acceleration
int16_t accelZ = Wire.read() | (Wire.read() << 8); // Read Z-axis acceleration
// Print the acceleration values
Serial.print("Accel X: "); Serial.print(accelX);
Serial.print(" Y: "); Serial.print(accelY);
Serial.print(" Z: "); Serial.println(accelZ);
}
delay(100); // Delay for stability
}
IMU Not Detected:
0x4A
) matches your setup.Inaccurate Readings:
Communication Errors:
By following this documentation, you can effectively integrate the GY-BNO085 IMU into your projects and achieve accurate motion and orientation sensing.