
Lo sé, has oído hablar del Arduino. Incluso has usado algunas placas y las has programado para hacer un pequeño proyecto.
Pero en este post, quiero dar una mirada diferente al Arduino.
No como un aficionado. Sino como un ingeniero con algunos conocimientos de sistemas embebidos.
Así que sin más preámbulos, ¡comencemos!
¿Es hardware?
Por supuesto. Arduino es una serie de placas como Arduino nano, Arduino UNO, etc.
Todas tienen diferentes características pero una cosa en común. Todas se programan de la misma manera.
Y algo clave (que veremos más adelante) es que son de código abierto.
Es decir, tienes los diagramas de cableado y la lista de componentes disponibles.
Así que si quisieras, podrías hacer una placa igual o modificarla a tu gusto.
¿Pero, eso es todo?
No.
¿Es un software?
Sí, señor. En realidad, la clave para que todas las placas Arduino (y compatibles) se programen de la misma manera es el SW que utilizan.
Todos los que desarrollamos en Arduino usamos las funciones digitalWrite y similares sin pensarlo demasiado.
Pero, ¿qué ocurre cuando llamamos a esa función?
Pues aquí está el secreto.
En cada placa, dependiendo del microcontrolador (Atmel, ARM, Espressif) las operaciones que se realizan entre bambalinas serán diferentes.
¿Y sabes dónde se define todo eso?
Dentro del core de Arduino.
El fabricante de la placa desarrolla el core de Arduino. Ya sea Arduino o, en el caso de una placa compatible, el fabricante correspondiente.
Pero como el HW es de código abierto, la «plataforma» también lo es, por lo que está perfectamente especificado cómo tiene que ser este core.
Así que si quieres hacer una placa con un microcontrolador raro/nuevo/lo que sea, puedes hacer esa placa compatible con Arduino.
¿Y eso es todo?
¡No querido!
¿Es un IDE?
Exactamente.
Porque puedes tener una gran placa y un gran núcleo, pero falta una cosa más.
Tu código
El código que escribes para controlar la temperatura de tu casa o la humedad de tus plantas.
Tu código tiene que ser compilado junto con el núcleo.
Y, el «binario» resultante hay que grabarlo en la placa.
Todas esas cosas las hace el IDE de Arduino.
Pero, pero, pero. Igual que podemos usar placas Arduino compatibles o podemos crear nuestro propio Arduino Core para nuestra placa personalizada…
…podemos usar otros IDEs para compilar y flashear placas Arduino.
Una alternativa interesante al uso de Arduino IDE es el uso de Platform.io junto con VS Code.
(Si quieres saber más sobre VS Code aquí tienes un artículo que escribí hace tiempo hablando de las maravillas de VS Code. Eso si, está en inglés. Aunque como mi inglés no es para tirar cohetes seguro que no te cuesta mucho leerlo)
¿Y eso es todo?
Nope
¿Es un programador?
Es probable que, si eres joven, no lo hayas experimentado, pero en el pasado, flashear un microcontrolador era una tarea muy difícil.
Casi siempre necesitabas un programador específico para tu microcontrolador.
Y o bien tenías el dinero para comprar uno (y no eran precisamente baratos) o tenías que montar una versión casera tu mismo.
Los chicos de Arduino sabían que esto era una mierda.
Así que decidieron hacerlo más fácil.
Así que equiparon sus placas con una cosa llamada «bootloader».
Que simplemente es un pequeño programa que se encarga de hacer dos cosas.
- Iniciar un programa que se encuentra en una determinada dirección de memoria
- Escuchar el puerto serie y esperar a que alguien le envíe un nuevo programa.
Y esto es lo que ocurre cuando quieres grabar una placa Arduino
Haces clic en el botón «flash», el IDE envía tu nuevo programa a través del puerto serie. El bootloader recibe los datos y los almacena en la memoria flash.

Y cuando el MCU se reinicia, el nuevo programa se ejecuta.
¿Y eso es todo?
…últimas palabras sobre Arduino
Como hemos dicho, tanto el HW, como el SW y el entorno de programación son de código abierto.
Y eso, amigo mío, aparte del buen diseño, ha sido la clave de su éxito.
¿Quieres hacer una placa compatible? No hay problema, usa sus esquemas, modifícalos a tu gusto y listo.
¿Quieres hacer tus propias librerías?. No hay problema, escribe tu propio código y ya está.
¿Quieres que tu placa sea compatible con Arduino? Entonces creas el core de Arduino siguiendo las instrucciones y voilà.
En pocas palabras, Arduino ha cubierto todas las partes de un sistema embebido (HW, SW de bajo nivel, Tooling y Flashing) para proporcionar a los aficionados y estudiantes una experiencia sin fisuras en la que sólo tienes que ocuparte de lo que realmente quieres hacer y olvidarte de todo lo demás.
Pero, también te da la libertad de modificar algunas de las partes (HW, SW o IDE) a tu gusto ampliando el espectro de personas que pueden utilizar la plataforma.
Espero que hayas disfrutado de este artículo y que a partir de ahora veas la plataforma Arduino bajo una nueva luz.