Run this example from the command line with:

node eg/gyro.js
var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  var servo = new five.Servo("O2");
  var gyro = new five.Gyro({
    pins: ["I0", "I1"],
    sensitivity: 0.67 // TK_4X
  });

  servo.center();

  var threshold = 2;
  var position = 0;
  var lapse = 0;

  var sampleTime = 10;
  var time = Date.now();

  var pitch = {
    value: 0,
    last: 0,
    angle: 0
  };

  var roll = {
    value: 0,
    last: 0,
    angle: 0
  };

  gyro.on("change", function(err, data) {
    var now = Date.now();

    console.log("X raw: %d rate: %d", this.x, this.rate.x);
    console.log("Y raw: %d rate: %d", this.y, this.rate.y);

    pitch.value = this.pitch.rate;
    roll.value = this.roll.rate;

    // Ignore the gyro if our angular velocity does not meet our threshold
    if (pitch.value >= threshold || pitch.value <= -threshold) {
      pitch.angle += ((pitch.last + pitch.value) * 10) / 1000;
    }

    if (roll.value >= threshold || roll.value <= -threshold) {
      roll.angle += ((roll.last + roll.value) * 10) / 1000;
    }

    pitch.last = pitch.value;
    roll.last = roll.value;

    if (roll.angle < 0) {
      roll.angle += 360;
    }

    if (roll.angle > 359) {
      roll.angle -= 360;
    }

    // counterclockwise rotation of the gyro...
    if (roll.angle >= 0 && roll.angle <= 90) {
      // ...produces rotation from 90 to 180 deg on servo
      position = (90 + roll) | 0;
    }

    // clockwise rotation of the gyro...
    if (roll.angle >= 270) {
      // ...produces rotation from 90 to 0 deg on servo
      position = (roll.angle - 270) | 0;
    }

    // console.log( position );
    servo.to(position);

    console.log("-----------------------------------");
  });
});

 

Component Classes in this example:

Hi! The Johnny-Five community is building new projects every day. We made this newsletter to tell you about what's new, what's good, and what's next for Open Source robotics. Join us in exploring what we can make together.

Fork me on GitHub