Usare Ruby per programmare Arduino

Attraverso questo articolo imparerai come possiamo continuare a costruire un progetto in cui il LED diventa ROSSO se qualcuno tweets con un :-( (faccia triste) e la parola pioggia, e diventa VERDE quando il tweet contiene un :-) ( faccia felice) e la parola pioggia!

L'informatica fisica si riferisce all'idea di programmare le cose intorno a te. A differenza della programmazione tipica di file, dati o Internet, questa è la programmazione di cose che trovi nel mondo fisico. Usando Arduino possiamo leggere gli input fisici e modificarli in base alla logica e rispondervi con l'aiuto dei motori.

Cos'è Arduino?

Arduino è un microcontrollore a processo singolo che significa che può eseguire un programma alla volta e può eseguirlo indefinitamente fino a quando non si rimuove la potenza o si sostituisce con un altro programma.

Basati su diverse funzionalità, sono disponibili una vasta gamma di schede Arduino e sono disponibili in varie forme e dimensioni. Ad esempio, un Arduino Mini ha quasi le dimensioni del pollice, un Arduino Mega è più grande e ha molti più controlli del sensore. Lilypad può essere tessuto in tessuto ed è anche impermeabile!

Diamo un'occhiata ad Arduino Uno, che è il più usato.

Viene fornito con una porta USB che ci consente di collegarci a un laptop e scrivere codice per esso. C'è anche l'ingresso di alimentazione, che può essere utilizzato quando si desidera utilizzare la scheda come indipendente e non legata al computer.

Ha 14 pin di input / output digitali e sei pin analogici. I pin digitali possono essere attivati ​​e disattivati ​​in base alla logica del microcontrollore. Possono anche essere usati per leggere i valori in forma binaria. I pin analogici possono essere utilizzati per eseguire una gamma di valori e non solo on o off, in modo che possano essere utilizzati per collegare sensori come i sensori di temperatura o luce. Ci sono anche alcuni pin di modulazione di larghezza di impulso forniti per fare un intervallo di valori usando i pin digitali. (I pin numerati 11, 10, 6, 5, 3 si riferiscono a questo.)

Perché usare un Arduino?

Innanzitutto, è economico, multipiattaforma, ha un buon IDE e tutto il software e l'hardware sono open source. Quando ci si riferisce all'open source, ecco come tutti i componenti sono concessi in licenza:

Hardware CC-SA-BY
Software GPL
Documenti CC-SA-BY
Marca TM

Inoltre, oltre a questi punti, l'intera scheda Arduino e la sua comunità sono così vibranti e creativi, che è difficile non vederli. Arduino è il blocco Lego più importante dell'intero puzzle della prototipazione rapida per i creativi.

Come comunica Arduino

Poiché l'obiettivo principale di questo articolo è esplorare come utilizzare Ruby per interagire con Arduino, esploriamo come funziona la comunicazione da un lato software.

Tutte le schede Arduino hanno almeno una porta seriale (nota anche come UART) che può essere utilizzata per la comunicazione tra la scheda e un computer. Non importa quale linguaggio di programmazione si trova sull'altro dispositivo, purché possa interfacciarsi via seriale. In alternativa, possiamo usare anche le interfacce LAN e WiFi tramite schermate.

Ruby Arduino Solutions

Poiché Arduino è in grado di comunicare tramite la sua porta seriale, l'approccio più basilare per il controllo di Arduino sarebbe utilizzare la libreria Ruby seriale.

Gemma del porto seriale

Serial Port gem è un'implementazione di porte seriali RS232 con diverse funzionalità di basso livello per controllare i segnali sulla linea.

# https://github.com/hparra/ruby-serialport richiede "serialport" #params per porta seriale port_str = "/ dev / ttyUSB0" # può essere diverso per te baud_rate = 9600 data_bits = 8 stop_bits = 1 parità = SerialPort: : NONE sp = SerialPort.new (port_str, baud_rate, data_bits, stop_bits, parità) #just read forever while true do while (i = sp.gets.chomp) fa puts end end sp.close

Per determinare il tuo port_str su Linux, puoi aprire IRB ed esegui 'ls /dev'.split ("\ n"). grep (/ usb | ACM / i) .map | d | "/ Dev / # d"

Un'altra opzione per usare Ruby con Arduino sarebbe ovviamente una semplice astrazione di nascondere questi dettagli interni e lavorare di più a livello di oggetto. Questo è l'approccio esatto scelto da RAD o Ruby Arduino Development. Sfortunatamente, il progetto non è più mantenuto.

Dino Gem

Questa gemma ha un approccio più sciolto e fortemente coeso al problema dell'uso di Ruby con Arduino. Con ciò intendo che usa una libreria generica su Arduino, che risponde dinamicamente alle richieste dal computer tramite la connessione seriale. 

Ciò fornisce anche molta più astrazione per gestire i componenti coinvolti. La gemma Dino stessa ha una dipendenza dalla gemma della porta seriale che spiega che usa la stessa gemma per la comunicazione seriale mentre fornisce al programmatore delle astrazioni utili.

Dopo aver installato il dino gemma, corri dino generate-sketch seriale dal tuo terminale. Questo genererà a .io no schizzo. Carica questo schizzo su Arduino usando l'IDE Arduino, quindi esegui il codice seguente dal computer collegato ad Arduino.

# dino_sample.rb richiede 'dino' board = Dino :: Board.new (Dino :: TxRx.new) led = Dino :: Components :: Led.new (pin: 13, board: board) [: on,: off ] .cycle do | switch | led.send (interruttore) sleep 0.5 end

È possibile eseguire questo file dal computer eseguendo ruby dino_sample.rb Questo dovrebbe lampeggiare il LED sul pin 13 di Arduino. Ora controlliamo l'hardware con Ruby!

Modifichiamo questo codice qui sopra per utilizzare l'API di Twitter e far lampeggiare il dispositivo in base a determinati segnali.

Attivazione del LED con un tweet

Collegare al pin 13 e 12, LED ROSSO e LED VERDE, rispettivamente. Quindi connetti l'Arduino al computer e carica lo schizzo seriale Dino predefinito che è stato generato nel passaggio precedente.

Ora, useremo la gemma tweetstream per l'integrazione con Twitter. Per poterlo utilizzare con successo, dovrai creare un'app di Twitter e utilizzare le chiavi del consumatore e i token oAuth per il campione e inserirli in un file twitter_api_config.yml.

Diamo un'occhiata al codice per far lampeggiare i LED in base alle informazioni provenienti da Twitter.

# twitter_leds.rb richiede 'yaml' richiede 'tweetstream' richiede '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"] end board = Dino :: Board.new ( Dino :: TxRx :: Serial.new) redled = Dino :: Components :: Led.new (pin: 13, board: board) greenled = Dino :: Components :: Led.new (pin: 12, board: board) awesome = ['awesome', 'very good', 'happy', 'nice', ':-)', ':)', 'super', 'crazy', 'good', 'fun', 'love' ] awful = ['not good', 'bad', 'sad', 'not happy', 'non come', 'dislike', 'not good', ':(', ':-(', 'not fun ',' non buono ',' non bello ',' odio ',' non divertente '] TweetStream :: Client.new.track ("rain") do | status | puts status.text # stampa il tweet sullo schermo. = status.text if awful.any? | w | twit.include? w mette '** sad tweet **' redled.send (: on) sleep 3 redled.send (: off) sleep 1 elsif awesome.any ? | w | twit.include? w mette '--happy tweet--' greenled.send (: on) sleep 3 greenled.send (: off) sleep 1 end end

Le credenziali verranno archiviate in un altro file chiamato twitter_api_config.yml come sotto.

# twitter_api_config.yml # Metti i valori XYZ per l'applicazione creata su apps.twitter.com consumer_key: XYZ consumer_secret: XYZ oauth_token: XYZ oauth_token_secret: XYZ

Il codice precedente, quando è in esecuzione, avrà LED lampeggianti in base al contenuto del Tweet! Quello che abbiamo fatto è collegare l'Arduino a un computer, caricare il codice seriale Dino su Arduino e quindi eseguire il codice sopra riportato sulla nostra macchina dicendo ruby twitter_leds.rb

Sopra il codice è disponibile in questo repository github.

Nel  twitter_leds.rb per prima cosa creiamo una connessione alla scheda Arduino usando Dino. Quindi continuiamo a creare redled e greenled ai pin 13 e 12, rispettivamente. Successivamente, creiamo array di parole felici e tristi, per mantenere le cose semplici. Dopodiché, continuiamo a cercare l'occorrenza della parola pioggia in qualsiasi tweet, e poi andare avanti per verificare se è una parola triste e, in tal caso, mettere sul grilletto il LED rosso anziché il LED verde.

Ora i LED vengono attivati ​​da tweets casuali in tutto il mondo. Fantastico, non è vero??

Riferimenti

  • Arduino Serial
  • Arduino - Interfaccia con S / W
  • Codice Twitter di Arduino Ruby