martes, 28 de mayo de 2013

Programando Baby Orangutan con AVR Studio 5.1

Al diseñar nuestro robot, normalmente necesitamos un driver para controlar al menos un par de motores y un microcontrolador para controlar la lógica que gobierna el robot. Si utilizamos un Arduino y un driver externo esto nos puede costar entre 35 y 80 euros según los elementos utilizados. La placa que os presento hoy es una placa compacta que integra un Atmega 328P, el mismo microcontrolador que utiliza Arduino UNO, y un driver de dos canales de 3A de pico por canal, con lo que podemos controlar un par de motores de una potencia relativamente alta.

Este controlador tiene múltiples ventajas, es barato, compacto, ligero, integra un microcontrolador AVR junto a un driver de 3A de pico por canal e incluye un potenciometro para poder realizar ajustes online en nuestro robot sin necesidad de añadir nada nuevo a la placa electrónica de nuestro robot. Sin embargo, a la hora de comprar este controlador hay que tener en cuenta una serie de detalles. En primer lugar esta placa no incorpora un bootloader preinstalado, el bootloader es un código residente en el micro que permite cargar un programa través del puerto serie como ocurre en el caso de Arduino. Al no tener este código residente, no es posible enviarle un programa a través del puerto serie y es necesario utilizar un programador externo como nuestro USBtinyISP para poder cargar los programas. Con un programador externo también es posible cargar el bootloader de Arduino y a partir de ese momento si es posible programar a través del puerto serie como con cualquier otro Arduino. Otra opción, es programar directamente a través del puerto de programación con el mismo IDE de Arduino, o con IDEs avanzados como el que vamos a utilizar hoy que es AVR Studio.

Hoy me voy a centrar en contaros como programar esta placa con AVR Studio. AVR Studio es un entorno de programación de Atmel basado en Visual Studio, por lo que aquellos que tengan experiencia con programación en .Net se sentirán muy cómodos utilizando este entorno. Una de las ventajas de programar con un entorno como este, es la posibilidad que ofrece el entorno de simular el micro y ejecutar el programa en modo el debug lo que permite realizar trazas de una forma muy cómoda  De esta manera es posible ver el valor que irían adquiriendo los registros en tiempo de ejecución, deteniendo el programa y pudiendo incluso ejecutarlo paso a paso, lo que nos permite depurar errores de una forma mucho mas eficiente.

El primer paso es instalar el entorno Atmel Studio o AVR Studio dependiendo de la versión que instalemos. Es importante instalar la versión 4.0, 5.1 o bien la 6.0 ya que son las versiones compatibles con el paquete de librerías de pololu, AVR development bundle, que incluye librerías varias para la programación de microcontroladores AVR.

A continuación hay que instalar el driver de tu programador para AVR, si utilizas Windows 8 tendrás que seguir los pasos descritos en esta entrada que explica como instalar los drivers de Arduino DUE en Windows 8 pero el mismo procedimiento puede utilizarse con muchos otros dispositivos como por ejemplo es este caso. 

Una vez instalados los drivers del programador tenemos que configurar nuestro USBtinyISP, para ello lo primero es instalar la herramienta WinAVR que incorpora diferentes herramientas para la programación de dipositivos ATmega, en concreto la que nos interesa a nosotros es AVRdude. Posteriormente hay que configurarlo en el entrono de AVR Studio, para ello os dejo un vídeo en el que explican como configurarlo ya que es complicado de explicar y viéndolo se hace mucho más sencillo.


Tras instalar WinAVR, se instalan en la carpeta C:\WinAVR-20100110 multitud de herramientas. En esta carpeta se encuentra la carpeta bin donde están todos los ejecutables y ahí podemos encontrar AVRdude que es el programa que tenemos que configurar en el entorno como programador. En el entorno de AVR Studio hay que utilzar la opción Tools --> External Tools que permite añadir un programador como herramienta externa. Al utilizar esta opción, aparecerá un formulario done hay que configurar en primer lugar el nombre de nuestra herramienta, por ejemplo USBTiny. El segundo argumento se refiere al ejecutable de nuestra herramienta que será avrdude, por lo que hay que poner la ruta hasta el ejecutable que por defecto será C:\WinAVR-20100110\bin\avrdude.exe. Los siguientes argumentos dependerán de la solución que hayamos creado. Cuando creamos un nuevo proyecto hay que elegir la librería de Pololu y dentro de la librería elegir BabyOrangutan 328P, lo que creará una solución para este dispositivo. Como se puede ver en el ejemplo, hay que seleccionar el nombre del proyecto, el nombre de la solución y el directorio donde estará la solución.


Una vez creada la solución, podemos consultar estos parámetros a la derecha en el explorador de soluciones como se ve en la imagen siguiente. Al generar el proyecto, según si hemos elegido Release o Debug, se generará una carpeta dentro del directorio de la solución con ese nombres y dentro de dicho directorio, estará el archivo nombreProyecto.hex que es el archivo binario generado que hay que cargar al controlador Baby Orangutan.


Al crear el proyecto por defecto, se creará con un archivo con el código del ejemplo blink que enciende y apaga un Led. A partir de aquí, hay que rellenar el resto de parámetros en la configuración de la herramienta externa de programación. Hemos añadido el nombre y el ejecutable que realizará las tareas de grabación en el Baby Orangutan, pero ahora debemos rellenar los argumentos donde según el vídeo hay que utilizar la linea -c usbtiny -p m328p -U flash:w:$(ItemFileName) pero lo que hay que hacer es ver el nombre con el que se generea el archivo con extensión .hex y utilizar este nombre. Para ello, hay que generar la solución con la opción Build->Build Solution y luego navegar hasta la carpeta de la solución. Si hemos compilado en Release habrá que mirar en la carpeta con este nombre y si hemos compilado en Debug habrá que mirar en la carpeta con este otro nombre. Allí encontraremos un archivo generado con la extensión .hex y ese es el que hay que utilizar en la linea de comando anterior. Por defecto este nombre será el mismo del del proyecto por lo que si nuestro proyecto se llama nombreProyecto se deberá usar la sentencia  -c usbtiny -p m328p -F -U flash:w:nombreProyecto.hex. Puede verse que en la linea anterior se ha añadido el parámetro -F que soluciona algunos problemas que pueden aparecer al intentar cargar código al microcontrolador utilizando avrdude.


Es importante tener en cuenta que el Baby Orangutan utiliza los pines PB4 y PB5 para la programación por lo que si utilizamos estos pines en nuestros proyectos podemos encontrar problemas a la hora de programarlo. En concreto, no debería haber problema a no se que se conecte en dichos pines un condensador que impediría programar el microcontrolador sin quitarlo del zócalo. Otra cosa a tener en cuenta a la hora de programarlo es la posición del conector, en la placa del Baby Orangutan puede verse marcado con una flecha el pin 1 del conector ISP. El pin 2 es el que se encuentra encima de este y corresponde con VCC y por lo tanto el lado con una franja roja del conector del programador debe conectarse en ese lado.


Por último, en el cuarto parámetro hay que indicar el directorio donde se encuentra este archivo ejecutable, indicando la carpeta Release o Debug según corresponda. Con esto, aparecerá un nuevo ítem en el menú Tools con el nombre de nuestra herramienta. Si conectamos el programador USBTiny al PC y le conectamos nuestro Baby Orangutan, al pulsar el botón Tools -> USBTiny compilará el código de ejemplo y lo cargará en nuestro Baby Orangutan. Después de esto podremos ver como el led se enciende y se apaga intermitentemente, a partir de aquí ya podemos comenzar a crear nuestro propio código, basándonos en las librerías de pololu y con la ayuda de InteliSense que nos sugerirá código a medida que vamos programando.



Espero que os sea de ayuda, y si necesitáis aclarar alguna cosa no dudéis en poner un comentario e intentaremos ayudaros en todo lo posible.




jueves, 16 de mayo de 2013

¿Conoces GBoard?: GSM/GPRS + ARDUINO todo en uno


En muchas ocasiones tenemos en mente realizar un proyecto en el que queremos monitorizar
algunos sensores y enviar la información a través un módulo GSM/GPRS, bluetooth, XBEE o sencillamente almacenarla en una tarjeta SD a modo de datalogger. Si lo hacemos con Arduino
necesitaremos como mínimo una placa base Duemilanove/UNO/MEGA/Due más el shield de comunicaciones GSM/Bluetooth/XBEE, si además queremos conectar sensores necesitaremos añadir otro Shield más. Si además queremos almacenar la información capturada por estos sensores
en una tarjeta SD necesitaremos añadir un nuevo Shield adicional.

El resultado será una torre de shields que probablemente funcione, pero cuya estética y control se complicaría al tener que trabajar con las diferentes señales de control empleadas por cada una de estas placas. Además sería necesario realizar un estudio previo para comprobar la compatibilidad entre las diferentes placa, ya que si dos o mas de ellas utilizan el mismo pin no podríamos usarlas al mismo tiempo de forma correcta. 

Para estos casos tenemos una solución económica y sencilla de utilizar, se trata de la placa Gboard, un sistema que integra un ATMEGA328P con bootloader de Arduino, un módulo GSM/GPRS SIM900, zócalo para tarjeta MicroSD, XBEE/Bluetooth/nRF24L01 y pines de conexión para sensores o actuadores, y todo esto en una placa de tan solo 89 x 61mm. La programación del microcontrolador ser realiza a través de un convertidor USB/RS232 y se programa igual que se programa un Arduino. Está preparada para realizar la interacción con el módulo GSM/GPRS a través del puerto serie hardware o bien utilizando otros pines y la librería para Software serial pudiendo tener así disponible el puerto serie hardware para enviar datos de DEBUG a nuestro PC.

Es posible realizar la gestión del módulo SIM900 utilizando comandos AT, para conocer la lista de comandos AT disponibles hay que basarse en la lista detallada en la documentación del módulo SIM900. También puedes programarla directamente con la librerías para entorno Arduino, en este enlace puedes decargar la librería para GBoard adaptada por GoShield a las versiones del IDE 1.0 o superior de Arduino.

Si estas pensando realizar un proyecto que utilice GSM/GPRS la Gboard es una buena opción a tener en cuenta, pero si además tu proyecto ha de integrar los diferentes periféricos que hemos comentado, entonces es la opción idónea.

Con esta misma filosofía existen otras placas que integran un ATMEGA328P +  Dispositivo/Actuador/Módulo. Entre las más interesantes te presentamos las siguientes:


Puedes encontrar todos estos artículos y la información adicional están disponibles en nuestra tienda online.

sábado, 4 de mayo de 2013

¿Quieres aprender a diseñar tus propios robots?

Aquellos que estamos empezando en el mundo de los concursos de robótica, solemos tener el problema de afrontar los problemas de la construcción del robot desde cero. Al no tener experiencia es común cometer errores tontos que cuando llegamos a pista nos damos cuenta que nos van a impedir hacer nada. En mi caso, el primero robot con el que me presenté a un concurso tenía el principal problema de controlar mal los motores y cuando me di cuenta de ello ya era demasiado tarde.

Hoy quiero dejaros la idea, de que si queréis comenzar a construir vuestro robot, lo mejor es que comencéis cuanto antes y que no os rindáis  Si vais a una competición seguramente descubriréis mil fallos de vuestro robot que lo hacen totalmente inservible al lado de la mayoría de rivales, pero esto no tiene que echaros atrás, lo importante es descubrir estos defectos y corregirlos para mejorar.

Otra cosa importante es no estar solo, buscad a alguien con vuestra misma motivación, leed foros, blogs, leed a gente que hable de estas cosas, de como construirlas y como mejorarlas  No dudéis en preguntar en foros o blogs, seguro que están encantados de ayudaros, yo me ofrezco humildemente a responder todas aquellas dudas que sea capaz. Y sobre todo, aprender de los mejores, es decir de aquellos que ya tienen experiencia y saben de lo que hablan, aquellos que ya se han llevado mil palos porque así os evitareis dároslos vosotros también.

Hoy os traigo un vídeo, de los que creo que han sido los mejores durante mucho tiempo en carreras de robots velocistas. Es un vídeo muy interesante sobre la ponencia que dan Daniel Alvarez y Alberto Calvo en las jornadas de la robótica en Valladolid. Daniel y Alberto han sido campeones de velocistas los últimos años en casi todas las pruebas en las que se han presentado en España. Yo he tenido la suerte de competir con ellos en una edición de campus party y verlos en directo, aunque no se si se puede llamar competir a lo que hice, ya que mi robot tenía un error garrafal de diseño, que fue no utilizar el freno eléctrico en los motores, algo que os contaré el día que consiga un poco de tiempo para hacer una entrada sobre el control de motores. El caso es que podéis aprender mucho de la experiencia de Daniel y Alberto y seguro que os despierta alguna idea. No pretendo que os deprimáis  porque cuando veáis el nivel de estos caballeros os vais a asustar, pero es lo que hay. Hay que avanzar poco a poco, se pueden hacer robots mas sencillos e igualmente competitivos, pero no esta mal saber lo que se esta haciendo y tomar ideas, para no dar palos de ciego.



Como me dijo una vez un profesor, hay que aprender de los que saben mas que tu y si es posible copiar lo que hicieron para poder entenderlo realmente, comprender porque lo hicieron así y una vez conseguido eso, descubrir lo que puedes aportar tu y mejorarlo.

Un saludo a todos y por si me leen algún día, aprovecho para mandar un saludo a Daniel y a Alberto y dales mi enhorabuena por todo su trabajo, y también agradecerles que nos ilustren a todos con charlas como esta, es una verdadera gozada poder escucharles contar su experiencia.