Använda Ruby till Program Arduino

Genom denna artikel kommer du att lära dig hur vi kan fortsätta bygga ett projekt där LED lyser RÖD om någon tweets med :-( (sorgligt ansikte) och ordet regn, och det blir GRÖNT när tweeten innehåller a :-) ( glatt ansikte) och ordet regn!

Fysisk databehandling hänvisar till idén att programmera saker kring dig. Till skillnad från typisk programmering för filer, data eller Internet, programmerar detta för saker du hittar i den fysiska världen. Med hjälp av Arduino kan vi läsa de fysiska ingångarna och modifiera dem baserat på logik och svara på det med hjälp av motorer.

Vad är Arduino?

Arduino är en enda process mikrocontroller vilket innebär att det kan köra ett program åt gången och det kan köras på obestämd tid tills du tar bort strömmen eller ersätter det med ett annat program.

Baserat på varierande kapaciteter finns ett brett utbud av Arduino brädor och de finns också i olika former och storlekar. En Arduino Mini är till exempel nästan tummen, en Arduino Mega är större och har många fler sensorkontroller. Lilypad kan vävas i tyg och är också vattentät!

Låt oss titta på en Arduino Uno, som är den vanligaste.

Den levereras med en USB-port som tillåter oss att ansluta till en bärbar dator och skriva kod för den. Det finns också ströminmatningen, som kan användas när du vill använda brädan som fristående och inte kopplad till din dator.

Den har 14 digitala ingång / utgångsstift och sex analoga stift. De digitala stiften kan sättas på och stängas av baserat på mikrokontrollens logik. De kan också användas för att läsa i värdena i binär form. De analoga stiften kan användas för att göra ett antal värden och inte bara på eller av, så att de kan användas för att plugga sensorer som temperatur- eller ljussensorerna. Det finns också några pulsbreddsmodulationstiflor för att göra ett värdeområde med hjälp av de digitala stiften. (Pins numrerade 11, 10, 6, 5, 3 skulle referera till det.)

Varför använd en Arduino?

För det första är det billigt, cross-platform, har en bra IDE, och all programvara och hårdvara är öppen källkod. När du hänvisar till öppen källkod, här är hur alla komponenter är licensierade:

Hårdvara CC-SA-BY
programvara GPL
Dokument CC-SA-BY
varumärke TM

Förutom dessa punkter är hela Arduino styrelsen tillsammans med dess samhälle så livlig och kreativ att det är svårt att sakna. Arduino är det viktigaste Lego-blocket i hela pusset om snabb prototyper för kreativitet.

Hur Arduino kommunicerar

Eftersom det primära syftet med denna artikel är att utforska hur man använder Ruby för att interagera med Arduino, låt oss undersöka hur kommunikationen fungerar från en mjukvarusida.

Alla Arduino-kort har minst en seriell port (även känd som UART) som kan användas för kommunikation mellan styrelsen och en dator. Det spelar ingen roll vilken programmeringsspråk som är på den andra enheten, så länge det kan gränssnitt via seriell. Alternativt kan vi också använda trådbundna LAN- och WiFi-gränssnitt genom att använda sköldar.

Ruby Arduino Solutions

Eftersom Arduino kan kommunicera via sin seriella port, skulle det mest grundläggande sättet att styra Arduino använda serienummeret Ruby.

Serie Port Gem

Serial Port-pärla är en implementering av RS232 seriella portar med flera lågnivåfunktioner för att styra signaler på linjen.

# https://github.com/hparra/ruby-serialport kräver "serialport" #params för seriell port port_str = "/ dev / ttyUSB0" #må vara annorlunda för dig baud_rate = 9600 data_bits = 8 stop_bits = 1 paritet = SerialPort: : NONE sp = SerialPort.new (port_str, baud_rate, data_bits, stop_bits, paritet) #just läs för evigt medan sant gör medan (i = sp.gets.chomp) sätter jag änden sp.close

Att bestämma din port_str På Linux kan du öppna irb och exekvera 'ls /dev'.split ("\ n"). grep (/ usb | ACM / i) .karta | d | "/ Dev / # d"

Ett annat alternativ att använda Ruby med Arduino skulle uppenbarligen vara enbart abstraktion att dölja dessa interna detaljer och arbeta mer på objektnivå. Det är den exakta inställningen som RAD, eller Ruby Arduino Development, valde att använda. Tyvärr är projektet inte längre underhållet.

Dino Gem

Denna pärla tar en mer löst kopplad och starkt sammanhängande inställning till problemet med att använda Ruby med Arduino. Därmed menar jag att det använder ett generiskt bibliotek på Arduino, som dynamiskt svarar på begäran från datorn över seriell anslutning. 

Detta ger också mycket mer abstraktion för att hantera de involverade komponenterna. Dino-pärlan har ett beroende av seriell portens pärla och förklarar att den använder samma pärla för seriekommunikation samtidigt som programmeraren med användbara abstraktioner.

Efter installationen av dino pärla, springa dino generera-skiss seriell från din terminal. Detta kommer att generera en .ino skiss. Ladda upp den här skissen till Arduino med hjälp av Arduino IDE, och sedan kör koden nedan från datorn ansluten till Arduino.

# dino_sample.rb kräver 'dino' bord = Dino :: Board.new (Dino :: TxRx.new) led = Dino :: Komponenter :: Led.new (stift: 13, bräda: bräde) [: på, av ] .cycle do | switch | led.send (switch) sleep 0.5 end

Du kan köra den här filen från datorn genom att köra rubin dino_sample.rb Detta bör blinka LED-lampan på pin 13 i Arduino. Vi styr nu maskinvara med Ruby!

Låt oss tweak denna kod ovan för att använda Twitter API och få enheten att blinka baserat på vissa signaler.

Utlösning av LED med en Tweet

Anslut till stift 13 och 12, RÖD LED och GRÖN LED. Anslut sedan Arduino till datorn och ladda upp standard Dino seriell skiss som genererades i föregående steg.

Nu ska vi använda tweetstream-pärlan för Twitter-integration. För att kunna använda den framgångsrikt måste du skapa en Twitter-app och använda konsumentnycklarna och oAuth-symbolerna för provet och lägga dem i en fil twitter_api_config.yml.

Låt oss titta på koden för att få lysdioderna att blinka baserat på information som kommer från Twitter.

# twitter_leds.rb kräver 'yaml' kräver 'tweetstream' kräver 'dino' auth = YAML :: load_file ("twitter_api_config.yml") TweetStream.configure do | config | config.consumer_key = auth ["consumer_key"] config.consumer_secret = auth ["consumer_secret"] config.oauth_token = auth ["oauth_token"] config.oauth_token_secret = auth ["oauth_token_secret"] endbordet = Dino :: Board.new Dino :: TxRx :: Serial.new) redled = Dino :: Komponenter :: Led.new (stift: 13, bräda: bräda) greenled = Dino :: Komponenter :: Led.new (stift: 12, bräda: bräda) awesome =, "bra", "glad", "bra", ":-)", ":)", "super", "galet", "bra", "roligt" ] fruktansvärt = ['inte bra', 'dåligt', 'ledsen', 'inte glad', 'inte som', 'ogillar', 'inte bra', ':(', ':-(', 'inte kul ',' inte bra ',' inte snällt ',' hatar ',' inte kul '] TweetStream :: Client.new.track ("rain") gör | status | sätter status.text # skriver tweet till skärm. twit = status.text om awful.any? | w | twit.include? w sätter '** ledsen tweet **' redled.send (: på) sova 3 redled.send (: av) sova 1 elsif awesome.any ? | w | twit.include? w sätter "- lycklig tweet--" greenled.send (: på) sova 3 greenled.send (: av) sova 1 slutet

Inloggningsuppgifterna lagras i en annan fil som heter twitter_api_config.yml som nedan.

# twitter_api_config.yml # Sätt XYZ-värden för applikationen skapad på apps.twitter.com consumer_key: XYZ consumer_secret: XYZ oauth_token: XYZ oauth_token_secret: XYZ

Ovanstående kod, när du kör, kommer du att få LED-lampor att blinka baserat på Tweet-innehållet! Vad vi har gjort är ansluten Arduino till en dator, laddade upp Dino seriekoden till Arduino, och kör sedan koden ovan på vår maskin genom att säga rubin twitter_leds.rb

Ovanstående kod finns tillgänglig på detta githubförteckning.

I  twitter_leds.rb Vi skapar först en anslutning till Arduino-kortet med Dino. Sedan fortsätter vi att skapa redled och greenled till tapparna 13 respektive 12. Därefter skapar vi uppsättningar av glada och ledsna ord, för att hålla saker enkelt. Därefter fortsätter vi leta efter ordet av ordet regn i någon tweet, och fortsätt sedan för att kontrollera om det är ett ledsamt ord och i så fall sätt på triggaren den röda lysdioden istället för den gröna lysdioden.

Du har nu lysdioder som utlöses av slumpmässiga tweets över hela världen. Awesome, är det inte?

referenser

  • Arduino Serial
  • Arduino - Interfacing med S / W
  • Arduino Ruby Twitter Kod