2013-10-26 00:19:08 +08:00
# Cylon.js
2013-10-18 14:55:48 +08:00
2013-10-26 00:11:58 +08:00
Cylon.js (http://cylonjs.com) is a JavaScript framework for robotics and physical computing using node.js
2013-10-24 11:31:02 +08:00
It provides a simple, yet powerful way to create solutions that incorporate multiple, different hardware devices at the same time.
2013-10-18 14:55:48 +08:00
2013-10-26 00:11:58 +08:00
Want to use Ruby on robots? Check out our sister project Artoo (http://artoo.io)
2013-10-26 00:19:08 +08:00
[![Build Status ](https://secure.travis-ci.org/hybridgroup/cylon.png?branch=master )](http://travis-ci.org/hybridgroup/cylon)
2013-10-18 14:55:48 +08:00
## Getting Started
2013-10-23 05:18:31 +08:00
2013-10-18 14:55:48 +08:00
Install the module with: `npm install cylon`
2013-10-29 10:28:19 +08:00
Then install modules for whatever hardware support you want to use from your robot. For example, `npm install cylon-firmata` to use Cylon with an Arduino using the Firmata protocol.
2013-11-09 03:02:54 +08:00
Make sure to upload the "Standard Firmata" sketch or an equivalent firmata sketch to your Arduino first. Without that code running on the Arduino, firmata can't communicate with Cylon. You can find the example sketch in Examples -> Firmata -> StandardFirmata.
2013-10-20 08:56:00 +08:00
## Examples
2013-10-23 05:18:31 +08:00
2013-10-29 10:28:19 +08:00
**Note:** before running examples in the `examples/` dir from source, make sure to compile using `grunt coffee` first.
2013-10-23 05:18:31 +08:00
### Javascript:
2013-10-18 14:55:48 +08:00
```javascript
2013-10-24 11:07:35 +08:00
var Cylon = require("cylon");
2013-10-23 05:18:31 +08:00
2013-10-20 08:53:53 +08:00
// Initialize the robot
2013-10-24 11:07:35 +08:00
var robot = Cylon.robot({
2013-10-20 08:56:49 +08:00
connection: { name: 'arduino', adaptor: 'firmata', port: '/dev/ttyACM0' },
device: { name: 'led', driver: 'led', pin: 13 },
2013-10-23 05:18:31 +08:00
2013-10-26 00:11:58 +08:00
work: function(my) {
2013-10-20 08:53:53 +08:00
// we do our thing here
2013-10-26 00:11:58 +08:00
every((1).second(), function() { my.led.toggle(); });
2013-10-20 08:53:53 +08:00
}
});
// start working
2013-10-20 11:31:29 +08:00
robot.start();
2013-10-18 14:55:48 +08:00
```
2013-10-23 09:33:54 +08:00
### CoffeeScript:
2013-10-18 14:55:48 +08:00
```coffee-script
2013-10-24 11:07:35 +08:00
Cylon = require "cylon"
2013-10-23 05:18:31 +08:00
2013-10-20 08:53:53 +08:00
# Initialize the robot
2013-10-24 11:07:35 +08:00
robot = Cylon.robot
2013-10-20 08:53:53 +08:00
connection:
2013-10-26 15:26:02 +08:00
name: 'arduino', adaptor: 'firmata', port: '/dev/ttyACM0'
2013-10-23 05:18:31 +08:00
device:
2013-10-26 15:26:02 +08:00
name: 'led', driver: 'led', pin: 13
2013-10-23 05:18:31 +08:00
2013-10-26 00:11:58 +08:00
work: (my) ->
2013-10-20 08:53:53 +08:00
# we do our thing here
2013-10-26 15:26:02 +08:00
every 1.second(), -> my.led.toggle()
2013-10-20 08:53:53 +08:00
2013-10-26 15:26:02 +08:00
robot.start()
2013-10-18 14:55:48 +08:00
```
2013-10-26 04:50:53 +08:00
## Hardware Support
2013-10-26 15:09:47 +08:00
Cylon.js has a extensible system for connecting to hardware devices. The following robotics and physical computing platforms are currently supported:
- [Arduino ](http://www.arduino.cc/ ) < => [Adaptor ](https://github.com/hybridgroup/cylon-firmata )
2013-10-29 12:48:29 +08:00
- [Ardrone ](http://ardrone2.parrot.com/ ) < => [Adaptor ](https://github.com/hybridgroup/cylon-ardrone )
2013-10-26 15:09:47 +08:00
- [Sphero ](http://www.gosphero.com/ ) < => [Adaptor ](https://github.com/hybridgroup/cylon-sphero )
2013-11-04 11:18:06 +08:00
Support for many devices that use General Purpose Input/Output (GPIO) have a shared set of drivers provded using the cylon-gpio module:
2013-10-29 10:28:19 +08:00
2013-10-29 12:48:29 +08:00
- [GPIO ](https://en.wikipedia.org/wiki/General_Purpose_Input/Output ) < => [Drivers ](https://github.com/hybridgroup/cylon-gpio )
2013-10-29 10:28:19 +08:00
2013-11-04 11:18:06 +08:00
Support for devices that use Inter-Integrated Circuit (I2C) have a shared set of drivers provded using the cylon-i2c module:
- [I2C ](https://en.wikipedia.org/wiki/I%C2%B2C ) < => [Drivers ](https://github.com/hybridgroup/cylon-i2c )
2013-10-30 15:44:08 +08:00
More platforms and drivers are coming soon...
2013-10-26 04:50:53 +08:00
2013-10-21 05:11:58 +08:00
## Documentation
2013-10-30 15:44:08 +08:00
We're busy adding documentation to our web site at http://cylonjs.com/ please check there as we continue to work on Cylon.js
Thank you!
2013-10-21 05:11:58 +08:00
2013-10-18 14:55:48 +08:00
## Contributing
2013-10-23 05:18:31 +08:00
In lieu of a formal styleguide, take care to maintain the existing coding style.
Add unit tests for any new or changed functionality. Lint and test your code
using [Grunt ](http://gruntjs.com/ ).
2013-10-18 14:55:48 +08:00
## Release History
2013-10-29 10:28:19 +08:00
Version 0.1.0 - Initial release for ongoing development
2013-10-30 15:46:10 +08:00
2013-10-30 15:44:08 +08:00
Version 0.2.0 - Cylon.Basestar to help develop external adaptors/drivers
2013-10-18 14:55:48 +08:00
2013-11-02 09:44:32 +08:00
Version 0.3.0 - Improved Cylon.Basestar, and added API
2013-11-07 22:23:59 +08:00
Version 0.4.0 - Refactor proxy in Cylon.Basestar, improve API
2013-10-18 14:55:48 +08:00
## License
2013-10-19 13:32:23 +08:00
Copyright (c) 2013 The Hybrid Group. Licensed under the Apache 2.0 license.