Arduino y Python: Controlar Arduino desde el PC con Python

ARDUINO UNO Y PYTHON3

Durante el aprendizaje de programación de Arduino necesitaremos establecer una comunicación entre el PC y nuestro Arduino es decir se necesitará enviar datos del Arduino al PC o por el contrario, necesitaremos enviar comandos del PC al Arduino. Es por ello que en Python podemos encontrar herramientas útiles en los que podremos conectar por comunicación serial nuestro Arduino con el PC.

Encuentra tu profesor ideal

Tería necesaria

Python - pyserial

Necesitamos aprender cómo usar la librería py-serial en Python la cual nos permitirá enviar y recibir comandos de nuestro Arduino, o en general cualquier microcontrolador que se pueda comunicar por el puerto serial.

  1. local = "COM" + str(number) # /dev/ttyUSBx COMx
  2. ser = serial.Serial(local, 115200, rtscts=False, dsrdtr=False)

Arduino - Serial

Cuando trabajamos con el módulo de Arduino, necesitamos habilitar explícitamente el puerto serial para que pueda recibir y enviar información por el puerto serial a través del terminal USB.

  1. Serial.begin(115200); //Iniciando puerto serial
  2. Serial.setTimeout(50); // ms de tiempo de corte y espera a la comunicación

Arduino – Interrupción Serial

En Arduino podemos activar el detector de eventos serial, es decir cada vez que el Arduino reciba una señal de datos por el puerto serial, esta funcionalidad de activará y realizará las operaciones que hayamos programado. Esto ahorra energía y tiempo de cómputo del programa principal.

Editores de Texto

Es el programa que nos permitirá escribir los códigos que colocaremos dentro del Arduino y correremos con Python. No tiene nada de especial es solo una herramienta, podríamos usar cualquier otro y seguiría funcionando igual.

Desarrollo

Lo primero que necesitaremos será un Arduino uno, un cable USB tipo B, ( para este modelo en específico) y un par de servomotores. Nada interesante hasta el momento. Ahora necesitaremos lo primordial, ... alguien que sepa programación, en serio no es broma, sí o si necesitas programar para lo que se viene. No es para nada complicado, pero sin una base clara será muy difícil.

1. Un Arduino UNO

2. Un cable USB

3. Dos servomotores SG90 (cualquier otro funciona perfecto)

4. Un programador**

Ahora lo que sigue es diseñar nuestro sistema de control del Arduino, esta es la parte difícil en general para cualquier proyecto de programación, es lo que define lo que vas a codificar. Luego lo demás es superficial, ya que tienes una meta clara, solo sigue para adelante. Sin un objetivo no puedes anotar, Casey Neistat.

Pues, ¿cómo definimos esto? Iniciamos con el objetivo principal.

  1. Enviar comandos desde el PC hacia el Arduino
  2. Utilizando el lenguaje Python con la librería pyserial y la funcionalidad Serial dentro del Arduino.
  3. Los datos salen del PC y se van directamente hacia el Arduino, el cual los interpretará
  4. Una vez recibido e identificado el comando por el Arduino se procederá ha realizar la acción solicitada.
  5. Una vez realizada la acción, el Arduino enviará una respuesta de regreso como señal de conformidad o error.

La verdad que parece mucho trabajo ... y lo es ... ahora imaginence lo que tomaría programar un robot más complejo con muchas más funcionalidades.

Cada una de estas 5 etapas definidas arriba pueden ser llevadas a código. Recordemos que ahora estamos trabajando en dos lenguajes de programación, en C++ y en Python. Los principios son los mismos pero la sintaxis es distinta.

Coding time

Punto 1. ¿Qué comandos queremos enviar?

  • 1. Comandos para que se identifique el elemento en el puerto serial, puede ser cualquier otro.

RQN0 : Enviado al arduino nos devolverá el nombre del arduino

  • 2. Comando para ordenar que el servomotor ser mueva

ACN1M20 : Enviado al arduino para mover el motor 1 en 20 grados

ACN2M30 : Enviado al arduino para mover el motor 2 en 30 grados

  • 3. Comando para ordenar que envíe el estado actual del motor.

RQN3 : El arduino regresa el estado actuald de los motores.

Estos dos lo debemos implementar en el Arduino y en python.

Punto 2 y 3. ¿Cómo lo realizaremos?

Adruino:

  • Iniciar el serial

  • Crear la función para reconocer los eventos de entrada

  • Crear las respuestas para cada comando, los cuales son 3

Python:

  • Crear una clase que nos sirva para reconocer al Arduino automáticamente

  • Crear métodos dentro de la clase que envíen los comandos que necesitaremos
  • Crear un Loop que constantemente nos pida una acción, mover el servo o solicitar el estado.

Punto 4 y 5. ¿Hacer qué?

  1. Mover el servo dentro del Arduino.

  2. Enviar mensaje de respuesta del Arduino al PC.

Test

Veremos que tal nos va nuestra implementación realizada, nunca esperen que funcione a la primera, de hecho casi nunca funciona, en mi caso como soy un experto, esto debería funcionar así que .... aún tenemos que hacer una ultima acción y esto es conectar nuestro Arduino al PC.

En este caso particular podemos ver que nuestro código funciona a la perfección, logramos comunicar nuestra PC con el Arduino. Ahora imagínense las otras cosas que también podrían hacer. Todo está a su alcance.

Observaciones

No todo es color de rosa amigos, esto fue posible debido a que el Arduino y estos servos en particular consumen muy poca energía, por lo que nuestro puerto USB proveer con suficiente para que todo funcione, sin embargo, si hubiera sido otro servo, esto no funcionaría, hubiéramos necesitado otra fuente de alimentación para nuestros servomotores.

Conclusiones

Mediante esta implementación podemos agregar cualquier Arduino a nuestro PC y controlar objetos, ya sean motores, reles, triac, transistores, todo por intermedio de una interface escrita en python.