En dos artículos anteriores os fui contando los pasos que iba dando en el diseño del indicador de horizonte artificial.
Finalmente he logrado si no finalizarlo, al menos crear una version lo suficientemente buena poco para que otros la usen.
En el siguiente video podeis ver un par de instrumentos de los que hablare proximamente, y al final el funcionamiento del horizonte artificial, mostrando el interior del mismo:
Como tengo esto muy parado ultimamante, voy a poner un micro-video de lo que estoy haciendo ultimamente:
Podriamos considerarlo una continuacion del post de enero del 2012 donde mostraba un transpondedor utilizando un arduino y un LCD, esto es basicamente lo mismo.
Me rondaba la cabeza que para poder realizar el piloto automatico necesitaba un display mas ancho de 20x2 que es el standar, y ademas queria que fuese Rojo, para que se pareciese lo mas posible al real, tras encontrar uno de 24x2 en aliexpress, me puse a ello.
Tambien queria ir probando que tal quedan los paneles con la impresora 3D y si son una alternativa valida para la opcion de sandwich de metracrilato y hoja impresa.
Tengo pendiente un par de cosas:
Imprimir en 3D unas guias para pintar el serigrafiado del marco.
y por ultimo, intentare diseñar una PCB a medida para los pulsadores y probare algun servico de PCB express en asia, para ver que tal sale la cosa, si la cosa sale bien igual hago una pequeña tirada de 7 u 8 de estos.
Conclusiones:
- Con un display de 20x2 voy sobrado.
- No tengo el rojo sobre negro que queria, es mas bien un rojo oscuro sobre rojo claro.
- El angulo de vision, al menos de este display es nefasto, basicamente solo se lee desde un pequeño angulo y es justo el contrario al que necesito.
- El resultado de la impresion 3D es muy bueno, mi impresora (una prusa i3) llega justa para imprimir eso, algo un poco mas ancho no entraria ya, el proceso es lento y requiere varias impresiones de prueba-error, en especial por los botones y el hueco, para que deslicen bien, asi como una buena mano de lija.
Curioseando por internet he encontrado en ebay a la venta un panel FS-200 ¡CON SU SOFTWARE!,
Espero que el comprador se acuerde de mi.
Rápidamente me ha llamado la atención la foto, tenia "algo diferente".
Si lo comparamos con las fotos que puse aqui antes:
Vemos que tiene pequeños cambios estéticos, en general me gusta mas, los "cuadrados negros" tienen mas sentido, y ha mejorado la legibilidad de algun cartel, y una importante funcionalidad añadida:
Pulsando a la vez dos de las tres teclas de debajo de los encoders de frecuencia, podemos usarlo para cambiar la radio y el transpondedor.
He aprovechado ademas para hacer un poco de limpieza del script, limitando a un solo bloque de números las variables, para hacerlo "mas compatible" con otros añadidos, y simplificado un poco algunas programaciones, para que sea mas facil leerlo y modificarlo.
Ademas de cambiar la frecuencia de COM1 pulsando NAV1 y NAV2 a la vez, y la del transponder pulsando NAV2 y ADF a la vez, he asignado el boton de ADF ACTV-STBY al COM1, ya que en el fsx no hay frecuencia del adf en standby.
Lo de plan C es por que el plan B no funciono, mi idea era sustituir únicamente el microcontrolador sin modificar físicamente el equipo, finalmente tuve que realizar 3 soldaduras (bueno, alguna mas, pero es que algunos componentes ya son demasiado viejos).
Al final del articulo pongo las conexiones entre el arduino y los componentes:
La alternativa a sido utilizar un arduino mega, y mediante un cable plano y este conector de la marca Kobicomm, referencia 151-2P40-E, sustituir al microcontrolador (cuando yo lo pedi aun no estaba descatalogado y los vendian de uno en uno, una alternativa seria el Harting 09 17 040 9622 y siempre se pueden soldar los 30 cables por la parte de atras de la pcb.
Detalle del montaje y conexión al arduino mega.
Detalle de como plegar los cables para poder montar la placa de nuevo.
Como mas adelante se vera, he eliminado completamente el cable y la fuente de alimentacion, ahora solo necesita un usb. si teníais el joke y pedales, necesitareis otra manera de conectarlos al pc, los convertidores de Joy analógico de 15pines a usb son bastante asequibles de todas formas.
Separadores de nylon, con pegamento de contacto, seguro y fácilmente quitable sin dejar rastro.
Vista de todo montado, se observa los cables de las analogicas, y que tuve que limar el conector usb para que pasase por el agujero de la caja.
Una vez cableado todo, me dispuse a programar el arduino, primero los interruptores, que no dieron ningún problema.
Luego los encoders, no tengo claro como funcionan (hay 3 registros de 8 bits para los encoders, el que genera la interrupción, y las patillas A y B de cada encoder, si bien todos los registros se leen correctamente desde arduino por pooling, cuando se genera la interrupción, el puerto B siempre se lee como 0xFF) en cualquier caso, los encoders funcionan, al menos en el 97% de las veces, (de vez en cuando leo algun encoder al revés).
Por simplificar utilice la patilla de interrupción 2, no queda tan compacto, pero me simplifica la programación.
Lo que no conseguí, fue comunicar con el chip ADC, realmente no tengo mucha experiencia en comunicaciones SPI, pero el analizador logico me decia que todo era correcto, no descarto que mi equipo tenga el chip mal.
Asi que toco el plan C, cablee las entradas del ADC directamente a las patillas analógicas del arduino, no es que me haga mucha gracia gastar patillas, y ademas tengo un ruido muy muy alto en la conversión, de los 10 bits de resolución, he tenido que descartar los 4 inferiores, y aplicar un filtro, y aun asi baila un poco.
Probablemente debería cambiar los condensadores y los potenciometros, apantallar los cables. pero bueno, para la demo era suficiente la resolución que obtuve.
El programa que corre en el arduino es bastante sencillo, cuando encuentra un cambio en algun mando, lo publica por el puerto serie, utilizando el protocolo IOCP.
Por ahora es unidireccional, pero en el futuro me gustaría al menos añadir varios paneles LCD, a través del bus I2C, para poder mostrar la información de radios, AP, etc...
Mi antiguo programa en python hace de enlace entre el puerto serie y el programa SIOC
Y la programación del SIOC hace el resto, poco que destacar, quizá la parte de programación de los encoders, que SIOC solo esta pensado para utilizar con encoders conectados a las placas opencockpits,
Hay una parte que no me ha gustado como quedo, los botones de cambiar la altura del AP, y el cursor de HDG del AP no he encontrado la manera de pasarselos al FSX, por lo que he tenido que recurrir a un truco, en lo unico que se nota es que ese encoder va un poco mas lento que los demás.
Hay varios botones que han quedado sin utilizar, pero es que no se muy bien para que usarlos, en términos generales el concepto es el mismo que para el resto de los botones, estoy abierto a ideas sobre como usarlos.
Otro día publicare el código SIOC para el X-Plane.
Y ahora las conexiones que utilice entre el arduino y la placa:
Arduino -> Zocalo de 40 pines del MC68HC705C8A 2 -> 2 30 -> 4 31 -> 5 32 -> 6 33 -> 7 34 -> 8 35 -> 9 36 -> 10 37 -> 11 22 -> 12 23 -> 13 24 -> 14 25 -> 15 26 -> 16 27 -> 17 28 -> 18 29 -> 19 GND -> 20 48 -> 23 49 -> 24 47 -> 25 39 -> 26 40 -> 27 41 -> 28 50 -> 31 51 -> 32 52 -> 33 VCC -> 40 Arduino -> Patillas del chip CDP68HC68A2E A8 -> 11 A9 -> 12 A10 -> 13 Una explicacion rapida:
Conectamos masa y positivo a sus respectivas patillas, arduino inyecta el voltaje desde aqui, y no hace falta fuente de alimentacion.
Unimos la patilla 2 del chip a la 2 de arduino, es la señal de interrupcion de los encoders.
El puerto B del chip lo conecto al puerto A del arduino (estado de la interrupcion de los encoders).
El puerto A del chip lo conecto al puerto C del arduino (datos desde el multiplexor de los botones)
Los cuatro bits inferiores del puerto C del chip los conecto a PG0-PG3 y PL2 para gestion del multiplexor.
PC4 se controla desde PL0 para resetear el registro de interrupciones.
PL1 del arduino va conectada al SS del chip ADC.
MISO, MOSI, y SCK se conectan al chip ADC para gestionar la comunicacion SPI
Y como no funciono conecte las entradas A8,A9 y A10 a las patillas 11,12 y 13, salida de los op-amp y entradas del ADC a las entradas analogicas de arduino.
Despues de Casi 5 años rodando por encima de mi mesa, este verano me he decidido a terminar, al menos el prototipo de horizonte artificial para el panel del avion.
Este horizonte utiliza dos servos de modelismo de 9gr. y la idea es conectarlo a una tarjeta de servos de opencockpits.
Esta muy limitado, aproximadamente a 45º en cada dirección, pero tampoco vamos a hacer acrobacias con una cessna...
El aspecto es un poco cutre, pero al fin y al cabo son 2 servos (6€) un monton de palitos,1 hoja impresa y un monton de silicona caliente, no hay que olvidar que es un prototipo, espero para navidades tener una version buena, con el tamaño adecuado, que parezca de verdad, etc, etc...
Esta entrada aun esta incompleta, a medida que vaya sacando el esquema electrico, la ire actualizando, el esquema lo estoy haciendo con eagle, si alguien quiere los archivos antes de que los acabe, que me los pida.
Este esquema electrico me ayudara en el caso de que no consiga descifrar el protocolo de comunicaciones, y opte por la opcion de sustituir le motorola 68HC705 por otro, o por un arduino (un mega probablemente).
El esquema esta completo, aunque no tiene valores las resistencias, y algun componente no tiene el tamaño correcto.
Como referencia, pongo también una imagen de la disposición de los componentes, no es correcta del todo, pero ayuda a identificar algunos componentes que en la placa original no tienen serigrafia visible:
Lo primero que hacemos es mirar el datasheet del microcontrolador, lo que nos dará una idea de que velocidades puede utilizar con el cristal de 4Mhz. de la tabla se deduce que las velocidades que permite el microcontrolador que se ajustan al estandar RS-232, van de 75 a 9600 bps. ya que el resto difieren demasiado.
Con el programa realterm compruebo que a la velocidad de 9600 8-N-1, obtengo datos por el puerto serie, mientras que en le resto de velocidades, no obtengo nada o el programa me informa de errores (incluso si pruebo velocidades fuera del rango 75-9600).
Lo que obtengo es el byte 0x85 unas 350 veces por segundo. independientemente de la posicion que tengan los pulsadores y encoders.
He probado a enviarle 1 byte a ver si obtenia algun tipo de respuesta y nada.
Tengo pendiente crearme un programa en freebasic, que envie varios bytes seguidos, y me indique si con alguno obtengo una respuesta.
Como no tengo el programa original, no se si el chip require unos datos expeciales de inicializacion (el microcontrolador permite un bootloader y ejecutar desde ram, aunque me extraña que usasen esta opcion)
El panel permite ser utilizado sin pedales, pero se supone que require el Joke, asi que lo que estoy viendo podria ser un codigo de error indicando una mala conexion, tengo que hacerme con un joystick analogico de PC para comprobar este punto.
Pero si no es eso, estoy en un callejon sin salida, y habra que probar el plan B, sacar todo el circuito y conectarlo a un arduino mega que tengo en camino.
Ire actualizando esta entrada a medida que consiga mas datos.