$30 off During Our Annual Pro Sale. View Details »

Hardware Hacking with JavaScript

Hardware Hacking with JavaScript

Presented at WXG 2014

Andrew Nesbitt

September 26, 2014
Tweet

More Decks by Andrew Nesbitt

Other Decks in Programming

Transcript

  1. HARDWARE HACKING
    WITH
    JAVASCRIPT

    View Slide

  2. ANDREW NESBITT

    View Slide

  3. ELECTRONICS,
    ROBOTICS AND
    INTERNET OF THINGS
    FOR
    WEB DEVELOPERS

    View Slide

  4. MY ROBOT STORY

    View Slide

  5. View Slide

  6. View Slide

  7. View Slide

  8. BEng Robotics & Automated Systems
    University of Plymouth

    View Slide

  9. View Slide

  10. Advanced Mathematics
    Mechanical Engineering
    Digital Electronics Analogue Electronics
    Computer Science
    Control Theory
    Neural Networking Microprocessor Design
    Playing with Robots
    LEARNING ROBOTICS

    View Slide

  11. Advanced Mathematics
    Advanced Mathematics
    Advanced Mathematics Advanced Mathematics
    Advanced Mathematics
    Advanced Mathematics
    Advanced Mathematics Advanced Mathematics
    Observing Robots behind glass
    LEARNING ROBOTICS

    View Slide

  12. Hardware was
    expensive,
    complicated
    and not fun

    View Slide

  13. APIs
    Open Source Hardware
    Smart phones
    Dynamic Programming Languages
    GitHub
    Mobile Internet 3D Printing
    2014

    View Slide

  14. HARDWARE HACKING
    WITH
    JAVASCRIPT

    View Slide

  15. WHY
    JAVASCRIPT?

    View Slide

  16. Any application that can
    be written in JavaScript,
    will eventually be written
    in JavaScript

    View Slide

  17. HIGH LEVEL
    ASYNC
    COMMUNITY
    INTERNET OF THINGS
    LOW BARRIERS

    View Slide

  18. View Slide

  19. It's a UNIX system! I know this!

    View Slide

  20. LEGO

    View Slide

  21. EV3

    View Slide

  22. Demo Time

    View Slide

  23. ROBOT RABBIT FEEDER

    View Slide

  24. View Slide

  25. Node.js is a platform built on Chrome's
    JavaScript runtime for easily building fast,
    scalable network applications. Node.js
    uses an event-driven, non-blocking I/O
    model that makes it lightweight and
    efficient, perfect for data-intensive real-time
    applications that run across distributed
    devices.

    View Slide

  26. View Slide

  27. Server-side Javascript
    Asynchronous
    Runs on v8 from Chrome
    Perfect for network programs

    View Slide

  28. http://nodejs.org/download/
    !
    nodejs.org/download
    v0.10.32
    $ node
    $ npm install ar-drone

    View Slide

  29. !
    var Ev3 = require ("ev3-nodejs-bt");

    var Ev3_base = Ev3.base;


    var XboxController = require('xbox-controller');

    var xbox = new XboxController;


    var robot = new Ev3_base("/dev/tty.EV3-SerialPort");


    var maxAngle = 32768;

    var maxSpeed = 100;


    var speeds = { a: 0, b: 0, c: 0, d: 0 };

    View Slide

  30. !
    robot.connect(function(){

    robot.start_program(function(ev3){

    var setSpeed = function(){

    var output = ev3.getOutputSequence(speeds.a,speeds.b,speeds.c,speeds.d);

    ev3.sp.write(output);

    }


    setInterval(setSpeed, 100)


    xbox.on('left:move', function(position){

    var x = -(position.x / maxAngle)*-maxSpeed

    var y = (position.y / maxAngle)*-maxSpeed


    var left = y-x

    var right = y+x


    speeds.b = left

    speeds.a = right

    })


    xbox.on('a:press', function(){

    speeds.d = 100

    })


    xbox.on('a:release', function(){

    speeds.d = 0

    })

    });

    });


    View Slide

  31. View Slide

  32. View Slide

  33. github.com/andrew/node-ev3-robot

    View Slide

  34. github.com/clebert/ev3

    View Slide

  35. View Slide

  36. ARDUINO

    View Slide

  37. FIRMATA

    View Slide

  38. Cat Laser Toy

    View Slide

  39. Cat Laser Toy
    Rabbit
    |
    v

    View Slide

  40. !
    var five = require("johnny-five"),

    board = new five.Board();


    function randomFromInterval(from,to){

    return Math.floor(Math.random()*(to-from+1)+from); 

    }


    board.on("ready", function() {

    var servoX = new five.Servo(10);

    var servoY = new five.Servo(9);

    var laser = new five.Led(8);


    laser.on()


    setInterval(function(){

    x = randomFromInterval(80, 120)

    y = randomFromInterval(95, 145)

    servoX.move(x)

    servoY.move(y)

    }, 400)

    })

    View Slide

  41. View Slide

  42. hobbytronics.co.uk/sparkfun-inventors-kit-v3
    Sparkfun
    Inventors
    Kit

    View Slide

  43. node-ardx.org

    View Slide

  44. JAVASCRIPT
    MICROCONTROLLERS

    View Slide

  45. View Slide

  46. View Slide

  47. View Slide

  48. View Slide

  49. £70 £21 £30 £40
    Lua based Tiny-js
    Node.js or
    browser
    Node.js
    Plug and
    play
    Hacker
    friendly
    Tiny
    computer
    All the
    ports

    View Slide

  50. NODECOPTER

    View Slide

  51. PROGRAMMATIC
    FLYING ROBOTS

    View Slide

  52. HD Camera
    Down-facing camera
    Gyroscope
    Wifi 1GHz CPU
    Linux
    Accelerometer Magnetometer
    Ultrasound

    View Slide

  53. GITHUB.COM/FELIXGE/NODE-AR-DRONE

    View Slide

  54. !
    var arDrone = require('ar-drone');

    var client = arDrone.createClient(); 


    client.takeoff();


    client

    .after(5000, function() {

    this.clockwise(0.5);

    })

    .after(3000, function() {

    this.animate('flipLeft', 15);

    })

    .after(1000, function() {

    this.stop();

    this.land();

    });

    View Slide

  55. shama.github.com/voxel-drone

    View Slide

  56. DEMO TIME

    View Slide

  57. WARNING

    View Slide

  58. QR CODER

    View Slide

  59. Dance Dance Drone

    View Slide

  60. github.com/eschnou/ardrone-webflight

    View Slide

  61. Quadcopters
    as a
    Service

    View Slide

  62. ROBOT LASER PONG

    View Slide

  63. WRAPPING UP

    View Slide

  64. STAY ON THE EDGE OF
    YOUR COMFORT ZONE

    View Slide

  65. BRING EVERYTHING
    GREAT ABOUT THE
    INTERNET TO THE REAL
    WORLD

    View Slide

  66. GO FORTH AND HACK

    View Slide

  67. No animals were harmed in the
    making of this presentation
    Thanks!

    View Slide

  68. github.com/andrew
    Thanks!

    View Slide

  69. Thanks!
    @teabass

    View Slide