Arduino (www.arduino.cc)
Es la plataforma de hardware libre más difundida, con más componentes (sensores, botones, displays, etc) y más usada, por ser libre, su sencillez y su muy bajo costo.
Esta plataforma viene en varios “sabores”, para que podamos elegir la que se ajuste mejor a nuestro proyecto, pudiendo diferir cada una en tamaño, memoria, velocidad del procesador, cantidad de puertos, etc. A continuación muestro un listado de las placas disponibles al momento de escribir este artículo, donde cada procesador y cada placa tienen links a su fabricante para ver las especificaciones:
Placa Arduino | Procesador | Velocidad | Voltaje | Flash kB |
EEPROM kB
SRAM kB |
Puertos digitales | con PWM | Entradas analógicas | Otros puertos | Tamaño | |
---|---|---|---|---|---|---|---|---|---|---|---|
Uno | ATmega328P |
16 MHz |
5 V |
32 |
1 |
2 |
14 |
6 |
6 |
68.6 mm × 53.3 mm |
|
Nano | ATmega168 o ATmega328 |
16 MHz |
5 V | 16/32 | 0.5/1 | 1/2 |
14 |
6 |
8 |
43.18 mm × 18.54 mm |
|
Micro | ATmega32u4 |
16 MHz |
5 V |
32 |
1 |
2.5 |
20 |
7 |
12 |
||
Mega2560 | ATmega2560 |
16 MHz |
5 V |
256 |
4 |
8 |
54 |
14 |
16 |
101.6 mm × 53.3 mm |
|
Mega | ATmega1280 |
16 MHz |
5 V |
128 |
4 |
8 |
54 |
14 |
16 |
101.6 mm × 53.3 mm |
|
LilyPad | ATmega168V o ATmega328V |
8 MHz |
2.7-5.5 V |
16 |
0.5 |
1 |
14 |
6 |
6 |
51 mm ⌀ |
|
Leonardo | Atmega32u4 |
16 MHz |
5 V |
32 |
1 |
2 |
14 |
6 |
12 |
68.6 mm × 53.3 mm |
|
Fio | ATmega328P |
8 MHz |
3.3 V |
32 |
1 |
2 |
14 |
6 |
8 |
66.0 mm × 27.9 mm |
|
Ethernet | ATmega328 |
16 MHz |
5 V |
32 |
1 |
2 |
14 |
4 |
6 |
Wiznet Ethernet |
|
Duemilanove | ATmega168/328P |
16 MHz |
5 V |
16/32 |
0.5/1 |
1/2 |
14 |
6 |
6 |
68.6 mm × 53.3 mm |
|
Due | AT91SAM3X8E |
84 MHz |
3.3 V |
512 |
0 |
96 |
54 |
12 |
12 |
2 DAC |
101.6 mm × 53.3 mm |
Diecimila | ATmega168 |
16 MHz |
5 V |
16 |
0.5 |
1 |
14 |
6 |
6 |
68.6 mm × 53.3 mm |
|
BT | ATmega328 |
16 MHz |
5 V |
32 |
1 |
2 |
14 |
4 |
6 |
Bluegiga WT11 Bluetooth |
|
ADK | ATmega2560 |
16 MHz |
5 V |
256 |
4 |
8 |
54 |
14 |
16 |
MAX3421E |
101.6 mm × 53.3 mm |
Host USB |
|||||||||||
Esplora | ATmega32u4 |
16 MHz |
5 V |
32 |
1 |
2.5 |
0 |
0 |
0 |
Joystick analógico |
Notarán que la placa Esplora, que salió hace unos días, posee puertos TinkerKit. Estos puertos nos permiten conectar distintos dispositivos (sensores o actuadores) a nuestro Arduino de forma muy sencilla y sin preocuparnos por los pines. Esta idea es la misma que vamos a ver más adelante con .NET Gadgeteer y netduino go, pero en este caso la placa puede no traer de forma nativa los puertos para los Tinker (hasta hoy sólo la Arduino Espora trae estos puertos) pero con un simple shield le podemos agregar esta facilidad.
Esta plataforma se programa con el lenguaje Arduino (del que hablaré en mi próximo artículo) y su sintaxis es muy sencilla. Como ejemplo a continuación muestro un programa al estilo “hola mundo”, el cual enciende y apaga un LED que ya trae la placa conectado al pin 13 de la salida digital:
void setup() { // Inicializo el pin 13 como de "salida" pinMode(13, OUTPUT); } void loop() { // Enciendo el LED digitalWrite(13, HIGH); // Espero un segundo delay(1000); // Apago el LED digitalWrite(13, LOW); // Espero un segundo delay(1000); }
Netduino (www.netduino.com)
Básicamente tomaron un procesador de Atmel (el mismo fabricante que los procesadores de Arduino) de 32 bits y 48 MHz y desarrollaron una placa compatible con Arduino junto con el .NET Micro Framework, que es, ni más ni menos, una versión muy reducida del framework de .NET que todos conocemos. Esta idea permite acercar a los desarrolladores de .NET (que no somos pocos) al mundo de la programación de microcontroladores utilizando una placa compatible con todos los sensores y dispositivos que ya existen para Arduino.
La programación se hace con Visual Studio 2010 (incluso se puede usar la versión Express, que es gratuita) y es muy fácil comenzar. Acá les paso el código de un programa que, al igual que el que mostré de Arduino, enciende y apaga el LED de la placa:
//Creo un objeto que referencia el LED OutputPort led = new OutputPort(Pins.ONBOARD_LED, false); While (true) { // Enciendo el LED led.Write(true); // Espero un segundo Thread.Sleep(1000); // Apago el LED led.Write(false); // Espero un segundo Thread.Sleep(1000); }
Esta placa es más potente que la de Arduino (y más aun las que salieron después, como la netduino plus 2), pero hay que tener en cuenta que, al programar en un lenguaje de más alto nivel (como C# ó VB.NET de Netduino contra C ó C++ de Arduino) se necesitará más memoria y ciclos de procesador para nuestro código.
Al momento de escribir este artículo existían estas versiones de Netduino disponibles en el mercado:
Placa Netduino |
Procesador |
Velocidad |
Voltaje |
ROM |
RAM |
Puertos digitales |
con |
Entradas analógicas |
Otros puertos |
Tamaño |
netduino | Atmel SAM7X |
48 MHz |
7.5 V |
128 |
60 |
14 |
4 |
6 |
71 mm × 53.3 mm |
|
netduino plus 2 | STMicro STM32F4 |
168 MHz |
7.5 V |
384 |
100+ |
14 |
6 |
6 |
I2c |
71 mm × 53.3 mm |
netduino go | STMicro STM32F4 |
168 MHz |
7.5 V |
384 |
100+ |
8 puertos gobus |
68.6 mm × 53.3 mm |
Notarán que la última placa de la lista, la netduino go, no tiene puertos de entradas/salida, esto es debido a que tiene 8 conectores para distintos dispositivos compatibles con .NET Gadgeteer (otra plataforma, de la cual hablo en el siguiente punto) a través de los cuales virtualiza los puertos.
Quisiera comentar que, aunque no a la misma velocidad de Arduino, esta plataforma está creciendo mucho y hay varios proyectos alrededor de ella como, por ejemplo, el PIX-6T4, una “pequeña” consola de videojuegos basada en netduino, con dos joysticks, una matrix de LEDs de 8×8, lector de tarjetas SD, parlante y otras cosas interesantes ya montados en la placa.
.NET Gadgeteer (www.netmf.com/gadgeteer)
Otro tema a tener en cuenta es que esta plataforma tiene 100% código manejado, el cual puede descargarse desde http://gadgeteer.codeplex.com/.
Al usar código manejado se programa, obviamente, con Visual Studio 2010 en cualquier versión, inclusive la Express.
Las placas más comunes de esta plataforma se detallan a continuación, aunque al ser un proyecto Open Source (si, este también) cualquier fabricante puede hacer su propia placa y venderla, incluso nosotros.
Placa Gadgeteer |
Procesador |
Velocidad |
Voltaje |
Flash |
RAM |
Sockets |
GHI Electronics Fez Spider Mainboard | ARM7 |
72 MHz |
3.3 V |
4.5 |
16 |
14 |
GHI Electronics Fez Hydra Mainboard | AT91SAMRL ARM9 |
200 MHz (aunque el procesador soporta 240 MHz) |
7.5 V |
4 |
16 |
14 |
Sytech NANO Mainboard | Freescale ARM920T |
200 MHz |
3.3 V |
8 |
8 |
A diferencia de las dos plataformas anteriores, para poder grabar nuestros programas en el hardware y debugearlos, necesitaremos otra placa, llamada USB Client, conectada entre nuestra PC y el .NET Gadgeteer.
A continuación copio el código de un programa para esta plataforma que, de igual manera que lo hicimos en las dos anteriores, enciende y apaga un LED cada un segundo:
bool IsLedOn = true; void ProgramStarted() { //Creo un timer para que se ejecute cada un segundo Gadgeteer.Timer timer = new GT.Timer(1000); //Le asigno un delegado timer.Tick += new GT.Timer.TickEventHandler(timer_Tick); //Inicio el timer timer.Start(); } void timer_Tick(Gadgeteer.Timer timer) { //Enciendo o apagado el led, dependiendo del valor de la variable Mainboard.SetDebugLED(IsLedOn); //Cambio el estado de la variable IsLedOn = !IsLedOn; }
Raspberry PI (www.raspberrypi.org)
Esta placa se diferencia en mucho a las anteriores, para empezar ya viene con puertos HDMI, RCA (para conectarlo a una TV) y USB (al que se le puede conectar un teclado o mouse), GPU compatible con OpenGL ES 2.0 y OpenVG que puede decodificar video con calidad blue-ray (H.264/MPEG-4 AVC) a 40MBits/s y soporta resoluciones desde 640 × 350 hasta 1920 × 1200, procesador ARM1176JZFS de 700 MHz, audio, slot para tarjetas SD / MMC / SDIO y, lo que hace la mayor diferencia, viene con Linux, más específicamente con Raspbian, una versión derivada de Debian, aunque le podemos instalar la distribución que queramos, inclusive Android.
O sea, es una computadora que podemos programar e instalarle el software que deseemos, pero al ser tan chica (mide más o menos como una tarjeta de crédito) podemos usarla para proyectos embebidos, donde necesitemos un dispositivo programable que no sea un PC, por ejemplo, para hacer un home media.
Al momento hay sólo dos versiones, muy parecidas:
Placa Raspberry Pi |
SoC |
Procesador |
GPU |
Velocidad |
Voltaje |
Consumo |
RAM |
Puertos |
Tamaño |
Modelo A |
Broadcom BCM2835 |
ARM1176JZF-S |
Broadcom VideoCore IV |
700 MHz |
5 V |
2.5 W |
256 |
USB |
85.60mm × 53.98mm |
Modelo B |
Broadcom BCM2835 |
ARM1176JZF-S |
Broadcom VideoCore IV |
700 MHz |
5 V |
3.5 W |
512 |
USB x 2 |
85.60mm × 53.98mm |
Aunque la velocidad del procesador es de 700MHz, las últimas versiones del firmware permiten hacer un overclock para llegar a velocidades de hasta 1000MHz.
Para esta plataforma no voy a copiar el código de un programa de ejemplo, ya que dependerá el lenguaje en el que queramos hacerlo, el cual podría ser C, C++, Java, C#, gracias al proyecto Mono, o incluso BASIC, gracias al proyecto SpecBAS.
Conclusión
De las anteriormente mencionadas, cada una es mejor para distintos propósitos, pero para hacer un balance voy a contar lo que, a mi punto de vista, son los pros y contras de ellas.
Arduino
- Es la plataforma más madura de las presentadas aquí
- Es la que posee más versiones a la hora de elegir una placa, desde la LilyPad, que posee un procesador de 8 MHz y una placa flexible para poder coserla a cualquier prenda de vestir, hasta la Due con 84Mhz
- El código generado no es “manejado”, por lo cual, se ejecuta en tiempo real y se tiene acceso directo al hardware, lo cual puede ser bueno por la performance o malo si no se programa adecuadamente
- El entorno de programación es multiplataforma
- Posee muchísimos módulos y sensores, y hasta se pueden conectar dispositivos que no sean específicamente para Arduino
- No se puede debugear fácilmente el código (básicamente el IDE que trae no puede debugear, pero se puede usar otro IDE)
- Al ser una plataforma con tantos años, posee muchísimas librerías disponibles
- Los shields a veces traen conflictos entre si
Netduino
- Es una plataforma de 32 bits, a diferencia de Arduino donde la mayoría de las placas son de 8 bits (aunque desde octubre de 2012 también hay algunas con procesadores CortexM3 de ARM de 32 bits)
- La curva de aprendizaje para programarlo es menor, ya que utiliza lenguajes de alto nivel y, para los que conocen Java, C# es muy parecido
- El debugging se hace de la misma manera que cualquier otra aplicación de .NET
- La mayoría del hardware de Arduino funciona en Netduino
- No se puede programar a bajo nivel
- No dispone de un IDE multiplataforma, solo se puede programar en Windows
- No posee placas de tamaño reducido, como la Arduino Micro
.NET Gadgeteer
- Los procesadores son más potentes que los de Arduino, pero hay que tener en cuenta que el código manejado es más lento que el nativo
- Es aún más fácil de aprender que Netduino
- No se puede programar a bajo nivel
- No dispone de un IDE multiplataforma, solo se puede programar en Windows
- Los cables y dispositivos son caros
- Los conectores de 10 pines muchas veces encarece los dispositivos innecesariamente, por ejemplo, cuando estamos conectando un parlante o un LED
- No posee placas de tamaño reducido
Raspberry Pi
- El hardware de esta plataforma es el más potente
- Posee de forma nativa GPU y conexiones a TV
- Se puede programar en cualquier lenguaje que soporte el sistema operativo instalado
- Es una PC completa con el tamaño de una tarjeta
- No posee placas de tamaño reducido, como la Arduino Micro
- Al poseer un sistema operativo no podemos crear un programa que se ejecute en tiempo real
- Consume más de 700mA
Espero que este resumen les sea de utilidad.
¡A armar sus proyectos y suerte!
[i] Los AVR son una familia de microcontroladores RISC del fabricante estadounidense Atmel. La arquitectura de los AVR fue concebida por dos estudiantes en el Norwegian Institute of Technology, y posteriormente refinada y desarrollada en Atmel Norway, la empresa subsidiaria de Atmel, fundada por los dos arquitectos del chip. Cuenta con bastantes aficionados debido a su diseño simple y la facilidad de programación (Wikipedia).