Utiliser Ruby pour programmer Arduino

A travers cet article, vous apprendrez comment construire un projet dans lequel la LED devient ROUGE si quelqu'un tweete avec un :-( (visage triste) et le mot pluie, et passe au VERT lorsque le tweet contient un :-) ( visage heureux) et le mot pluie!

L'informatique physique fait référence à l'idée de programmer des choses autour de vous. Contrairement à la programmation habituelle pour les fichiers, les données ou Internet, il s'agit de la programmation de tout ce que vous trouvez dans le monde physique. En utilisant Arduino, nous pouvons lire les entrées physiques, les modifier en fonction de la logique et y répondre à l'aide de moteurs..

Qu'est-ce que l'Arduino??

Arduino est un microcontrôleur à un seul processus, ce qui signifie qu'il peut exécuter un programme à la fois, indéfiniment, jusqu'à ce que vous retiriez le courant ou que vous le remplaciez avec un autre programme..

Sur la base de capacités variées, une large gamme de cartes Arduino sont disponibles. Elles existent également sous différentes formes et tailles. Par exemple, un Arduino Mini a presque la taille du pouce, un Arduino Mega est plus gros et comporte beaucoup plus de commandes de capteurs. Lilypad peut être tissé dans le tissu et est également imperméable!

Regardons un Arduino Uno, qui est le plus couramment utilisé.

Il est livré avec un port USB qui nous permet de nous connecter à un ordinateur portable et d’écrire le code correspondant. Il y a aussi l'entrée d'alimentation, qui peut être utilisée lorsque vous souhaitez utiliser la carte de manière autonome et non connectée à votre ordinateur..

Il possède 14 broches d’entrée / sortie numériques et six broches analogiques. Les broches numériques peuvent être activées et désactivées en fonction de la logique du microcontrôleur. Ils peuvent également être utilisés pour lire les valeurs sous forme binaire. Les broches analogiques peuvent être utilisées pour effectuer une gamme de valeurs et pas seulement pour les activer ou les désactiver, elles peuvent donc être utilisées pour brancher des capteurs tels que les capteurs de température ou de lumière. Certaines broches de modulation de largeur d'impulsion sont également fournies pour effectuer une plage de valeurs à l'aide des broches numériques. (Les épinglettes numérotées 11, 10, 6, 5, 3 feraient référence à cela.)

Pourquoi utiliser un Arduino?

Tout d'abord, il est peu coûteux, multiplate-forme, doté d'un bon IDE, et tous les logiciels et matériels sont en open source. Lorsque vous faites référence à l'open source, voici comment tous les composants sont concédés sous licence:

Matériel CC-SA-BY
Logiciel GPL
Docs CC-SA-BY
Marque TM

De plus, en plus de ces points, tout le tableau Arduino ainsi que sa communauté sont si dynamiques et créatifs, qu’il est difficile de les rater. Arduino est le bloc Lego le plus important de tout le puzzle du prototypage rapide pour les créatifs.

Comment Arduino communique

L'objectif principal de cet article étant d'explorer comment utiliser Ruby pour interagir avec Arduino, examinons le fonctionnement de la communication du côté logiciel..

Toutes les cartes Arduino ont au moins un port série (également appelé UART) pouvant être utilisé pour la communication entre la carte et un ordinateur. Peu importe le langage de programmation utilisé sur l’autre appareil, à condition qu’il puisse s’interfacer via un port série. Alternativement, nous pouvons également utiliser des interfaces LAN et WiFi filaires en utilisant des boucliers.

Solutions Ruby Arduino

Étant donné que l’Arduino peut communiquer via son port série, l’approche la plus élémentaire pour contrôler l’Arduino serait d’utiliser la bibliothèque Ruby série..

Bijou de port série

Serial Port gem est une implémentation des ports série RS232 avec plusieurs fonctionnalités de bas niveau pour contrôler les signaux sur la ligne..

# https://github.com/hparra/ruby-serialport nécessite "serialport" #params pour le port série port_str = "/ dev / ttyUSB0" # peut être différent pour vous baud_rate = 9600 data_bits = 8 stop_bits = 1 parity = SerialPort: : NONE sp = SerialPort.new (port_str, baud_rate, data_bits, stop_bits, parity) #juste de lire à jamais en tant que vrai, tant que (i = sp.gets.chomp) met bien i end end sp.close

Pour déterminer votre port_str sur Linux, vous pouvez ouvrir irb et exécuter 'ls /dev'.split ("\ n"). grep (/ usb | ACM / i) .map | d | "/ dev / # d"

Une autre option pour utiliser Ruby avec Arduino serait évidemment une simple abstraction de cacher ces détails internes et de travailler davantage au niveau des objets. C’est exactement l’approche choisie par RAD ou Ruby Arduino Development. Malheureusement, le projet n'est plus maintenu.

Dino Gem

Ce joyau adopte une approche moins cohérente et plus cohérente du problème de l'utilisation de Ruby avec Arduino. J'entends par là qu'il utilise une bibliothèque générique sur l'Arduino, qui répond dynamiquement aux demandes de l'ordinateur via la connexion série.. 

Cela fournit également beaucoup plus d'abstraction pour traiter les composants impliqués. La gemme Dino elle-même est dépendante de la gemme du port série, expliquant qu’elle utilise la même gemme pour les communications en série tout en fournissant au programmeur des abstractions utiles..

Après avoir installé le dino bijou, courir dino generate-sketch série depuis votre terminal. Cela va générer un .ino esquisser. Téléchargez cette esquisse sur Arduino à l'aide de l'IDE Arduino, puis exécutez le code ci-dessous à partir de l'ordinateur connecté à l'Arduino..

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

Vous pouvez exécuter ce fichier à partir de l'ordinateur en exécutant ruby dino_sample.rb Cela devrait faire clignoter la LED sur la broche 13 de l’Arduino. Nous contrôlons maintenant le matériel avec Ruby!

Modifions ce code ci-dessus pour utiliser l'API Twitter et faire clignoter l'appareil en fonction de certains signaux..

Déclencher la LED avec un Tweet

Connectez-vous aux broches 13 et 12, aux DEL ROUGE et VERTE, respectivement. Connectez ensuite l’Arduino à l’ordinateur et téléchargez l’esquisse série Dino par défaut générée à l’étape précédente..

Nous allons maintenant utiliser la gem tweetstream pour l'intégration de Twitter. Pour pouvoir l'utiliser avec succès, vous devez créer une application Twitter, utiliser les clés de consommateur et les jetons oAuth pour l'échantillon et les placer dans un fichier. twitter_api_config.yml.

Examinons le code pour faire clignoter les voyants en fonction d'informations provenant 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"] Dino :: TxRx :: Serial.new) redled = Dino :: Components :: Led.new (pin: 13, carte: tableau) greenled = Dino :: Components :: Led.new (pin: 12, carte: tableau) awesome = ['awesome', 'très bon', 'heureux', 'gentil', ':-)', ':)', 'super', 'fou', 'bon', 'amusant', 'amoureux' ] horrible = ['pas bon', 'mauvais', 'triste', 'pas heureux', 'ne pas aimer', 'ne pas aimer', 'pas bon', ':(', ':(', 'pas amusant ',' pas bien ',' pas gentil ',' déteste ',' pas drôle '] TweetStream :: Client.new.track ("pluie") faire | status | met status.text # pour afficher le tweet à l'écran. = status.text if awful.any? | w | twit.include? w met '** tweet triste **' redled.send (: on) dormez 3 redled.send (: off) dormez 1 elsif awesome.any ? | w | twit.include? w met '--happy tweet--' greenled.send (: on) dort 3 greenled.send (: off) dort 1 fin fin

Les identifiants seront stockés dans un autre fichier appelé twitter_api_config.yml comme ci-dessous.

# twitter_api_config.yml # Définissez les valeurs XYZ pour l'application créée sur apps.twitter.com clé_consommation: XYZ consommateur_secret: XYZ oauth_token: XYZ oauth_token_secret: XYZ

Le code ci-dessus, lorsqu’il sera exécuté, le voyant clignotera en fonction du contenu du tweet! Ce que nous avons fait est de connecter l’Arduino à un ordinateur, de télécharger le code de série Dino sur l’Arduino, puis d’exécuter le code ci-dessus sur notre machine en disant: ruby twitter_leds.rb

Le code ci-dessus est disponible dans ce dépôt github.

Dans  twitter_leds.rb nous créons d’abord une connexion à la carte Arduino en utilisant Dino. Ensuite, nous continuons à créer rougit et verdoyant aux broches 13 et 12, respectivement. Après cela, nous créons des tableaux de mots joyeux et tristes, pour que les choses restent simples. Après cela, nous continuons à chercher l'occurrence du mot pluie dans n'importe quel tweet, puis vérifiez si c'est un mot triste et, si c'est le cas, mettez sur la gâchette le voyant rouge plutôt que le voyant vert.

Vous avez maintenant des voyants déclenchés par des tweets aléatoires à travers le monde. Génial, n'est-ce pas?

Références

  • Série Arduino
  • Arduino - Interfaçage avec S / W
  • Arduino Ruby Twitter Code