Interfacing Leap Motion with Arduino thanks to Node.js
What about controlling physical things by waving your hands?
Thanks to the Leap Motion, Arduino and a bit of Node.js magic it's pretty simple!
Let's check that!
Leap Motion
There is a nice feature in the SDK of the Leap Motion: the websocket server.
When activated, the Leap Motion software streams the tracking data over it. You then just need to connect your software to it and you're ready to analyse these data.
Go to the Leap Motion controller settings, and then in the WebSocket tab and activate it.
The websocket server is now accessible at the following adress: ws://127.0.0.1:6437
Connect your Node.js application to the websocket server
Node.js is amazing, and connecting your app to the Leap Motion websocket server is just a matter of 2 lines.
In your project, install the ws
library with npm install ws --save
And then you can check everything is working with this simple code:
When running this script, it should log the data coming from the websocket. If so, you are ok!
It is then just a matter of parsing the data and take what you need in it!
Here you can find an example of a frame: frame.json
Arduino
So you have now all the data you need from the Leap Motion, how can you pass it to the Arduino? Node.js is again the answer!
Thanks to the marvelous johnny-five library, you can talk to the Arduino directly from Node.js! To achieve that, you'll just need to upload the Standard Firmata on your Arduino.
Open the Arduino IDE, open the File>Examples>Firmata>StandardFirmata
and upload it to your Arduino.
You can now use johnny-five
to communicate with the Arduino.
Install it: npm install johnny-five --save
. Below is a snippet to connect your board and make the led that is tied to the pin 13 blink.
Easy isn't it?
Plug all this together
It's now really easy to plug all this together. Let's try to make a simple example that turns on the led when the Leap Motion sees 2 hands, and turns it off when not. You should take a look to the sample frame once more: frame.json.
That's it! (I hope so, it's not tested :))
Going further
Here is the demo I made few weeks ago:
You can find the code on github: leapLamp, feel free to use it and/or ask for some help.
Happy coding.