Folosind Ruby pentru a programa Arduino

Prin acest articol veți învăța cum putem continua să construim un proiect în care LED-ul va merge RED dacă cineva tweets cu o :-( (fata tristă) și cuvântul ploaie, și merge verde atunci când tweet conține un :-) ( fata fericita) si cuvantul ploaie!

Calculul fizic se referă la ideea programării lucrurilor din jurul tău. Spre deosebire de programarea tipică pentru fișiere, date sau Internet, aceasta este programarea pentru lucrurile pe care le găsiți în lumea fizică. Folosind Arduino putem citi intrările fizice și le putem modifica pe baza logicii și a le răspunde cu ajutorul motoarelor.

Ce este Arduino?

Arduino este un microcontroler de proces unic, ceea ce înseamnă că poate rula un program la un moment dat și îl poate rula pe termen nelimitat până când scoateți puterea sau înlocuiți-o bine cu alt program.

Bazându-se pe capacități variate, sunt disponibile o gamă largă de plăci Arduino, care vin în diverse forme și dimensiuni. De exemplu, un Arduino Mini este aproape de dimensiunea degetului mare, un Arduino Mega este mai mare și are mult mai multe controale ale senzorului. Lilypad poate fi țesut în țesătură și este de asemenea impermeabil!

Să ne uităm la un Arduino Uno, care este cel mai frecvent utilizat.

Acesta este dotat cu un port USB care ne permite să ne conectăm la un laptop și să scriem coduri pentru acesta. Există, de asemenea, puterea de intrare, care poate fi utilizată atunci când doriți să utilizați placa ca standalone și nu este legată de computer.

Are 14 intrări / ieșiri digitale și șase pini analogi. Pinii digitali pot fi porniți și dezactivați pe baza logicii microcontrolerului. Ele pot fi, de asemenea, utilizate pentru a citi în valori în formă binară. Pinii analogici pot fi utilizați pentru a face o gamă de valori și nu doar pentru a porni sau a dezactiva, astfel încât acestea pot fi folosite la senzori de tip plugin cum ar fi senzorii de temperatură sau lumină. Există, de asemenea, unele pinii de modulație a lățimii pulsului furnizate pentru a face o gamă de valori utilizând pinii digitali. (Pini numerotați 11, 10, 6, 5, 3 se referă la acest lucru.)

De ce să folosiți un Arduino?

În primul rând, este ieftin, cross-platform, are un IDE bun, iar tot software-ul și hardware-ul sunt open source. Atunci când se face referire la open source, iată cum sunt licențiate toate componentele:

Hardware CC-BY-SA
Software-ul GPL
Documente CC-BY-SA
Marca TM

Mai mult decât atât, în plus față de aceste puncte, întregul consiliu Arduino împreună cu comunitatea sa este atât de vibrant și creativ încât este greu de ratat. Arduino este cel mai important bloc Lego din întregul puzzle de prototipuri rapide pentru reclame.

Cum comunică Arduino

Deoarece obiectivul principal al acestui articol este de a explora cum să utilizați Ruby pentru a interacționa cu Arduino, să explorăm cum funcționează comunicarea dintr-o parte a software-ului.

Toate plăcile Arduino au cel puțin un port serial (cunoscut și ca UART) care poate fi utilizat pentru comunicarea între placă și un computer. Nu contează ce limbă de programare se află pe celălalt dispozitiv, atât timp cât poate interfața prin serial. Alternativ, putem utiliza interfețe LAN cu fir și WiFi prin utilizarea de scuturi.

Soluții Ruby Arduino

Deoarece Arduino poate comunica prin portul serial, cea mai de bază abordare a controlului Arduino ar fi utilizarea bibliotecii serial Ruby.

Serial Port Gem

Serial Port gem este o implementare a porturilor seriale RS232 cu mai multe funcționalități de nivel scăzut pentru a controla semnalele de pe linie.

# https://github.com/hparra/ruby-serialport necesită "serialport" #params pentru portul serial port_str = "/ dev / ttyUSB0" #may să fie diferit pentru dvs. baud_rate = 9600 data_bits = 8 stop_bits = 1 paritate = SerialPort: : NONE sp = SerialPort.new (port_str, baud_rate, data_bits, stop_bits, paritate) # doar citiți pentru totdeauna în timp ce adevărat face în timp ce (i = sp.gets.chomp) nu pune capăt sfârșitul sp.close

Pentru a vă determina port_str pe Linux, puteți deschide IRB și să execute 'ls /dev'.split ("\ n") grep (/ usb | ACM / i) .map | d | "/ Dev / # d"

O altă opțiune de a folosi Ruby cu Arduino ar fi, evident, o simplă abstracție de a ascunde aceste detalii interne și de a lucra mai mult la obiect. Aceasta este abordarea exactă pe care RAD, sau Ruby Arduino Development, a optat să o utilizeze. Din păcate, proiectul nu mai este menținut.

Dino Gem

Această piatră prețioasă are o abordare mai puțin cuplată și foarte coerentă la problema utilizării Ruby cu Arduino. Prin aceasta, vreau sa spun ca foloseste o biblioteca generica pe Arduino, care raspunde dinamic la cererile de la calculator prin conexiunea seriala. 

Acest lucru oferă, de asemenea, mult mai abstracție pentru a trata componentele implicate. Bijuterii Dino în sine are o dependență de bijuterie port serial care explică faptul că utilizează aceeași bijuterie pentru comunicare serială oferind în același timp programator cu abstracții utile.

După instalarea dino bijuterie, alerga dino generate-sketch serial de la terminalul tău. Aceasta va genera o .eu nu schiță. Încărcați această schiță în Arduino utilizând ID-ul Arduino și apoi executați codul de mai jos de la computerul conectat la Arduino.

# dino_sample.rb necesita 'dino' board = Dino :: Board.new (Dino :: TxRx.new) led = Dino :: Componente :: Led.new (pin: 13, board: board) ] led.send (comuta) somn 0.5 sfârșitul

Puteți rula acest fișier de pe computer rularea dino_sample.rb Aceasta ar trebui să clipească LED-ul de pe pinul 13 al Arduino. Controlăm hardware-ul cu Ruby!

Să modificăm codul de mai sus pentru a utiliza API-ul Twitter și pentru a bloca dispozitivul pe baza anumitor semnale.

Declanșarea LED-ului cu un mesaj de scriere

Conectați la pinii 13 și 12, respectiv LED-ul RED și respectiv LED-ul verde. Apoi conectați Arduino la computer și încărcați schița implicită de serie Dino care a fost generată în pasul anterior.

Acum, vom folosi bijuteria tweetstream pentru integrarea în Twitter. Pentru a putea să o utilizați cu succes, va trebui să creați o aplicație Twitter și să utilizați cheile de consum și jetoanele oAuth pentru eșantion și să le puneți într-un fișier twitter_api_config.yml.

Să ne uităm la cod pentru a face ca LED-urile să clipească pe baza informațiilor provenite de pe Twitter.

# twitter_leds.rb necesită 'yaml' necesită 'tweetstream' necesită '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 = Dino :: TxRx :: Serial.new) redired = Dino :: Componente :: Led.new (pin: 13, board: board) greenled = Dino :: Componente :: Led.new (pin: 12, board: board) "super", "nebun", "bun", "distractiv", "dragoste", "minunat", " ] groaznic = ["nu este bun", "rău", "trist", "nu fericit", "nu ca", "displăcut", "nu este bun", " "," nu este bun "," nu este frumos "," ură "," nu distractiv "] TweetStream :: Client.new.track (" ploaie ") face | status | pune status.text # imprimă tweet-ul pe ecran. = status.text dacă awful.any? | w | twit.include? w pune ** ** sad tweet ** 'redled.send (: on) somn 3 redled.send (: off) somn 1 elsif awesome.any ? | w | twit.include? w pune '- hippy tweet--' greenled.send (: on) somn 3 greenled.send (: off) somn 1 end end

Acreditările vor fi stocate într-un alt fișier numit twitter_api_config.yml ca mai jos.

# twitter_api_config.yml # Puneți valorile XYZ pentru aplicația creată la apps.twitter.com consumer_key: XYZ consumer_secret: XYZ oauth_token: XYZ oauth_token_secret: XYZ

Codul de mai sus, atunci când se execută, veți avea LED-ul clipește pe baza conținutului Tweet! Ceea ce am făcut este să conectăm Arduino la un computer, să încărcăm codul de serie Dino la Arduino și apoi să executăm codul de mai sus pe mașina noastră spunând ruby twitter_leds.rb

Codul de mai sus este disponibil la acest depozit github.

În  twitter_leds.rb vom crea mai întâi o conexiune la placa Arduino folosind Dino. Apoi continuăm să creăm redled și greenled la știfturile 13 și, respectiv, 12. După aceea, vom crea o mulțime de cuvinte fericite și tristă, pentru a păstra lucrurile simple. După aceea, continuăm să căutăm apariția cuvântului ploaie în orice tweet și apoi continuați pentru a verifica dacă este un cuvânt trist și, dacă da, puneți pe declanșator LED-ul roșu mai degrabă decât LED-ul verde.

Acum aveți LED-uri declanșate de tweet-uri aleatorii pe tot globul. Minunat, nu-i așa??

Referințe

  • Arduino Serial
  • Arduino - Interfațare cu S / W
  • Codul Twitter al Arduino Ruby
Cod