sábado, 19 de septiembre de 2015

Componentes (3): Arduino UNO y Pro Mini

En este artículo hablaremos un poco del "cerebro" de algunos de los montajes que haremos. Se trata de Arduino, una plataforma de hardware libre enfocada al aprendizaje de microelectrónica que ha tenido una repercusión bestial a nivel mundial, teniendo una amplísima comunidad detrás que en sus 10 años de vida ha generado literalmente millones de programas y librerías de código abierto al alcance de todos.


Un poco de historia

Arduino es un proyecto que se inicia en Italia en 2005 como soporte para hacer prácticas de electrónica en el Instituto de Diseño Interactivo de la ciudad de Ivrea.

No es que no hubiera en aquella época plataformas de experimentación y microcontroladores programables, pero el problema era que su hardware era cerrado; esto es,  eran los fabricantes los que diseñaban las placas, las conexiones, los componentes, etc y al usuario final se le vendía como un producto hecho tan sólo especificando el modo de programarlo.

Con el auge del software libre en mente, los creadores de Arduino pretendían fomentar el uso de una plataforma totalmente abierta, en su software y también en su hardware, mediante la utilización de componentes baratos y ampliamente conocidos, entregando a la comunidad el diseño de las placas de manera que cualquier persona pudiera o bien comprar un Arduino por poco precio o bien construírselo el mismo, bien en forma de kit o construyéndolo desde cero con sus fotolitos, sus soldaduras, etc.

El proyecto no sólo incorporaba una placa de hardware, sino también un bootloader para el microcontrolador, un lenguaje de programación y un entorno de desarrollo que funciona tanto en Windows como en Mac y en Linux, todo de código abierto. El coste total de las primeras unidades debía ser inferior a los 30€.

Con el tiempo, el proyecto saltó del entorno educativo al gran público: aficionados a la electrónica, diseñadores de hardware, empresas, etc. La comunidad de personas que utilizan Arduino en sus proyectos es gigantesca y prácticamente se puede hacer de todo con ellos.

Además, recientemente con el auge de las compras de componentes electrónicos directamente a los fabricantes (China) y a precios irrisorios, montar un proyecto electrónico es francamente fácil y barato, que es lo que vamos a ver en próximos artículos.

Para el que quiera ver un poco más de historia de Arduino en detalle, os recomiendo ver el siguiente documental (en español):


Componentes

El núcleo de Arduino es un microcontrolador de la marca Atmel.

¿Que qué es un microcontrolador? Pues un microcontrolador es un ordenador en miniatura; se trata de un circuito integrado que, a diferencia de muchos otros circuitos de propósitos específicos, es programable, y tiene su CPU, su memoria y sus interfaces de entrada/salida para comunicarse con otros dispositivos.

Por otro lado, la marca Atmel os sonará a algunos si habéis conocido el mundo de la "educación" de tarjetas decodificadoras de televisión por satélite. Por los tiempos de Vía Digital, se utilizaba un microcontrolador (el AT90S8515 principalmente) de Atmel para programarle cierto código que permitía ver "florecer" los canales emulando la codificación Nagravisión. En aquellos tiempos, este Atmel era un chip que había que programar con un programador externo que se conectaba al PC por medio del puerto serie o paralelo.

Pues bien, el microcontrolador que utilizan los Arduino son una evolución de aquellos Atmel, específicamente los modelos Atmega168, Atmega328, Atmega1280, Atmega8 entre otros. El modelo específico de microcontrolador que se incorpore implicará las principales diferencias entre los distintos modelos de Arduino, como su capacidad de memoria, de almacenamiento, su velocidad, el número de puertos, etc. En la siguiente tabla podemos ver una relación entre el modelo de Arduino, el microcontrolador que usa y sus características principales:



Arduino Microcontrolador Voltaje Velocidad RAM Flash EEPROM Puertos
Digitales
Puertos
Analógicos
UNO R3 Atmega328P 5V 16Mhz 2KB 32KB 1KB 14 (6 PWM) 6
Mega R3 Atmega2560 5V 16Mhz 8KB 256KB 4KB 54 (15PWM) 16
Pro Mini 3.3V Atmega328 3.3V 8Mhz 2KB 32KB 1KB 14 (6 PWM) 6
Pro Mini 5V Atmega328 5V 16Mhz 2KB 32KB 1KB 14 (6 PWM) 6
Arduino DUE AT91SAM3X8E 3.3V 84Mhz 96KB 512KB - 54 (12PWM) 12
Arduino Lilypad Atmega168V 3.3V 8Mhz 1KB 16KB 512B 14 (6 PWM) 6


Hay muchos más modelos que los que se muestran en la tabla, pero nos sirve para hacernos una idea. Como se puede ver, tenemos varios parámetros a tener en cuenta y que condicionarán nuestra elección, como por ejemplo:
  • Voltaje de funcionamiento.
    Hay modelos que funcionan a 5V y otros que lo hacen a 3.3V.
  • Velocidad.
    A más velocidad, más consumo del microcontrolador. Nos condicionará si queremos alimentarlo a baterías.
  • RAM.
    El microcontrolador incorpora una memoria volátil para almacenar datos temporales (variables de nuestro programa).
  • Flash.
    Además, también incorpora un chip de memoria no volátil para el almacenamiento de nuestro programa. Si vamos a hacer un programa muy grande, tendremos que elegir un tipo adecuado de Arduino.
  • EEPROM.
    El micro también incorpora memoria no volátil de propósito específico: almacenar configuraciones y parámetros que no forman parte del código.
  • Entradas/salidas digitales.
    Cada modelo tiene un número de puertos digitales de entrada y salida. Algunos de ellos tienen propósitos específicos como servir de puerto serie de comunicaciones, o conectar con otros dispositivos por medio de los protocolos I2C o ISP. Además, algunos de estos puertos pueden funcionar como salidas "pseudo-analógicas" PWM.
  • Entradas analógicas.
    Cada modelo tiene también una serie de puertos de entrada analógicos, conectados a un conversor analógico/digital.

Arduino UNO

Este modelo de Arduino es el más adecuado para todo principiante. Está basado como hemos visto en la tabla superior en el microcontrolador Atmega328P de Atmel, y funciona con 5V y a 16Mhz.

La placa tiene, además del microcontrolador, un oscilador de cristal a 16Mhz, un botón de reset, un regulador de tensión de 5V, un conector hembra para USB-B y un conector para un alimentador externo. Además, para comunicarse mediante el puerto USB incorpora otro controlador, el Atmega16U2.

Puertos

Dispone de 14 pines de entrada/salida digital (numerados del 0 al 13), algunos de los cuales tienen propósitos específicos:
  • 0 y 1: Se utilizan como consola de comunicaciones serie, para poder leer y escribir caracteres y comunicarse así con el mundo exterior. El 0 es para la recepción y el 1 para la emisión. Ambos pines están replicados también por el puerto USB, de manera que podemos comunicarnos con el ordenador al que esté conectado.
  • 2 y 3: Sirven como entradas de interrupción. Podemos conectarlas a un dispositivo que emita una alerta cuando cambie un estado, cuando se reciban datos, etc.
  •  3, 5, 6, 9, 10 y 11: Se pueden utilizar como salidas analógicas PWM. Al escribir un valor entre 0 y 255 producirá un voltaje entre 0 y 5V de forma uniformemente distribuida.
  • 10, 11, 12 y 13: Se pueden utilizar para conectar dispositivos siguiendo el protocolo SPI.
  • 13: Lleva conectado un LED que hay en la placa. Este se encenderá cuando configuramos el puerto como salida y escribimos un 1.
Además también existen 6 puertos de entrada analógica (A0 a A5) que están conectados a un conversor analógico/digital de 10 bits.

Alimentación

En cuanto a la alimentación, hemos dicho que el microcontrolador funciona a 5V, pero la placa generalmente necesitará algo más de voltaje para funcionar. El regulador se encargará de proporcionar los 5V  a partir de la tensión de entrada. Existen las siguientes posibilidades a la hora de alimentar la placa:
  • A través del conector USB. Si tenemos el Arduino conectado al ordenador, además de servirnos para programarlo y para tener acceso a la consola serie, podemos alimentarlo a través del mismo cable. La tensión es entonces de 5V.
  • A través del conector de alimentación externa. Este conector admite entre 6V y 20V, pero normalmente deberemos proporcionar un mínimo de 7 si queremos que el regulador de tensión y la placa funcionen de forma estable.
  • A través del pin Vin. Este conector está unido a la entrada anterior, y podemos alimentarlo con el mismo voltaje.
  • A través del pin 5V. Este conector realmente es una salida que proviene del regulador cuando alimentamos el Arduino por cualquiera de las entradas anteriores. Normalmente no debe usarse de entrada, a menos que no tengamos nada más conectado en el resto y que la tensión que proporcionemos sea exactamente de 5V regulados.
Además existe un pin  3.3V que funciona normalmente como salida regulada a dicha tensión. Su salida nos proporciona un máximo de 50 mA que podemos utilizar para alimentar periféricos.

Arduino Pro Mini


Este otro modelo es apropiado para montajes independientes, sin necesidad de tener el Arduino conectado al ordenador y pudiendo alimentarlo mediante un transformador o bien pilas o baterías.

Su tamaño es mucho más pequeño y tiene ciertas carencias con respecto al UNO dado el uso que se le va a dar.


  • La principal carencia que tiene es que no tiene puerto USB. En su lugar, cada vez que queramos programarlo deberemos conectarlo porlos conectores del lado derecho de la imagen con un adaptador FTDI, que nos permite adaptar los niveles lógicos del circuito con los de la conexión USB.
  • Otra carencia es que en lugar de tener unos zócalos para pinchar conectores directamente, sólo dispone de pequeños orificios en su lugar, en los que podremos soldar patillas para montar en tableros o bien directamente los cables que necesitemos.
  • Finalmente este Arduino sólo tiene un regulador, por lo que no podremos alimentar dispositivos externos que tengan un voltaje distinto al propio del Arduino.
Por lo demás, las características son las mismas que las del Arduino UNO en cuanto a memoria y conectores,  distinguiéndose sólo en cuanto a voltaje y velocidad. Existen de hecho dos variantes distintas de este Arduino:
  • Arduino Pro Mini 5V.
    Funciona a 5V y 16Mhz, y se puede alimentar por el conector "RAW" con una tensión de entre 5V y 12V, o bien por medio del conector "VCC" por donde deben entrar exactamente 5V.
  • Arduino Pro Mini 3.3V.
    Este otro funciona a 3.3V y 8Mhz, siendo el más adecuado para montajes en los que se requiera muy poco consumo. Se puede alimentar de igual forma por RAW entre 3.3V y 12V o por VCC con 3.3V. Es muy interesante leer este artículo de mysensors.org en el que hacen una modificación a este Arduino para que se pueda alimentar sólo con dos pilas AA, a 3V. La modificación consiste básicamente en eliminar el LED de encendido y el regulador de 3.3V.

Clónicos

Como hemos dicho al principio, Arduino es una plataforma de hardware libre, lo que quiere decir que o bien puedes comprarlo en los canales y tiendas "oficiales", o bien puedes irte a la página oficial (www.arduino.cc) y descargarte los esquemas de la placa que quieras y montarla tú mismo añadiendo, modificando o eliminando lo que quieras.

También quiere decir que cualquier otro fabricante puede construir su propio Arduino y venderlo al precio que quiera. Dada mi afición a la importación al por menor desde China, mis Arduinos son todos clónicos y procedentes del Oriente. Os dejo unos enlaces a algunos de los productos que he comprado:

Clónico del Pro Mini 3.3V
  • Arduino UNO R3 modificado.
    Este dispositivo es un Arduino UNO que en lugar del Atmel Atmega328P "normal" utiliza el Atmega328P-AU que es exactamente igual pero empaquetado en un formato mucho más reducido (y barato). Otra modificación con respecto al original es que, en lugar de utilizar el Atmega16U2, utiliza el chip CH340G que es mucho más barato y da menos problemas con Windows 8 y superiores. Este artículo en concreto de Aliexpress incorpora un cable USB para conectarlo al ordenador y sale por unos 2,93€. Si ya tenéis un cable de este tipo (USB-A a USB-B, el de las impresoras) os podéis ahorrar todavía más.
  • Lote de 5 Arduinos Pro Mini 3.3V.
    Es un pedido de 5 Arduinos clónicos por un total de 8,23€ (1,65€ la unidad). Según dicen en las especificaciones, el rango de voltaje admitido es más amplio que el del original, llegando a permitir hasta 15V (yo no lo probaría). Recomiendan utilizar el pin VCC si el voltaje está entre 2,7V y 5V o bien el RAW en caso de que sea superior a 5V.
  • Lote de Arduino Pro Mini 3.3V + Programador FTDI.
    Finalmente, este lote lo compré porque era más barato que comprar el programador por separado. Se trata de un Arduino como los anteriores y un programador FTDI que se puede conectar directamente al Arduino. El lote completo sale por 3,64€ en Aliexpress. Es importante señalar que este programador entrega 5V de alimentación siempre, aunque el Arduino sea de 3.3V.





domingo, 6 de septiembre de 2015

Proyecto Ibertren: Presentación

Introducción

Cuando yo era pequeño, uno de los hobbies que tenía era el modelismo de trenes en miniatura.
Los que tengan una edad parecida a la mía, recordarán la marca IBERTREN, una empresa dedicada a hacer trenes de juguete en miniatura que en aquella época no existían en España. Inicialmente, se dedicó a la escala N (9mm entre raíles), y todas las vías tenían 3 contactos: los dos raíles más un contacto central sobre el que se desliza un patín de la locomotora. Por esta razón, esta escala pasó a denominarse más tarde como 3N. Mientras tanto, en el modelismo "de verdad" la escala era 2N, esto esto es: la corriente se toma de los dos raíles, uno positivo y otro negativo.

Más tarde, Ibertren entró también en la escala HO, mucho más grande, y eventualmente también hizo modelos en escala 2N, pero eso es otra historia.

La cosa es que yo tenía una maqueta de Ibertren, con tres trenes distintos, uno de pasajeros, un talgo completo y uno de mercancías, cada uno con su respectiva locomotora. Aquí os adjunto algunas fotografías de cómo se conserva la maqueta a día de hoy.

Lamentablemente, el transformador original que traía el Ibertren se estropeó. Mi padre, que siempre ha sido bastante manitas para la electrónica, me hizo otro transformador y reutilizó algunas partes del original, y además añadió ciertas "características" como un silbato y un control de luces de las casas de la maqueta.

La cosa es que la maqueta se abandonó debajo de una cama durante muchos años, y a día de hoy aunque bien conservada, no funciona el alimentador porque el circuito se rompió.
Tres generaciones, una afición
Algunos detalles de la maqueta

Como se puede ver, queda un buen trabajo de restauración

Objetivos

Mi objetivo en este proyecto no es tan sólo  arreglar el alimentador sino, dados los tiempos que corren y las nuevas tecnologías que ahora existen (han pasado 30 años) vamos a intentar "modernizar" un poquito el asunto.

Mi intencion es utilizar un Arduino para mover todo el invento, y esta es mi lista de intenciones:
  • Control suave de los trenes.
    Arduino incorpora salidas PWM que no son analógicas pero se comportan como tales, ya hablaremos un poco más de esto más adelante. La ventaja es que el avance de las locomotoras a velocidades bajas es bastante más eficiente y suave que la simple regulación de voltaje que se hacía habitualmente en los circuitos analógicos.
  • Control digital de la marcha.
    Antiguamente, para cambiar la marcha de los trenes, el controlador de Ibertren disponía de un conmutador que cambiaba el sentido de la corriente. Si el tren estaba en marcha, esto era catastrófico: imagínate meter marcha atrás en el coche cuando éste está en movimiento... Con un control digital podemos programar el Arduino de manera que cuando solicitemos el cambio de sentido, éste puede reducir la velocidad hasta cero, cambiar la polaridad y después incrementar de nuevo la velocidad hasta donde estaba anteriormente.
  • Display digital.
    ¿Por qué no ponerle al invento un display que nos muestre información como la velocidad, la marcha, o lo que se nos ocurra?
  • Sonidos personalizados.
    La maqueta tenía como os he dicho un circuito que hacía sonar un silbato al pulsar un botón. Con un Arduino podemos tener muchos tipos de sonidos grabados en MP3 (o WAV) que se activen con un panel de distintos botones: campanas de la estación, silbato, locuciones, etc. Hay componentes baratísimos que nos permiten reproducir sonidos almacenados en una microSD y controlándolo desde Arduino.
  • Control de iluminación.
    La maqueta dispone de varias casas que tenían una pequeña bombilla de 12V. Hay un interruptor general que nos permite encender o apagar las luces. Mi intención es sustituir este circuito por LED's de bajo consumo y voltaje (3.3V - 5V) y alta luminosidad. Además podemos programar el encendido o apagado automático, disminuir o aumentar la luminosidad al pulsar un botón, etc.
Hay ciertas cosas que todavía tengo que pensar, pero las posibilidades son muy grandes: por ejemplo podríamos poner sensores de presencia en ciertos puntos del circuito de vías y detener los trenes si hay un obstáculo, o activar automáticamente los cambios de vía eléctricos, etc. Ya veremos lo que da de sí.

Análisis de requerimientos

A continuación, vamos a ver qué elementos vamos a necesitar para realizar el proyecto.
Primero, veamos qué circuitos de corriente vamos a necesitar:
  1. Los trenes de Ibertren en la escala N (3N) funcionan con corriente continua a 12V, y su control es analógico; esto es, se regula su velocidad modificando el voltaje entre 0V y 12V. Para el cambio de sentido simplemente se invierte la polaridad, alimentándolos entre -12V y 0V. En cuanto a la corriente máxima necesaria, creo (a ojo de buen cubero) que con 2A tendremos bastante para mover un máximo de 2 locomotoras. Si no recuerdo mal, he leído en algún sitio que el alimentador original de Ibertren proporcionaba un máximo de 2,5A, pero compartido entre 12V alterna y 12V continua. Por lo tanto, vamos a necesitar un circuito de 12V DC 2A.
    Tengo que especificar que con nuestro Arduino no vamos a proporcionar realmente corriente continua sino PWM, es decir corriente "pulsada", pero para el caso nos vale.
  2. Además, la maqueta dispone de cuatro cambios de vía eléctricos. Estos cambios consisten en un doble electroimán y un núcleo metálico que se desplaza en un sentido u otro. Estos electroimanes se alimentan a 12V con corriente alterna mediante unos pulsadores. Vamos a suponer también que la corriente máxima es de 2A. Por tanto, vamos a necesitar otro circuito de 12V AC 2A.
  3. Finalmente está la alimentación de todo lo demás: necesitamos alimentar un Arduino, unos LED's y otra serie de componentes electrónicos: display, amplificadores PWM, reproductor de MP3... Para todos estos elementos lo ideal es una alimentación a 5V en continua. Por tanto vamos a necesitar un tercer circuito a 5V DC. Ya veremos la corriente máxima necesaria, pero no creo que supere 1A.

Por tanto, estos son los requerimientos a primera vista:
  • Un transformador de 220V AC a 12V AC. Creo que en la maqueta debe haber alguno que funcione todavía y en caso contrario habría que comprar uno. Con él alimentaremos el circuito número 2 (desvíos eléctricos).
  • Un alimentador que nos dé 12V DC y 5V DC. Podríamos construir uno que nos dé estas tensiones o bien podemos comprar este alimentador de discos duros que nos da 2A en cada circuito independiente a 12V y a 5V. Cuesta unos 2,74€ en Aliexpress y con él podemos alimentar los circuitos números 1 y 3 (motores y electrónica).
  • Un Arduino a 5V.
    Podemos utilizar un Arduino UNO o un Pro Mini. Opto por el segundo por ser más barato y ocupar menos espacio. 1,41€ en Aliexpress.
  • Un display digital.
    Hay muchos displays LCD disponibles que nos permiten mostrar 2 líneas de 16 caracteres cada una. Normalmente utilizan un protocolo de comunicación en paralelo, es decir, utiliza 8 líneas de datos al mismo tiempo. Si no queremos quedarnos sin pines disponibles en el Arduino, deberemos utilizar un adaptador al protocolo serie. Se puede conseguir un pack con los dos componentes por 1,96€ en Aliexpress, y sólo tendremos que utilizar 4 pines incluyendo la alimentación.
  • Un amplificador de potencia PWM.
    Si nuestro Arduino funciona a 5V, el voltaje máximo que podremos sacar por los pines PWM será de 5V, insuficiente para alimentar el circuito de los motores de los trenes. Además necesitaremos mucha más intensidad de corriente de la que nos va a proporcionar el Arduino (unos 2A según hemos estimado). Por tanto, necesitaremos construirnos un circuito amplificador basado en un transistor que nos controle hasta 12V a partir de los 5V del Arduino. O también podemos comprar este componente que está ya diseñado específicamente para motores y cuesta unos 1,72€ en Aliexpress y permite controlar dos canales independientes de 2A cada uno y para un voltaje de entre 5V y 35V.
  • Un reproductor de sonidos.
    Este componente es opcional, pero mola. Se trata del DFPlayer Mini, un mini reproductor de MP3 (o WAV, o WMA) que incorpora un lector de tarjetas microSD y puede reproducir ficheros de música (o sonido) de forma independiente o controlado por un Arduino. Se puede conectar directamente a un altavoz y también tiene una salida de línea. Cuesta 5,48€ en Aliexpress.
  • Algunos pulsadores.
    Vamos a necesitar varios pulsadores, tanto para el cambio de sentido como para activar y desactivar el alumbrado como para el reproductor de sonido.
    Para el cambio de sentido me han gustado estos que tienen una tapa en forma de flecha e incorporan iluminación mediante LED's. Midem 1 cm de diámetro y cuestan 4,56€ en Aliexpress el lote de 5 pulsadores.
    Para el resto, podemos utilizar estos otros, que sólo cuestan 0,69€ el lote de 20 en Aliexpress.
  • Unos cuantos de LED's.
    También vamos a necesitar LED's, tanto para la iluminación como para indicar ciertas cosas, como el funcionamiento del circuito como para indicar que las luces están activadas, o para lo que sea. En Aliexpress venden este lote de 100 LED's en blanco por 0,98€. O si los queremos en colores también tenemos este otro lote de 100 LED's en 5 colores (20 de cada) por 1,03€. Todos ellos son pequeños (3mm de diámetro), de alta luminosidad y admiten un voltaje máximo de 3,4V, lo que podemos conseguir por medio de algunas resistencias a partir de los 5V que tenemos en el circuito 3.
Finalmente, también habrá que buscar otra serie de componentes, como un potenciómetro que gire menos de 180º entre la posición mínima y la máxima (es posible que valga el que tiene el circuito antiguo); una bonita cubierta para el mismo; una caja para montar la consola con el display, el potenciómetro, los botones, etc (o ya veremos si utilizamos la propia consola de Ibertren aunque sea un sacrilegio para coleccionistas); cable, resistencias, condesadores, etc.

Quitando todas estas cosas, de momento vamos por unos 19€ de presupuesto, que no está nada mal.

Siguientes pasos

Antes de seguir adelante, tengo que hacer algunas mediciones en la maqueta, para ver qué se puede aprovechar y qué hay que comprar. En cuanto lo tenga claro, pediré los componentes e iremos estudiando cómo funciona cada uno de ellos para realizar el montaje de todos. Seguramente este artículo lo vaya modificando a medida que vaya dando dichos pasos.