Arduino, un Framework para sistemas Embebidos

Una experiencia desastrosa causó la pérdida del MARS CLIMATE ORBITER en 1998, una misión NASA que pretendía estudiar el clima y la atmósfera marciana, construido por Lockheed-Martin a un costo de US$ 125 millones (de esa época), y que por un error de software se cayó a la atmósfera marciana la cual lo fritó…mars-orbiter 

Pero, ¿cómo se cae de órbita un satélite, si los cálculos y simulaciones previas son exactos? Según las investigaciones, el problema fueron incoherencias en las unidades usadas por el software que controlaba los impulsores (thrusters) – que fue hecho por un contratista y entregaba información en NEWTONS mientras que el software de control hacía los cálculos en LIBRAS-FUERZA… un “pequeño” descache humano.

Una confusión de unidades entre el SI y el sistema Imperial… que traigan a Miss Panamá para ver si tiene algo que ver con el inventor Confucio… ¡Todo un costoso y embarazoso infierno!

¿Y có1980_USSR_stamp_Olympic_mascot.jpgmo logramos unificar el desarrollo de software, como para que un errorcito similar no suceda y hagamos el oso de la vida? La respuesta es (o puede ser una parte de ella): Utilice un Framework…

Pocos lo recuerdan, pero “Hacer el Oso” en Colombia se remonta a la actuación de los deportistas en las olimpiadas de Moscú 1980, les fue tan mal que se convirtió en una expresión popular.

¿Cómo es el cuento del Framework?

Toda aplicación informática necesita que la información esté estructurada de un modo conocido para poder manejarla, almacenarla, recuperarla, utilizarla y los demás verbos de acción terminados en “-arla”, para eso se definen modelos de datos con una determinada estructura. ¿Y la información que manejan los desarrolladores? (código fuente, librerías, archivos de configuración, etc.) si cada programador es un universo aparte ahora magnifíquelo entre contratistas, colaboradores y demás. Para evitar ese “desorden” en un desarrollo, se apela a las bondades de estructurar y normalizar la información, que es lo que pretende el FRAMEWORK.

Un Framework (Marco de Referencia) es una “estructura conceptual y tecnológica de soporte definido, normalmente con artefactos (casos de uso, diagramas de clases, modelos UML) o módulos de software concretos, que puede servir de base para la organización y desarrollo de software”. El programador no necesita plantearse una estructura global de la aplicación, sino que el framework le proporciona un esqueleto o estructura que hay que “rellenar” para desarrollar y/o implementar la aplicación. También un Framework es un conjunto de herramientas que permiten trabajar de forma sencilla, y que la mayoría de las veces se pueden reutilizar en otros proyectos. En el diseño y desarrollo web, un Framework sirve para poder estructurar de una mejor forma el código al escribir menos líneas. framwork blq

Los frameworks suelen incluir:

  • Soporte de programas.
  • Bibliotecas (Libraries).
  • Lenguaje de scripting.
  • Software para desarrollar y unir diferentes componentes de un proyecto de desarrollo de programas.

Es entonces, una manera de hacer más fácil y mejorar el proceso de programación, brindando varias ventajas:

  • Es fácil encontrar herramientas (utilidades, librerías) adaptadas al framework que facilitan el desarrollo, ahorrando tiempo y dinero al utilizar componentes de software probados.
  • Facilita la colaboración: Entender el código fuente escrito por otra persona o el propio después de 3 meses es difícil, y tratar de modificarlo o adaptarlo casi imposible, con el framework se estandarizan los desarrollos colaborativos de manera que se puede utilizar código escrito por terceros.
  • Evita escribir código repetitivo y facilita la reutilización: Los proyectos tienen rutinas o partes comunes necesarias para el funcionamiento, el framework evita tener que programar estas partes – o volver a escribir las mismas rutinas, y de esta manera centrarse en la aplicación.
  • Utilizar buenas prácticas: Los frameworks están basados en patrones de desarrollo como MVC (Modelo-Vista-Controlador, que dice: “separa en tu aplicación la gestión de los datos, las operaciones, y la presentación”) que ayudan a separar los datos y la lógica de negocio de la interfaz con el usuario. Siempre será conveniente seguir las recomendaciones, estándares o normas que se hayan formulado, de esta manera se obtiene un proceso más estructurado, normalizado y ordenado.Modelo Vista - Controlador
  • Permitir hacer cosas más “avanzadas”: Un framework siempre va permitir hacer cosas de una manera fácil y segura, que por su complejidad o falta de conocimiento costaría mucho tiempo y esfuerzo hacerlas, es más práctico que “inventarse el agua tibia”.
  • Mejores productos: Desarrollar una aplicación con framework es más rápido, más limpio, más eficiente y más seguro.

Existen muchísimos frameworks para desarrollo web en diferentes plataformas y lenguajes, lo bueno de los estándares es que hay muchos para elegir pero la decisión está determinada por:

  1. El tipo de aplicación a desarrollar, y
  2. El lenguaje de programación y otras tecnologías concretas: base de datos, sistema operativo, etc.

En conclusión el uso del framework en el desarrollo de una aplicación implica un cierto coste inicial de aprendizaje, aunque a largo plazo es probable que facilite tanto el desarrollo como el mantenimiento.

¿Y para sistemas embebidos?

Vuelvo a mencionar la diferencia entre mi experiencia al aprender a programar (hace varias décadas) y cómo se hace en la actualidad, una revisión rápida al mercado me da las luces: Se utilizan tarjetas ensambladas que se conectan a las tarjetas para desarrollo, incluso se encuentran paso-a-paso de cómo conectarlas junto con los otros componentes en el protoboard… ¿¡WTF!? ¿Se me fueron las luces? ¿En dónde me perdí?Embedded-designPara el Arduino que usaremos en clase – que es una tarjeta con un microcontrolador de 8 bits, que con la ayuda de un Bootloader carga en memoria el programa compilado en lenguaje C de licencia GNU y cuya interface lo hace tan fácil de usar que se usa para enseñar programación en bachillerato – confieso que al principio odiaba la idea, cómo no si toda la vida he programado “Bare Metal” y apenas usando librerías, pero que puede esperarse de alguien cuyo primer ensamblador fue un listado (manual por cierto) de códigos e instrucciones de Z-80 que se escribían una-a-una en la memoria RAM del MicroProfessor…

Manual Bare-Metal ProgrammingTal cual, las instrucciones se escribían a mano.

MicroProfessor Z80

Una vez escritas a mano, cada instrucción y su operando eran cargadas por teclado en la RAM (dirección 1800h) una-por-una, de manera que si se medio desconectaba… a comenzar de nuevo, si se equivocaba… a mover el bloque en la RAM y recalcular las saltos (etiquetas? que va… no existían) – de esa manera aprendí a programar mis amados sistemas embebidos. Casi todos los programas comenzaban cargando el Acumulador con un valor, instrucción 0x3E…

Pero como han pasado 25 años… el MicroProfessor se “redujo” a un Microcontrolador (¡Gracias Gordon Moore!), los computadores personales se hicieron asequibles e universales (¡Gracias Bill Gates!), y están conectados en una “red galáctica” (¡Gracias Joseph Licklider – por la idea & Vinton Cerf y Robert Kahn – por el protocolo!), donde millones de seres humanos pasamos parte de nuestra vida (¡Gracias Tim Berners-Lee!)… a este ajiaco tecnológico hay que añadirle el lenguaje C (¡Gracias Brian Kernighan y Dennis Ritchie!), la filosofía Open Source (¡Gracias Linus Torvalds!) y los trabajos de varios estudiantes de maestría.

Arduino no existiría sin el Atmel AVR; cuentan que dos estudiantes del Instituto de Tecnología Noruego (Norges Tekniske Høgskole – NTH) Alf-Egil Bogen y Vegard Wollan desarrollaron en el primer lustro de los 90’s un microcontrolador de arquitectura RISC y le vendieron a idea a una compañía californiana (Atmel Inc.) – de hecho AVR significa Alf and Vegard’s RISC processor. Pero, ¿cuál es la ventaja del AVR sobre los PIC que utilizamos tanto en Colombia? Pues durante el desarrollo de los AVR, sus diseñadores trabajaron de cerca con IAR Systems (que diseña compiladores de C y tenían cerca en Suecia), los AVR fueron diseñados optimizando el tiempo de ejecución del código C compilado,  y con varios apuntadores de pila para esta tarea asegurando así, que el código compilado de AVR sea eficiente; además se la compañía ofreció gratis un Toolchain completo que incluía compilador de C (AVR-GCC), el programador In-Circuit (AVR-DUDE), el simulador (SIMULAVR), y el depurador (AVARICE) – ¡ A la hora que me vengo a enterar de esto!

De esta forma Atmel y su archirrival Microchip se repartieron el mercado de microcontroladores RISC de 8-bits.

Hasta que…

Un ingeniero colombiano (y primo mío…mentiras) Hernando Barragán aprovechó en 2003 la disponibilidad de varias herramientas de software del compilador AVR-GCC, el lenguaje Processing enfocado hacia multimedia y artes visuales y que es una herramienta, para la enseñanza de la programación en un contexto visual para ser utilizada por usuarios no técnicos, que les brinda una forma fácil y rápida de crear programas, para su proyecto Wiring.
La tarjeta Wiring diseñada por Barragán en el 2003 para su tesis de maestría en Diseño del Interaction Design Institute de Ivrea (Italia), como una plataforma tecnológica para facilitar que artistas y diseñadores trabajaran con electrónica, abstrayéndose del detalle de la misma y enfocándose en sus objetivos artísticos. De forma que Wiring es una tarjeta hardware y un ambiente de desarrollo que permite escribir los programas, compilarlos y descargarlos en la tarjeta, este ambiente está basado en Processing, de igual forma Wiring es un lenguaje de programación que simplifica el acceso a la plataforma de hardware ocultando los detalles técnicos complejos, y este es lenguaje utilizado por la plataforma Arduino. El proyecto Wiring sigue activo en la Universidad de los Andes en Bogotá, donde siguen desarrollando nuevas versiones de hardware y software.
¿Entonces esta revolución de Arduino la inició un compatriota? Pero entonces por qué no aparece él dentro de todo el cuento que existe sobre Arduino? Este enlace es bien interesante:

https://arduinohistory.github.io/

La revolución Arduino hizo que Atmel venciera finalmente a su archirrival Microchip (lo que irónicamente llevó a que Microchip la comprara en 2016), y que la electrónica Open-Source comenzar utilizada por nuevos tipos de seres: Los Makers, quienes realmente hacen cosas fantásticas sin saber mucha electrónica (que triste para nosotros… por lo menos entendemos lo que hacemos). El ejemplo o filosofía Arduino también ha llevado a la creación de otras plataformas como Raspberry Pi, Beaglebone, Galileo y cientos de “*-ino”, de forma que aquellos programadores “Bare-Metal” que aprendimos a compilar manualmente; debemos reinventarnos para seguir vigentes.

Arduino Casero
La prueba de que cualquiera puede hacer un Arduino.

 

Mencionaba la WWW como ingrediente de la “revolución Arduino”, y es que más allá del hardware y el software están las personas, la comunidad mundial de usuarios de Arduino cuyo día se celebra el 1 de abril, y cuya contribución son miles de librerías, shields (hardware compatible con el factor de forma del Arduino), aplicaciones y ejemplos, incluso la posibilidad de escribir código en la nube y entornos o ambientes gráficos, suites de programas para propósitos específicos como robótica e IoT, es tal la cantidad de aportes que lo llaman Ecosistema. Ahora si el pobre programador de “Bare Metal” abre los ojos de pura sorpresa.arduino shield

De los miles de posibles Frameworks para Arduino, me llamó la atención que Texas Instruments y Microchip se inspiraron para crear Energia y ChipKIT respectivamente, como entornos similares, compatibles o parecidos al de Arduino; entonces iniciaremos en clase a trabajar con este framework que tanto ha cambiado la forma de enseñar a programar e interactuar con el “mundo real” a aquellos que no son ni ingenieros ni técnicos en electrónica, y para los que lo somos, nos permite disfrutar las ventajas mencionadas de los frameworks y de paso cambiar el paradigma de “hágalo todo usted mismo” por el de “ayúdese a hacerlo usted mismo”.

Arduino vs. PIC Assembler
El proyecto de medir la temperatura ambiente y visualizarla en un display LCD es común, yo también lo hice (solo fusilé la rutina que maneja el LCD basado en HD44780 – pero la comenté en español y eliminé las subrutinas no necesarias), y con los ICs LM35 y PIC16F877 se hizo el programa en assembler… ahora me imagino hay una librerías que lee y acomoda la salida de voltaje del LM35 y maneja directamente el display LCD.

Referencias Web:

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s