sábado, 22 de septiembre de 2012

El Arduino One en LU7HZ

Hace algún tiempo había adquirido una placa Arduino One para investigar las posibilidades de la plataforma. Para mi estas placas ocupan un terreno interesante que no había explorado demasiado en sus aplicaciones de radio aunque si en otros ámbitos donde me han sorprendido gratamente por su simpleza y versatilidad.
Un poco el enfoque que había tomado hasta ahora había sido que las funciones de control mas simples las encaraba con un microcontrolador PIC simple (preferentemente un 12F675) y las mas complicadas con un computador embebido como el NS-K330 (y quizás, algún dia cercano la  revolucionaria Raspberry Pi  la que hasta ahora solo he trabajado en una virtualización en PC).
Pero hay un número importante de proyectos para el cual un microcontrolador "no llega" y un procesador embebido "le queda grande". Y para experimentar en ese espacio fue que adquirí mi Arduino, eligiendo entre los muchos modelos posibles el denominado "Uno" que es uno de los mas económicos.
Al mismo tiempo Arduino es mas que la placa en si, es mas adecuado verlo como un "ecosistema" tecnológico alrededor de la placa, el que viene completo con herramientas de desarrollo y una muy importante base de librerias y aplicaciones hechas por otros entusiastas, mayormente bajo un marco de software libre.
La placa en si viene con una abundante capacidad de interconexión tanto en la forma de E/S (entrada/salida) digital, comunicación serie (niveles TTL) y entradas analógicas. También tiene un puerto USB para conexión con la PC (desde donde toma la alimentación durante el desarrollo) y alimentación independiente de +5V.
La programación se hace en un lenguaje muy similar a C que tiene una serie de primitivas para manipular los distintos recursos de E/S. Curiosamente funciona en un paradigma de procesamiento que hacía rato que no había visto; una sección del código denominada "setup()" se encarga de todas las incializaciones necesarias al comenzar la ejecución al encender el dispositivo y otro segmento de código denominado "loop()" ejecuta en forma iterativa cualquiera sea el código que se le defina. Este esquema de "armonizarse" con un ciclo pre-impuesto por el programa era el corazón de un engendro de lenguaje de programación llamado "RPG II" que tuve la dudosa fortuna de haber tenido que emplear hace ya muchos años atrás.
En realidad todos los microcontroladores operan en un loop infinito cuya ejecución vá cambiando en función de eventos o interrupciones, asi que no es un modelo necesariamente descabellado de aplicarse en este caso.
Con el agregado de una placa especial llamada "escudo Ethernet" (Ethernet shield), que aún no tengo, se le pueden agregar librerias que implementan un sistema TCP/IP básico sobre Ethernet; aunque hay formas de agregarle librerías muy rudimentarias TCP/IP solo sobre el puerto serie (lo que vendría a ser un uso bastante avanzado).
Aparte de "jugar" un poco con distintos programas simples como para familiarizarme con las distintas librerias he venido considerando en que proyecto podría darle un buen uso, y por supuesto que salen muchas alternativas.
La que me he decidido es hacer un controlador de rotor de antena "inteligente". Hoy tengo un rotor totalmente manual (ver entrada aqui) pero hace tiempo que vengo considerando implementar algo mas sofisticado. Esto conduce a que tenga varios "modos" de operación.
Debería tener un modo "manual" como hoy, es decir una palanca para girar en un sentido u otro y algún indicador de la dirección que tiene la antena, creo que este modo es siempre necesario para ajustes finos.
Me gustaría agregarle un modo "semi-automático" (o, si se prefiere, semi-manual) donde se le indique, quizás con un dial, que apunte en una dirección y el rotor vaya "solo" a esa dirección. Eso sin duda es util cuando en concurso uno pasa de 10M a 20M y tiene que cambiar casi 180 grados la dirección de la antena o cuando se quiere explorar si viene por paso largo o corto, o simplemente cuando se quiere apuntar a una zona muy diferente del globo. Hoy esto significa varios minutos con la palanca presionada y vigilando que llegue a la dirección correcta lo que quita manos y ojos que en el medio de un concurso no sobran.
Hasta aqui es un proyecto dentro del alcance de un PIC 12F675, y uno relativamente simple.
Pero también para completar la integración de la estación de concursos quisiera agregarle un modo "automático" donde el acimut de la antena se establezca desde un software de control, podría ser el N1MM o incluso alguno de los programas de seguimiento de satélites.
No es un uso terriblemente novedoso puesto que hay muchos controladores comerciales que hacen esta función, y algún que otro proyecto casero también.
Este grado de automatización abre además las puertas a un enorme campo de experimentación con distintos paquetes de software (DXAtlas por ejemplo) para apuntar la antena basado en un mapa. Hay distintos protocolos para esta comunicación, aunque el denominado DCU-1 es probablemente el mas difundido. Este protocolo requiere una conexión serie entre la PC donde corre el programa "controlante" y el "rotor". Implementar una conexión serie ya levanta en un "escalón" las prestaciones necesarias del procesador, y se empieza a complicar usar un PIC 12F675 que no tiene puerto serie. Siempre se puede hacer un puerto serie totalmente por software si fuera necesario, pero probablemente se "comería" el grueso de los recursos del procesador (que son bien limitados).
Probablemente la mayoría de los procesadores de la familia PIC 16Fxxx podrían servir pues tienen soporte para puerto serie incorporado (además de todos los otros recursos del PIC 12F675).
Es necesario admitir que una placa Arduino es mucho para este proyecto, pero no lo es con el agregado de un modo adicional "remoto" donde quiero poder acceder el controlador de rotor mediante TCP/IP, posiblemente con una interfaz Telnet o incluso Web, para su control. Esto habilitaría una enorme cantidad de experimentos sin la atadura del relativamente obsoleto protocolo serie, además de habilitar controlar la antena en forma remota, muy en linea con otras caracteristicas de mi estación que permiten ser usadas también en forma remota.
Por ahora es un proyecto en la libreta de apuntes, pero ciertamente cercano a comenzar a implementarlo porque las ideas y los materiales están empezando a alinearse para hacerlo realidad.
A menudo se reflexiona sobre la utilidad de tener semejante capacidad de conectividad en todos los dispositivos, se ironiza en los foros sobre tener un Linux embebido corriendo en una tostadora, pero si bien hay limites donde se roza el ridiculo tambien es cierto que mientras se pueda hacer y sea divertido hacerlo uno debe preguntarse...¿porque no?.

1 comentario:

  1. Hola pedro!!! yo compre dos arduino para poder experimentar en accesorios de la estación de radio (uno de ellos es una interfaz SO2R (llamado SO2Rduino).

    Con respecto a mis placas las consegui muchisimo mas baratas (al igual que los diferentes opcionales como ethernet shield o el Bluetooth) en dealExtreme.

    Solo un comentario por si te interesa, ya que aca en Argentina me cobraban esos modulos mucho mas caros y con free-shiping (si no te importa esperar 1 mes aproximadamente) se hace mucho mas económico.

    73s de LU9CBL, Mati

    ResponderEliminar

Buscar este blog

Páginas vistas en total