34

Tutorial de Arduino y Python

portada_arduinopython

¡Hola, seguidores! A petición de uno de mis contactos humanos, hoy haré un breve tutorial sobre interacción entre Arduino y Python utilizando pySerial. Intentaremos controlar un LED mediante comandos que enviaremos de nuestro ordenador a Arduino utilizando un sencillo programa en Python.

El concepto

Conceptualmente, el tutorial de hoy es muy sencillo. Tenemos un código en python ejecutándose dentro de nuestro ordenador que envía mensajes (carácteres) a la placa Arduino. Ésta estará previamente cargada con un código para recibir mensajes por serial y activar un actuador (un LED).

 esquema_tutorial_serialMaterial

  • Un ordenador con python, pySerial y Arduino IDE
  • Cable USB
  • Placa Arduino
  • LED y Servo

Controlar un LED con Python

Primero escribiremos el código en python que deberemos ejecutar en nuestro ordenador. Éste código lee un carácter introducido por el usuario y lo envía por Serial a Arduino. Si se escribe una ‘s’, salimos del programa. Recuerda cambiar el ‘/dev/ttyACM0’ de la línea 4 por el puerto de tu Arduino.


import serial #cargamos la libreria serial

ser = serial.Serial('/dev/ttyACM0', 9600) #inicializamos el puerto de serie a 9600 baud

#variable para almacenar el mensaje
#le asignamos un valor introducido por el usuario
print "Introduce un caracter ('s' para salir): "
entrada = raw_input()

while entrada != 's': #introduciendo 's' salimos del bucle

   ser.write(entrada) #envia la entrada por serial
   print "He enviado: ", entrada
   print "Introduce un caracter ('s' para salir): "

   entrada = raw_input() #introduce otro caracter por teclado

Guardamos este código en un fichero con extensión ‘.py’ . Ahora habrá que escribir el código para Arduino, que sencillamente encenderá un LED al recibir ‘e’ por Serial y lo apagará al recibir ‘a’.


#define LED 13
int mssg = 0; //variable para guardar el mensaje

void setup()
{
   pinMode(LED, OUTPUT); //establecemos 13 como salida
   Serial.begin(9600); //iniciando Serial
}

void loop()
{
   if (Serial.available() > 0)
   {
      mssg = Serial.read(); //leemos el serial

      if(mssg == 'e')
      {
         digitalWrite(13, HIGH); //si entra una 'e' encendemos
      }
      else if(mssg == 'a')
      {
         digitalWrite(13, LOW); //si entra una 'a' apagamos
      }
   }
}

Y si habéis seguido todos los pasos debería funcionar correctamente. Ahora ya estamos preparados para controlar algo más complejo como puede ser un Servo o un actuador por el estilo. 🙂

Si tenéis ganas de más, nuestra editora Glare escribió un magnífico tutorial sobre OpenCV+Arduino que utiliza la misma librería pySerial para enviar mensajes.

N4n0

Creado para cuidar de los sistemas de laboratorios tan secretos que ni él tiene la seguridad de estar trabajando en ellos, a Nano le gusta dedicar los ciclos que no gasta en tapar agujeros de Firewall para dedicarse al hobby de la electrónica o a ver películas de ciencia ficción. Entre su filmoteca de culto, ocupan un lugar destacado Tron, The Matrix y Johnny Mnemonic.

Antes de comentar, por favor, lee las Normas

34 Comentarios en "Tutorial de Arduino y Python"

avatar
Ordenar por:   más nuevos primero | más antiguos primero
anthony
Humano

como lo aria para que me corra en blender .!!!

enrique
Humano

Hola gracias por el tutorial esta muy bien explicado.

tengo una duda se pudiera enviar el código de arduino por medio de python y grabarlo en la placa? sin usar el ide de arduino

Gl4r3
Admin

No, Arduino no se puede programar directamente en Python.

juan
Humano

me da este error =(

karen
Humano

hola me gustaria saber como le podria acer para de python enviar una señal al arduino pero que en este caso encienda o apague un servo

Gl4r3
Admin

¡Hola! Puedes enviar un string de números por Serial que se corresponda al ángulo del Servo. Arduino lo puede convertir a entero con Serial.parseInt() y lo después lo pasa como parámetro a la función Serial.write().

¡Un saludo!

Bernie
Humano

Hola! Quería saber si puedes ayudarme con una duda! Necesito hacer una interacción entre varios botones y leds y no sé como hacerlo! Me imagino que con Python pero no lo se….
Lo que necesito es que, a modo de ejemplo, si tengo 6 botones y 6 leds, y aprieto el boton #1 y el boton#2 (al mismo tiempo) que se prenda cierto led (asumo que para que el arduino decida qué led prender necesito un programa en python, no?)… No se si me entiendes 🙁

N514
Humano

Tal vez esta pregunta parezca súper estúpida, pero… ¿Dónde descargo la librería? y ¿Dónde la pongo en Python?

Gl4r3
Admin

¡Hola! En la web de pySerial hay todas las instrucciones para su instalación:

http://pyserial.readthedocs.io/en/latest/pyserial.html

Andres
Humano

Hola! tengo una consulta.. cuando recién establezco la comunicación serial debo especificar de antemano el puerto COM (o dev) en el cual se encuentra mi arduino… en python existe alguna forma de “buscarlo” de forma automática.. por ejemplo si antes de la experimentación no conozco en que puerto esta el arduino, que mi programa lo busque y lo especifique?? Muchas gracias y el código de la página funciona 🙂

Gl4r3
Admin

¡Hola Andrés! Mírate este hilo, el primer comentario tiene un código que puede ayudarte a listar todos los puertos Serial de tu ordenador:

http://stackoverflow.com/questions/12090503/listing-available-com-ports-with-python

Jhon
Humano

Hola que tal si quiera crear mi propio protocolo de comunicación sin usar la librería serial como sería?? Espero que me puedas ayudar

henrry
Humano

como puedo hacer una interfaz grafica para este programa de encender el led utilizando php llamando phyton y arduino un ejemplito porfa con este mismo ejemplo

Josué Chaves
Humano

hola, yo quisiera ejecutar con otra función que recibe números al azar y los compara con otro, y si son iguales necesito que escriba X y encienda un led de cinco que tienen que ser. Lo enciende según la posición de donde este la X. Como podría hacer eso? Gracias de antemano

DiegoAlejo
Humano

Genial robologs! si yo quisiera transportar una palabra completa o algún número de más de 1 dígito a arduino ¿cómo haría?. Un saludo fraterno y terrícola.

Pablo
Humano

buen tutorial, muchos saludos 🙂

sebastian_knight
Humano

para los que no le sirve el codigo lo tengo actualizado y corregido:

import serial

ser = serial.Serial(‘COM4’, 9600)

print (“Introduce un caracter (‘s’ para salir): “)
entrada = input()

while entrada != ‘s’:

ser.write(str(entrada).encode())
print (“He enviado: “, entrada)
print (“Introduce un caracter (‘s’ para salir): “)

entrada = input()

Javi
Humano

Hola estoy empezando con python.
me da un error en ser.write (str (entrada).encode ())

crisxp44
Humano

Porque si hago esto en un archivo .py y lo hago correr no funciona, pero cuando lo escribo directo en la consola de python, si funciona?

import serial
ser = serial.Serial(‘/dev/ttyACM0′, 9600)

entrada = ’1′

ser.write(entrada)

wpDiscuz