Comment attacher un Arduino?


43

Le site Arduino le résume comme suit:

Arduino est une plate-forme de prototypage électronique à code source ouvert reposant sur un matériel et un logiciel flexibles et faciles à utiliser. Il est destiné aux artistes, concepteurs, amateurs et à toute personne intéressée par la création d'objets ou d'environnements interactifs.

Ce peut être une bonne interface pour contrôler les servos et fournir une autre connectivité fournie par ses nombreux boucliers optionnels.

Comment en connecter un à un Raspberry Pi? Comment configurer la communication?

Réponses:


38

Les Arduinos apparaissent généralement comme des périphériques série USB. Les cartes actuelles utilisent le pilote série USB intégré au microprocesseur principal, mais les anciens Arduinos (et leurs clones) utilisaient des puces série USB tierces distinctes.

Pour recevoir simplement des Serial.printdonnées sur le Raspberry Pi de l’Arduino, j’utilise le programme GNU Screen comme terminal de base: screen [serial-port] [baud-rate](par exemple screen /dev/ttyACM0 9600).

J'ai testé trois Arduinos différents et un clone plutôt différent. Les nouvelles variantes sont toutes apparues en tant que /dev/ttyACM0ports, et les plus anciennes /dev/ttyUSB0. Voici ce que j'ai trouvé sous Raspbian:

Le Raspberry Pi peut ne pas fournir assez d’énergie pour conduire un Arduino, vous aurez donc peut-être besoin d’une alimentation externe. Par souci d’ exhaustivité, j’ai également testé un Prolific PL2303 , même s’il n’appartient à aucun Arduino. Il est apparu assez heureusement comme /dev/ttyUSB0.

Pour des communications plus complexes avec des capteurs, vous pouvez envisager Firmata , "un protocole générique pour communiquer avec des microcontrôleurs à partir de logiciels sur un ordinateur hôte". Il a des implémentations pour Arduino et des bibliothèques Python à exécuter du côté Raspberry Pi.

Voici un petit exemple d'utilisation de pyFirmata pour lire un LM35 et modifier la luminosité d'une LED:

#!/usr/bin/python
# -*- coding: utf-8 -*-

# simple test of pyfirmata and Arduino; read from an LM35 on A0,
#                                       brighten an LED on D3 using PWM
# scruss, 2012-08-14 - tested on Arduino Uno & Raspberry Pi (Raspbian)

import pyfirmata

# Create a new board, specifying serial port
board = pyfirmata.Arduino('/dev/ttyACM0')

# start an iterator thread so that serial buffer doesn't overflow
it = pyfirmata.util.Iterator(board)
it.start()

# set up pins
pin0=board.get_pin('a:0:i')             # A0 Input      (LM35)
pin3=board.get_pin('d:3:p')             # D3 PWM Output (LED)

# IMPORTANT! discard first reads until A0 gets something valid
while pin0.read() is None:
    pass

for i in range(10):
    pin3.write(i/10.0)                  # set D3 to 0, 10%, 20%, ... brightness
    print "PWM: %d %% Temperature %.1f °C" % (i * 10, pin0.read() * 5 * 100)
    board.pass_time(1)                  # pause 1 second

pin3.write(0)                           # turn LED back off
board.exit()

Il y a quelques mises en garde lors de l'utilisation de pyFirmata:

  • Les lectures analogiques et les écritures PWM sont normalisées dans une plage de 0 .. 1, et non des Arduino standard 0 .. 255 et 0 .. 1023.
  • Vous devez vraiment démarrer un thread d'itérateur séparé pour empêcher les anciennes lectures de déborder du tampon série.
  • Puisque l’Arduino est lu de manière asynchrone, assurez-vous que la connexion pyFirmata est complètement initialisée avant de lire les ports. Sinon, les Nonevaleurs s'ensuivent.

1
J'ai également confirmé que vous pouvez exécuter le traitement sur le Raspberry Pi. C'est très lent, mais j'ai réussi à le faire contrôler un Arduino via une liaison USB: Contrôler un Arduino à partir de Raspberry Pi en utilisant Traitement . Je verrai si je peux porter ça en Python / tkinter ...
scruss

Merci pour cette réponse, c'était très utile. J'utilise python serial pour lire dans / dev / ttyACM0 et le trouve très incohérent. Je pensais que c’était le manque d’alimentation de mon arduino mais je l’ai raccordé à une source d’alimentation externe et j’ai toujours des problèmes. Parfois, les données sont mal formées, parfois une exception est levée car / dev / ttyACM0 n’est pas trouvé (bien que les exécutions ultérieures le trouveront). Avez-vous eu des problèmes similaires?
Andy Smith

Non, cela ne correspond pas à mon expérience.
scruss

Merci pour la réponse - intéressant, doit être quelque chose que je fais mal alors!
Andy Smith

Peut-être posez-vous une question non spécifique à Pi sur SE ou posez-vous directement sur le forum Arduino. Comms série me donne souvent un mal de tête ...
scruss

13

Au cas où ce ne serait pas clair, avec Raspbian Wheezy , vous pouvez exécuter l'IDE Arduino et télécharger des esquisses sur l'Arduino lorsqu'il est connecté au port USB du Raspberry Pi. Pour installer sur Raspbian, tapez simplement dans le shell (ligne de commande):

sudo apt-get install arduino

Il téléchargera et installera tous les packages nécessaires. J'ai quelques photos de l'IDE Arduino dans Raspbian ici:

http://www.element14.com/community/groups/raspberry-pi/blog/2012/07/03/review-of-raspberry-pi-images

(Comme d'autres personnes l'ont décrit ci-dessus, le Raspberry Pi pourrait également programmer l'Arduino via les broches du port série (UART) sur l'en-tête GPIO. Dans ce cas, vous ne devriez pas "gaspiller" un port USB, mais une configuration supplémentaire serait nécessaire. )

Cordialement, Drew


J'ai testé un Arduino Uno avec une LED RVB avec un simple esquisse en fondu et l'Arduino Uno était uniquement alimenté par le port USB du Raspberry Pi. Je n'ai pas eu de problèmes, mais bien sûr, YMMV.
pdp7

8

On peut choisir de connecter le rpi à l’arduino en utilisant un port USB ou en utilisant les broches GPIO. On peut utiliser Wiringpi pour faire la communication entre les cartes.

Actuellement, un pont appelé Ponte est en cours de développement .

Un monde de base bonjour peut être trouvé ici .


7

À la mode

Décrit comme la bonne façon de placer un Arduino dans un Raspberry Pi de Hack A Day, le mode est un clone Arduino empilable conçu par Anool Mahidharia, Justin Shaw et Kevin Osborn du groupe de collaboration Wyolum.com OSHW. Hack A Day l'a décrit comme suit

Dès le départ, AlaMode se branche directement sur les broches GPIO du Raspberry Pi. À partir de là, la communication avec l'ATMega de l'Arduino est activée, vous permettant d'envoyer et de recevoir des données comme vous le feriez avec un Arduino. Il y a une horloge en temps réel, des en-têtes de servo, de nombreuses façons d'alimenter la carte, et même une évasion pour [un] module GPS.

Beaucoup de choses inutiles sont supprimées dans AlaMode; Il n'y a pas de port USB, mais il peut être programmé directement sur les broches GPIO du Raspberry Pi. Très chouette, et nous avons hâte d’en prendre un pour notre [Raspberry Pi].

Kevin donne un peu plus de détails sur son blog :

Voici les fonctionnalités, y compris quelques bonus supplémentaires:

  • Puissance flexible. Peut être alimenté directement à partir du Pi, autonome avec une batterie ou une alimentation murale, ou USB. Ceci est important si votre bouclier consomme plus d’énergie que le Pi ne peut en fournir ou si vous souhaitez le détacher pour un fonctionnement autonome. Programmable via l'UART du Pi sur les broches GPIO, un adaptateur FTDI USB-Serial ou un fournisseur de services Internet.
  • En-tête de connexion Fastrax UP501 GPS. DS3234 Horloge en temps réel. Le Pi n'a pas sa propre horloge temps réel sauvegardée sur batterie. Vous pouvez définir un programme dans AlaMode pour signaler l’heure au Pi via un port série ou I2C.
  • Emplacement pour carte Micro-SD. Utile pour l'enregistrement de données et la grande mémoire pour vos applications Arduino
  • Ligne d'en-têtes de servo connectée aux broches PWM avec un rail d'alimentation et de mise à la terre configurable

Bêta limitée

Le conseil est actuellement en version bêta limitée, mais il mérite d’être mentionné comme un clone bien pensé, qui a été annoncé par un groupe avec une forme antérieure .

Les références

  1. Blog de piratage d'un jour
  2. Blog de Kevin Osborn
  3. Wyolum.com

4

Vous pouvez envisager la carte Gert, désormais basée sur Arduino, si vous souhaitez une plate-forme d’interface matérielle à usage général. L'un des avantages est qu'il existe une documentation complète sur les interactions avec le RPi. En pré-commande sur Element14 à partir du 8/8/12.


0

Il existe un RaspberryPi HAT qui se comporte comme un Arduino et peut être programmé via son interface Web à partir de n'importe quel navigateur. Projet appelé CoPiino . Il est livré complètement avec un logiciel opérationnel. Il suffit d'entrer l'esquisse Arduino dans l'interface utilisateur du navigateur et de cliquer sur "Compiler et exécuter" - c'est tout.


1
Étant donné que vous avez posté au moins deux réponses qui font la promotion de CoPino, je soupçonne que vous êtes connecté à ce projet. Tout lien devrait être noté dans votre réponse,
Steve Robillard

Oui, c'est tout à fait correct et mon commentaire couvre totalement le sujet. La carte CoPiino est similaire à la carte a-la-mode déjà mentionnée. Où CoPiino propose quelques fonctionnalités supplémentaires intéressantes. Où la programmation de l'Arduino à partir de Pi est facilement couverte - telle était la question initiale.
tswaehn

Quatre ans plus tard, vous n’avez toujours pas modifié votre affiliation. S'il-vous-plaît faites ainsi.
Jon Harper
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.