Scottish Ruby Conference 2010 Arduino, Ruby RAD
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Scottish Ruby Conference 2010 Arduino, Ruby RAD

  • 3,812 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,812
On Slideshare
3,794
From Embeds
18
Number of Embeds
1

Actions

Shares
Downloads
62
Comments
0
Likes
1

Embeds 18

http://www.slideshare.net 18

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    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

Transcript

  • 1. Arduino and Ruby with a (tiny bit of) shoes Martin Evans
  • 2. Summary • Arduino • RAD (Ruby Arduino Development) • Examples • Projects
  • 3. Arduino • http://arduino.cc • Examples • Tutorials • Downloads • Forum
  • 4. Hardware Photo by adafruit - http://flic.kr/p/7LyorG
  • 5. Photo by pt - http://flic.kr/p/7Luj6T
  • 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. 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. Mega • ATMega1280 • Analog 16 pins • 54 Digital • 14 PWM Photo by Spikenzie - http://flic.kr/p/6ahHFu
  • 9. Nano Lilypad Mini Photo by dodeckahedron - http:// flic.kr/p/3fM8aA
  • 10. Photo by Osamu Iwasaki - http://flic.kr/p/79ymo7
  • 11. Shields • Ethernet • Wifi • Motor • I/O • Xbee • Prototype Photo by knolleary - http://flic.kr/p/4YaR9k
  • 12. Motor controller Photo by Alcoholwang - http://flic.kr/p/69yE7E
  • 13. I/O Board Photo by Alcoholwang - http://flic.kr/p/69yEch
  • 14. Software • Processing • Basic IDE • Cross platform • Latest Version is 18
  • 15. RAD • Ruby Arduino Development • Greg Borenstein 2007 • git://github.com/atduskgreg/rad.git • http://github.com/madrona/rad
  • 16. Installation $ sudo gem install madrona-rad $ rad example
  • 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. software.yml --- arduino_root: /Applications/arduino-0015
  • 19. Compile rake make:upload
  • 20. Getting Started with Arduino by Massimo Banzi
  • 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. Blink LED class BlinkLed < ArduinoSketch output_pin 13, :as => :led def loop blink led, 1000 end end
  • 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. 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. 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. 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. Blink LED analogue input
  • 28. Blink LED analogue input
  • 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. Plugins and Libraries • C Methods, directives, external variables and assignments and calls that maybe added to main setup method • Arduino libraries
  • 31. Servo code class Servo < ArduinoSketch output_pin 11, :as => :servo, :device => :servo def loop servo_refresh servo.position 90 end end
  • 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. Example Projects Ruby on Bells Barduino Flying Robot
  • 34. Ruby on bells JD Barnhart
  • 35. Ruby on Bells JD Barnhart
  • 36. Ruby on Bells JD Barnhart
  • 37. Barduino Matthew Williams http://github.com/mwilliams/barduino
  • 38. Barduino Photo by aeden - http://flic.kr/p/5uy7DX
  • 39. Barduino
  • 40. Barduino
  • 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. Flying Robot Photo by Austin Ziegler - http://flic.kr/p/6DXQqV
  • 43. Flying Robot
  • 44. Flying Robot
  • 45. Shoes • Snow Leopard Fail • Toholio serial gem
  • 46. Flying Robot code • Background • Draw images • Serial update • XBee
  • 47. Shoes.setup do gem 'toholio-serialport' end require "serialport" require 'lib/flying_robot_proxy' FLYING_ROBOT = FlyingRobotProxy.new
  • 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. 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. Sharp GP2D12 Photo by hmblgrmpf - http://flic.kr/p/hJmoM
  • 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. Devantech SRF05 Photo by Lucky Larry - http://flic.kr/p/6E5pZZ
  • 53. Devantech SRF05 class Rangefinding < ArduinoSketch @sig_pin = 2 serial_begin def loop serial_println(pingsrf05(@sig_pin)) end end
  • 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. Wishield Asynclabs
  • 56. Pachube • http://www.pachube.com • Sign up for account • Get api key • http://www.pachube.com/feeds/6445
  • 57. Roo-bee • Obstacle avoidance • Sharp IR sensors • Arduino Duemilanove • Devantech SR05 Ultrasound • Servo • Solarbotics Motors
  • 58. DEMO
  • 59. Suppliers • Active robots: http://active-robots.com • Ebay jzhaoket and yerobot • http://asynclabs.com • http://bitsbox.co.uk
  • 60. Thanks • Github http://github.com/lostcaggy • Slides will be on slideshare later