npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

tessel-mpu6050

v0.0.3

Published

A Tessel compatible driver for the InvenSense MPU-6050

Downloads

1

Readme

tessel-mpu6050

A Tessel-compatible driver for the InvenSense MPU-6050 IMU.

Installation

npm install tessel-mpu6050

Usage

This driver has been designed to work similar to the official Tessel accelerometer module, see accel-mma84.

var tessel = require('tessel');
var mpu6050 = require('tessel-mpu6050').use(tessel.port['A']);

mpu6050.on('ready', function() {
  setInterval(function() {
    mpu6050.getPitchAndRoll(100, function(pitch, roll) {
      console.log('pitch:', pitch, 'roll:', roll);
    });
  }, 100);
});

Hardware setup

This driver is designed to communicate with the MPU-6050 over I2C. You can use the MPU-6050 over any of the four Tessel module ports labelled A through D by connecting the pins for GND, 3.3V, SDA, and SCL. The wiring diagram below shows how this works with the GY-521 breakout board.

GY-521 Wiring Diagram

The dashed line in the diagram shows how the AD0 pin can optionally be pulled high, this changes the I2C address of the chip to 0x69 (usually 0x68), which is handy if you want to connect two boards to the same I2C bus.

Available Methods

use(port, address)
Convenience method to wrap the Mpu6050 constructor function. port should be the port on the tessel that is being used. address is an optional parameter that sets the I2C address for the constructor function. The I2C address for the MPU-6050 is either 0x68 (default) or 0x69 if the AD0 pin is pulled high. constants.I2C_ADDR and constants.I2C_ADDR_HIGH can be used to determine which address to use. For example, to use two MPU-6050's on ports A and B:

var Mpu6050 = require('tessel-mpu6050');
var mpu6050 = Mpu6050.use(tessel.port['A']);                                   // Uses 0x68
var mpu6050b = Mpu6050.use(tessel.port['B'], Mpu6050.constants.I2C_ADDR_HIGH); // Uses 0x69

mpu6050.init()
Initialises the module with defaults for sample rate, DLPF, ±250°/s full scale gyroscope range, and ±2g full scale accelerometer range.

mpu6050._readRegisters(addressToRead, bytesToRead, callback(err, rx))
Reads a number of bytes from the device at the supplied address over I2C. The callback function will be called when the read is complete with an error from the Tessel's I2C library, or a Buffer containing the bytes that were read.

mpu6050._writeRegisters(addressToWrite, dataToWrite, callback(err)
Writes a single byte of data to the device at the supplied address over I2C. The callback function will be called when the write is complete with an error from the Tessel's I2C library if the write was not successful.

mpu6050.readAccelerometerData(callback(ax, ay, az))
Reads the current acceleration measured by the device's accelerometer on x, y, and z axes. Values supplied to the callback function are measured in g.

mpu6050.readTempData(callback(temp))
Reads the current temperature from the device. Temperature value supplied to the callback function measured in Celsius (°C).

mpu6050.readGyroData(callback(gx, gy, gz))
Reads the current rotational velocity measured by the device's gyroscope. Raw gyroscope values have gyro offsets removed and are scaled before being returned. Values supplied to the callback are measured in degrees per second (°/s).

mpu6050.readGyroRaw(callback(gx, gy, gz))
Provides raw readings directly from the gyroscope with no conversions applied. Useful for calibrating device.

mpu6050.readMotionData(callback(ax, ay, az, gx, gy, gz))
Reads acceleration and rotation measurements from the device's accelerometer and gyroscope simultaneously. Values returned are the same as would otherwise be read individually through readAccelerometerData and readGyroData.

mpu6050.getAccelPitchAndRoll(ax, ay, az)
Converts the 3-axis acceleration vectors into pitch and roll measurements. Output as an object containing { pitch, roll }. Output values are measured in degrees.

mpu6050.readPitchAndRoll(delayMs, callback(pitch, roll))
Reads acceleration and rotation measurements from the device and calculates combined pitch and roll values using a complementary filter. The delayMs arguments tells the module how frequently reads will be taken and therefore how many milliseconds have elapsed since the last reading - this is required for integration of gyroscope output to produce pitch and roll measurements. Values supplied to the callback are measured in degrees.

mpu6050.setSleepModeEnabled(enabled)
Sets the sleep mode of the device to the value of enabled.

mpu6050.setAccelerometerRange(range, callback(err))
Sets the full scale range of the accelerometer to the value of range. Throws an error if range is not one of the allowed ranges [2, 4, 8, 16]. The callback will be called with an error from the Tessel I2C library if any error occurred.

mpu6050.setGyroRange(range, callback(err))
Sets the full scale range of the gyroscope to the value of range. Throws an error if range is not one of the allowed ranges [250, 500, 1000, 2000]. The callback will be called with an error from The Tessel I2C library if any error occurred.

mpu6050.setGyroOffsets(x, y, z)
Sets offsets for the gyroscope for each of the x, y, and z axes. This method can be used to set offsets for gyroscope readings, useful for gyroscope calibration.

constants
An object of constants for reading and writing config values. Allows you to read/write registers that are not currently wrapped within the library using _readRegisters or _writeRegisters directly.

The convenience methods here do not model the complete functionality of the MPU-6050 and there are advanced configurations that aren't possible with the methods provided by this module alone. For any advanced configuration, I recommend using _readRegisters and writeRegisters directly, as required by your use case.

Contributions

Any thoughts, comments, ideas, issues, or pull requests are welcome and appreciated.

License

MIT