0
Arduino and Ruby
with a (tiny bit of) shoes
         Martin Evans
Summary
• Arduino
• RAD (Ruby Arduino Development)
• Examples
• Projects
Arduino
• http://arduino.cc
• Examples
• Tutorials
• Downloads
• Forum
Hardware




Photo by adafruit - http://flic.kr/p/7LyorG
Photo by pt - http://flic.kr/p/7Luj6T
Duemilanove (2009)
•   ATMega328p

•   60,000 sold 2009

•   6 Analog pins

•   14 Digital pins

•   PWM: 3, 5, 6, 9, 10,
...
Diecimila (10 thousand)
•   ATMega168

•   16 Mhz

•   14 digital I/O 6 pwm

•   6 Analog inputs

•   7 - 12 v


         ...
Mega
•   ATMega1280

•   Analog 16 pins

•   54 Digital

•   14 PWM



                     Photo by Spikenzie - http://fli...
Nano   Lilypad




Mini

       Photo by dodeckahedron - http://
               flic.kr/p/3fM8aA
Photo by Osamu Iwasaki - http://flic.kr/p/79ymo7
Shields
•   Ethernet

•   Wifi

•   Motor

•   I/O

•   Xbee

•   Prototype

                   Photo by knolleary - http:/...
Motor controller




 Photo by Alcoholwang - http://flic.kr/p/69yE7E
I/O Board




Photo by Alcoholwang - http://flic.kr/p/69yEch
Software
•   Processing

•   Basic IDE

•   Cross platform

•   Latest Version is 18
RAD
• Ruby Arduino Development
• Greg Borenstein 2007
• git://github.com/atduskgreg/rad.git
• http://github.com/madrona/rad
Installation
$ sudo gem install madrona-rad

$ rad example
Hardware.yml
############################################################
##
# Today's MCU Choices (replace the mcu with y...
software.yml
---
arduino_root: /Applications/arduino-0015
Compile
rake make:upload
Getting Started with
      Arduino
      by Massimo Banzi
Blink LED
// Blinking LED

#define LED 13 // LED connected to
         // Digital pin 13

void setup ()
 {
   pinMode(LED, ...
Blink LED
class BlinkLed < ArduinoSketch



   output_pin 13, :as => :led

   def loop
    blink led, 1000
   end

end
Fade LED in and out
int ledPin = 9;    // LED connected to digital pin 9

void setup() {
  // nothing happens in setup
}

...
Fade LED in and out
 class Analogled < ArduinoSketch

    output_pin 9, :as => :led
   @i = 1

   def loop
     while @i <...
Blink LED analogue input
int sensorPin = 0; // select the input pin for the sensor
int ledPin = 13;   // select the pin fo...
Blink LED analogue input
    class Analoginput < ArduinoSketch

       output_pin 13, :as => :led
      @val = 0

      de...
Blink LED analogue input
Blink LED analogue input
Serial Read
class Serialcom1 < ArduinoSketch

    input_pin 0, :as => :sensor

    serial_begin :rate => 19200

    def lo...
Plugins and Libraries
•   C Methods, directives,
    external variables and
    assignments and calls
    that maybe added...
Servo code
class Servo < ArduinoSketch
 output_pin 11, :as => :servo, :device => :servo
 def loop
   servo_refresh
   serv...
class Servo < ArduinoSketch
 output_pin 11, :as => :my_servo, :device => :servo
 def loop
   servo_refresh
   my_servo.pos...
Example Projects
    Ruby on Bells

      Barduino

     Flying Robot
Ruby on bells
   JD Barnhart
Ruby on Bells




   JD Barnhart
Ruby on Bells




   JD Barnhart
Barduino
         Matthew Williams

http://github.com/mwilliams/barduino
Barduino




Photo by aeden - http://flic.kr/p/5uy7DX
Barduino
Barduino
Flying Robot
              Damen and Ron Evans

http://wiki.github.com/deadprogrammer/flying_robot/

        http://github....
Flying Robot




Photo by Austin Ziegler - http://flic.kr/p/6DXQqV
Flying Robot
Flying Robot
Shoes

• Snow Leopard Fail
• Toholio serial gem
Flying Robot code
• Background
• Draw images
• Serial update
• XBee
Shoes.setup do
 gem 'toholio-serialport'
end

require "serialport"
require 'lib/flying_robot_proxy'

FLYING_ROBOT = FlyingR...
def draw_background
  @centerx, @centery = 126, 140

  fill white
  stroke black
  strokewidth 4
  oval @centerx - 102, @ce...
def draw_compass_hand
  @centerx, @centery = 126, 140
  @current_reading = @compass.to_f #[17, @compass.length].to_f
  ret...
Sharp GP2D12




Photo by hmblgrmpf - http://flic.kr/p/hJmoM
Sharp GP2D12 code
class Sharpir < ArduinoSketch
 # Analog input for sharp Infrared sensors GP2D12
  input_pin 0, :as => :i...
Devantech SRF05



  Photo by Lucky Larry - http://flic.kr/p/6E5pZZ
Devantech SRF05
class Rangefinding < ArduinoSketch

 @sig_pin = 2

 serial_begin

 def loop
    serial_println(pingsrf05(@s...
class Srf05 < ArduinoPlugin

 # Triggers a pulse and returns distance in cm.

 long pingsrf05(int ultraSoundpin) {
   unsi...
Wishield




Asynclabs
Pachube
• http://www.pachube.com
• Sign up for account
• Get api key
• http://www.pachube.com/feeds/6445
Roo-bee
• Obstacle avoidance
• Sharp IR sensors
• Arduino Duemilanove
• Devantech SR05 Ultrasound
• Servo
• Solarbotics Mo...
DEMO
Suppliers
• Active robots: http://active-robots.com
• Ebay jzhaoket and yerobot
• http://asynclabs.com
• http://bitsbox.co...
Thanks
• Github http://github.com/lostcaggy
• Slides will be on slideshare later
Scottish Ruby Conference 2010 Arduino, Ruby RAD
Scottish Ruby Conference 2010 Arduino, Ruby RAD
Scottish Ruby Conference 2010 Arduino, Ruby RAD
Scottish Ruby Conference 2010 Arduino, Ruby RAD
Scottish Ruby Conference 2010 Arduino, Ruby RAD
Upcoming SlideShare
Loading in...5
×

Scottish Ruby Conference 2010 Arduino, Ruby RAD

2,804

Published on

Talk given by Martin Evans at Scottish Ruby Conference 2010 on Ruby, Arduino, RAD and a little shoes

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,804
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
63
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide


  • Great documentation, active forum
  • 2005 ATMega 8Open sourceBuild own

  • Most Common and easiest to use 32 kb flash memory
    7-12v LED 13
    Many clones offer same or extra functionality

  • Sold 10,000
    Previous version of the current USB Arduino board
    16kb flash memory
  • The big one
    shield compatible 128kb flash memory 4 hardware uarts
  • Different versionsLilypad 8Mhzsewn onto clothes stylish puple
  • Lilypad example
  • EthernetStackable
  • Motor
  • I/O BoardEasy to add servos and sensorsAdd Bluetooth as Serial port
  • Processing also need to install usb driver suitable for your platform
  • Main Gem outdatedMadrona fork GithubRuby 1.91 readyBrian Lyles Fork can use 18
    Uses Ruby2c
  • Basic Installaton on Mac OS X Instructions of Github for other flavours RAD creates directory stucture
  • lots of examples in the examples directory
  • Hardware setup
  • Software set up
  • Write coderake make:upload
  • Co-founder of Arduino
    Excellent BookEasy start
    Well explained Examples
  • Processing code



  • Blink LED at rate dependent on sensor value
  • Blinks LED at rate set by sensor


  • Plugins preferred methodLibraries give access to quite a few devices
  • servo refresh called roughly every 50ms, won&amp;#x2019;t call less than 20 to keep position
    library
    device:servo tells us to work with servo library written by Brian Riley
  • moving between 2 points, note servo_delay






  • flying robot then adapted to work with blimpduino

  • Ruby conf 2008
  • Problems shoesSnow Leopard Actively being worked on this was where I was going to show my robot linked to shoes however we can briefly look at flying robot code
  • XBees but could use any serial interface
  • Start up in shoes
    lib serial code
  • background
  • compass
  • 3 look left right and centre
  • analogue non linear, algorithm Tom Igoe&amp;#x2019;s book Making things talk
  • Two modes control of ping 4 wires or 3
    4th wire tied to ground
  • plugin, digital pin
  • plugin pass pin in and returns distance
  • Wishield Wifi
  • wishield only arrived from United States the other day so still need to write plugin. Arduino working for a few hours sending light values and temperature
  • ModularStackable shieldsPing noise run in circlelooks for clear path





  • No affiliation, working on adding speech and getting bluetooth working with shoes

  • Transcript of "Scottish Ruby Conference 2010 Arduino, Ruby RAD"

    1. 1. Arduino and Ruby with a (tiny bit of) shoes Martin Evans
    2. 2. Summary • Arduino • RAD (Ruby Arduino Development) • Examples • Projects
    3. 3. Arduino • http://arduino.cc • Examples • Tutorials • Downloads • Forum
    4. 4. Hardware Photo by adafruit - http://flic.kr/p/7LyorG
    5. 5. Photo by pt - http://flic.kr/p/7Luj6T
    6. 6. Duemilanove (2009) • ATMega328p • 60,000 sold 2009 • 6 Analog pins • 14 Digital pins • PWM: 3, 5, 6, 9, 10, and 11. • 16 Mhz • Photo by vouki - http://flic.kr/p/5V6KkG Auto external Voltage
    7. 7. Diecimila (10 thousand) • ATMega168 • 16 Mhz • 14 digital I/O 6 pwm • 6 Analog inputs • 7 - 12 v Photo by Remko van Dokkum - http://flic.kr/p/54JcXJ
    8. 8. Mega • ATMega1280 • Analog 16 pins • 54 Digital • 14 PWM Photo by Spikenzie - http://flic.kr/p/6ahHFu
    9. 9. Nano Lilypad Mini Photo by dodeckahedron - http:// flic.kr/p/3fM8aA
    10. 10. Photo by Osamu Iwasaki - http://flic.kr/p/79ymo7
    11. 11. Shields • Ethernet • Wifi • Motor • I/O • Xbee • Prototype Photo by knolleary - http://flic.kr/p/4YaR9k
    12. 12. Motor controller Photo by Alcoholwang - http://flic.kr/p/69yE7E
    13. 13. I/O Board Photo by Alcoholwang - http://flic.kr/p/69yEch
    14. 14. Software • Processing • Basic IDE • Cross platform • Latest Version is 18
    15. 15. RAD • Ruby Arduino Development • Greg Borenstein 2007 • git://github.com/atduskgreg/rad.git • http://github.com/madrona/rad
    16. 16. Installation $ sudo gem install madrona-rad $ rad example
    17. 17. Hardware.yml ############################################################ ## # Today's MCU Choices (replace the mcu with your arduino board) # atmega8 => Arduino NG or older w/ ATmega8 # atmega168 => Arduino NG or older w/ ATmega168 # mini => Arduino Mini # bt => Arduino BT # diecimila => Arduino Diecimila or Duemilanove w/ ATmega168 # nano => Arduino Nano # lilypad => LilyPad Arduino # pro => Arduino Pro or Pro Mini (8 MHz) # atmega328 => Arduino Duemilanove w/ ATmega328 # mega => Arduino Mega --- serial_port: /dev/tty.usbserial* physical_reset: false mcu: atmega168
    18. 18. software.yml --- arduino_root: /Applications/arduino-0015
    19. 19. Compile rake make:upload
    20. 20. Getting Started with Arduino by Massimo Banzi
    21. 21. Blink LED // Blinking LED #define LED 13 // LED connected to // Digital pin 13 void setup () { pinMode(LED, OUTPUT); // sets the digital // pin as output } void loop() { digitalWrite(LED, HIGH); // turns the LED on delay(1000); // waits for a second digitalWrite(LED, LOW); // turns the LED off delay(1000); // waits for a second }
    22. 22. Blink LED class BlinkLed < ArduinoSketch output_pin 13, :as => :led def loop blink led, 1000 end end
    23. 23. Fade LED in and out int ledPin = 9; // LED connected to digital pin 9 void setup() { // nothing happens in setup } void loop() { // fade in from min to max in increments of 5 points: for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { // sets the value (range from 0 to 255): analogWrite(ledPin, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); } // fade out from max to min in increments of 5 points: for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { // sets the value (range from 0 to 255): analogWrite(ledPin, fadeValue); // wait for 30 milliseconds to see the dimming effect delay(30); } }
    24. 24. Fade LED in and out class Analogled < ArduinoSketch output_pin 9, :as => :led @i = 1 def loop while @i < 255 do analogWrite led, @i @i +=5 delay 30 end while @i > 0 do analogWrite led, @i @i -=5 delay 30 end end end
    25. 25. Blink LED analogue input int sensorPin = 0; // select the input pin for the sensor int ledPin = 13; // select the pin for the LED int sensorValue = 0; // variable to store the value coming from // the sensor void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); } void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); // turn the ledPin on digitalWrite(ledPin, HIGH); // stop the program for <sensorValue> milliseconds: delay(sensorValue); // turn the ledPin off: digitalWrite(ledPin, LOW); // stop the program for for <sensorValue> milliseconds: delay(sensorValue); }
    26. 26. Blink LED analogue input class Analoginput < ArduinoSketch output_pin 13, :as => :led @val = 0 def loop @val = analogRead(0) digitalWrite (led, 1) delay @val digitalWrite (led, 0) delay @val end end
    27. 27. Blink LED analogue input
    28. 28. Blink LED analogue input
    29. 29. Serial Read class Serialcom1 < ArduinoSketch input_pin 0, :as => :sensor serial_begin :rate => 19200 def loop serial_println analogRead sensor delay 1000 end end
    30. 30. Plugins and Libraries • C Methods, directives, external variables and assignments and calls that maybe added to main setup method • Arduino libraries
    31. 31. Servo code class Servo < ArduinoSketch output_pin 11, :as => :servo, :device => :servo def loop servo_refresh servo.position 90 end end
    32. 32. class Servo < ArduinoSketch output_pin 11, :as => :my_servo, :device => :servo def loop servo_refresh my_servo.position 180 servo_delay 1000 my_servo.position 0 servo_delay 1000 end def servo_delay(t) t.times do delay 1 servo_refresh end end end
    33. 33. Example Projects Ruby on Bells Barduino Flying Robot
    34. 34. Ruby on bells JD Barnhart
    35. 35. Ruby on Bells JD Barnhart
    36. 36. Ruby on Bells JD Barnhart
    37. 37. Barduino Matthew Williams http://github.com/mwilliams/barduino
    38. 38. Barduino Photo by aeden - http://flic.kr/p/5uy7DX
    39. 39. Barduino
    40. 40. Barduino
    41. 41. Flying Robot Damen and Ron Evans http://wiki.github.com/deadprogrammer/flying_robot/ http://github.com/deadprogrammer/ flying_robot_blimpduino http://deadprogrammersociety.blogspot.com/
    42. 42. Flying Robot Photo by Austin Ziegler - http://flic.kr/p/6DXQqV
    43. 43. Flying Robot
    44. 44. Flying Robot
    45. 45. Shoes • Snow Leopard Fail • Toholio serial gem
    46. 46. Flying Robot code • Background • Draw images • Serial update • XBee
    47. 47. Shoes.setup do gem 'toholio-serialport' end require "serialport" require 'lib/flying_robot_proxy' FLYING_ROBOT = FlyingRobotProxy.new
    48. 48. def draw_background @centerx, @centery = 126, 140 fill white stroke black strokewidth 4 oval @centerx - 102, @centery - 102, 204, 204 fill black nostroke oval @centerx - 5, @centery - 5, 10, 10 stroke black strokewidth 1 line(@centerx, @centery - 102, @centerx, @centery - 95) line(@centerx - 102, @centery, @centerx - 95, @centery) line(@centerx + 95, @centery, @centerx + 102, @centery) line(@centerx, @centery + 95, @centerx, @centery + 102) @north = para "N", :top => @centery - 130, :left => @centerx - 10 @south = para "S", :top => @centery + 104, :left => @centerx - 10 @west = para "W", :top => @centery - 12, :left => @centerx - 126 @east = para "E", :top => @centery - 12, :left => @centerx + 104 end
    49. 49. def draw_compass_hand @centerx, @centery = 126, 140 @current_reading = @compass.to_f #[17, @compass.length].to_f return if @current_reading == 0.0 # the compass is oriented in reverse on the blimpduino, so switch it @current_reading = (@current_reading + 180).modulo(360) _x = 90 * Math.sin( @current_reading * Math::PI / 180 ) _y = 90 * Math.cos( @current_reading * Math::PI / 180 ) stroke black strokewidth 6 line(@centerx, @centery, @centerx + _x, @centery - _y) end
    50. 50. Sharp GP2D12 Photo by hmblgrmpf - http://flic.kr/p/hJmoM
    51. 51. Sharp GP2D12 code class Sharpir < ArduinoSketch # Analog input for sharp Infrared sensors GP2D12 input_pin 0, :as => :ir_sensor_right # variables for checking for obstruction @range = "0, int" serial_begin def loop range_ir_sensor delay 10 end def range_ir_sensor @range = analogRead(ir_sensor) if (@range> 3) then @range = (6787 / (@range - 3)) - 4 serial_print "sensor: " serial_println @range delay 1000 end end end
    52. 52. Devantech SRF05 Photo by Lucky Larry - http://flic.kr/p/6E5pZZ
    53. 53. Devantech SRF05 class Rangefinding < ArduinoSketch @sig_pin = 2 serial_begin def loop serial_println(pingsrf05(@sig_pin)) end end
    54. 54. class Srf05 < ArduinoPlugin # Triggers a pulse and returns distance in cm. long pingsrf05(int ultraSoundpin) { unsigned long ultrasoundDuration; // switch pin to output pinMode(ultraSoundpin, OUTPUT); // send a low, wait 2 microseconds, send a high then wait 10us digitalWrite(ultraSoundpin, LOW); delayMicroseconds(2); digitalWrite(ultraSoundpin, HIGH); delayMicroseconds(10); digitalWrite(ultraSoundpin, LOW); // switch pin to input pinMode(ultraSoundpin, INPUT); // wait for a pulse to come in as high ultrasoundDuration = pulseIn(ultraSoundpin, HIGH); return(ultrasoundDuration/58); } end
    55. 55. Wishield Asynclabs
    56. 56. Pachube • http://www.pachube.com • Sign up for account • Get api key • http://www.pachube.com/feeds/6445
    57. 57. Roo-bee • Obstacle avoidance • Sharp IR sensors • Arduino Duemilanove • Devantech SR05 Ultrasound • Servo • Solarbotics Motors
    58. 58. DEMO
    59. 59. Suppliers • Active robots: http://active-robots.com • Ebay jzhaoket and yerobot • http://asynclabs.com • http://bitsbox.co.uk
    60. 60. Thanks • Github http://github.com/lostcaggy • Slides will be on slideshare later
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×