Ya hace un tiempo que escuchaba sobre arduino y la facilidad para desarrollar programas para microcontroladores. En mi ultima visita a República del salvador (una calle en el centro de la ciudad de México) me compré un microcontrolador AVR, un ATMEGA8, y en uno de mis ratos de ocio me puse a jugar con Arduino, que es una plataforma de desarrollo de Hardware/Software abierto basada actualmente en un chip ATMEGA168, pero que también puede usarse con mi ATMEGA8. En esta entrada te enseñamos como construir tu propio arduino en un protoboard con un montón de partes que probablemente ya tengas si eres un entusiasta de la electrónica. Si no las tienes, no te preocupes, ¡Son muy fáciles de conseguir!

¿Que es Arduino?

Nuestra querida Wikipedia dice lo siguiente: “Arduino es una plataforma de hardware de fuente abierta basada en una sencilla placa con entradas y salidas (E/S), analógicas y digitales, y en un entorno de desarrollo que implementa el lenguaje Processing/Wiring. Está basado en el procesador Atmega8 (Atmega168 en las nuevas versiones), un chip sencillo y de bajo coste que permite el desarrollo de múltiples diseños”.
Por mi parte les puedo decir que la plataforma Arduino consiste en un IDE (Integrated development environment), una placa con un microcontrolador (hardware), y una pequeña pieza de software previamente grabada en el microcontrolador, conocida como bootloader. Esto, en conjunto, funciona mas o menos así:

  • Se desarrolla un programa o “sketch” como se conoce en el mundo de arduino, usando el IDE que se proporciona en la página oficial.
  • El IDE compila el sketch, “traduciendolo” al lenguaje del microcontrolador.
  • El IDE se comunica con el software previamente grabado en el microcontrolador (bootloader) y transfiere el sketch a la memoria flash del microcontrolador.
  • El programa es ejecutado en el hardware.

En esta entrada del blog, nos concentraremos principalmente en el hardware que hay en la placa arduino de entradas y salidas y trataremos de emular su funcionamiento.

Requisitos para construir tu propio arduino

  • Bajarse el IDE de arduino desde la página oficial.
  • Contar con una PC con puertos USB libres y un adaptador de  USB-Serial, o mejor aún, un puerto serial.
  • Tampoco esta de sobra leer un poco sobre como funciona el IDE de arduino.
  • Conseguir los materiales listados más abajo.

Construcción del hardware de arduino

El hardware en una placa arduino original se compone básicamente de una interfaz USB-Serial, las placas Duemilanove y Decimilia usan el FT232RL, que es un puente de USB a UART. En mi caso, al no disponer de este circuito y al tratarse de una implementación de bajo costo, voy a construir un adaptador de RS-232 a TTL/CMOS y usaré un cable comprado con anterioridad en una tienda de electrónica que convierte un puerto USB en un puerto serie compatible con la norma RS-232. Por lo tanto la interfaz con el microcontrolador se compone en mi caso de dos partes:

  • El cable USB-Serial (No es indispensable si la PC tiene un puerto serie, pero mi laptop no lo tiene)
  • El adaptador de niveles lógicos usando un MAX232 o compatible

Se podría pensar también en usar otro circuito que convierta los niveles lógicos RS232 a TTL basado en transistores, sin embargo, yo prefiero hacerlo de esta forma por que el MAX232 permite una amplia gama de aplicaciones, de hecho, mi adaptador de RS-232 a TTL/CMOS lo he construido en una tarjeta independiente por comodidad, para poder conectarlo a varios circuitos rápidamente y no tener que armar la interfaz nuevamente en cada experimento.

Para construir el circuito RS232 a  TTL/CMOS necesitamos:

  • 1 x MAX232 o equivalente (en mi caso estoy usando un MAX3232)
  • 1 x Zócalo para circuito integrado de 16 patas
  • 5 x Capacitores cerámicos de 1 uF (0.1 uF  para el MAX3232, la capacitancia varía de acuerdo al convertidor de niveles usado, hay que revisar el datasheet)
  • 1 x Conector Hembra DB-9

El hardware asociado microcontrolador es:

  • 1 x Microcontrolador ATMEGA8 o ATMEGA168
  • 1 x Zócalo para circuito integrado de 28 patas
  • 2 x Capacitores cerámicos de 33 pF (varian de acuerdo al cristal)
  • 1 x Cristal de 16 Mhz
  • 1 x Resistencia de 330 ohms 1/4 W
  • 1 x Resistencia de 10 Kohms 1/4W
  • 1 x Led rojo de 5 mm

Otros:

  • Capacitores cerámicos de 0.1 uF para alimentación (usaremos uno o dos por cada integrado)
  • Bloques de terminales de tornillo para circuito impreso
  • Fuente de alimentación de 5V (revisa los diagramas más abajo si no tienes una)
  • Pin Header doble hembra de 8 pines (normalmente se venden como tiras completas, yo la he cortado a la medida)
  • Conviene tener a mano algunos leds y resistencias adicionales para hacer pruebas
  • Tarjetas perforadas para prototipos
Algunos componentes para el adaptador RS232 - TTL

Algunos componentes para el adaptador RS232 – TTL

Grabando el Bootloader

Cuando se compra la tarjeta previamente armada, esta ya viene con el bootloader grabado y listo para transferir los programas, sin embargo al comprar el microcontrolador suelto, debemos primero grabar el software una única vez antes de poder usarlo con Arduino.
El bootloader de arduino viene con la distribución del IDE, junto con un buen paquete de librerías, drivers USB-Serial,  codigo fuente, etc. Podemos encontrarlo dentro del directorio “hardwarebootloaders”. En este directorio hay varias carpetas que contienen varios bootloaders para las distintas versiones de hardware Arduino y el código fuente de los mismos. En mi caso usé el hex precompilado para ATMEGA8.

El programador, junto a las partes usadas en este artículo

El programador, junto a las partes usadas en este artículo

Para efectuar este paso es necesario contar con un programador de AVR. En mi caso estoy usando un programador universal EasyPro 90B, que ademas de AVR programa un montón de otros dispositivos. Existen otras alternativas más económicas, como por ejemplo un programador de puerto paralelo. En este caso se puede grabar directamente el bootloader desde el IDE de arduino, haciendo click en Tools>Burn Bootloader> w/ Parallel Programmer. Como no tengo ninguno de los programadores soportados, el ajuste de los fuses hay que hacerlo manualmente en el programa de grabación y queda de la siguiente forma:

  • El valor 0xCA se debe programar en el byte alto de los fuses del ATmega8.
  • El valor 0xDF se debe programar en el byte bajo de los fuses del ATmega8.
  • El valor 0xCF se debe programar en en el byte “lock” para evitar que se sobreescriba la porción de memoria del bootloader.
Configuración de fuses en mi software de grabación

Configuración de fuses en mi software de grabación

Montaje, Esquemas y archivos.

A continuación tienes los diagramas del hardware que ves en las fotos. En el diagrama del microcontrolador detallamos la correspondencia entre los pines del ATMEGA 8 y los nombres que tienen asociados en la placa arduino original.

Te recomendamos construir el adaptador de RS-232 a TTL y la fuente de alimentación (si la requieres) en la placa perforada  para prototipos, ya que de esta manera la puedas aprovechar en otras aplicaciones. El hardware asociado al microcontrolador es bastante sencillo y puedes construirlo en un protoboard o en una tarjeta perforada, según tus preferencias.

Compilando y probando un programa

Para probar que nuestro hardware y el bootloader funcionan, es recomendable grabar un programa en el microcontrolador, la forma mas sencilla de lograr esto es usando uno de los ejemplos que vienen con el IDE de Arduino. Conviene compilar y cargar el sketch de “led blink” que hace parpadear un led conectado al pin 13 de arduino.

Ejectutando el ejemplo Led Blink

Ejectutando el ejemplo Led Blink

Conclusión

En este artículo vimos que es fácil implementar uno mismo y con un presupuesto bajo, un hardware similar al de las tarjetas arduino. Muchas de las partes requeridas ya se encontrarán en el almacén personal de muchos entusiastas de la electrónica, por lo que “tener un arduino” debería ser tan fácil como buscar un puñado de componentes.

La plataforma arduino brinda una forma fácil y económica de introducirse en la programación de microcontroladores, específicamente en la programación de AVR, ya que excepto para grabar el bootloader no se requiere de un programador. Una vez que se tiene el bootloader grabado (como en las tarjetas comerciales), es fácil cambiar el programa y ver reflejados los cambios en el circuito físico. Además, el microcontrolador puede usarse tanto en una tarjeta como el arduino Duemilanove o bien en una tarjeta y aplicación diseñada por nosotros.

Unas últimas palabras.

Esta es la primera vez que trabajo un microcontrolador AVR, si notas algún error, por favor, ponte en contacto conmigo, mi dirección de correo electrónico (ruben en tech-freaks.net). Cualquier comentario que tengas será un placer escucharlo ( o más bien leerlo :D) en mi correo electrónico o en la sección correspondiente de este blog.

Referencias