Durante las últimas semanas he estado preparando Curuxa Community Site, la comunidad de usuarios de Curuxa, un sitio web que ofrece la posibilidad de que cualquier persona publique de manera gratuita y ofrezca al resto de usuarios y visitantes lo siguiente:

Por un lado, los usuarios pueden publicar sus Aplicaciones. Como sabéis, las Aplicaciones son aparatos/dispositivos construidos total o parcialmente utilizando Placas Principales y Módulos de Curuxa. Si bien tanto las Placas Principales como los Módulos oficiales se publican en el sitio web oficial de Curuxa y han sido desarrollados y publicados por mí, algunas de las Aplicaciones también las he desarrollado yo (como por ejemplo el Electrooculógrafo) pero la mayoría son aparatos construidos por terceras personas utilizando algunas de las Placas Principales y Módulos oficiales que han seleccionado.

Las siguientes fotos muestran algunas de las Aplicaciones desarrolladas por Manuel Fernández, Jorge Aparicio y Beltrán Fernández. Las dos primeras son robots construidos principalmente para aprendizaje personal, y la tercera es un POV, del cual ya he hablado. Finalmente, la última foto es un octópodo hecho por mí utilizando piezas de k’nex:

Además de las Aplicaciones, en la Comunidad de Curuxa los usuarios pueden publicar Placas Principales y Módulos personalizados, es decir, circuitos no-oficiales diseñados y construidos por los propios usuarios que siguen los estándares de Curuxa para poder utilizarse junto con el resto de circuitos oficiales en cualquier Aplicación.

Las siguientes fotos muestran unos Módulos personalizados construidos por Aarón González. Estos Módulos son:

  • Un regulador de tensión
  • Cuatro LEDs montados sobre una placa perforada, de uso similar a cuatro LTIND-A
  • Una variación de AO-SPK construida sobre placa perforada
  • Dos adaptadores para conectar Módulos a las Placas Principales sin necesidad de utilizar cables
  • Dos SIBW-1Y montados sobre una misma placa

Quien esté interesado puede visitar la lista completa de Aplicaciones y la lista completa de Módulos personalizados, y quien se anime a empezar a construir sus propios robots o cualquier tipo de aparato que se le ocurra puede iniciarse con este tutorial y, una vez terminado, puede publicar su creación en la Comunidad de Curuxa siguiendo estas sencillas instrucciones.

Usando Curuxa IDE

Autor: Urriellu

A continuación tenéis dos vídeos de ejemplo de uso de Curuxa IDE, el entorno de desarrollo simple orientado a programar de manera sencilla las placas principales y módulos de Curuxa. Ambos vídeos se han grabado de manera simultánea.

El primer vídeo muestra Curuxa IDE corriendo sobre Linux, navegando por los ejemplos disponibles, creando un nuevo proyecto a partir de uno de los ejemplos, compilándolo, grabándolo en el microcontrolador y ejecutándolo. El ejemplo utilizado hace parpadear los LEDs conectados a la placa principal. Es uno de los más simples ofrecidos ya que tan solo se pretende mostrar el uso del IDE, placas principales y módulos, pero se pueden desarrollar aplicaciones mucho más complejas sin problema.

El segundo vídeo es una grabación del programador USB (PICkit 2) conectado a MBP40, una de las placas principales, sobre la cual hay colocados cuatro módulos de LEDs indicadores (LTIND-A), siendo programados y probados desde Curuxa IDE. (Siento la mala calidad del vídeo)

Como ya había comentado hace unas semanas, desde octubre de 2009 hasta mayo de 2010, hemos estado organizando unos talleres de robótica en la Rama de Estudiantes del IEEE de la Universidad de Oviedo, en la cual los participantes reciben los esquemas y código fuente disponibles en la web de Curuxa, así como todos los componentes electrónicos necesarios para construir una de las placas principales y una serie de módulos para que puedan ir fabricando sus propios robots desde cero o cualquier otro dispositivo que se les ocurra utilizando los circuitos de Curuxa que han construido.

POV de BeltránAdemás, durante todo el curso, estamos organizando pequeños campeonatos para que los participantes de estos talleres se animen a construir diversos aparatos que no sean solamente robots, y especialmente para que vean que pueden aprovechar los circuitos de Curuxa para construir multitud de aplicaciones distintas utilizando los mismos módulos pero configurados y programados de manera distinta.

El primero de estos mini-concursos ha terminado hace poco. Éste consistió en construir un POV, es decir, un circuito muy simple capaz de escribir texto o hacer dibujos en el aire mediante el movimiento del aparato y el parpadeo de los LEDs incluidos.

El ganador ha sido Beltrán (que veis en la foto), con un POV construido con una MBP18, siete LTIND-A y cuatro SISW-SPST.

Más fotos y el código fuente pueden encontrarse en la página del concurso.

Probablemente la mayoría de los que leáis este blog estaréis acostumbrados a desarrollar software para ordenador. En ellos es bastante común que al comienzo del desarrollo de una nueva aplicación puedas escribir cientos o incluso más de mil líneas de código en un sólo día. Código bien estructurado, poco propenso a errores, documentado y fácil de entender.

Por el contrario, el desarrollo de software para MCUs (microcontroladores) es, por lo general, muy lento y tedioso. Es más que habitual dedicar varias horas para escribir un simple programa en cuya función principal sólo se terminan escribiendo un puñado de líneas de código y ni siquiera se hacen llamadas a otras funciones. El código, además, suele estar escrito a un nivel excesivamente bajo, lo que hace que el desarrollador deba tener en cuenta multitud de variables, combinaciones y detalles que en un ordenador no necesitan tenerse en cuenta, lo cual ocasiona que el programa resultante sea bastante propenso a errores, incluso en manos de programadores expertos.

Una de las tareas más tediosas suele ser la configuración de los periféricos internos del propio microcontrolador. Temporizadores y conversores analógico-digital son ejemplos muy habituales de periféricos integrados que la gran mayoría de MCUs tienen disponibles. Estos bloques funcionales son muy configurables y pueden utilizarse en infinidad de aplicaciones debido a la flexibilidad de funcionamiento que tienen. Esto hace que incluso para las tareas más simples el programador deba dedicar mucho tiempo a entender cómo funciona y cómo se configuran todos y cada uno de los bits individuales de los registros de la RAM asociados al periférico integrado que se esté utilizando.

Los compiladores normalmente incluyen funciones que pretenden simplificar la tarea de configuración de estas funcionalidades. No obstante, debido a la necesidad de ofrecer las mismas o casi tantas posibilidades y combinaciones que tendrías si lo configurases bit a bit (sin utilizar estas librerías), las funciones ofrecidas deben contarse por decenas o cientos, son tanto o más complicadas de usar que la configuración manual, requieren grandes cantidades de parámetros basados en defines y operaciones binarias, y muchas de ellas están vagamente documentadas y ejemplificadas.

Suelen existir muy pocos compiladores para cada arquitectura de microcontroladores y cada lenguaje de programación. Además, la calidad, estabilidad y fiabilidad de estos compiladores (tanto libres como comerciales) suelen ser muy inferiores a las de los compiladores para ordenador. Como ya he comentado, sus librerías suelen ser escasas, difíciles de usar y muy mal documentadas; el código máquina generado es, por lo general, bastante eficiente, pero muchas veces incluye errores que modifican la lógica del programa original. Sobre esto voy a comentar una anécdota que me ocurrió hace un tiempo:

A principios de 2009 me disponía a programar un microcontrolador en lenguaje C utilizando uno de los compiladores más conocidos que hay. Este compilador es comercial y, aunque tiene versiones tanto para Windows como para Linux, realmente nunca he conocido a nadie que lo utilizase en Linux. Mi código fuente era muy simple, ya que pretendía ser el código de ejemplo para un pequeño robot siguelíneas que más adelante utilizarían los participantes de unos talleres de introducción a la robótica. El código en C no necesitaba compilarse en más que unas pocas instrucciones en código máquina, y tras repasarlo una y otra vez todo parecía estar escrito correctamente. El compilador compilaba el código sin errores ni avisos, pero el microcontrolador actuaba erróneamente. Tras varias horas sin encontrar el error, decidí desensamblar el binario generado por el compilador y estudiar el código en lenguaje ensamblador que había sido generado. El programa estaba compuesto de unas 60 instrucciones en código máquina, y casi todas ellas se habían generado adecuadamente. No obstante, dos instrucciones no encajaban.

Mi código fuente llamaba a una función (sin parámetros ni valor de retorno) disponible en las librerías del compilador, la cual se compilaba en 5 instrucciones en código máquina. Estas instrucciones simplemente almacenaban un valor constante en dos registros de la RAM. No obstante, las direcciones de estos registros no eran las correctas. El compilador había generado código que almacenaba los valores en las posiciones 0×0F y 0×10, mientras que lo correcto eran 0×10 y 0×11 respectivamente. Es decir, las direcciones de las variables usadas estabandesplazadas una unidad hacia abajo.

Como estoy acostumbrado al funcionamiento del desarrollo de software libre, aunque este compilador fuese cerrado y comercial dediqué un buen rato a redactar un bug report en el que explicaba todo el problema y la solución. A los pocos días recibí la respuesta de la empresa, esperando al menos un agradecimiento por haber realizado su trabajo y una indicación de que estaría solucionado en la próxima versión. Para mi sorpresa, la única respuesta que obtuve fue una pregunta: “¿Cual es el número de serie de su producto?”.

Logotipo

Autor: Urriellu

En un post anterior ya hablé de qué significa Curuxa. Tras elegir el nombre para el proyecto vino el diseño del logotipo.

Ya que es bastante difícil representar gráficamente en qué consta el proyecto, me decanté por hacer referencia únicamente a su nombre, aunque la imagen resultase no tener nada que ver con los temas tratados, por lo que mi intención siempre fue que el logotipo de Curuxa fuese una lechuza.

Los logotipos pueden tener infinitas formas y colores. La solución que más me gustó fue un dibujo simple, vectorial, plano, a uno/dos colores y escalable. De esa manera no sólo podría utilizarse en el sitio web de Curuxa, sino también en lugares en los que dibujar es una tarea complicada, como por ejemplo placas de circuito impreso en las que tanto la serigrafía como los dibujos hechos con cobre están muy limitados. En este tipo de entornos normalmente no se puede utilizar más que un color y los dibujos deben tener una escala muy pequeña, pero el texto e imágenes deben poder distinguirse correctamente.

Las imágenes que se muestran a continuación están colocadas por orden cronológico, según se fueron haciendo modificaciones:

Logo v1 Logo v2
Logo v3 Logo v4
Logo v5 Logo v6

La primera versión nunca me gustó, principalmente porque más que una lechuza parecía una monja. Además si el fondo tiene un color parecido podría dar problemas, así que le añadí un recuadro alrededor.

Yo no soy un experto dibujante ni muchísimo menos, de hecho se puede ver que las dos primeras versiones son bastante mediocres. Así que le pedí ayuda a un amigo mío, Alfonso Zapico, al cual le agradezco mucho el trabajo que ha hecho tanto con este logo como sobre todo enseñándome a hacer fotos macro de calidad. Él es diseñador gráfico y dibujó la tercera, cuarta y quinta imagen basándose en mi diseño original y dándole un toque más profesional.

La última imagen es el logotipo definitivo, con algunos pequeños retoques que le hice y a un sólo color, lista para ser incrustada en el sitio web, en PCBs, o en cualquier parte.

Talleres de robótica

Autor: Urriellu

Talleres de RobóticaDesde principios de curso, en la Rama de Estudiantes del IEEE de la Universidad de Oviedo hemos estado organizando la segunda edición de nuestros conocidos talleres de robótica.

El año pasado, en su primera edición, diseñé un robot monolítico relativamente simple y durante 16 sesiones de 4-5 horas los 27 participantes fueron construyendo poco a poco su propio robot.

Debido al gran interés suscitado, este año hemos hecho dos grupos de 3 horas por semana cada grupo. Durante el primer cuatrimestre del curso (octubre-enero) los 46 participantes han asistido ya a 13 sesiones, pero esta vez en lugar de construir un robot monolítico han estado construyendo placas principales y módulos de Curuxa.

Durante estas 13 reuniones les hemos dado pequeñas explicaciones sobre electrónica, programación, y sobre cómo funcionan estos circuitos. En las primeras sesiones cada participante construyó y aprendió a programar la placa principal que estamos utilizaTalleres de Robóticando, MBP18. Una vez que tuvieron lista su placa principal dedicaron el resto del cuatrimestre a construir módulos simples para dar algunas funcionalidades a su robot. Por el momento ya han construido y programado varios pulsadores y bumpers, LEDs indicadores, un control de motores, un módulo con altavoz, y han tenido tiempo para aprender a controlar servomotores utilizando MBP18, además de material, herramientas e indicaciones sobre cómo construir los chasis de sus robots con aluminio.

En el sitio web de Curuxa la mayoría de módulos tienen disponibles versiones imprimibles en PDF. Estos archivos los preparé específicamente para poder imprimir múltiples copias y dar los esquemas en papel a los participantes de los talleres de robótica que no tuviesen ordenador portátil. Si algún otro grupo de estudiantes, profesor o quien sea se anima a organizar unos talleres de robótica o electrónica utilizando Curuxa, tiene a su disposición estas mismas versiones imprimibles para simplificar su trabajo. Ejemplos: [1], [2], [3], [4], [5], [6].

Además, los módulos que se pueden fabricar en placas de circuito impreso también tienen disponibles una versión imprimible del fotolito, lista para ser utilizada en la insoladora o en la plancha/plastificadora (según el método que se utilice para fabricar el PCB): ejemplo.

Algunos participantTalleres de Robóticaes de los talleres, en su tiempo libre, han diseñado y construido sus propios módulos siguiendo los estándares de Curuxa para añadir funcionalidades a sus circuitos. Algunos módulos que han hecho son, por ejemplo, un módulo que incluye 8 LEDs puestos en línea, una placa principal utilizando un PIC de 40 pines (MBP40 aún no la he publicado), un adaptador para conectar algunos módulos a las placas principales sin utilizar cables e incluso un módulo para conectar un LCD a la placa principal.

Estoy bastante contento con la acogida que los talleres han tenido, y los participantes (que la mayoría nunca habían construido ni programado nada por su cuenta) están construyendo un montón de circuitos, aprendiendo cómo funcionan, escribiendo sus propios programas, y a estas alturas ya están terminando el primer robot de su vida.

Además, junto a estos talleres, también estamos organizando pequeños concursos para que, utilizando los módulos de Curuxa que han construido durante los talleres, los conecten y programen de cierta forma para que realicen una tarea específica, de lo cual ya hablaré en otros post.

Fotos de los días que los participantes aprendieron a fabricar sus propios PCBs, para construir MC2A:

Fabricando PCBs Fabricando PCBs
Fabricando PCBs Fabricando PCBs

Electrooculógrafo

Autor: Urriellu

Hace unas semanas en una asignatura de mi carrera me pidieron que diseñase cualquier dispositivo electrónico aplicado a la medicina. Después de muchas pruebas conseguí que funcionase una versión básica de electrooculógrafo construida sobre una placa de prototipos.

Para quien no lo sepa, un electrooculógrafo (EOG) es un dispositivo electrónico que mide la posición de los ojos mediante la diferencia de tensión producida por las contracciones de los músculos oculomotrices.

Una vez que supe que el circuito funcionaba era hora de construirlo. ¿Cómo lo hago? ¿Diseño un PCB desde cero? ¿Construyo todo el circuito sobre una placa perforada?

Pues no, evité tener que diseñar y construir todo el circuito desde cero para una sola aplicación utilizando una placa principal y varios módulos de Curuxa.

Para construir este electrooculógrafo utilicé MBP18 como “cerebro” del circuito para convertir las señales analógicas en digitales, filtrarlas digitalmente y generar la respuesta necesaria según la posición de los ojos. A esta placa iba conectado un pulsador (SISW-SPST) que, mientras el sujeto coloca los ojos en posición central, se mide la tensión en los electrodos colocados en su cara y utilizando un regulador de tipo P digital se calibra el EOG. También se utilizaron dos LEDs (LTIND-A) que se iluminan alternativamente según el sujeto esté mirando hacia la derecha o hacia la izquierda. Por último, a MBP18 también se conectó un altavoz (AO-SPK) que emite un sonido cuya frecuencia varía según la dirección en la que se esté mirando.

A parte de estos módulos, tuve que construir un pequeño módulo muy simple que incluye el amplificador de instrumentación AD620 para amplificar la señal de los electrodos colocados sobre la cara:

EOG_02 EOG_04

Aunque en principio este módulo no forma parte de Curuxa y lo diseñé exclusivamente para poder construir el EOG, sigue los mismos estándares que el resto del proyecto y puede resultar muy útil para multitud de aplicaciones, por lo que seguramente en el futuro se convierta en uno de los módulos oficiales de Curuxa.

Descargar su código fuente, listo para ser compilado con SDCC. El código hace referencia a las librerías de Curuxa.

Más fotos, esquemas, diagrama de flujo, y explicaciones de funcionamiento y construcción están disponibles en la página del electrooculógrafo.

El Precursor de Curuxa

Autor: Urriellu

Desde hace años siempre me he interesado por el desarrollo orientado a aplicaciones educativas, de prototipado o para desarrolladores.

picdub18Hace dos años publiqué en mi sitio web personal picdub18, un circuito electrónico que incluye los componentes básicos y necesarios, comunes a casi todos los circuitos electrónicos basados en microcontroladores.

Picdub18 incluía un microcontrolador PIC16F716 (aunque podían utilizarse muchos otros modelos), un conector ICSP para programar el microcontrolador desde un ordenador fácilmente, un conector de alimentación, un botón de reset, un zócalo para poder sustituir el oscilador externo, y un conjunto de pines hembra útiles para conectar los pines de entrada y salida analógica y digital del PIC al resto de componentes electrónicos externos. La tarea se simplificaba en gran medida si el resto del circuito estaba montado en una placa de prototipos, ya que los mismos cables de hilo rígido de cobre que se utilizan para puentear los pines de la protoboard, también pueden utilizarse para conectar la protoboard con las hembras incluidas en picdub18.

Casi dos años después de haber desarrollado picdub18, la idea de una placa para desarrollo simple de prototipos electrónicos volvió a mi mente, y tras mucho darle vueltas y buscar la mejor forma de llevarlo a cabo, nació Curuxa.

En Curuxa, el equivalente a picdub18 serían las placas principales, y más específicamente MBP18. Las placas principales de Curuxa también incluyen solamente lo más básico necesario en cualquier circuito con microcontroladores, que es el propio microcontrolador, el conector de programación, y un conjunto de pines para poder conectar más fácilmente los circuitos externos. Estos conectores son un estándar propio de Curuxa, por lo que todas las placas principales contienen los mismos tipos.

Curuxa no sólo estandarizó y amplió el número de placas respecto a picdub18, sino que también ofrece módulos electrónicos diseñados para ser conectados a los pines mencionados.

Junto con esto, un conjunto de tutoriales, entorno de desarrollo, librerías y herramientas también se encuentran disponibles en el sitio web de Curuxa para que esta plataforma de hardware libre sea fácil de aprender a utilizar y al mismo tiempo se puedan construir multitud de aparatos distintos utilizando los módulos necesarios en casa una.

Curuxa IDE

Autor: Urriellu

En principio Curuxa iba a consistir principalmente en un conjunto de circuitos electrónicos y código de ejemplo. No obstante durante las últimas semanas he estado trabajando en un entorno de desarrollo específicamente diseñado para trabajar con estos circuitos electrónicos.

Curuxa IDEDesde que comencé su desarrollo mi idea siempre fue que Curuxa IDE fuese un programa simple, fácil de manejar, y que tuviese al alcance de la mano todas las características que se suelen necesitar al trabajar con las placas principales y los módulos. Este tipo de programas son bastante complejos, por lo que me ha dado bastantes problemas, aunque he conseguido que avanzase lo suficiente para publicarlo y que los usuarios puedan empezar a utilizarlo.

Este IDE está escrito en C# y la interfaz gráfica basada en WinForms (por el momento), debido a que la mayoría de sus usuarios utilizarán Windows, y personalmente me encuentro mucho más cómodo diseñando GUIs en WinForms que con cualquier otra librería gráfica. No obstante he separado todo lo posible la lógica del programa con la interfaz gráfica, por lo que en el futuro (espero que dentro de poco tiempo) me gustaría implementar GUIs para KDE (qyoto/kimono) y Gnome (GTK#).

Aunque la GUI sea WinForms y no se integre con ningún escritorio en Linux (de todas formas, aunque la GUI fuese para KDE no se integraría con Gnome y viceversa), Curuxa IDE es totalmente multiplataforma. Habrá disponibles instaladores para Windows y paquetes disponibles en repositorios para Debian/Ubuntu. Todas sus características funcionan perfectamente tanto en Windows como en Linux:

  • Soporta múltiples proyectos abiertos al mismo tiempo, así como archivos de código fuente.
  • El editor de código resalta la sintaxis según el lenguaje de programación elegido, aunque es bastante complicado de implementar por lo que aún no resalta ciertos tipos de sintaxis.
  • Es multilingüe, y el idioma puede cambiarse desde el menú sin ni siquiera reiniciar el programa.
  • Las características del proyecto permiten seleccionar la placa principal específica utilizada, simplificando el desarrollo.
  • Todos los programas de ejemplo publicados en el sitio web de Curuxa, así como algunos no publicados, están disponibles desde el menú para que los usuarios puedan crear proyectos a partir de ejemplos de manera muy sencilla. Cada ejemplo incluye una descripción y la lista de ejemplos disponibles puede filtrarse para que sólo aparezcan aquellos que utilicen cierta placa principal y/o cierto módulo.
  • Con un botón se compila el proyecto completo; con otro botón se quema el binario en el microcontrolador; con otro botón se alimenta el microcontrolador con la tensión configurada en el proyecto para que el circuito comience a funcionar, y con un último botón podemos detener la ejecución del programa del microcontrolador…
  • …además, un botón extra (mapeado con una tecla del teclado) nos permite ejecutar todo el proceso de golpe, para que podamos hacer modificaciones a nuestro código fuente y con una sola tecla todo el proyecto se compile, programe/queme y se empiece a ejecutar en el microcontrolador.
  • Los archivos de código fuente incluidos en cada proyecto se parsean automáticamente y todas las librerías a las que se hace referencia y que no son parte del proyecto (por ejemplo, las librerías ofrecidas por Curuxa que el usuario esté utilizando en su proyecto) aparecen debajo de los archivos de código fuente en la lista de proyectos, para que los usuarios puedan acceder al código fuente y documentación de las librerías que están utilizando de manera muy cómoda.

Muchos usuarios y visitantes se harán esta pregunta: ¿Qué es Curuxa?.

No sólo no es una palabra que no existe en español, sino que su origen no es anglosajón, ni mucho menos, pero le da nombre a este proyecto que se desarrolla principalmente en inglés.

Es realmente difícil dar nombres a proyectos de cualquier tipo, por lo que muchos recurren a los acrónimos. Buenos ejemplos son GNU, GTK, GIMP, PHP, HURD… no obstante el uso de acrónimos es relativamente poco original y a muchas personas no les agradan especialmente.

Otra tendencia en el mundo del software libre es el uso de palabras comunes en idiomas distintos al inglés, o de nombres de animales en cualquier idioma. Éste es el caso de Curuxa.

Curuxa significa lechuza en asturiano, el idioma propio de la región en donde vivo.

El logotipo del proyecto, evidentemente, representa la cabeza de una lechuza dibujada con gráficos vectoriales en dos colores.