Come collegare un Arduino?


43

Il sito Web di Arduino lo riassume come

Arduino è una piattaforma di prototipazione elettronica open source basata su hardware e software flessibili e di facile utilizzo. È destinato ad artisti, designer, hobbisti e chiunque sia interessato a creare oggetti o ambienti interattivi.

Può essere una bella interfaccia per controllare i servi e fornire altra connettività fornita dai suoi numerosi schermi opzionali.

Come si collega uno a un Raspberry Pi? Come imposto la comunicazione?

Risposte:


38

Gli Arduinos di solito appaiono come dispositivi seriali USB. Le schede attuali utilizzano il driver seriale USB integrato nel microprocessore principale, ma i vecchi Arduinos (e cloni) utilizzavano chip seriali USB di terze parti separati.

Per ricevere semplicemente Serial.printdati su Raspberry Pi da Arduino, uso il programma GNU Screen come terminale di base: screen [serial-port] [baud-rate](ad esempio screen /dev/ttyACM0 9600).

Ho testato tre diversi Arduinos e un clone piuttosto diverso. Le varianti più recenti sono apparse tutte come /dev/ttyACM0porte e quelle più vecchie /dev/ttyUSB0. Questo è quello che ho trovato, sotto Raspbian:

Il Raspberry Pi potrebbe non fornire energia sufficiente per pilotare un Arduino, quindi potresti aver bisogno di energia esterna. Per completezza, ho anche testato un Prolific PL2303 , anche se non è su alcun Arduino che conosco. Sembrava abbastanza felicemente /dev/ttyUSB0.

Per comunicazioni più complesse con i sensori, è possibile considerare Firmata , "un protocollo generico per la comunicazione con microcontrollori da software su un computer host". Ha implementazioni per le librerie Arduino e Python da eseguire sul lato Raspberry Pi.

Ecco un piccolo esempio usando pyFirmata per leggere un LM35 e cambiare la luminosità di un 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()

Ci sono alcuni avvertimenti quando si usa pyFirmata:

  • Le letture analogiche e le scritture PWM sono normalizzate su un intervallo 0 .. 1 e non su Arduino standard 0 .. 255 e 0 .. 1023.
  • È davvero necessario avviare un thread iteratore separato per interrompere le letture precedenti che traboccano dal buffer seriale
  • Poiché Arduino viene letto in modo asincrono, assicurarsi che la connessione pyFirmata sia completamente inizializzata prima di leggere dalle porte. Altrimenti, Nonene conseguono valori.

1
Ho anche confermato che puoi eseguire Processing su Raspberry Pi. È molto lento, ma sono riuscito a farlo controllare un Arduino tramite un collegamento USB: controllare un Arduino da Raspberry Pi usando Elaborazione . Vedrò se posso
portarlo

Grazie per questa risposta è stato molto utile. Sto usando Python serial per leggere da / dev / ttyACM0 e trovarlo molto incoerente. Ho pensato che fosse la mancanza di energia per il mio arduino, ma l'ho collegato a un alimentatore esterno e ho ancora problemi. A volte i dati non sono corretti, a volte viene generata un'eccezione perché / dev / ttyACM0 non viene trovato (sebbene le esecuzioni successive lo troveranno). Hai avuto problemi simili?
Andy Smith,

No, questo non corrisponde alla mia esperienza.
scruss

Grazie per la risposta - interessante, deve essere qualcosa che sto sbagliando allora!
Andy Smith,

Forse fai una domanda non-Pi specifica su SE, o fai direttamente sul forum di Arduino. Le comunicazioni seriali spesso mi fanno venire il mal di testa ...
scruss

13

Nel caso in cui non sia chiaro, con Raspbian Wheezy , è possibile eseguire l'IDE di Arduino e caricare schizzi su Arduino quando è collegato alla porta USB di Raspberry Pi. Per installare su Raspbian, basta digitare nella shell (aka riga di comando):

sudo apt-get install arduino

Scaricherà e installerà tutti i pacchetti necessari. Ho un paio di foto dell'IDE di Arduino in Raspbian qui:

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

(come hanno già descritto altre persone, il Raspberry Pi potrebbe anche programmare l'Arduino tramite i pin della porta seriale (UART) sull'intestazione GPIO. In questo caso non dovresti "sprecare" una porta USB, ma richiederebbe una configurazione aggiuntiva ).

Saluti, Drew


Ho testato un Arduino Uno con LED RGB con un semplice schizzo in dissolvenza e l'Arduino Uno era alimentato solo dalla porta USB del Raspberry Pi. Non ho avuto problemi, ma, naturalmente, YMMV.
pdp7,

8

Si può scegliere di collegare l'rpi all'Arduino usando una porta USB o usando i pin GPIO. Si può usare Wiringpi per fare la comunicazione tra le schede.

Attualmente è in fase di sviluppo anche un ponte chiamato Ponte .

Un ciao mondo di base può essere trovato qui .


7

La modalità à la

Presentato come Il modo corretto di mettere un Arduino in un Raspberry Pi di Hack A Day, la modalità à la mode è un clone di Arduino impilabile progettato da Anool Mahidharia, Justin Shaw e Kevin Osborn della collaborazione OSHW di Wyolum.com. Hack A Day lo ha descritto come segue

Immediatamente, l'AlaMode si collega direttamente ai pin GPIO del Raspberry Pi. Da lì, viene abilitata la comunicazione con ATMega di Arduino, che consente di inviare e ricevere dati proprio come si farebbe con un Arduino. C'è un orologio in tempo reale, servo headers, molti modi per alimentare la scheda e persino un breakout per [a] modulo GPS.

Un sacco di inutili cruft vengono eliminati in AlaMode; Non esiste una porta USB, ma può essere programmata direttamente sui pin GPIO di Raspberry Pi. Abbastanza pulito, e non vediamo l'ora di prenderne uno per il nostro [Raspberry Pi].

Kevin fornisce alcuni dettagli in più sul suo blog :

Ecco le funzionalità tra cui alcuni extra extra:

  • Potenza flessibile. Può essere alimentato direttamente dal Pi, autonomo con una batteria o wall-wart o alimentazione USB. Questo è importante se il tuo scudo prende più potenza di quella che il Pi può fornire o se vuoi sganciarlo per un'operazione autonoma. Programmabile tramite UART del Pi sui pin GPIO o un adattatore seriale USB ISDI o ISP.
  • Header per il collegamento di Fastrax UP501 GPS. DS3234 Orologio in tempo reale. Il Pi non ha il proprio RTC alimentato a batteria. È possibile impostare un programma in AlaMode per segnalare l'ora al Pi via seriale o I2C
  • Slot per scheda micro SD. Utile per la registrazione dei dati e grande memoria per le tue applicazioni Arduino
  • Fila di servo header collegati ai pin PWM con alimentazione configurabile e rail di terra

Beta limitata

Il board è attualmente in versione beta limitata, ma merita di essere menzionato come un clone ben congegnato, che è stato annunciato da un gruppo con forma precedente .

Riferimenti

  1. Hack A Day's Blog Post
  2. Blog post di Kevin Osborn
  3. Wyolum.com

4

Potresti prendere in considerazione la Gert Board che ora è basata su Arduino se vuoi una piattaforma di interfaccia hardware per scopi generici. Un vantaggio è che esiste un'ampia documentazione sull'interazione con l'RPi. Disponibile su pre-ordine da Element14 a partire dall'8 / 8/12.


0

Esiste un HAT RaspberryPi che si comporta come Arduino e può essere programmato tramite la sua interfaccia utente Web da qualsiasi browser. Progetto chiamato CoPiino . Viene fornito completamente con il software attivo e funzionante. Basta inserire lo schizzo di Arduino nell'interfaccia utente del browser e premere "compila ed esegui" - questo è tutto.


1
dato che hai pubblicato almeno due risposte che stanno promuovendo CoPino, sospetto che tu sia collegato a questo progetto. Qualsiasi connessione dovrebbe essere annotata nella tua risposta,
Steve Robillard,

Sì, è assolutamente corretto e il mio commento copre totalmente l'argomento. La scheda CoPiino è simile alla scheda a-la-mode già menzionata. Dove CoPiino presenta alcune belle funzionalità aggiuntive. Dove si può facilmente programmare la programmazione di Arduino da Pi - questa era la domanda iniziale.
tswaehn,

Quattro anni dopo non hai ancora modificato la tua affiliazione. Per favore fallo.
Jon Harper,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.