Usando Ruby para programar Arduino

A través de este artículo, aprenderá cómo podemos continuar para construir un proyecto donde el LED se encienda de color ROJO si alguien tuitea con un :-( (cara triste) y la palabra lluvia, y se pone VERDE cuando el tweet contiene un :-) ( cara feliz) y la palabra lluvia!

La computación física se refiere a la idea de programar cosas a tu alrededor. A diferencia de la programación típica para archivos, datos o Internet, esta es la programación para cosas que se encuentran en el mundo físico. Usando Arduino podemos leer las entradas físicas y modificarlas en función de la lógica y responder a ellas con la ayuda de los motores..

Que es arduino?

Arduino es un microcontrolador de proceso único, lo que significa que puede ejecutar un programa a la vez, y puede ejecutarse indefinidamente hasta que elimine la alimentación o la reemplace con otro programa..

En función de las diferentes capacidades, hay disponible una amplia gama de tableros Arduino y también vienen en varias formas y tamaños. Por ejemplo, un Arduino Mini es casi del tamaño del pulgar, un Arduino Mega es más grande y tiene muchos más controles de sensor. Lilypad puede ser tejido en tela y también es impermeable!

Veamos un Arduino Uno, que es el más utilizado.

Viene con un puerto USB que nos permite conectarnos a una computadora portátil y escribir un código para ella. También está la entrada de alimentación, que puede usarse cuando desee usar la placa como independiente y no conectada a su computadora.

Tiene 14 pines de entrada / salida digital y seis pines analógicos. Los pines digitales se pueden activar y desactivar según la lógica del microcontrolador. También se pueden utilizar para leer los valores en forma binaria. Los pines analógicos se pueden usar para hacer un rango de valores y no solo encendido o apagado, por lo que se pueden usar para conectar sensores como los sensores de temperatura o de luz. También se proporcionan algunos pines de modulación de ancho de pulso para hacer un rango de valores usando los pines digitales. (Los pines numerados 11, 10, 6, 5, 3 se refieren a eso).

Por qué usar un arduino?

Primero, es económico, multiplataforma, tiene un buen IDE y todo el software y hardware son de código abierto. Al referirse al código abierto, aquí se explica cómo se licencian todos los componentes:

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

Además, además de estos puntos, toda la placa Arduino junto con su comunidad es tan vibrante y creativa, que es difícil pasarla por alto. Arduino es el bloque Lego más importante en todo el rompecabezas de creación rápida de prototipos para creativos..

Cómo se comunica Arduino

Dado que el objetivo principal de este artículo es explorar cómo usar Ruby para interactuar con Arduino, exploremos cómo funciona la comunicación desde un punto de vista de software.

Todas las placas Arduino tienen al menos un puerto serie (también conocido como UART) que se puede usar para la comunicación entre la placa y una computadora. No importa qué lenguaje de programación se encuentre en el otro dispositivo, siempre que pueda interactuar a través de un puerto serie. Alternativamente, también podemos usar interfaces LAN y WiFi alámbricas usando escudos.

Soluciones Ruby Arduino

Dado que Arduino puede comunicarse a través de su puerto serie, el enfoque más básico para controlar Arduino sería usar la biblioteca serial de Ruby.

Serial Port Gem

Serial Port gem es una implementación de puertos serie RS232 con varias funcionalidades de bajo nivel para controlar señales en la línea.

# https://github.com/hparra/ruby-serialport require "serialport" #params for serial port port_str = "/ dev / ttyUSB0" # puede ser diferente para usted baud_rate = 9600 data_bits = 8 stop_bits = 1 parity = SerialPort: : NINGUNO sp = SerialPort.new (port_str, baud_rate, data_bits, stop_bits, parity) # solo leer para siempre mientras es verdadero do mientras que (i = sp.gets.chomp) do pone i end end sp.close

Para determinar su port_str en Linux, puedes abrir irb y ejecutar 'ls /dev'.split ("\ n"). grep (/ usb | ACM / i) .map | d | "/ dev / # d"

Otra opción para usar Ruby con Arduino sería obviamente una simple abstracción de ocultar estos detalles internos y trabajar más a nivel de objeto. Ese es el enfoque exacto que RAD, o Ruby Arduino Development, optó por usar. Desafortunadamente, el proyecto ya no se mantiene..

Dino Gema

Esta gema adopta un enfoque más flexible y cohesivo al problema de usar Ruby con Arduino. Con eso, quiero decir que utiliza una biblioteca genérica en el Arduino, que responde dinámicamente a las solicitudes de la computadora a través de la conexión en serie. 

Esto también proporciona mucha más abstracción para tratar con los componentes involucrados. La gema de Dino en sí misma depende de la gema del puerto serie, lo que explica que utiliza la misma gema para la comunicación en serie y proporciona al programador abstracciones útiles..

Después de instalar el dino gema, correr dino generar-boceto serie desde su terminal. Esto generará un .ino bosquejo. Suba este boceto a Arduino usando el IDE de Arduino, y luego ejecute el siguiente código desde la computadora conectada a Arduino.

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

Puede ejecutar este archivo desde la computadora ejecutando ruby dino_sample.rb Esto debería hacer parpadear el LED en el pin 13 del Arduino. Ahora estamos controlando hardware con Ruby!

Modifiquemos este código de arriba para hacer uso de la API de Twitter y hacer que el dispositivo parpadee según ciertas señales..

Activando el LED con un tweet

Conecte al pin 13 y 12, LED ROJO y LED VERDE, respectivamente. Luego, conecte el Arduino a la computadora y cargue el bosquejo serial Dino predeterminado que se generó en el paso anterior.

Ahora, usaremos la gema de tweetstream para la integración de Twitter. Para poder usarlo con éxito, deberá crear una aplicación de Twitter y usar las claves de consumidor y los tokens de oAuth para la muestra y colocarlos en un archivo. twitter_api_config.yml.

Veamos el código para hacer que los LED parpadeen según la información proveniente de Twitter..

# twitter_leds.rb require 'yaml' require 'tweetstream' require '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. 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' ] horrible = ['no es bueno', 'malo', 'triste', 'no es feliz', 'no me gusta', 'no me gusta', 'no es bueno', ':(', ':-(', 'no es divertido ',' no es bueno ',' no es bueno ',' odio ',' no es divertido '] TweetStream :: Client.new.track ("rain") do | status | puts status.text # imprime el tweet en la pantalla. = status.text si awful.any? | w | twit.include? w pone '** tweet triste **' redled.send (: on) sleep 3 redled.send (: off) sleep 1 elsif awesome.any ? | w | twit.include? w pone '--happy tweet--' greenled.send (: on) sleep 3 greenled.send (: off) sleep 1 end end

Las credenciales serán almacenadas en otro archivo llamado twitter_api_config.yml como a continuación.

# twitter_api_config.yml # Ponga valores XYZ para la aplicación creada en apps.twitter.com consumer_key: XYZ consumer_secret: XYZ oauth_token: XYZ oauth_token_secret: XYZ

El código anterior, cuando se ejecute, tendrá un parpadeo de LED basado en el contenido del Tweet. Lo que hemos hecho es conectar el Arduino a una computadora, cargar el código de serie de Dino en el Arduino y luego ejecutar el código anterior en nuestra máquina diciendo: ruby twitter_leds.rb

El código anterior está disponible en este repositorio github.

En  twitter_leds.rb Primero creamos una conexión a la placa Arduino usando Dino. Luego seguimos creando redled y verde a los pines 13 y 12, respectivamente. Después de eso, creamos matrices de palabras felices y tristes, para mantener las cosas simples. Después de eso, seguimos buscando la aparición de la palabra. lluvia en cualquier tweet, y luego continúe para verificar si es una palabra triste y, si es así, presione el gatillo con el LED rojo en lugar del LED verde.

Ahora tienes LED activados por tweets aleatorios en todo el mundo. Impresionante, no es?

Referencias

  • Serie arduino
  • Arduino - Interfaz con S / W
  • Arduino Ruby Twitter Code