Publicidad

viernes, 2 de diciembre de 2016

Controlar tu arduino desde la PC mediante comandos de texto

En muchas ocasiones durante el desarrollo de proyectos con arduino te habrás topado con la necesidad de controlar tu arduino desde la PC. Ya sea desde una aplicación realizada a la medida o simplemente desde el monitor serial de arduino. Por ejemplo podemos realizar acciones tan sencillas como encender un led y llegar a cosas más complejas como cambiar la dirección IP de nuestro ethernet shield sin necesidad de reprogramar el sketch o cambiar los parámetros de un algoritmo de control en tiempo de ejecución, etc.
Existen varios enfoques para controlar tu arduino desde la PC, sin embargo en esta entrada presentamos un método que permite la mayor flexibilidad desde nuestro punto de vista. Te presentamos una librería que  hemos desarrollado y que nos permite emular la experiencia de la “consola” o “terminal” de un sistema operativo en un PC de escritorio, pero esta vez ejecutandose dentro de cualquier microcontrolador que disponga de un compilador de C. Esto permite cambiar parámetros, solicitar la ejecución de programas (funciones) y cambiar configuraciones y parámetros del programa mientras este se ejecuta. Para comprobar y entender el funcionamiento básico de esta librería controlaremos un led RGB desde el puerto serie de la PC.
En la foto de portada vemos el circuito de prueba de un led RGB conectado al arduino. Podemos controlar arduino desde la PC mediante comandos de texto y cambiar el color mostrado en el LED RGB a voluntad.

Conceptos básicos

Un LED RGB es un dispositivo que en un solo encapsulado contiene 3 diodos emisores de luz. Cada uno de estos emisores de luz corresponde a uno de los colores básicos (Rojo, Verde y Azul). Por lo que podemos representar prácticamente todos los colores conocidos.
controlar_tu_arduino_desde_la_PC_led_rgb
Este tipo de led se encuentran en varias configuraciones. Nosotros vamos a requerir un led RGB con cátodo común, es decir que la tierra o negativo de cada led esta conectado a un único pin. Por lo tanto debemos aplicar un voltaje positivo a cada uno de los otros pines para encender cada led individual. Existe la configuración opuesta, en la que el ánodo es común y por lo tanto debemos conectar a tierra los otros pines para encender cada diodo.

La librería “shell” para arduino

Esta librería permite controlar nuestros programas y dispositivos con simples comandos de texto de manera similar a la terminal en Mac OSX o linux y la linea de comandos de Windows. Los comandos pueden transmitirse al microcontrolador mediante un puerto serie, un socket TCP/IP o una conexión USB CDC.
La librería puede descargarse desde github en el enlace que se muestra a continuación. Si deseas saber como se realiza la instalación de una librería de arduino puedes consultar este otro tutoríal.
github_logo

Uso de la librería “Shell” para controlar tu arduino desde la PC

Para utilizar la librería debemos llamar al principio de nuestro programa o sketch a la función de inicialización shell_init() que le dice a la librería que funciones debe usar para leer y escribir sobre el medio (serial, TCP/IP, etc.) Estas funciones deben ser provistas por el usuario (programador). En el caso de arduino, creamos unas funciones (wrappers ) que “envuelven” a los métodos write() y read() de la clase Serial y simplemente redirigen los datos desde y hacia nuestra librería. El ultimo parámetro (nulo o 0 en este caso) permite definir un mensaje personalizado de bienvenida, que aparece al principio de la terminal, antes de que se solicite cualquier comando.
Luego, el usuario debe asociar los comandos y las funciones, es decir, indicamos una cadena que al recibirse en el puerto serie causará que la librería invoque a la función correspondiente. Esto se hace llamando a la función shell_register() que acepta por una parte un apuntador a función y la cadena correspondiente al comando. Se hace de la siguiente forma:
Finalmente, dentro del ciclo principal de cada aplicación, el programador debe asegurarse de llamar a la función shell_task(), ya que dentro de esta se procesan los caracteres recibidos y es la encargada de ejecutar las funciones que asociamos a cada cadena.
Los programas (funciones) que implementan cada uno de los comandos se deben escribir con el prototipo estándar de C para una utilidad de linea de comandos y reciben los parámetros para realizar su función de manera análoga. Por ejemplo esta es la función que ejecutaríamos al escribir “mycommand” y presionar la tecla enter:
Como podemos ver la función solamente imprime la cadena “Ejecutando mycommand” y luego retorna, sin embargo, podemos crear funciones que afecten prácticamente cualquier aspecto del funcionamiento del programa o que realicen cualquier acción. El resultado del ejemplo mostrado aquí es el siguiente:
libreria_shell_ejemplo_basico
Este ejemplo lo podemos encontrar listo para compilarse y probarse en la carpeta “Ejemplos>Shell>Shell_Basic” una vez que hemos instalado nuestra librería.
Por ejemplo podemos crear comandos para prender/apagar un led, mover un motor, o leer un sensor. A continuación estudiaremos un ejemplo que nos permite controlar un led RGB con la PC.

Materiales necesarios.

Diagrama de conexiones Controlar LED RGB desde la PC

La siguiente ilustración muestra como debemos efectuar las conexiones para el ejemplo que vamos a cargar en nuestro arduino a continuación. Utilizamos un LED RGB de cátodo común con sus respectivas resistencias de 330 ohms.
arduino_con_led_RGB
La vista detallada de las conexiones y el circuito armado es la siguiente:
controlar_tu_arduino_desde_la_PC_led_rgb_conexiones
Considera lo siguiente al armar el circuito:
  • El pin más largo del led es el común.
  • El pin más largo se conecta a tierra (pin GND de Arduino).
  • Se utilizan los pines de conexión 3, 5 y 6 por que son salidas PWM de la tarjeta Arduino UNO

Ejemplo: Controlar led RGB desde la PC

Este sketch de ejemplo controla un led RGB para cambiar el color y brillo del led enviamos el comando:
rgbled 100 100 100
Al finalizar de escribir el comando debemos enviar los caracteres CR y LF (ASCII). Con esto controlamos las componentes RGB del led. El primer número es el componente rojo, el segundo el verde y el tercero el azul. El sketch que implementa el control del led RGB mediante comandos de texto es el siguiente:
Nótese que hemos omitido todas las comprobaciones sobre los datos recibidos, incluso si se han proporcionado las 3 componentes de color, todo esto en favor de la simplicidad. Sin embargo, si hemos mostrado algunas características de la librería “Shell” como la capacidad de imprimir texto con formato usando la función shell_printf(). Hemos destacado esto en color amarillo en el código más arriba.
El resultado del ejemplo anterior es el siguiente visto en el monitor serial de arduino:
control_de_led_rgb_con_Arduino_y_pc

Conclusiones

La librería shell.h permite controlar tu arduino desde la PC mediante el puerto serial o  ethernet fácilmente. En esta entrada hemos realizado un proyecto básico que nos permite saber como funciona la librería y los pasos necesarios para asociar comandos con las cadenas de texto. También pudimos observar que los parámetros pasados a las funciones invocadas por la librería, son exactamente iguales que el estándar para una utilidad de linea de comandos en C o C++. Por lo que para muchos programadores más experimentados será fácil acostumbrarse a escribir programas para la plataforma arduino y microcontroladores.

No hay comentarios.:

Publicar un comentario

Publicidad