Foro de modelismo escala N

Versión completa: CONTROL DESVIOS CON ARDUINO
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Hola a todos, pues planteo este tema por si alguien lo ha estudiado. He estado haciendo pruebas con un Arduino UNO y un servo con indicador led de posición según sea el ángulo girado. La prueba es satisfactoria pero ahora me surge la duda de cómo hacer actuar los 20 desvíos que tengo ya que veo que este arduino se me queda corto. He visto que existe el arduino mega, capaz de gobernar mayor número de servos pero no tendría salida para tantos led. Sabría alguien decirme si hay alguna shield o placa específica que me permita "ampliar" conexiones para poder establecer tantos switches (palancas o pulsadores) y leds como desvíos tengo?

La verdad es que el arduino es múy versátil a la vez que económico y estoy en la duda de montar este sistema o el circuito de descarga con bobinas que planteó Carles en el tema de "mi control de desvíos". La cabeza me da vueltas y no se que hacer. Con arduino ajusto los servos cómo quiero y en la posición deseada adaptándolo a los desvíos peco que tengo.

Gracias de antemano
Bona matinada (madrugada) Pablo,

De entrada interesantisimo tema. Creo que Jose (quisn) planteo algo similar pero en versión raspberry.

El problemilla de necesidad de mas E/S. No conozco si existen shields de expansión, yo diria que si dado que es una necesidad que más pronto o tarde aparece. Si no las hay, se pueden construir expansiones con integrados de registro de desplazamiento como el conocido 74HC595, que se usan normalmente para pasar señales de serie a paralelo. En el mismo sitio de arduino lo tenemos mostrado:

http://www.arduino.cc/es/Tutorial/ShiftOut

también se me ocurre ... usar un decodificador BCD, de manera que usemos 5 lineas del arduino y nos 'inventemos' o programemos (codifiquemos) esas 5 lineas como un número de 5 bits lo que nos daria una combinación de hasta 32 estados que alimentaria un integrado decodificar BCD. Nos permitiría hasta 32 salidas. El problemilla ... es que me parece no hay integrados con esa posibilidad de combinatoria (creo que solo los hay hasta 4 bits) y se debería hacer en cascada con dos integrados.

Lo más práctico sería hallar una placa de expansión. Aunque si tenemos ganas ... el tutorial del mismo arduino nos las da ;-)

Suerte Pablo, estaré al tanto de tu hilo :-)
Gracias por tu interesante respuesta. Existen placas con salidas para 16 o 32 servos tambien. Tendria que mirar que opciones hay. La programacion la tengo mas o menos clara, lo que no controlo todavia son las expansiones al poder encadenar varias placas sobre el mismo arduino.

Enviado desde mi GT-I9505 mediante Tapatalk

Usuario No Registrado

Hola,

Tal vez te sale al mismo precio un MEGA que una placa de expansión para un UNO. Pero si eliges bien el shield controlador de motores, con un UNO tendrás mas que de sobras. Por ejemplo, la versión 2 del shield controlador de motores de adafruit (aqui) comunica por el I2C, y como tiene 5 pines para configurar su dirección, puedes "apilar" hasta 32 placas controladoras de motores sobre un Arduino UNO. Lo que significa que puedes controlar 64 motores paso a paso o servomotores, o 128 motores de DC.



Salut,
Dani
Yo controlo con arduino los desvios y señales, los desvios lo hago con un pulsador mediante enclavamientos un mismo pulsador me hace la ruta con retardos de 2 milisegundo por el consumo.

Para alimentar por servos como bien dice nuestro compañero carles...no hay dudas si lo que tenemos es un Peco o roco gleishmann solo basta con una resitencia de 2,2k y un Tip 120 o 122

Segun foto un tip 120 o 122 para cada hilo del desvio recto o desviado (2 tip por cada desvios) en ebay china muy baratos
Bona tarda compañeros ;-)

Que maravilla esa placa Dani! tnx! y a un precio fenomenal, es bonito hacerse las cosas y personalmente me encanta, pero habiendo alternativas asi ...
Hola Pedroray. Me podrías mosrltrar aunque sea a mano el esquema de conexion? Yo no necesito alimentar los desvios. Solo necesito servos, pulsador y led de estado. A lo sumo pondre señales luminosas también.

Un saludo y graciasss [SMILING FACE WITH SMILING EYES]

Enviado desde mi GT-I9505 mediante Tapatalk
Ahora me pillas desde la tablet y me es dificil hacer esquema y eso pero vamos hacer lo que podamos sino entre el amigo carles y yo te ayudamos.

Yo nunca use servos ocn arduino pero conociendo el arduino te adjuto este esquema que echo mas omenso para que tengas una idea.

Resumidas cuentas:
Ves conectado el servo a la salida PWM....solo la pata amarilla del servo las demas una a GND y otra a +5v.
Luego 2 leds con sus resistencias de 470 ohm es buenas para 5v ni luce mucho ni poco. estos leds son los indicadores de desvios.
y los 2 pulsadores que simplemente meten una resistencia a la entrada.

Todo esto hay que hacer luego el C++ programacion de los comandos.

A simple practica:
Cuando el pulsador recto se activa, el arduino recibe una señal alta por esa pata, y el arduino debe de estar programado para:
-cuando la señal de esa pata sea alta el arduino debera de mover el servo lo que se le ha programado y a la vez encender el led del indicador del desvio.

Cuando el pulsador desviado se activa, el arduino recibe una señal alta por esa pata, y el arduino debe de estar programado para:
-cuando la señal de esa pata sea alta el arduino debera de mover el servo lo que se le ha programado y a la vez debe de encender el led indicador desvio desviado y apagar el desvio recto.

No se sime entiendes debe de estar concadenado.

Una vez echo esto, pues ya vas metiendo mas leds como lso semaforos y mas reglas... cuando pase x enciende tales leds (patillas) y apaga tales otras(patillas)

Todo esto como te comento en programacion arduino C++, arduino es al principio muy confuiso pero cuando te haces es una virgueria, no tiene limites, ve poko a poko añadiendo reglas y guardando copias de seguridad,

Animo y a dar leña!!!!

Espero que te hayas enterado por lo enos de algo Sonrisa sino preugnta y si me equivocado en algo que algien me corrija, desde la tablet tb se me ha podido ir algo.
Pedro eres un crack. Yo estoy empezando en esto del arduino y bueno es q entiendo lo que me cuentas. Entiendo q cada led va a otra salida que no es pwm por ejemplo. Por cada desvio necesito dos entradas y cuatro salidas como poco no (servos y led). Si necesito mas salidas a parte seria utilizar mas pines. Por cierto. Si utilizo interruptores de palanca podria usar una unica entrada con estado high o low pero no se si se si los hay para arduino. Esto lo he ensayado con un conmutador de dos posiciones de los que hay para arduino.

Que juego da esto......

Un saludote

Enviado desde mi GT-I9505 mediante Tapatalk

Perdon pero desde el movil me como algunas letras jaja.

Enviado desde mi GT-I9505 mediante Tapatalk
Perdona pero antes no habia visto el esquema. Gracias por tu aporte

Enviado desde mi GT-I9505 mediante Tapatalk

Usuario No Registrado

Hola,

Si queréis ahorraros la resistencia de los pulsadores o interruptores de entrada, el propio chip lleva unas resistencias de 20K integradas que pueden activarse por programa. Cuando se define un pin como entrada, se puede activar su resistencia pull-up de la siguiente manera:

pinMode(pin, INPUT); // pone el pin como entrada
digitalWrite(pin, HIGH); // activa la resistencia pullup

De esta manera, el pusador se puede conectar directamente sin resistencias. La diferencia es que entonces el pulsador se pone entre el GND y el PIN, y no entre los 5V y el pin.

Salut,
Dani
Bien!!!! no lo sabia jejejej cada dia algo nuevo!!!!!
Una pregunta, con este shield, ¿cuantos servos se pueden controlar?, ¿32?

Uff si es así esta da para mucho juego.....
Si quieres mover los desvíos de una forma realista, lo mejor son servos controlados por un micro. Yo lo hice así con PIC y es una gozada. Arduino es más potente y más fácil de ampliar por lo que la mayor parte del trabajo ya está hecho. Creo que os va a quedar de lujo.

De todos modos hay que tener en cuenta algo más. Si los desvíos son de Peco Electrofrog hay que hacer la conmutación eléctrica del corazón del desvío sincronizada con el movimiento de este. Si solo se cambia de posición el desvío, cuando pase una locomotora por el mismo va a provocar un cortocircuito entre los raíles. Para evitarlo, lo que hice fue activar una salida digital que mueve a un relé que hace la conmutación de la polaridad del corazón del desvío. No sé si me explico.

Otra opción es utilizar el accesorio de Peco que va solidario con el desvío pero es difícil de ajustar y a veces falla.

En mi caso, lo que hice fue que, cuando la posición de las agujas pasa por su punto central, se activa/desactiva el relé que hace la conmutación.

Todo esto implica que, por cada desvío, hace falta una salida de pulsos para controlar al servo y otra digital para activar/desactivar el relé de cambio de polaridad.

Este enlace ya le he puesto alguna que otra vez pero, a los que no lo hayáis visto, os dará una idea de lo bien que puede quedar el movimiento lento.

http://www.youtube.com/watch?v=9sHbL_FP-8Q

Espero vídeos de como os va quedando el invento. Tímido

ADVERTENCIA: Esto de programar micros engancha mucho. Manténgase alejado de aficionados a trenes y otros personas igual de obsesivas Gran sonrisaGran sonrisa
Si, este video ya lo he visto alguna vez. Gracias por poner el enlace.
LO que me intriga, es que, con dicho shield, se puedan controlar tantos desvíos. LO digo por el ahorro de dinero que te puede llegar uno.
En mi caso, por no saber de electrónica, lo que estoy utilizando es Esu Switch Pilot. Ya llevo 4 de ellos unos 28 eur.......... cada uno.........
Por eso me parece genial. La placa de arduino la tengo lo que pasa es que he empezado mis primeros pinitos con luces led y me esta enganchando. Lo del serio también lo había visto pero lo que no sabía es que desde Arduino podías controlar la velocidad de movimiento del serio, ¿es así?.
El servo se posiciona al recibir impulsos de un ancho determinado. Cada ancho de impulso corresponde a una posición fija. Esto quiere decir que debes generar impulsos desde el micro con el ancho de pulso correspondiente a la posición que tu quieras.

Para conseguir moverlo a la velocidad que quieres tienes que controlar desde el micro la velocidad a la que va cambiando el ancho de impulso. Si solo le das las dos posiciones del desvío hará el cambio a la máxima velocidad del servo pero si le vas dando las posiciones intermedias una a una a la velocidad que tu quieras, el servo las va siguiendo a esa velocidad.
Ahhh entiendo.

Podrias poner un pequeño ejemplo del programa que tienes hecho para poder aprender esas líneas de codigo???
Muchas gracias
Vale, lo busco y te lo envío pero no se si te valdrá de mucho. Yo lo hice en PIC en lenguaje ensamblador. No se parece en nada al C del Arduino.

El micro tiene que generar un tren de pulsos a una frecuencia entre 50 y 100 Hz, cuanto más fija mejor. El ancho de pulso debe estar entre 1 y 2 mSeg que son las posiciones extremas del servo.

El truco está en crear un contador que cuente un tiempo que será el retardo que apliques antes de cambiar el ancho de impulso.

Cuanto mayor sea la cuenta de este contador más lento se moverá el servo ya que el retardo entre un ancho de pulso y el siguiente será mayor.

A ver si con un ejemplo consigo explicarme mejor:

- Un extremo del desvío corresponde a 1,2 mSeg y el otro a 1,4 mSeg,
- Tenemos 10 posiciones intermedias (1,20 - 1,22 - 1,24 - 1,26 - - 1,28 - 1,30 - 1,32 - 1,34 - 1,36 - 1,38 y 1,40).
- La posición inicial sea la de 1,2 y la final la de 1,4 mSeg.

Los pasos son:

- El micro genera el ancho de pulso de 1,2 mSeg.
- Arranca un contador que cuenta hasta n.
- Al finalizar el contador se resetea y se pasa al ancho de pulso siguiente (1,22 mSeg).
- Repite este último paso hasta alcanzar 1,40 mSeg.

De esta forma hacemos el cambio pero retardándolo. Cuanto mayor será el valor de n más lento se moverá el servo.

No sé si me habré explicado bien.
Entonces no. Muchas graciaa
Vale, nos hemos pisado mientras corregía el mensaje. Rolleyes
Páginas: 1 2