¿Cómo adjuntar un Arduino?

43

El sitio web de Arduino lo resume como

Arduino es una plataforma de creación de prototipos de electrónica de código abierto basada en hardware y software flexible y fácil de usar. Está destinado a artistas, diseñadores, aficionados y cualquier persona interesada en crear objetos o entornos interactivos.

Puede ser una buena interfaz para controlar servos y proporcionar otra conectividad proporcionada por sus muchos escudos opcionales.

¿Cómo conecto uno a una Raspberry Pi? ¿Cómo configuro la comunicación?

Lucas Kauffman
fuente

Respuestas:

38

Los arduinos suelen aparecer como dispositivos serie USB. Las placas actuales usan el controlador serie USB integrado en el microprocesador principal, pero los Arduinos (y clones) más antiguos usaban chips serie USB de terceros.

Para recibir simplemente Serial.printdatos sobre la Raspberry Pi del Arduino, utilizo el programa GNU Screen como terminal básico: screen [serial-port] [baud-rate](por ejemplo screen /dev/ttyACM0 9600).

Probé tres Arduinos diferentes y un clon bastante diferente. Todas las variantes más nuevas aparecieron como /dev/ttyACM0puertos, y las más antiguas /dev/ttyUSB0. Esto es lo que encontré, debajo de Raspbian:

Es posible que Raspberry Pi no proporcione suficiente energía para conducir un Arduino, por lo que es posible que necesite alimentación externa. Para completar, también probé un Prolific PL2303 , aunque no conozco ningún Arduino. Parecía bastante feliz como /dev/ttyUSB0.

Para comunicaciones más complejas con sensores, puede considerar Firmata , "un protocolo genérico para comunicarse con microcontroladores desde software en una computadora host". Tiene implementaciones para las bibliotecas Arduino y Python para ejecutarse en el lado de Raspberry Pi.

Aquí hay un pequeño ejemplo usando pyFirmata para leer un LM35 y cambiar el brillo de 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()

Hay algunas advertencias al usar pyFirmata:

  • Las lecturas analógicas y las escrituras PWM se normalizan a un rango de 0 .. 1, y no el Arduino estándar 0 .. 255 y 0 .. 1023.
  • Realmente necesita comenzar un hilo iterador separado para detener las lecturas antiguas que desbordan el búfer en serie
  • Dado que Arduino se lee de forma asincrónica, asegúrese de que la conexión pyFirmata esté completamente inicializada antes de leer desde los puertos. De lo contrario, Nonese producen valores.
scruss
fuente
1
También he confirmado que puedes ejecutar Processing en Raspberry Pi. Es muy lento, pero logré controlar un Arduino a través de un enlace USB: controlar un Arduino desde Raspberry Pi usando Processing . Veré si puedo portar esto a Python / tkinter ...
scruss
Gracias por esta respuesta fue muy útil. Estoy usando python serial para leer / dev / ttyACM0 y lo encuentro muy inconsistente. Supuse que era la falta de energía de mi arduino, pero lo conecté a una fuente de alimentación externa y todavía tengo problemas. A veces los datos tienen un formato incorrecto, a veces se produce una excepción porque / dev / ttyACM0 no se encuentra (aunque las ejecuciones posteriores lo encontrarán). ¿Has tenido problemas similares?
Andy Smith el
No, esto no coincide con mi experiencia.
scruss
Gracias por la respuesta. ¡Interesante, debe ser algo que estoy haciendo mal!
Andy Smith
Tal vez haga una pregunta no específica de Pi sobre SE, o directamente en el foro de Arduino. Las comunicaciones en serie a menudo me dan dolor de cabeza ...
scruss
13

En caso de que no esté claro, con Raspbian Wheezy , puede ejecutar el IDE de Arduino y cargar bocetos al Arduino cuando esté conectado al puerto USB de la Raspberry Pi. Para instalar en Raspbian, simplemente escriba en el shell (también conocido como línea de comando):

sudo apt-get install arduino

Descargará e instalará todos los paquetes necesarios. Tengo un par de fotos del IDE Arduino en Raspbian aquí:

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

(como otras personas han descrito anteriormente, la Raspberry Pi también podría programar el Arduino a través de los pines del puerto serie (UART) en el encabezado GPIO. En este caso no tendría que "desperdiciar" un puerto USB, pero requeriría una configuración adicional )

Saludos, Drew

pdp7
fuente
Probé un Arduino Uno con LED RGB con un dibujo de desvanecimiento simple y el Arduino Uno solo funcionaba con el puerto USB de la Raspberry Pi. No tuve ningún problema, pero, por supuesto, YMMV.
pdp7
8

Uno puede optar por conectar el rpi al arduino usando un puerto usb o usando los pines GPIO. Uno puede usar Wiringpi para hacer la comunicación entre los tableros.

Actualmente también se está desarrollando un puente llamado Ponte .

Un mundo hola básico se puede encontrar aquí .

Lucas Kauffman
fuente
7

El à la mode

Considerado como la forma correcta de poner un Arduino en una Raspberry Pi por Hack A Day, el modo a la moda es un clon de Arduino apilable diseñado por Anool Mahidharia, Justin Shaw y Kevin Osborn de la colaboración de Wyolum.com OSHW. Hack A Day lo describió de la siguiente manera

Desde el principio, el AlaMode se conecta directamente a los pines GPIO del Raspberry Pi. A partir de ahí, se habilita la comunicación con el ATMega del Arduino, lo que le permite enviar y recibir datos tal como lo haría con un Arduino. Hay un reloj en tiempo real, servo encabezados, muchas formas de alimentar la placa e incluso un desbloqueo para [un] módulo GPS.

Se elimina una gran cantidad de material innecesario en el AlaMode; No hay puerto USB, pero se puede programar directamente a través de los pines GPIO de la Raspberry Pi. Bastante ordenado, y estamos ansiosos por conseguir uno para nuestro [Raspberry Pi].

Kevin da un poco más de detalles en su blog :

Estas son las características que incluyen algunos extras adicionales:

  • Poder flexible Se puede alimentar directamente desde el Pi, de forma independiente con una batería o una verruga de pared, o con alimentación USB. Esto es importante si su escudo toma más potencia de la que puede proporcionar el Pi o si desea desacoplarlo para una operación independiente. Programable a través del UART de Pi en los pines GPIO, o un adaptador de serie USB FTDI o ISP.
  • Encabezado para conectar GPS Fastrax UP501. DS3234 Reloj en tiempo real. El Pi no tiene su propio RTC respaldado por batería. Puede configurar un programa en AlaMode para informar el tiempo al Pi a través de serial o I2C
  • Ranura para tarjeta micro SD. Útil para el registro de datos y gran memoria para sus aplicaciones Arduino
  • Fila de servo encabezados conectados a los pines PWM con una potencia configurable y riel de tierra

Beta limitada

El tablero está actualmente en beta limitada, pero merece ser mencionado como un clon bien pensado, que ha sido anunciado por un grupo con forma previa .

Referencias

  1. Hackear la publicación de blog de un día
  2. Publicación del blog de Kevin Osborn
  3. Wyolum.com
Alex Chamberlain
fuente
4

Puede considerar la Gert Board que ahora está basada en Arduino si desea una plataforma de interfaz de hardware de uso general. Una ventaja es que existe una amplia documentación sobre la interacción con el RPi. Disponible para pre-pedido de Element14 a partir del 8/8/12.

Chico
fuente
0

Hay un SOMBRERO RaspberryPi que se comporta como Arduino y se puede programar a través de su interfaz de usuario web desde cualquier navegador. Proyecto llamado CoPiino . Viene completamente con el software en funcionamiento. Simplemente ingrese el Arduino Sketch en la interfaz de usuario del navegador y presione "compilar y ejecutar", eso es todo.

tswaehn
fuente
1
dado que ha publicado al menos dos respuestas que promueven CoPino, sospecho que está conectado a este proyecto. Cualquier conexión debe anotarse en su respuesta,
Steve Robillard
Sí, eso es absolutamente correcto y mi comentario cubre el tema totalmente. La placa CoPiino es similar a la placa a-la-mode ya mencionada. Donde CoPiino presenta algunas características adicionales agradables. Donde la programación del Arduino desde Pi se cubre fácilmente, esa fue la pregunta inicial.
tswaehn
Cuatro años después aún no ha editado su afiliación. Por favor, hazlo.
Jon Harper