lunes, 10 de diciembre de 2012 a las 23:21hs por Gustavo Cantero (The Wolf)
Hace un tiempo estuve viendo distintas plataformas de hardware para hacer dispositivos programados por nosotros que puedan tomar información del exterior (como temperatura, humedad, voltaje, etc.) y mostrarla al usuario, y me llevé una sorpresa al ver que existen muchas placas de desarrollo, con distintos microcontroladores y especificaciones técnicas, que nos permiten hacer esto, y la mayoría a un bajo costo. Por esto mismo se me ocurrió hacer este artículo contando un poco lo que encontré (al menos de los productos más conocidos por mí).
Arduino (www.arduino.cc)
Arduino es una plataforma de hardware libre (Open Hardware), basado en un microcontrolador Atmel AVR[i], en particular el ATmega8, ATmega 168, ATmega328 y el ATmega1280, con varios puertos digitales y analógicos de entrada y salida, a través de los cuales podemos leer información del medio ambiente utilizando diversos sensores (de temperatura, humedad, luminosidad, magnetismo, corriente, coordenadas de un gps, etc.), mostrar información o notificaciones (usando LEDs, displays LCD, parlantes, etc.) o hasta interactuar con el usuario (botones, joysticks, etc.).
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 |
A algunas de estas placas se les pueden acoplar “shields”, que son otras placas que se conectan encima de Arduino para extender sus capacidades, como conexión Ethernet, WiFi, GPRS o matrices de LEDs. A su vez la mayoría de estas placas permiten volver a conectarle otro shield encima para seguir expandiendo las capacidades de nuestra plataforma. En las siguientes página se pueden encontrar listas con algunos shields: Arduino and Arduino-Compatible Hardware y Arduino Shield List.
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)
Esta es la plataforma de Microsoft para programación de microcontroladores, la cual fue desarrollada por Secret Lab LLC, basándose en la idea de Arduino.
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)
Esta plataforma, que fue lanzada en 2011, está basada en la idea de poder conectar de forma muy sencilla distintos dispositivos a nuestra placa base, sin necesidad de pensar en resistencias, consumo de los componentes ni nada por estilo, o sea, más o menos como un “lego para desarrolladores”. Al momento esta plataforma posee muchos dispositivos en el mercado: display, cámaras, interfaces de red, lectores/grabadores de tarjetas, joysticks, bluetooth, etc.
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 |
Cada placa, además de las especificaciones que copié en la tabla anterior, posee variadas características, por ejemplo, soporte para I2C, SPI, FAT16/32, protocolo PPP, controlador para pantallas touch, etc. Para una descripción detallada del soporte de cada placa recomiendo ver la especificación de cada una (el nombre de cada placa tiene un link a la misma).
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 fue creada por la “Fundación Raspberry Pi” del Reino Unido para estimular la enseñanza de las ciencias de la computación en las escuelas. Su salida a la venta fue a principios de este año, 2012, con un total de 10.000 placas fabricadas en China y Taiwan.
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
Existen otras plataformas como Freaduino (basado y compatible con en el Arduino Duemilanove), Seeduino (también compatible con Arduino), AMICUS 18 (que es muy parecido a Arduino pero con un procesador PIC 18F25K20 de 64MHz y el compilador Proton BASIC), Stellaris LaunchPad (de Texas Instruments), ODROID-U2 (que salió hace unas semanas y posee un procesador ARM Cortex-A9 con cuatro núcleos de 1.7GHz con acelerador gráfico y mide la mitad de una tarjeta de crédito) y muchos otros, pero mi intensión en este artículo era que conocieran las placas más usadas y accesibles del momento.
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).
Categoria Microcontroladores | Etiquetas: Arduino, Atmel, Gadgeteer, netduino, Raspberry Pi
me gusta, interesante motivacion
Gracias, Luis!
[…] puertos digitales, como el Arduino Uno que es el más utilizado (se puede observar en el artículo Plataformas de hardware que escribí hace un tiempo). Incluso si no utilizáramos el punto necesitaríamos 7 puertos por […]