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

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.

22 comentarios:

  1. Hola Ignacio.

    Personalmente yo no abandonaría el trabajo realizado hasta la fecha, y tampoco descartaría usar Arduino. Lo que haría yo en tu caso es programar Arduino de forma que actúe como una placa Velleman, pero dotada de más entradas y salidas.

    Te recomiendo que mires esta entrada de mi blog (http://raulnd.blogspot.com.es/2012/02/pintando-con-8-bits.html) en la que encontrarás una imagen con todos los puertos de 8 bits de Arduino Mega y como leer o escribir un byte en los 8 pins del puerto a la vez. Así podrías conectar tu sistema directamente a los pins de Arduino sin hacer ninguna modificación de HW ni SW.

    Un saludo.

    ResponderEliminar
  2. Hola Raul

    ¡Cuanto tiempo! Veo que en cuanto se habla de microprocesadores aportas tu experiencia en el tema. ¡Muchas gracias!

    Efectivamente esa es una opción, pero entonces no obtengo ninguna ventaja del Arduino

    Estoy pensando que quizá el camino correcto sea: en primer lugar terminarlo con las placas Velleman. Una vez esté funcionando, tratar de sustituir las tres placas Velleman por un Arduino Mega, exactamente tal como tu me dices, y en un tercer paso, hacer poco a poco modificaciones en el software, que serían simplificaciones, para aprovechar las ventajas del Arduino.

    ¡Esto no se acaba nunca! ( Bueno de eso se trata ¿no? )


    ResponderEliminar
  3. modelismoferroviario25 de octubre de 2012, 10:38

    Buenos días:

    Efectívamente, cuando le mostré a Ignacio el funcionamiento de la placa Arduino lo que hacíamos era usar un puerto del Arduino Mega como las 8 salidas digitales de la placa Velleman de forma que el funcionamiento del hardware de Ignacio se podía usar sin modificaciones.

    El dilema está, como comenta Ignacio en el post, en el avance hacia nuevos desarrollos.

    Habrá que seguir pensando, ...

    Un saludo

    Rafael

    ResponderEliminar
    Respuestas
    1. Rafael, me llamo Miguel Perez y en un E-mail, Ignacio me dirige a ti para consultar funcionamiento del dispositivo Arduino. No he sido capaz de ver tu blog por lo que te ruego me indiques como puedo contactar contigo.

      También desearia saber donde encontrar el dispositivo, toda vez que los precios encontrados en Google son superiores a los 20 € que alguien comenta en el blog de Ignacio.

      Gracias, Miguel Pérez

      Eliminar
    2. modelismoferroviario14 de noviembre de 2012, 17:30

      Hola Miguel:

      No localizas mi blog porque aún no lo tengo hecho (todo se andará).

      Ignacio te pasará mi contacto.

      Respecto al Arduino Mega por 20 euros lo consigues en Ebay. Los que he comprado vienen de China y tardan mas o menos un mes en llegar.

      Si tienes prisa y lo necesitas antes creo que aquí los venden por 41 euros (la última vez que lo miré) y no se si + iva.


      Un saludo

      Rafael

      Eliminar
    3. Hola Rafael:
      Aquí cuesta 41 € + iva + gastos de envio (7,95), por eso me interesaba tu referencia.

      Tengo otra pregunta, porque tengo una empanada mental que no me entero, tal vez me he metido en algo que me supera. Mi pregunta es: el Arduino tiene salidas PWM y por otro lado Ignacio me enseña a fabricar un transformador que funcione con señal PWM. ¿cuál es la relación?. ¿Necesito las dos cosas?

      Un saludo
      Miguel Pérez

      Eliminar
    4. Hola Miguel

      Te contesto yo, que prece que soy el causante de la empanada:

      Son dos temas distintos: En este blog hay varios artículos para enseñar a fabricar un controlador PWM, que es MANUAL. Es decir tiene un botón de mando y según lo giras la locomotora corre más o menos.

      Con Arduino se puede fabricar un controlador PWM automático, es decir que la velocidad de la locomotora está controlada por un programa de ordenador de manera que sin intervención manual se pueden conseguir paradas y arrancadas progresivas ante semáforos o en estaciones, etc. Esto requiere que el Arduino tenga conexión a "sensores" que le indiquen donde están los trenes.

      Dependiendo de lo complicado que lo queramos hacer el programa puede residir en el propio Arduino que entonces actuaría como una PLC (lo que se llama un autómata) o bien el programa reside en un ordenador al que se conecta el Arduino, que entonces actúa como terminal de comunicaciones con el ordenador.

      En ambos casos el tipo de corriente que llega a la locomotora es una señal PWM, pero porque esa es la mejor forma de controlar un motor de corriente continua. Eso es independiente de si esa corriente pulsada la genera un Arduino, una placa Velleman, o un microchip 555 como es el caso de mi control manual.

      O sea que son alternativas distintas e independientes.

      Saludos

      Ignacio

      Eliminar
    5. Hola Ignacio:

      No se si seré capaz de diseñar una maqueta automatizada, pero intentaré primero familiarizarme con Arduino y después veré hasta dónde puedo llegar.

      Ya he visto que muchas dudas que tengo las voy solucionando buscando el articulo correspondiente en tu página; no obstante, cuando me atasque te consultaré, ya que veo que todo lo que diseñas lo pones a disposición de todos.

      Gracias y saludos

      Miguel

      Eliminar
  4. Hola Ignacio:
    Estoy mirando estas placas Arduino con mucho interés. Solo valen 20€ y las posibilidades que tienen son infinitas.

    Para convertir de analógico a digital las locos, veo que lo que se hace es modular la salida PWM de ésta tarjeta Arduino para transmitir los 0 y 1´s de la codificación de Bits. Después se coloca un booster y a la vía.

    Mi pregunta es:
    Si la placa VELLEMAN tiene también salida PWM, ¿no se podría hacer lo mismo?

    Estoy mirando por Internet pero no hay mucha gente que utilice esta tarjeta para el DCC.

    ResponderEliminar
    Respuestas
    1. A ver Jose María: no se si sabes mucho más que yo o es que te has liado.

      Dices que "para convertir de analógico a digital las locos lo que se hace es modular la salida PWM de esta tarjeta arduino...." No estoy en absoluto de acuerdo: Para convertir una locomotora de analógico a digital hay que ponerle un decoder, y este decoder deberá recibir una señal digital que NO es una señal PWM, sino una señal alterna de onda cuadarada con modulación digital, esto es ceros y unos, con un protocolo determinado, normalmente DCC.

      La solución de la que aquí se habla es utilizar Arduino para generar una señal PWM que es continua (al menos unidireccional) y que alimenta directamente el motor de la locomotora, sin ningún decoder y por lo tanto la locomotora sigue siendo analógica.

      Esto mismo (lo último)se puede hacer exactamente igual con las placas Velleman y es sistema que yo estoy empleando.

      Otra cosa completamente distinta sería poder producir una señal digital a partir de Arduino, pero ya no sería una señal PWM, sería una señal digital con codificación DCC. Yo desde luego no tengo ni idea si es posible que Arduino sea capaz de hacer eso, por eso te digo que a lo mejor tu sabes mucho más que yo, y sabes como generar DCC desde el Arduino. Por supuesto en este último caso la locomotora deberá llevar un decoder que interprete la señal DCC y maneje el motor, las luces, etc. Es decir que sea una locomotora digital.

      Eliminar
  5. Hola Ignacio.
    Es posible que tenga una empanada terrible con las placas Arduino (seguramente tienes razón), pero me parece que a través del PWR es posible modular 0 y 1s y luengo a través de un LMD18200 la hacemos totalmente digital.

    He consultado esta pagina que me ha dado la clave de todo: http://www.oscale.net/en/simpledcc


    He analizado el programa que adjunta este link y habla claramente de configurar las direcciones de la máquina en dcc. (O por lo menos eso es lo que entiendo.) Y crea los paquetes DCC.
    Voy a tener una placa de estas, la probaré y te diré algo, ¿ok?

    ResponderEliminar
    Respuestas
    1. Hola otra vez.
      He mirado el enlace que me indicas y debo confesar que no entiendo nada. Parece que el autor describe algo que lleva haciendo y mostrando durante mucho tiempo y en ese enlace lo que hace es decir que ha puesto un LMD18200 como amplificador de potencia.

      Un LMD18200 es un controlador de motor, asi que entiendo que este elemento está conectado al motor En el esquema la salida de este dispositivo se conecta a lago que se llama "BOOSTER OUT" Esto puede indicar que por agun sitio hay un Booster pero yo más bien entiendo que lo que quiere decir es que todo este montaje actúa como un booster y que esos terminales son equivalentes a lo que seía la salida de un Booster y por lo tanto se conectan a la vía. Es la única forma que yo veo de que el LMD18200 actúe sobre el motor de la locomotora.

      Las funciones del LMD18200 las maneja con salidas del Arduino con lo que consigue graduar la velocidad (Salida PWM) y la dirección (Salida digital)

      En resumidas cuentas: TODO ESTE MONTAJE sería equivalente a lo que yo llamé "Etapa de potencia" (Artículo de 19/12/2019) el el que efectivamente se genera la corriente amplificada que llega al motor y se cambia el sentido de giro del motor. Ambas cosas gobernadas por señales que pueden provenir del Arduino, tal como está haciendo Rafael "modelismoferroviario"

      Ahora bién el tio éste habla de DCC aunque es muy sospechoso que indique que lo que está haciendo es una estación de comando para UNA locomotora. A ni sólo se me ocurre una explicación, y es que el tío le llame DCC a algo que no lo es en asoluto, posiblemente porque quiere decir que no es un sistema DC, o sea de corriente continua.

      Sería interesantísimo saber, si en LA(única) locomotora que maneja hay o no hay un decoder.

      Eliminar
  6. Hola de nuevo con la tarjeta Leandro arduino he cargado el software y tengo problemas de compilacion, por lo que no puedo verificar si es de verdad dcc u otra cosa.

    Pero viendo este video yo si creo que hay decoder porque el rren esta parado y con las luces encendidas http://youtu.be/E9BV695bHmU

    ResponderEliminar
    Respuestas
    1. Hola Jose María.

      He visto el video y yo estoy cada vez más convencido de mi teoría. Lo que se ve en el video no es más que una placa Arduino, y una "etapa de potencia" muy semejante a las que yo hago, aunque yo utilizo un Darlington para suministrar la corriente y un relé para hacer la inversión de movimiento y él utiliza un controlador de motor que le hace las dos funciones. Esa si me parece una buena solución.

      Se ve también que utiliza unos sensores infrarojos para detectar el tren, asi que yo le recomendaría que usase los detectores Hall asi evitaría ese "foco" que se ve en la vía.

      Respecto de que el tren permanezca parado con las luces encendidas es un efecto de las alimentaciones PWM. Si te fijas en mi video:

      http://youtu.be/EIJZzZNqdUM

      Verás como las locomotoras encienden y apagan las luces en el sentido del movimiento, aún estando paradas.

      Eliminar
  7. Hola y gracias por compartir con todos nosotros esta maravillosa página, yo estoy empezando en esto del arduino y con los trenes (bueno mi suegro) y me has dado la idea de "digitalizar" la maqueta, los desvios las estoy manejando con un l293d sin problemas, lo estoy manejando con un programa creado en visual basic practicamente igual q el tuyo mando las señales por mscomm1.output="n" por ejemplo y lo el arduino me lo reconoce bien, pero el problema me viene cuando quiero mandar con un scrollbar la potencia de la via que el arduino la interprete para sacar la señal por pwm del arduino, y luego el siguiente problema es como hacer para que me haga marcha a delante y marcha atras, que no se como enviar desde el basic, me podrias orientar en algún aspecto.

    un saludo a todos

    Muchisimas gracias.

    FErnando Val-Carreres

    ResponderEliminar
    Respuestas
    1. Hola Fernando.

      Como ya queda claro en este artículo, prácticamente no tengo ninguna experiencia con Arduino, asi que alguna de las cosas que preguntas no te las voy a saber contestar.

      Sobre los PWM, no te puedo decir cual es exactamente la forma de conseguir que varíe su anchura de pulso(lo que se suele llamar Duty en inglés), pero seguro que existe, porque esa es precisamente la utilidad de las señales PWM.

      Lo que el Arduino va a generar entonces es una señal PWM de anchura de pulso variable, pero con una tensión de pico de 5 V y sin potencia suficiente para llevarla a las vías.

      Mira ahora el esquema de CABCON01 en el artículo "Control de tracción" del pasado mes de Junio.

      En este esquema, verás en la parte derecha, arriba, un transistor TIP110. Este transistor recibe por la base la señal PWM de 5 V Exactamente la misma que producirá el Arduino, y genera una corriente de la misma forma, es decir también PWM, pero ahora de 9 V de tensión de pico (porque alimentamos el transistor con 9 V) y con intensidad más que suficiente para manejar una locomotora (Si el transistor lleva radiador puede llegar a dar 2 Amperios)

      En el mismo esquema, abajo a la derecha, hay um relé marcado como TO 12 con esquema de contactos DPDT. Este relé es el que hace la inversión de sentido de movimiento, ya que conmuta las conexiones de "Salida de tracción"

      Asi que si activamos este relé se invierte la conexión a la vía y los trenes cambian de sentido.

      Para activar el relé, que es de 12 Voltios, tenemos el transistor BC147 situado abajo a la derecha, que se alimenta desde la entrada de 12 V.

      A la base de este transistor a través de la resistencia de 2K2 llega la señal que activa la marcha atrás. Es decir desde OTRA salida digital del Arduino, llevaríamos esa señal a la base de este transistor y cuando esa salida se active, el relé cambiará a una posición y cuando se desactive el relé volverá a la posición inicial. Con esto tienes resuelto el cambio de sentido.

      En el artículo "Si ya funciona" de Febrero de 2013 , puedes ver esto funcionando.

      Hay otra solución seguramente más sencilla, y es la de utilizar el controlador de motor LMD18200. Este elemento viene a ser como la combinación de los dos transistores y el relé que te acabo de describir, es decir le metemos la señal PWM y la señal digital de sentido de marcha y produce una corriente para alimentar un motor de hasta 2 A que puede ser a 9 V si se alimenta a esa tensión, y que ya sale con la polaridad correspondiente para invertir el sentido de giro.










      Eliminar
  8. Hola gracias por responder tan rapido, el problema no es manejar el PWM porque en el arduino es muy sencillo, lo q no se es como hacer para mandar una señal desde visual basic para q me lo reconozca arduino, no me he podido leer todo el blog pero he visto que hablar de mandar un byte x 0001010 por ejemplo, que la x es la direccion de la locomota y demas.

    muchas gracias

    ResponderEliminar
    Respuestas
    1. Hola otra vez.

      Como te digo. no tengo experiencia con Arduino, pero desde visual Basic puedes mandar un valor al puerto MSCOMM1.OUTPUT. Tu mismo has dicho que eso lo has hecho. Yo supongo que el Arduino recibe eso en un puerto de entrada digital, y que puedes leer desde Arduino, asi que lo que unico que tienes que hacer es inventar la forma de codificar las instrucciones que quieras que se transmitan desde el programa VB al programa de Arduino.

      Yo no he hecho nada de eso, porque al final he mantenido la conexión mediante placas Velleman, y en ese caso, la orden del programa Visual Basic no es una salida hacia el puerto de comunicacione, sino una llamada a una función de una librería propia de las Velleman. Asi que repito: lo que te digo del Arduino es lo que yo creo, pero no tengo experiencia directa.

      Lo que tu dices de un byte x0001010 es un tema distinto. Se trata de dar la orden de que un determinado controlador de los 6 que hay, se conecte a un determinado cantón, de los 8 que hay.

      Es un ejemplo parecido a lo que estoy diciendo que debes hacer. Yo he inventado que los cuatro bits altos designen que cantón, debe cambiar su conexión y los cuatro bits bajos, a que controlador debe conectarse. Pero eso es algo que yo he decidido para poder dar en un único byte, los datos de la instrucción que yo necesito transmitir, pero podía haber escogido otra forma de codificación.








      Eliminar
    2. Muchas gracias por responder, voy a ver como me las apaño para poder hacerlo pero con la codificación de los números me has dado una idea, ya te comentare por si te interesa. Este fin de semana me pondre manos a la obra. muchiiiisiiimmmassss gracias por contestar de verdad.

      Por cierto eres un maquina y gracias por compartir tus conocimientos

      Eliminar
  9. Voy a utilizar un tip120 que maneja 5-60v a 5A para el manejo de las luces y las voy encender por PWM para q parezca un poco mas real, porque como ya sabes el mega tiene 16 salidas y me sobran salidas

    ResponderEliminar
  10. En primer lugar, Ignacio gracias por encontrar tiempo para hacer este blog. Es una currada que todos en la red podamos disponer de este conocimiento y de las ideas que aportas.

    En cuanto a Arduino, ahora mismo estoy en la automatizacion de una maqueta, eso si de escala G pero en esencia lo mismo.

    La llamo automatizacion porque la maqueta es para una exposicion totalmente desatendida. Por eso voy a usar Arduino y no control por PC, ya que por ejemplo, al final y al comienzo de cada día quitan la corriente y nadie va a estar atendiendo el ordenador o la maqueta.

    La maqueta es muy sencilla y analogica: tres trenes, tres desvíos, tres señales y sólo uno de los trenes se mueve en cada momento. Tambien pensé en digitalizar, pero estabamos en las mismas... necesitaba de "alguien" que lo pusiera en orden al comienzo del dia antes de que se empezaran a mover.

    Uso PWM para dar realismo al arranque y frenado, que genera el Arduino y lo paso a un transistor de potencia a la via. El control de desvios y señales lo saco del Arduino a una bateria de ULN2803 y la realimentacion de sensores no tiene mayor problema.

    En resumen, por experiencia, Arduino viene genial para instalaciones pequeñas y automáticas (siempre que uno sepa programar). Pero si lo que queremos es "jugar con los trenes" no hay mejor opción que el control por Ordenador, como el que ofreces o la digitalizacion, que aunque cara al principio ofrece una versatilidad increible. Arduino tambien sirve para digitalizacion ya que hay un monton de fuentes que usan DCC.

    Un saludo desde Zaragoza.

    ResponderEliminar
    Respuestas
    1. Hola David.

      Veo que estamos "en la misma onda" El control de desvios con los ULN2803 es exactamente lo que yo tengo. En mi caso hay 24 ULN2803 que controlan unos 40 desvios unos 40 relés para alimentación de sectores de vía, unos cuantos semáforos y una rotonda.

      Respecto del control de tracción, como habrás visto utilizo ocho generadores de corriente pulsada PWM que mediante un conmutador electrónico van cambiado a cada uno del ocho sectores electricos en que se divide la maqueta, de manera que cada generador "persigue" siempre al mismo tren.

      En los próximos días voy a publicar una descripción detallada de como es y como funciona este sistema de control de tracción.

      Un Saludo.

      Ignacio





      Eliminar

Gracias por expresar tus opiniones.

Los comentarios aparecerán en el blog normalmente en unos pocos segundos