Ahora mas que nunca surge la pregunta: ¿Pi vs Arduino? Esto sucedió durante una charla de introducción al mundo de la electrónica que estaba dando a ingenieros de software.
Mostré tres formas diferentes de hacer parpadear un LED usando Raspberry Pi, Arduino y un temporizador 555. Una de las preguntas al final fue por qué utilizar uno u otro.
Esto solía ser claro, pero ahora hay un solapamiento mucho mayor.
He tomado el enfoque de ampliar esto de Raspberry Pi a todos los ordenadores Linux embebidos y Arduino todos los microcontroladores.
Pi vs Arduino
Software
Uno de los factores diferenciales clave solía ser la necesidad de programar los microcontroladores en un lenguaje de bajo nivel. Como por ejemplo ensamblador o C.
Esto ya no es así y se admiten múltiples lenguajes en ambas opciones. Las opciones más comunes para los microcontroladores son C y MicroPython. Pero ahora es posible utilizar JavaScript, Rust, Go, C# e incluso lenguajes gráficos basados en bloques.
Algunos lenguajes como Haskall, Kotlin y PHP sólo están disponibles para ordenadores integrados.
Por lo tanto, si te centras en un lenguaje, eso podría influir en la solución para tu proyecto.
Tamaño y factor de forma
En general, los ordenadores integrados son más grandes que los microcontroladores.
Sin embargo, no hay que buscar demasiado para encontrar excepciones a esta regla. A lo largo de los años, las placas han ido reduciendo su tamaño.
Por ejemplo, existe el Pocket Beagle, basado en Linux. Una placa diseñada para caber dentro de una lata de menta y que mide 35mm x 56mm.
La placa tiene:
- un zócalo para tarjeta SD y
- un micro USB junto con algunas E/S de propósito general (GPIO). Para la interconexión con el mundo exterior (como el parpadeo de un LED)
Igualmente, tanto la Pi Zero como la Pi Zero W miden 66,0 mm x 30,5 mm. Lo que es más pequeño que el Arduino Nano, que mide 18 x 45 mm.
Además de los GPIO los Zeros también tienen USB, Cámara y un puerto mini HDMI.
En cuanto a las grandes placas basadas en microcontroladores, está el Arduino Mega. Esta placa utiliza su gran tamaño (101,52 mm x 53,3 mm) para ofrecer muchos pines GPIO y múltiples puertos serie.
Así que el tamaño puede ser un factor decisivo a la hora de elegir una placa. Pero no a la hora de seleccionar si vas por la ruta del Linux embebido o del microcontrolador.
Precio
Al igual que el tamaño, los ordenadores integrados suelen ser más caros que las placas de microcontroladores.
Sin embargo, el equipo de Raspberry Pi ha vuelto a eliminar esa diferenciación con su Pi Zero que cuesta (al precio actual) sólo 5 dólares.
Esto está por debajo de muchas placas de microcontroladores. La notable excepción es su propia Raspberry Pi Pico, que cuesta sólo 4 dólares.
En el otro extremo está la Arduino Portenta H7, que cuesta 100 dólares. Esta placa tiene un procesador principal formado por dos núcleos, un Cortex® M7 que funciona a 480 MHz y un Cortex® M4 que funciona a 240 MHz y es capaz de procesar imágenes y ejecutar machine learning como TensorFlow™ Lite.
Potencia de cálculo
La capacidad de computación de la placa es otro diferenciador clave. Como demuestra el Portenta, hay microcontroladores con procesadores muy capaces.
Sin embargo, la regla general es que los ordenadores integrados tienen más potencia de procesamiento que los microcontroladores.
Esto no significa que vayan a ser automáticamente más rápidos en una tarea concreta que una solución basada en un microcontrolador. Todo esto depende en gran medida de la optimización del código.
Memoria
Al igual que la potencia de cálculo, la memoria suele ser mayor en los ordenadores integrados que en los microcontroladores.
Por eso, las tareas que necesitan mucha memoria, como el procesamiento de imágenes, el vídeo o las bases de datos, son más adecuadas para un ordenador integrado.
Una de las razones por las que el Portenta puede procesar modelos de aprendizaje automático para imágenes es que éstas se han reducido a un tamaño de cuadro más pequeño.
A menudo, los proyectos de microcontroladores pueden resolver los problemas de memoria almacenando los datos externamente en una tarjeta SD.
Incluso es posible tener un microcontrolador conectado a una unidad de disquete, aunque eso no le daría mucha más capacidad.
Pantallas
Otra cosa que típicamente usa mucha memoria es tener una pantalla de alguna forma conectada al proyecto.
Esto, por supuesto, depende de la resolución. Una pequeña pantalla basada en caracteres puede necesitar sólo unos cientos de bytes de memoria, pero una imagen HD o 4K requerirá muchos megabytes.
Hay maneras de comprimir y transmitir los datos, pero la mayoría de las pantallas de vídeo requieren una buena cantidad de memoria, lo que le empuja a la ruta de Linux embebido.
Así que para una máquina de arcade o centro de medios de comunicación sería tu mejor opción.
Hardware externo
Tanto los Linux embebidos como los microcontroladores pueden hablar con dispositivos USB. Lo que significa acceso a una amplia gama de dispositivos de almacenamiento y otro hardware.
Aunque no todos los microcontroladores pueden soportar las altas velocidades que necesitan dispositivos como las cámaras web.
Solía ser el caso de que había una gama más amplia de dispositivos que se podían conectar a tu microcontrolador frente a la computadora Linux embebida, pero ese no es el caso ahora.
Hay una amplia gama de dispositivos de entrada y salida, sensores y actuadores que funcionarán bien con ambos.
Los accesorios enchufables se llaman “Hats”, “Shields” o “Capes”. Además muchas de las placas diseñadas para uno pueden adaptarse al otro.
He utilizado tanto las placas diseñadas para una Pi con un microcontrolador como las diseñadas para un microcontrolador con una placa Linux.
La cosa clave a tener en cuenta es el voltaje de los pines de E/S. Esto es a menudo 5v, 3.3v pero puede ser más bajo como la especificación 96Board que tiene un rango de 1.8v.
Mezclar las placas diseñadas para diferentes voltajes puede funcionar a veces, pero más a menudo resulta en una comunicación poco fiable o incluso en la rotura de piezas.
Existen unos dispositivos llamados “level shifters” si necesitas solucionar este problema.
Potencia
Lo último que hay que mencionar es la energía y el efecto secundario de la energía, que es el calor.
La mayoría de los microcontroladores tienen modos de ahorro de energía que permiten ponerlos en reposo y funcionar con pequeñas baterías durante un largo período de tiempo.
Esto es bueno para aplicaciones de monitorización en las que se toma una muestra una vez por hora o incluso una vez al día.
Esto puede hacerse con ordenadores integrados, pero suele ser mucho más difícil.
El ordenador integrado suele tardar unos segundos en arrancar hasta el punto de ejecutar su código, mientras que el microcontrolador es instantáneo.
Así que si tienes una aplicación que necesita dormir (para conservar la batería) pero despertar y responder rápidamente, entonces un microcontrolador sería una buena opción.
Tiempo real
La naturaleza de un ordenador embebido basado en Linux significa que tareas como la escritura en el disco o la comprobación de la hora pueden interrumpir algún comportamiento crítico de su sistema.
Si necesitas tener control sobre esto para, por ejemplo, equilibrar un robot o controlar una máquina herramienta, entonces necesitarás tener algún tipo de capacidad de tiempo real.
La serie Beaglebone proporciona esta capacidad con sus “Unidades de Tiempo Real Programables”. Pero también es posible mediante el uso de un “Sistema Operativo de Tiempo Real”. Aunque esto puede restar uno de los beneficios de usar Linux, que es la familiaridad.
El microcontrolador proporciona un comportamiento mucho más determinista, ya que no suele tener todos estos procesos en segundo plano.
¿Por qué no ambos?
Al igual que el enfoque del Beaglebone descrito anteriormente, es posible crear una solución utilizando tanto un microcontrolador como un ordenador integrado.
El problema de este enfoque es el aumento del número de piezas, lo que puede suponer un incremento del coste y del tamaño.
Aunque una Raspberry Pi Zero y 3 Pi Pico siguen costando mucho menos que un Arduino Mega.
¡Debería haber utilizado un 555!
La ventaja de un microcontrolador o de un ordenador es la flexibilidad, pero si tu necesidad está claramente definida, el hardware dedicado puede ser una solución más sencilla.
No estoy seguro de que un temporizador 555 sea el mejor enfoque para muchos problemas, pero estoy planeando utilizar al menos uno en mi próximo proyecto.