Abro un hilo nuevo porque estaba duplicando posts en varios a la vez. Todavía no me ha llegado el NumPad ni el Arduino UNO, pero he hecho una primera prueba con un Nano y el shield MP3 de Elechouse y funciona estupendamente.
El MP3 es mejor de lo que me pensaba, en funcionalidad y calidad de sonido. Tiene una memoria interna de acceso muy rápido a la que podemos copiar el contenido del memory stick o la SD. De esta manera no hay que tenerlo siempre conectado.
He hecho una primera prueba haciendo que cuando se activa la entrada 2 reproduzca el segundo archivo de la memoria:
Os seguiré informando de los avances, y cuando ya tenga algo mas funcional pondré los códigos y toda la explicación mas detallada.
Haré una primera versión que funcione con el numpad para teclear el número de archivo a reproducir.
Luego haré otra versión cambiando al softserial (no me quedarán bastantes pins para el numpad) y dejare el puerto serie para comunicar por loconet.
04-12-2013, 00:36 (Última modificación: 04-12-2013, 01:03 por Carles.)
jejejeje Dani con esta chulada me estas dando ganas de 'pasar' de un mini-reproductor mp3 comercial, de esos de clip, tirados de precio por ahi para el proyecto de mi estación parlanchina ...
Realmente interesante, buena primera prueba. :-) tnx! Dani
Pero no abandones tu proyecto porfa, que yo lo voy a aprovechar!!!! Quiero hacer una reproducción de uno de los edificios de Shibuya que es todo él un televisor enorme. Tenía pensado manejar un MP4 de esos chinos y pegarle la pantalla al edificio, osea que me voy a copiar exactamente como lo hagas tu, pero en lugar de con un MP3 será con un MP4.
OK! tienes razón, seguramente en más de una ocasión nos veremos obligados a controlar otros dispositivos tratándolos como cajas negras ... seguimos en el tema ;-)
Enseguida que me lleguen los componentes y material retomo a la 'parlanchina' ganas ya hay a pesar del poco tiempo que tengo ultimamente, pero es que es fustrante las demoras en las compras a oriente ... desde el dia 20 pasado y a saber cuando llegará ... y ademas tendré que cruzar dedos para el tema aduana ...
Esta versión trabaja solo con la memoria interna, a la que previamente hemos copiado nuestros archivos MP3 (64Mb maximo). Cada número de entrada (de la 2 a la 13) se corresponde al número de archivo según el orden en que se hayan copiado.
Comunica por el puerto serie por hardware del arduino (pines 0 y 1), y activa la resistencia PULLUP interna, así que para activar una entrada hay que conectarla con un pulsador a masa que ofrece el propio Arduino.
En cuanto me llegue mas material (el Arduino UNO, el mando a distancia y la botonera) pongo mas avances.
PD- Acabo de darme cuenta que no puedo adjuntar el fichero con el programa para cargar en el Arduino, así que ya buscaré un sitio donde subirlo y poderlo compartir.
Bien, vamos a por la segunda parte, esto está hecho!!!!
Una vez controlado el shield de MP3, el problema principal era como conectar el Arduino a Loconet. Aquí se presentaban tres grandes problemas:
* El arduino (exceptuando el MEGA) solo tiene un puerto serie, y necesito dos (uno para comunicar con Loconet, y otro para comunicar con el MP3)
* Necesito un conversor de señal que cambie la señal Loconet a RS232 para poder leer los datos, y encima a nivel TTL (+5/0V en lugar de +12/-12 del RS232 normal de un PC)
* El protocolo Loconet, no es nada fácil de implementar y mucho menos en un Arduino
Pero parece que se han juntado los astros y he encontrado una solución sencilla a todo:
* Arduino puede utilizar dos pines de E/S normales como un puerto serie extra TTL, así que ya tengo dos puertos. A esto lo llaman un "soft serial".
* Pensando un poco, vi que la placa GCA50 de Peter Giling es realmente un conversor de señal conectando la señal loconet al PIC 16F873 (RS232 TTL). Seria mejor diseñar una placa con la forma de un shield, pero con las de Peter ya va bien.
* Y en la pagina de SPCoast (Railroading on the Southern Pacific Coast) tienen implementado el protocolo Loconet para arduino en forma de una librería
Bien, pues lo he juntado todo y voilá! Ya leo todos los comandos que circulan por Loconet, así que lo único que ahora falta es que cuando llegue un comando de activar una salida, se reproduzca el fichero MP3 asignado. Cogí una placa GCA50 y quité el PIC, conectando las patas 2 y 3 (serie TTL del pic 16F873) a las patas 7 y 8 del arduino (configuradas como software serial).
Por supuesto, en todo esto tengo merito casi cero. El trabajo duro de programación es de SPCoast, y la parte currada de Hardware es de Peter Giling.
He cargado el ejemplo que viene con las librerias de Loconet de SPCoast de monitor de Loconet (lee del softserial los comandos Loconet que circulan y los reenvia por el puerto serie al PC para monitorizarlos) y funciona perfectamente, os adjunto las fotos del montaje y del monitor.
Lo siguiente, es esperar a que me llegue de una vez el Arduino UNO y juntarlo todo, haciendo un programa que reciba los comandos por loconet para reproducir el sonido deseado. Cuando tenga también la botonera numérica, podré también hacer la versión para analógico. El que quiera un pulsador por sonido en lugar de una botonera donde poner el número del archivo, ya está hecho.
Pues como soy un impaciente, he juntado las dos partes: el reproductor MP3 y la placa de conversión de Loconet
Ya puedo activar un sonido asignado a un número de salida. He hecho la prueba con la Intellibox, cada salida que pulso (de la 1 a la 4) hace que se reproduzca un sonido distinto, y lo mismo se podrá hacer con eventos del Rocrail cuando un tren en concreto llegue a la via que queremos:
Perdonad que haya cargado los anuncios en japonés...
Ahora he de dejar el montaje y el programa "bonito" y que se pueda configurar el rango de salidas asignadas a sonidos, pero lo bueno es que es factible hacerlo. Y no solo esto, con un potenciometro y una botonera ya tenemos un mando de control para una locomotora, o con una botonera un "cambiador de desvios", con un sensor de infrarrojos un mando a distancia,..... bueno, lo dejo ya que me hierve demasiado la cabeza!!! Mañana mas.
Por fin un avance!!! Me llegó el Arduino UNO con el Kit de cacharrería para hacer inventos. Al código que ya tenía hecho le añadí la opción de controlarlo desde un mando a distancia. Ahora mismo funciona tanto con los comandos del bus Loconet (desde el PC o la central) como seleccionando el número de archivo a reproducir con el mando a distancia. También se puede seleccionar si queremos reproducir un fichero MP3 de la memoria interna, el USB o la tarjeta de memoria.
Falta acabar de pulir el programa y añadir funcionalidad a los botones para subir y bajar el volumen, y que guarde en la EPROM la configuración actual del sonido y el origen de datos, y poder configurar alguna cosa mas. Pero ya tenemos un "anunciador de estación" que funciona tanto en analógico como digital.
Dani, la verdas es que eres un crack. Te mando un saludo desde Ourense. Llevo una temporada fuera de sitio y ahora retomo el "vicio". Voy a hacer un curso de arduino. A ver que sale.
En primer lugar muchas gracias a todos por los ánimos!!!! Si no fuera por este foro y sus participantes seguramente ni habría intentado hacer este proyecto.
Finalmente, he puesto un poco en orden el código fuente. No mucho, pero lo suficiente para que no me dé vergüenza publicarlo. En mi blog está todo explicado (http://www.*****.com/2014/01/station-ann...oject.html), pero os hago un pequeño resumen aquí también:
En primer lugar, la lista de material necesario:
* Arduino UNO R3: 10€ en ebay
* Elechouse MP3 shield con amplificador: 16€
* Control remoto y receptor IR: 4.5€
* Altavoz de un PC viejo (o nuevo, si no se usa....): 0€
* Interface Loconet (sólo para digital): Los componentes valdran algo menos de 5€ si os podéis hacer vosotros mismos la placa o montarlo en una proto-shield. Pero yo he usado una placa GCA50 de Peter Giling que vale 5€ hasta que sea capaz de diseñarme una placa.
Para cargar el software en la placa arduino sólo hay que seguir las instrucciones de la página del Arduino, pero tened en cuenta que si el shield MP3 está pinchado en el arduino, primero tendréis que presionar el botón de "Sleep" del shield o no se cargará el programa correctamente.
Para conectar el receptor IR, éste tiene tres patas: Una va a los +5V del Arduino, otra al GND, y la tercera a la entrada/salida número 11. Aquí hay un buen tutorial sobre receptores IR: http://arduino-info.wikispaces.com/IR-RemoteControl
Y las funciones que tiene el mando ahora mismo son:
* Tecla MODE: selecciona el origen de los MP3 (memoria interna, memory stick o tarjeta SD)
* Controles de Volume
* Telca Power: guarda el volumen y origen de MP3 actuales para cada vez que se arranque.
* Con las teclas numéricas introducimos el número del archivo (este equivale al orden en que se hayan copiado), y dándole al play lo reproduce.
* También funcionan los botones SIGUIENTE y ANTERIOR
Y en modo digital, el programa tiene dos defines para decirle a partir de qué salida se asigna a los sonidos, y qué cantidad de sonidos tenemos. A partir de aquí, siempre que se activa ese número de salida (como si fuera un desvio) desde la central, PC o cualquier mando se reproduce el sonido asignado.
He intentado explicarlo mas o menos claro, pero para cualquier duda, preguntad lo que necesitéis.
Ahora estoy trabajando en la Versión 2. En esta versión quiero poder identificar el tren (en digital) sin necesidad de poner mas sensores, ni chips, ni imanes, ni nada... ya os contaré en un hilo nuevo si me funciona el invento.
Actualizaciones del proyecto: ya tengo casi lista de versión 2. Esta versión mantiene lo mismo que la anterior, es decir, poder reproducir sonidos mediante el mando a distancia (para analógico).
Y lo nuevo es que conectando el Arduino al PC por el cable USB aparece un menú de configuración por la consola. Aquí se puede configurar en primer lugar los números de los sensores de los tramos de las vias de la estación que identifican que un tren está situado en un anden. Se pueden configurar hasta diez sensores que corresponden a cada tramo final de parada de hasta 10 vias de la estación.
Luego también podemos configurar hasta 50 locomotoras. Para cada número de locomotora podemos asignar un sonido a cada tecla de función (bocinas, sonido de frenada,...), y un sonido asignado al evento de cuando el tren para en la estación (anuncio).
Con esto, en cuanto detengamos el tren en una via de la estación suena su anuncio (si no para, no). Y activando cualquiera de las teclas de función que hayamos asignado también suena su sonido correspondiente.
Y el "truquillo" para identificar el tren, es el siguiente: en cuanto se activa un detector de uno de los tramos de parada en la estación que hemos configurado, el Arduino mira cual es la primera locomotora que se detiene (su velocidad pasa a ser cero) en los dos segundo siguientes a la activación. Así sabemos que esa es la locomotora que ha parado para reproducir su anuncio.
Ahora estoy acabando de probar, pero de momento funciona correctamente. Mas adelante pongo algún video y mas información.
He publicado en el blog la información de la versión definitiva (o casi, a falta de tal vez de alguna pequeña optimización), la cual os resumo aquí y cierro con este post final el mini-proyecto.
He mantenido las funcionalidades que ya tenía y añadido de nuevas:
* Activar sonidos con un mando a distancia (válido para analógico)
* Asignar sonidos a la activación de una salida, como si cada sonido fuera un desvío. De esta manera se pueden activar desde la botonera, desde el panel o con comandos sencillos del software.
* NUEVA: Asignar un sonido a cualquier tecla de función de cada locomotora (F1 - F4). La tecla de función, además de realizar la acción que programemos en el decoder de la locomora (luces, fumígeno, velocidad de maniobra....) reproducirá el sonido configurado
* NUEVA: Se puede asignar un sonido de anuncio (o de efecto de sonido) a cada locomotora de manera que cuando pare delante de la estación o la zona que queramos se reproduzca el sonido.
Ahora tiene un menu de configuración muy sencillo al que se accede conectando el Arduino por el cable USB al PC, de manera que no hay que saber nada de programación ni de compilar programas para configurar las locomotoras, asignar los sonidos y establecer los tramos (hasta 10) en los que queremos que se reproduzca un anuncio cuando un tren se detenga.
La manera en que funciona es como había comentado, por el bus loconet circulan todos los comandos, instrucciones y señalizaciones de la maqueta. Circula un mensaje cada vez que activamos una salida, cambiamos la velocidad de una locomotora o un retro detecta una ocupación. Así pues, el Arduino actua simplemente como un "sniffer" de la red escuchando todo lo que se dicen los modulos, retromódulos, central, mandos, software del pc y cacharrería varia conectada en la red.
Cuando ve que se ha detectado presencia en uno de los tramos configurados y una locomotora inmediatamente establece su velocidad a cero, la reconoce y puede reproducir el anuncio preciso para ese tren.
De la misma manera cuando vé que se lanza un comando para activar una salida de las que tiene configuradas o se activa la función de una locomora, reproduce los sonidos configurados.
Os adjunto unas fotos, y si necesitás cualquier cosa estoy a un "click"!!
Felicidades, estaba un poco al tanto de tus progresos y esta mañana le estoy dedicando un rato largo, porque tu proyecto lo merece ya por si y me esta dando un monton de info e ideas.
Fantástico ...
Ah! el código fuente, haria envidiar a más de un profesional, super documentado, si modificarlo a adaptarlo se convierte en un juego casí!
un deu, 10 com una casa!
PD: a ver si nos podemos ver en la próxima Massades, me encantaría conoceros! no tendriamos rato largo para charlar y comentar ... :-)