Verwenden von Ruby zum Programmieren von Arduino

In diesem Artikel erfahren Sie, wie wir ein Projekt entwickeln können, bei dem die LED ROT wird, wenn jemand mit einem :-( (trauriges Gesicht) und dem Wort "Regen" twittert, und es wird GRÜN, wenn der Tweet ein :-) ( glückliches Gesicht) und das Wort Regen!

Physical Computing bezieht sich auf die Idee, Dinge um Sie herum zu programmieren. Im Gegensatz zur typischen Programmierung für Dateien, Daten oder das Internet ist dies die Programmierung für Dinge, die Sie in der physischen Welt finden. Mit Arduino können wir die physikalischen Eingänge lesen und basierend auf Logik modifizieren und mit Hilfe von Motoren darauf reagieren.

Was ist Arduino??

Arduino ist ein Einzelprozess-Mikrocontroller. Das bedeutet, dass ein Programm gleichzeitig ausgeführt werden kann. Es kann unbegrenzt ausgeführt werden, bis Sie die Stromversorgung trennen oder durch ein anderes Programm ersetzen.

Basierend auf den unterschiedlichen Fähigkeiten stehen eine Vielzahl von Arduino-Boards zur Verfügung, die auch in verschiedenen Formen und Größen erhältlich sind. Zum Beispiel ist ein Arduino Mini fast so groß wie ein Daumen, ein Arduino Mega ist größer und verfügt über viel mehr Sensorsteuerungen. Lilypad kann in Stoff gewebt werden und ist außerdem wasserdicht!

Lassen Sie uns einen Arduino Uno betrachten, der am häufigsten verwendet wird.

Es verfügt über einen USB-Anschluss, über den wir uns mit einem Laptop verbinden und Code schreiben können. Es gibt auch einen Stromeingang, der verwendet werden kann, wenn Sie die Karte als Standalone-Gerät verwenden möchten und nicht an Ihren Computer angeschlossen sind.

Es verfügt über 14 digitale Ein- / Ausgangspins und sechs analoge Pins. Die digitalen Pins können basierend auf der Logik des Mikrocontrollers ein- und ausgeschaltet werden. Sie können auch zum Einlesen der Werte in binärer Form verwendet werden. Die analogen Pins können verwendet werden, um eine Reihe von Werten vorzunehmen und nicht nur ein- oder auszuschalten. Sie können also zum Einstecken von Sensoren wie Temperatur- oder Lichtsensoren verwendet werden. Es sind auch einige Impulsbreitenmodulations-Pins vorhanden, um einen Bereich von Werten unter Verwendung der digitalen Pins durchzuführen. (Pins mit den Nummern 11, 10, 6, 5, 3 würden sich darauf beziehen.)

Warum ein Arduino verwenden??

Erstens ist es kostengünstig, plattformübergreifend, verfügt über eine gute IDE und die gesamte Software und Hardware ist Open Source. Wenn Sie sich auf Open Source beziehen, werden alle Komponenten lizenziert:

Hardware CC-SA-BY
Software GPL
Docs CC-SA-BY
Marke TM

Zusätzlich zu diesen Punkten ist das gesamte Arduino-Board zusammen mit seiner Community so lebendig und kreativ, dass es kaum zu übersehen ist. Arduino ist der wichtigste Lego-Block im gesamten Rätsel des Rapid Prototyping für Kreative.

Wie kommuniziert Arduino?

Da das Hauptziel dieses Artikels darin besteht, zu erkunden, wie Ruby für die Interaktion mit Arduino verwendet wird, wollen wir untersuchen, wie die Kommunikation von der Software aus funktioniert.

Alle Arduino-Karten verfügen über mindestens eine serielle Schnittstelle (auch als UART bezeichnet), die für die Kommunikation zwischen der Karte und einem Computer verwendet werden kann. Es ist egal, welche Programmiersprache sich auf dem anderen Gerät befindet, solange es seriell angeschlossen werden kann. Alternativ können wir auch kabelgebundene LAN- und WLAN-Schnittstellen mithilfe von Schirmen verwenden.

Ruby Arduino-Lösungen

Da das Arduino über seine serielle Schnittstelle kommunizieren kann, wäre die Steuerung des Arduino am grundlegendsten die serielle Ruby-Bibliothek.

Serial Port Gem

Serial Port gem ist eine Implementierung von seriellen RS232-Ports mit mehreren Low-Level-Funktionen zur Steuerung von Signalen auf der Leitung.

# https://github.com/hparra/ruby-serialport erfordert "serialport" #params für den seriellen Port port_str = "/ dev / ttyUSB0" # # kann für Sie unterschiedlich sein baud_rate = 9600 data_bits = 8 stop_bits = 1 parity = SerialPort: : NONE sp = SerialPort.new (port_str, baud_rate, data_bits, stop_bits, Parität) #wird immer gelesen, solange true () ist, während (i = sp.gets.chomp) das Ende von sp.close setzt

Um dein zu bestimmen port_str Unter Linux können Sie öffnen irb und ausführen 'ls /dev'.split ("\ n"). grep (/ usb | ACM / i) .map | d | "/ dev / # d"

Eine andere Möglichkeit, Ruby mit Arduino zu verwenden, wäre offensichtlich eine bloße Abstraktion des Verdeckens dieser internen Details und mehr Arbeit auf Objektebene. Das ist genau der Ansatz, den RAD oder Ruby Arduino Development gewählt hat. Leider wird das Projekt nicht mehr gepflegt.

Dino Gem

Dieser Edelstein geht das Problem der Verwendung von Ruby mit Arduino auf eine locker gekoppelte und stark zusammenhängende Weise an. Damit meine ich, dass es eine generische Bibliothek auf dem Arduino verwendet, die dynamisch über die serielle Verbindung auf die Anforderungen des Computers reagiert. 

Dies bietet auch viel mehr Abstraktion für die betroffenen Komponenten. Der Dino-Edelstein selbst hängt vom seriellen Port-Edelstein ab und erklärt, dass er denselben Edelstein für die serielle Kommunikation verwendet, während er dem Programmierer nützliche Abstraktionen bietet.

Nach der Installation des Dino Juwel, lauf Dino-Generierskizze seriell von Ihrem Terminal aus. Dies erzeugt eine .ino skizzieren. Laden Sie diese Skizze mit der Arduino-IDE in Arduino hoch, und führen Sie dann den folgenden Code von dem Computer aus, der mit dem Arduino verbunden ist.

# dino_sample.rb erfordert 'dino' board = Dino :: Board.new (Dino :: TxRx.new) led = Dino :: Components :: Led.new (Pin: 13, board: board) [: ein,: aus ] .cycle do | switch | led.send (switch) sleep 0.5 ende

Sie können diese Datei vom Computer aus ausführen, indem Sie Ruby ausführen dino_sample.rb Dies sollte die LED an Pin 13 des Arduino blinken lassen. Wir steuern jetzt die Hardware mit Ruby!

Lassen Sie uns diesen Code oben anpassen, um die Twitter-API zu verwenden und das Gerät anhand bestimmter Signale blinken zu lassen.

Auslösen der LED mit einem Tweet

Verbinden Sie sich jeweils mit Pin 13 und 12, ROTER LED und GRÜNER LED. Verbinden Sie dann den Arduino mit dem Computer und laden Sie die standardmäßige Dino-Serienskizze hoch, die im vorherigen Schritt erstellt wurde.

Jetzt verwenden wir den Tweetstream-Edelstein für die Integration von Twitter. Um sie erfolgreich verwenden zu können, müssen Sie eine Twitter-App erstellen und die Verbraucherschlüssel und die oAuth-Token für das Beispiel verwenden und in einer Datei ablegen twitter_api_config.yml.

Sehen wir uns den Code an, damit die LEDs auf der Grundlage von Informationen von Twitter blinken.

# twitter_leds.rb erfordern 'yaml' erfordern 'tweetstream' erfordern '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 = ["Nicht gut", "schlecht", "traurig", "nicht glücklich", "nicht mögen", "nicht mögen", "nicht gut", ":(", ":-(", "nicht lustig" ',' nicht gut ',' nicht nett ',' hassen ',' nicht lustig '] TweetStream :: Client.new.track ("rain") do | status | setzt status.text # gibt den Tweet auf dem Bildschirm aus. twit = status.text if awful.any? | w | twit.include? w setzt '** sad tweet **' redled.send (: on) sleep 3 redled.send (: off) sleep 1 elsif awesome.any ? | w | twit.include? w setzt '--happy tweet--' greenled.send (: on) sleep 3 greenled.send (: off) sleep 1 end end

Die Anmeldeinformationen werden in einer anderen Datei gespeichert twitter_api_config.yml wie nachstehend.

# twitter_api_config.yml # Geben Sie XYZ-Werte für die bei apps.twitter.com erstellte Anwendung ein. Consumer_key: XYZ Consumer_secret: XYZ oauth_token: XYZ oauth_token_secret: XYZ

Der obige Code, wenn er ausgeführt wird, blinken die LEDs basierend auf dem Tweet-Inhalt! Was wir getan haben, ist, den Arduino an einen Computer anzuschließen, den Dino-Seriencode auf den Arduino hochzuladen und dann den obigen Code auf unserer Maschine auszuführen, indem er sagt ruby twitter_leds.rb

Der obige Code ist in diesem github-Repository verfügbar.

Im  twitter_leds.rb Zunächst wird mit Dino eine Verbindung zum Arduino-Board hergestellt. Dann machen wir weiter gerettet und grünlich zu den Stiften 13 bzw. 12. Danach erstellen wir Arrays aus glücklichen und traurigen Worten, um die Dinge einfach zu halten. Danach suchen wir weiter nach dem Vorkommen des Wortes Regen in einem Tweet, und überprüfen Sie dann, ob es sich um ein trauriges Wort handelt. Wenn dies der Fall ist, setzen Sie die rote LED anstelle der grünen LED auf den Auslöser.

Sie haben jetzt LEDs, die von beliebigen Tweets auf der ganzen Welt ausgelöst werden. Großartig, nicht wahr??

Verweise

  • Arduino Serial
  • Arduino - Schnittstelle zu S / W
  • Arduino Ruby Twitter-Code