ESTE BLOG COMENZÓ A PUBLICARSE EN 2008, POR LO TANTO MUCHOS DE LOS TEMAS HAN QUEDADO DESACTUALIZADOS U OBSOLETOS. LOS LECTORES QUE DESEEN UTILIZAR ALGUNO DE LOS ELEMENTOS AQUI DESCRITOS DEBERÏAN ASEGURARSE DE BUSCAR LAS REFERENCIAS MAS MODERNAS DE LOS TEMAS DE SU INTERÉS. EL BUSCADOR INCLUIDO SERÄ UNA AYUDA PARA ESA BÚSQUEDA

domingo, 28 de octubre de 2012

Un año más



Ya estamos otra vez a 28 de octubre, así que se cumplen cuatro años desde que comencé mi proyecto, y desde que comencé la publicación de este blog.

Como digo siempre, parece que la llegada del otoño, con sus días más cortos y el tiempo frío es lo que me impulsa todos los años por estas fechas a retomar el trabajo en la maqueta. No es por tanto casualidad que empezase mi proyecto en esta fecha, y que ahora esté ya calentando motores.

Haciendo balance del último año, no cabe duda de que ha sido un año productivo, a diferencia del anterior que fue prácticamente perdido por el cambio de domicilio. Por el contrario en la última temporada ha sido cuando he puesto en marcha el control de la maqueta mediante el programa de ordenador que ha recibido también un importante impulso.

Como los seguidores de este blog ya saben, ya esta completamente operativo todo el sistema de control de aparatos de vía, incluyendo los desvíos, desenganchadores y también la rotonda, y por supuesto el sistema que controla los casi cuarenta apartaderos donde se pueden dejar trenes estacionados. Todo ello quedó reflejado en este vídeo que se publicó en Febrero y que tuvo una buena acogida en varios foros:



Después de ese hito, me dediqué al sistema de detección de trenes, muy relacionado con el tema de los semáforos. Ha sido todo un éxito el descubrimiento de los sensores de efecto Hall que he procurado dar a conocer en diversos foros. Parece que algunos modelistas los han probado también con éxito, a si que he tenido últimamente la satisfacción de ver que ya en algunos comentarios se habla de los sensores Hall como alternativa a los detectores reed.

En la parte electrónica ha habido también una meta conseguida, al haber realizado el hardware del sistema de detección que ha sido un desarrollo muy original y que ha funcionado perfectamente.

En el siguiente vídeo, del mes de Junio, vemos, a partir de su mitad, el sistema de detección funcionando, y cómo el programa de control va registrando el paso de la locomotora de pruebas por las diversas balizas.



Y por fin pocos días antes de tomarme unos días de descanso fuera de Madrid, dejé casi a punto el sistema de control de tracción. En la fotografía siguiente, vemos el sistema en plenas pruebas.


Este es el punto en que voy a retomar el trabajo en los próximos días, y mi objetivo es tener para final de año el sistema de control total de la maqueta terminado.

Y en cuanto al blog en si, ha continuado la línea ascendente. Si al final del tercer año estábamos a punto de alcanzar las 100.000 páginas vistas, al final de este cuarto año se han alcanzado las 170.000 páginas, y el ritmo sigue aumentando, estando actualmente en una media de más de 6000 páginas vistas cada mes.

Sobre este tema, he incorporado en el mes de Mayo un nuevo gadget que muesta en un mapamundi los lugares desde los que se accede a este blog. Desde que este gadget está en marcha ha registrado ya más de 13000 visitas provinientes de una gran variedad de países. Es curioso ver el mapamundi cubierto de puntos que reproducen prácticamente el área del idioma español además de un importante grupo de países europeos.


sábado, 20 de octubre de 2012

Arduino

 


Ultimamente, en varios de los foros en los que participo, se está hablando del famoso Arduino y de su posible aplicación al control de las maquetas de trenes. Realmente yo ya había hablado aquí de este tema, hace como dos años (Alicante 2010), apuntando que podía ser un elemento para resolver las comunicaciones entre el ordenador y mi sistema de control.

Sin embargo, al poco tiempo fue cuando descubrí las placas Velleman K8055 que resolvieron todos mis problemas, y me lancé por ese camino, hasta el punto que hoy tengo casi a punto todo el sistema, basado en esas placas.

Sin embargo un amigo y lector de este blog, me visitó hace unos meses y me comentó que había investigado sobre el tema Arduino y había visto unas posibilidades muy grandes, para construir un sistema semejante al mío, que era su objetivo. Me hizo una pequeña demostración y quedé convencido de que era un camino muy sencillo, bastante más sencillo que el que yo había seguido basándome en las placas Velleman. Así que al día siguiente, pedí un Arduino modelo Mega, cuya imagen vemos en la foto de cabecera.

Sin embargo a los pocos días me fui de vacaciones, con lo que apenas hice algo más que sacarlo de la caja.

Lo primero que habría que hacer aquí es decir qué es un Arduino. Bueno, pues según su fabricante:

Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. It's intended for artists, designers, hobbyists, and anyone interested in creating interactive objects or environments.

O sea traducido al español:

Arduino es una plataforma de código abierto para desarrollo de prototipos electrónicos basada en un hardware y un software flexible y fácil de usar. Está dirigido a artistas, diseñadores, aficionados y a cualquiera que esté interesado en crear objetos o entornos interactivos.

Esta claro ¿no?. Pues eso.

No se si realmente alguno de mis lectores, que no conozca el Arduino, habrá podido enterarse de algo con la definición anterior. Yo confieso que desde luego leyendo eso, soy incapaz de hacerme ni siquiera una remota idea de lo que se está hablando.

Así que le voy a hacer un favor a Arduino ( a lo mejor algún lector consigue enterarse y le compra uno) y voy a explicar, con mis palabras que demonios es esto:

Realmente Arduino es un microprocesador montado en una placa de circuito impreso que proporciona las conexiones de alimentación y entrada salida. Concretamente el Arduino MEGA que yo he comprado tiene un microprocesador ATmega2560.

Un microprocesador o microcontrolador es un pequeño ordenador, tan pequeño que cabe en un único chip, pero que cuenta con las características generales de cualquier ordenador, es decir, una unidad de proceso (CPU), memoria, y conexiones de entrada salida. Volviendo otra vez al ATmega2560 tiene un procesador a 16 MHz,  256 Kb de memoria flash, 8 Kb de SRAM y 4Kb de Eprom, 54 entradas/salidas digitales y 16 analógicas. ¡Todo en ese chip más pequeño que un sello de correos que vemos en el centro de la imagen de la cabecera!

Realmente hace ya mucho tiempo que existen los microprocesadores, y los aficionados a la electrónica los vienen usando con profusión para automatizar elementos tales como robots, simuladores, etc. Sin embargo hasta la aparición de Arduino había tres problemas que dificultaban su difusión:

  • Había multitud de microprocesadores distintos, o sea que había que ser capaz de decidir cual era el más adecuado en cada caso y conocer su funcionamento.

  • Una vez seleccionado el microprocesador había que diseñar y construir un circuito para llevarle la alimentación, las entradas y salidas, y conectarlas a los distintos sensores y actuadores que deberían interactuar con el microprocesador.

  • Y sobre todo: Los microprocesadores, como cualquier ordenador necesitan un programa. Este programa normalmente se desarrolla en un PC con un software especifico para generar este tipo de programas. El problema es que hay muchos tipos de software para generar programas de microprocesador, y no todos valen para todo los micros. Además se necesita un dispositivo electrónico (llamado programador de PIC) donde situamos el microprocesador para transferirle el programa desde el PC, etc etc. Por lo tanto hay que conocer el lenguaje que utiliza el software para poder hacer el programa (y no todos son iguales)  y en definitiva, saber programar.

Entonces llegan los señores de Arduino y hacen lo siguiente:

Seleccionan un único microprocesador, escogiendo uno que cubra la mayoría de las posibles necesidades. De hecho esta fue la idea inicial, pero luego han sacado más modelos cambiando a otros microprocesadores mas modernos o mas potentes, pero siempre manteniendo la compatibilidad con los otros modelos.

Lo suministran montado en una placa que incluye todo lo necesario para manejar la alimentación, las comunicaciones con el PC, y conectores para todas las entradas y salidas situados en una posición geométrica estandarizada, de modo que cualquier dispositivo que haya que conectar a esta placa, se "enchufa"  directamentre sobre estos conectores y si respeta la geometría de las conexiones quedará debidamente conectado. La placa no sólo incluye todo lo necesario para el funcionamiento del microprocesador sino también para su programación, por lo que no se necesita un programador de PIC

El software para programar el microprocesador lo suministran gratuitamente desde la web de Arduino, de manera que una vez instalado este software en el PC, basta conectar la placa del Arduino al conector USB del ordenador, para poder desarrollar y transferir el programa al microprocesador.

Naturalmente queda el problema de que sigue siendo necesario saber hacer un programa, pero Arduino tiene un lenguaje muy potente y hay multitud de ejemplos en la Web de Arduino.

De hecho, las placas Velleman que yo he usado llevan también un microprocesador, que me lo venden ya programado, y me proporciona la conexión al ordenador y las entradas y salidas, pero sólo valen para dirigir las entradas y salidas y además sólo proporcionan ocho salidas digitales y dos analógicas y cinco entradas digitales y dos analógicas. Así que el Arduino puede hacer esa misma labor pero con mucha más capacidad, si lo programo convenientemente.

Seguramente, con toda esta explicación habrá quedado un poco más claro en que consiste el invento éste del Arduino.

El nerviosismo en los foros al que antes me refería, se debe a la posibilidad de aplicar estos elementos para automatizar funciones en nuestras maquetas.

Hemos dicho que un Arduino tiene "entradas digitales" Esto es sencillamente un pin que detecta si recibe o no tensión, Así que si lo conectamos a un detector de paso o de ocupación de trenes, de cualquier tipo, es decir una vía de contacto, un interruptor reed, un detector Hall, un detector infrarojo, etc, tenemos una señal de entrada que se activará al paso de los trenes.

Las salidas digitales también funcionan presentando o no tensión en sus terminales. Si conectamos un LED se encenderá cuando esta salida se active. Podemos conectar por lo tanto directamente semáforos de leds, pero con un mínimo circuito que suministre la intensidad necesaria, podemos mover también las bobinas de un desvío, o un relé para abrir o cerrar circuitos de tracción.

En definitiva, todo lo que hasta ahora se hacía a base de relés, puede hacerse de forma mucho más simple mediante un Arduino convenientemente programado. Me estoy refiriendo al manejo de circuitos con control de cantones, estaciones ocultas automatizadas, etc.

En cuanto tengamos circuitos medianamente complejos, la ventaja en sencillez  es evidente, y además una vez que se amortiza el coste del Arduino, resulta mucho más barato por el ahorro de la mayoría de los relés.

Pero sobre todo, la introducción del Arduino permite incluir características que no son posibles con relés, por ejemplo:
  • Tiempos de espera, por ejemplo paradas en estaciones
  • Conteo de sucesos y actuación a completarse un número prefijado. Por ejemplo que un tren de un número prefijado de vueltas al circuito antes de cambiar su recorrido
  • Funciones condicionales, por ejemplo en función de que un tren sea de pasajeros o mercancías
  • Funciones aleatorias, por ejemplo para sacar aleatoriamente los trenes desde una estación oculta
Y desde luego una gran facilidad para reformar el sistema por perfeccionamiento o ampliación.

También se ha hablado en los foros de la posibilidad de automatizar con Arduino los sistemas de manejo de trenes mediante paneles giratorios u oscilantes, ascensores, etc.

Todo esto ya justifica la atención que le podemos dedicar a este elemento, pero hay dos temas muy importantes que merece la pena considerar.

El sistema no solo responde a sus entradas, esto es a detectores o pulsadores. sino que puede recibir órdenes desde un ordenador a través de la conexión USB. Así que con un programa muy sencillo, podemos hacer que el Arduino obedezca a las instrucciones recibidas desde el ordenador. Podemos hacer muy sencillamente un "cuadro de mandos por ordenador" para manejar todos los aparatos de vía (desvíos, semáforos, desenganchadores, rotonda...). Tan sencillamente como lo que expuse en
 "Un poco de Software"

La otra posibilidad se refiere sólo a los sistemas analógicos. En este caso, se pueden utilizar algunas salidas del Arduino para generar señales PWM. Como ya he comentado, con estas señales se maneja de una forma muy precisa la velocidad de las locomotoras analógicas, de manera que podemos crear sistemas de control de tracción muy eficientes.

Ya he comentado aquí que la placa "Etapa de potencia" que construí en Diciembre de 2010 había decidido no utilizarla al cambiar de idea en la forma de organizar mi sistema de control. (Véase: "Control de tracción") Esta placa entonces me sobraba, así que cuando el amigo al que antes me refería me dijo que estaba sacando las señales PWM del Arduino, le regalé la placa, de manera que no tuvo más que conectarla, y según me confirmó el sistema le funciona perfectamente.

Es curioso que una placa diseñada para un tema distinto haya servido para obtener un sistema de tracción controlado por Arduino. Y es que como antes decía las placas Velleman no son tan diferentes de la solución Arduino.

Parece entonces que al fin y al cabo, hay poca diferencia entre el sistema basado en placas Velleman, en concreto en tres placas, y el que podría hacerse basado en un Arduino. Queda claro que en este caso el Arduino hubiese actuado simplemente como elemento de comunicación con el ordenador en el que corre el programa de control.

Sin embargo, si hay diferencias. Concretamente dos y muy importantes, sobre todo porque eliminan dos problemas que me han dado las placas y que me habría ahorrado siguiendo el camino del Arduino.

El primer problema lo expuse en "Tenía que hacer esta prueba" hace casi dos años. Se deriva de la necesidad de separar el programa de control en dos subprogramas distintos, uno con la interfase de usuario, y otro con las comunicaciones con las placas Velleman, que tenía que ejecutarse en tantas instancias simultáneas como placas Velleman tuviese el sistema. Lo peor no es la separación en dos subprogramas sino la comunicación entre el de interfase y los de comunicaciones, que fue resuelto de una forma complicada, y que introduce una cierta lentitud en el sistema. Todo esto se habría evitado con un Arduino, que tiene más capacidad que las tres placas.

El segundo, lo expuse aquí en "Software de detección" se refiere a la forma de detectar que se ha activado una de las balizas de vía por el paso de un tren. Como las placas Velleman no producen ningún evento al cambiar de estado, la única forma de detectar el cambio de una baliza era hacer un polling del valor de las entradas con una frecuencia de 15 milisegundos. Esto consume muchos recursos del ordenador y además no garantiza absolutamente que no se pierda alguna señal, aunque en las pruebas efectuadas ha funcionado bién.

Por el contrario, la comunicación del Arduino con el ordenador se hace mediante un control de comunicaciones COMM. Este control si tiene un evento que se activa cuando cambia el valor de la entrada, de manera que esta detección se puede hacer de manera mucho más sencilla, rápida y segura.

En resumidas cuentas, que las dos complicaciones más importantes que he tenido que resolver en el desarrollo del programa de control, no las hubiese tenido, de haber utilizado desde el principio el Arduino como front-end de comunicaciones.

Y ahora viene mi duda: ¿Por donde sigo? ¿termino el desarrollo del sistema de control por el camino que he seguido hasta ahora. o paro esta línea de desarrollo y modifico todo lo hecho para adaptarlo a la solución Arduino?

La verdad es que esta duda me tiene un poco perplejo y estoy parado sin  progresar por ninguna de las dos líneas.

Espero ser capaz de tomar una decisión en unos días y comenzar la nueva temporada, que ya será la del quinto año, con el camino decidido.