CruizCore XG1300L IMU for LEGO Mindstorms NXT
The Instrumentation
The XG1300L contains a single axis gyroscope and a three-axis accelerometer. The directions of these axes may be seen in the picture below.
Connecting via NXT
Lego NXT is a proprietary method of consolidating an analog I/O and an I2C bus into a single 6 connector cable. This allows the same cable to be utilized for many different sensors. In order to make connecting to the LG1300L sensor easier, we used a breakout module to attach an NXT cable to the breadboard. The pinout for this breakout board may be seen below.
Information
NXT connectors use a heavily modified RJ-12 connector. If acquiring NXT cables is not convenient for you(or you just don't want to spend the money on them), a tutorial explaining how you can synthesize your own NXT cables from classic RJ-12 phone jacks can be found here
Noting that all NXT sensors are 5V tolerant, the mbed should be connected to the adapter using the following convention:
MBED | NXT |
---|---|
-- | Analog |
GND | GND |
GND | GND |
4.3V | VU(5V) |
SCL | P27 |
SDA | P28 |
Below is a schematic giving a full layout of all of the connections between the mbed and the NXT breakout board.
PLEASE NOTE!
Because the NXT interface is a standard I2C bus, both SDA and SDL must be connected to pull-up resistors in order to function properly. Failure to do so will create unpredictable (and unintelligible) readings from the sensor.
Library API
Import library
Public Member Functions |
|
LG1300L (I2C &i2c, int ACC_SETTING) | |
Create an IMU readout interface.
|
|
float | GetAngle () |
Returns a float containing the current Accumulated Angle.
|
|
float | GetROT () |
Returns a float containing the current ROT.
|
|
float | GetACC_X () |
Returns a float containing the current acceleration on the X axis.
|
|
float | GetACC_Y () |
Returns a float containing the current acceleration on the Y axis.
|
|
float | GetACC_Z () |
Returns a float containing the current acceleration on the Z axis.
|
Implementation
Import programLG1300L_Hello_World
Hello Word for the LG1300L IMU
LG1300L _Hello_World.cpp
#include "mbed.h" #include "LG1300L.h" Serial pc(USBTX, USBRX); // tx, rx I2C i2c(p28,p27); DigitalOut LED (LED1); int main() { LG1300L IMU(i2c, 2); while(1) { float angle = IMU.GetAngle(); float ROT= IMU.GetROT(); float X_ACC = IMU.GetACC_X(); float Y_ACC = IMU. GetACC_Y(); float Z_ACC = IMU. GetACC_Z(); pc.printf("///////////////////////////////////\n"); pc.printf("//ANGLE: %f\n", angle); pc.printf("//ROT: %f\n", ROT); pc.printf("//X-Axis: %f\n", X_ACC ); pc.printf("//Y-Axis: %f\n", Y_ACC ); pc.printf("//Z-axis: %f\n", Z_ACC ); pc.printf("///////////////////////////////////\n"); wait(1); } }
Demos
The LG1300L_Hello_World_LCD program outputs the IMU sensor reading to the LCD display. The LCD displays both the gyroscope and the accelerometer readings. Clockwise rotation results in a positive angle from 0 to 180 degrees. Counter-clockwise rotation results in a negative angle from 0 to -179.99. Acceleration around the X-axis is displayed in Gs.
Import programLG1300L_Hello_World_LCD
Demo Program
LG1300L_Hello_World_LCD
#include "mbed.h" #include "TextLCD.h" #include "LG1300L.h" TextLCD lcd(p15, p16, p17, p18, p19, p20); // rs, e, d4-d7 I2C i2c(p28,p27); int main() { LG1300L IMU(i2c, 2); while(1) { float angle = IMU.GetAngle(); float X_ACC = IMU.GetACC_X(); pc.printf("//ANGLE: %f\n", angle); pc.printf("//X-Axis: %f\n", X_ACC ); wait(1); } }
This video demonstrates the functionality of the LG1300L Hello World program.
Please log in to post comments.