Scottish Ruby Conference 2010 Arduino, Ruby RAD

3,199 views

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
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,199
On SlideShare
0
From Embeds
0
Number of Embeds
27
Actions
Shares
0
Downloads
64
Comments
0
Likes
2
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’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’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

  • 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

    ×