controlling robots using javascript
DESCRIPTION
Controlling Robots using JavaScript. Slides from my talk at jsfoo. Details at http://sudarmuthu.com/blog/controlling-robots-using-javascriptTRANSCRIPT
Controlling robots using JavaScript
Sudar Muthu (@sudarmuthu)Research Engineer, Yahoo! Labshttp://hardwarefun.comhttp://github.com/sudar
Who am I?
Research Engineer by profession Creates robots as hobby Prefers Arduino Prefers JavaScript at work Why not combine both of them? .. and that’s what I am going to talk about today
Why hardware for a software hacker?
Fun!
Demohttp://hardwarefun.com/projects/asimijs
Let’s start with a demo
http://hardwarefun.com/projects/asimijs
Control the bot at stage
#asimijs @hardwarefun
Arduino Visual Basic for hardware Includes both Hardware and software
Photo credit Arduino team
Interfacing Arduino with JavaScript
Using serial connection (node-serialport) Using abstraction (like johnny-five or duino) Using serial Bluetooth connection (asimijs)
Using Serial Connection
You need node-serialport - https://github.com/voodootikigod/node-serialport
var SerialPort = require("serialport").SerialPort, arduino = new SerialPort("/dev/tty/ACM1");
// when data is received from arduinoarduino.on("data", function (data) { arduino.write(new Buffer[data]); console.log("Got: " + data);});
// if there was any errorarduino.on("error", function (data) { console.log("Error: " + data);});
Using Abstraction
Build on top of node-serialport - https://github.com/voodootikigod/node-serialport
Options include Johnny-five - https://github.com/rwldrn/johnny-five and duino - https://github.com/ecto/duino
Load the firmdata program into Arduino It provides the necessary abstraction Write code using a node.js library Profit
Demo
Let there be LIGHT
Codevar five = require("johnny-five"), board = new five.Board();
board.on("ready", function() {
// Create an Led on pin 13 (new five.Led(13)).strobe(1000);
});
Hardware setup
Reading sensor data
What you need?
Any sensor and a LED
Reading sensor datavar five = require("johnny-five"), board, led, photoresistor;
board = new five.Board();board.on("ready", function() {
// Create a new `photoresistor` hardware instance. photoresistor = new five.Sensor({pin: "A2”, freq: 250}); led = new five.Led(13);
// "read" get the current reading from the photoresistor photoresistor.on("read", function( err, value ) { if (value > 50) { led.on(); } else { led.off(); } console.log( value, this.normalized ); }); // Inject the `sensor` hardware into the Repl instance's context; // allows direct command line access board.repl.inject({ pot: photoresistor });});
Using serial Bluetooth connection
Bluetooth shield gives wireless capability to Arduino A Bluetooth connection appears as serial port in your
computer Using node-serialport you can talk wirelessly to Arduino And that’s what I did for demo ;)
Using serial Bluetooth connection
var SerialPort = require("serialport").SerialPort, bt = new SerialPort("/dev/cu.FireFly-CCFA-SPP");
// when data is received from bluetoothbt.on("data", function (data) { bt.write(new Buffer[data]); console.log("Got: " + data);});
// error reading bluetooth serial portbt.on("error", function (data) { console.log("Error: " + data);});
How the demo worked
Node.js Server
Admin page
User pageUser page
User page
Node Client
Links
AsimiJS – The demo that I showed initially http://hardwarefun.com/projects/asimijs
Asimi – A simple bot using Arduino http://hardwarefun.com/project/asimi
Getting started with hardware programming http://hardwarefun.com/tutorials/getting-started-with-hardware-programming
Getting started with Arduino http://hardwarefun.com/tutorials/getting-started-with-arduino-and-avr
Node-serialport https://github.com/voodootikigod/node-serialport
Johnny Five https://github.com/rwldrn/johnny-five
Questions
Thank You
Sudar Muthu (@sudarmuthu)http://hardwarefun.comhttp://gitbub.com/sudar