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

Scottish Ruby Conference 2010 Arduino, Ruby RAD

on

  • 3,724 views

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

Statistics

Views

Total Views
3,724
Views on SlideShare
3,706
Embed Views
18

Actions

Likes
1
Downloads
62
Comments
0

1 Embed 18

http://www.slideshare.net 18

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • <br />
  • <br />
  • Great documentation, active forum <br />
  • 2005 ATMega 8Open sourceBuild own <br />
  • <br />
  • Most Common and easiest to use 32 kb flash memory <br /> 7-12v LED 13 <br /> Many clones offer same or extra functionality <br /> <br />
  • Sold 10,000 <br /> Previous version of the current USB Arduino board <br /> 16kb flash memory <br />
  • The big one <br /> shield compatible 128kb flash memory 4 hardware uarts <br />
  • Different versionsLilypad 8Mhzsewn onto clothes stylish puple <br />
  • Lilypad example <br />
  • EthernetStackable <br />
  • Motor <br />
  • I/O BoardEasy to add servos and sensorsAdd Bluetooth as Serial port <br />
  • Processing also need to install usb driver suitable for your platform <br />
  • Main Gem outdatedMadrona fork GithubRuby 1.91 readyBrian Lyles Fork can use 18 <br /> Uses Ruby2c <br />
  • Basic Installaton on Mac OS X Instructions of Github for other flavours RAD creates directory stucture <br />
  • lots of examples in the examples directory <br />
  • Hardware setup <br />
  • Software set up <br />
  • Write coderake make:upload <br />
  • Co-founder of Arduino <br /> Excellent BookEasy start <br /> Well explained Examples <br />
  • Processing code <br />
  • <br />
  • <br />
  • <br />
  • Blink LED at rate dependent on sensor value <br />
  • Blinks LED at rate set by sensor <br />
  • <br />
  • <br />
  • Plugins preferred methodLibraries give access to quite a few devices <br />
  • servo refresh called roughly every 50ms, won&#x2019;t call less than 20 to keep position <br /> library <br /> device:servo tells us to work with servo library written by Brian Riley <br />
  • moving between 2 points, note servo_delay <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • flying robot then adapted to work with blimpduino <br />
  • <br />
  • Ruby conf 2008 <br />
  • 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 <br />
  • XBees but could use any serial interface <br />
  • Start up in shoes <br /> lib serial code <br />
  • background <br />
  • compass <br />
  • 3 look left right and centre <br />
  • analogue non linear, algorithm Tom Igoe&#x2019;s book Making things talk <br />
  • Two modes control of ping 4 wires or 3 <br /> 4th wire tied to ground <br />
  • plugin, digital pin <br />
  • plugin pass pin in and returns distance <br />
  • Wishield Wifi <br />
  • 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 <br />
  • ModularStackable shieldsPing noise run in circlelooks for clear path <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • No affiliation, working on adding speech and getting bluetooth working with shoes <br />
  • <br />

Scottish Ruby Conference 2010 Arduino, Ruby RAD Scottish Ruby Conference 2010 Arduino, Ruby RAD Presentation Transcript

  • 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, and 11. • 16 Mhz • Photo by vouki - http://flic.kr/p/5V6KkG Auto external Voltage
  • 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
  • Mega • ATMega1280 • Analog 16 pins • 54 Digital • 14 PWM Photo by Spikenzie - http://flic.kr/p/6ahHFu
  • 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://flic.kr/p/4YaR9k
  • 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 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
  • 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, 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 }
  • 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 } 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); } }
  • 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
  • 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); }
  • 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
  • Blink LED analogue input
  • Blink LED analogue input
  • Serial Read class Serialcom1 < ArduinoSketch input_pin 0, :as => :sensor serial_begin :rate => 19200 def loop serial_println analogRead sensor delay 1000 end end
  • Plugins and Libraries • C Methods, directives, external variables and assignments and calls that maybe added to main setup method • Arduino libraries
  • Servo code class Servo < ArduinoSketch output_pin 11, :as => :servo, :device => :servo def loop servo_refresh servo.position 90 end end
  • 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
  • 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.com/deadprogrammer/ flying_robot_blimpduino http://deadprogrammersociety.blogspot.com/
  • 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 = FlyingRobotProxy.new
  • 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
  • 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
  • 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 => :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
  • 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(@sig_pin)) end end
  • 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
  • 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 Motors
  • DEMO
  • Suppliers • Active robots: http://active-robots.com • Ebay jzhaoket and yerobot • http://asynclabs.com • http://bitsbox.co.uk
  • Thanks • Github http://github.com/lostcaggy • Slides will be on slideshare later