Desde los electrodomésticos hasta las cámaras digitales e incluyendo los vehículos. Los sistemas embebidos están en múltiples dispositivos de nuestro día a día. En esta publicación hablaremos de lo que son los sistemas embebidos y el papel que cumplen en el IoT.
¿Qué es un sistema embebido?
Un sistema embebido es un dispositivo computacional diseñado para realizar tareas específicas a determinada velocidad y precisión. Esto es distintito a los sistemas generales como una computadora de escritorio en las que puedes realizar diversas tareas. Puede ser parte de un equipo más grande y complejo.
Los sistemas embebidos se caracterizan por tener un consumo reducido de energía y ser pequeños. Pero no cualquier dispositivo electrónico pequeño es un sistema embebido. Los sistemas embebidos cuentan con componentes físicos de lógica computacional como los microcontroladores. Estos les da la capacidad de se programables para realizar tareas rutinarias o de acuerdo a ciertas condiciones.
Un sistema embebido tiene la capacidad de realizar sus tareas con o sin intervención de un usuario. Dependiendo de cómo se halla programado y diseñado.
Partes de un sistema embebido
Fuente de alimentación
Los sistemas embebidos no siempre estarán conectados a la corriente doméstica o del suministro público debido a las particularidades de cada proyecto. En estos casos se pueden usar baterías recargables. Al mismo tiempo las baterías puede recibir cargas de paneles solares.
Otro método de es el energy harvesting, que traducido es cosecha de energía. Consiste en recolectar y almacenar energía de ambiente, por ejemplo de las ondas de radio electromagnética de una ciudad o por el movimiento de la olas en el mar. Estas cantidades de energía pueden ser pequeñas y almacenadas en capacitores o baterías. Este método serviría para sensores independientes o el manejo de información.
Procesamiento digital
Los microcontroladores, también denominado µC, proveen la capacidad de procesamiento a los sistemas embebidos. Un microcontrolador es un sistema que integra un microprocesador, memoria RAM, memoria de almacenamiento para el programa, periféricos y pines de entrada y salida programables. También se puede describir como un sistema basado en bloques con distintas funcionalidades.
El µC tiene una memoria en la que se grabará el programa, el cual es una serie de instrucciones para dicho equipo. La velocidad a la que hará su trabajo dependerá del oscilador o cristal, el cual puede ser el que está integrado dentro del µC o uno externo. La velocidad dependerá de lo que soporte el modelo. Las velocidades usadas suelen estar los 8 MHz y 50 MHz.
Los microcontroladores llevan décadas siendo utilizados en las industrias y también por aficionados. Su uso se traduce en un ahorro de espacio físico y económico. Recientemente su uso se ha extendido por la diversidad de proyectos de placas de desarrollo, entre ellos siendo Arduino de los más populares.
Un microcontrolador puede comunicarse con el exterior usando los pines programables de entrada/salida. Estos pines pueden ser programados de forma independiente. Su nombre hace referencia a si los datos estarán entrando o saliendo.
Cada año los microcontroladores son más potentes y eficientes en el uso de energía. Por ejemplo, es común que se busque un µC con la capacidad de entrar en modo suspendido o de ahorro de energía mientras no se está utilizando y que pueda volver a la actividad velozmente.
Software y firmware
Nos referimos a las instrucciones que estarán en la memoria. El firmware es un software que está en un control más directo con las partes electrónicas.
Anteriormente el firmware se grababa en los microcontroladores y no se podía volver a reescribir. Hoy en día podemos reprogramar los microcontroladores para actualizar el firmware y corregir errores.
Circuito especializado
El microcontrolador y demás componentes del sistema embebido deben comunicarse entre sí y para ello es necesario que se diseñe un circuito eléctrico. Los circuitos no siempre se parecen ya que cada proyecto tiene características diferentes. Por ejemplo algunos factores que se toman en cuenta son las cantidad de componentes, voltajes permitidos, cantidad de corriente, cantidad de capas disponibles, tamaño de la placa e interferencias electromagnéticas.
Entrada de datos
Como recordarás, los microcontroladores pueden programar sus pines para la entrada de datos. Estos datos pueden provenir de sensores, botones y otros microcontroladores. ¿Por qué es necesario? Porque muchas veces necesitamos información del entorno o una orden física para realizar una tarea o simplemente porque necesitamos recolectar esos datos.
Por ejemplo, se puede desarrollar un sistema para un auto que mida factores como el voltaje de la batería, velocidad, estado del motor, ubicación e incluso si se presiono el botón para accionar las ventanas. Los datos entrarán al sistema embebido y de acuerdo al programa se realizará alguna acción.
Salida de datos
Relacionado a lo anterior, también contamos con pines de salida. Estos pines nos pueden servir con los actuadores. Los actuadores son componentes que realizan acciones en el entorno, por ejemplo los motores. Imagina una casa automatizada, los actuadores estarían en sitios como las puertas y persianas para que se abran o cierren por una orden del usuario, horario o condiciones del ambiente captados por los sensores.
Las pantallas también son medios de salidas de datos. En la siguiente imagen se muestra una pantalla Nokia 5110 que solicita escribir tu nombre en el monitor serial (entrada) y lo imprime en la pantalla (salida) .
Comunicación de red
Si hablamos de usar sistemas embebidos en proyectos de Internet de las Cosas debemos tener en cuenta las formas de enviar y recibir información. Estas pueden ser mediante cables o inalámbricas y su elección puede depender de factores del entorno, cantidad y velocidad del envío y recepción de datos.
Más adelante hay más detalles sobre este tema en el que se mencionan algunas opciones en el mercado.
Programación de los sistemas embebidos
Los sistemas embebidos dependen del microcontrolador para ejecutar sus operaciones por lo que tenemos que considerar cómo programar el microcontrolador.
El microcontrolador entiende las órdenes en lenguaje máquina, es un nivel bajo basado en el sistema de numeración binaria. Ósea, utiliza 0 y 1 como estados lógicos.
Si queremos usar lenguajes más entendibles para las personas se necesita un compilador. Sin entrar en demasiados detalles el compilador traduce el código escrito por personas al lenguaje máquina que entienden los microcontroladores.
En ese aspecto tenemos al lenguaje ensamblador. Este lenguaje tiene una comunicación directa a la memoria. A pesar de ser más fácil de usar por una persona hasta las aplicaciones más sencillas como mostrar texto es un proceso largo.
Si subimos le nivel encontramos al lenguaje C. Este lenguaje es muy popular porque permite comunicación directa con el hardware, específicamente para controlar la memoria. Esto es importante porque en la mayoría de situaciones se debe ser preciso en la cantidad de memoria que ocupan los datos de la aplicación con el fin de mantener un rendimiento estable y adecuado.
Al subir más el nivel está C++. Es una mejora de C, lo que destaca es que permite la programación orientada a objetos entre otros aspectos como la seguridad. También está Rust, que también está tomando relevancia al presentarse como una opción moderna a C++.
Como dato adicional también es posible programar microcontroladores con JavaScript y Python. Esto facilita el trabajo a nuevos desarrolladores o en casos en los que no se requiere de un nivel de procesamiento tan optimizado como los que se pueden lograr con C y los lenguajes mencionados anteriormente.
¿Qué microcontroladores se utilizan para los sistemas embebidos?
Esta pregunta no tiene una respuesta fija porque existe una gran variedad de modelos y fabricantes. La complejidad está en que cada modelo tiene un propósito diferente. Esto se nota en la cantidad de pines de entrada y salida que tiene, el tamaño, cantidad de memoria, protocolos de comunicación aceptados y a veces distintas formas de organizar sus componentes internos.
La diversidad de modelos resulta conveniente porque hay más tipos que se pueden adaptar a cada proyecto. Y sí, puede ser tedioso el buscar entre los modelos disponibles, pero es parte importante para que un proyecto sea eficiente en el uso de recursos de hardware, software y hasta para un buen uso del presupuesto.
Si los distinguimos por familia podemos destacar a los PIC y AVR. PIC es una familia de microcontroladores desarrollada por Microchip. Los microcontroladores AVR pertenecen a Atmel, sin embargo, Microchip adquirió Atmel en 2016 por lo que ambas familias le pertenecen a Microchip.
Los PIC y AVR tienen similitudes como que ambos se basan en RISC y tienen memoria flash. Pero tienen diferencias como que los PIC se graban el voltaje alto (más de 5V) por lo que los circuitos para grabar un PIC son más complejos que los de AVR.
Otro fabricante destacable es STM que desarrolla los microprocesadores STM32. Estos microprocesadores están basados en ARM y son de 32 bits.
Podemos distinguir los microcontroladores de 8, 16 y 32 bits. Sin entrar en demasiada complejidad la cantidad de bits se refiere al ancho de datos, la cantidad de direcciones de memoria y rango de números que pueden usar. Esto también afecta en su complejidad al programarlos, eficiencia y uso de energía.
No necesariamente que uno tenga más bits que otro lo vuelve apto para todas las situaciones. Los microcontroladores de 32 bits pueden procesar más información, eso quiere decir que pueden manejar más sensores y actuadores por períodos largos o con bastante frecuencia.
Sin embargo los microcontroladores de 8 bits siguen siendo relevantes para aplicaciones sencillas o con fines educativos. Son una buena forma de empezar en la programación de microcontroladores.
Placas de desarrollo
Existen tarjetas de desarrollo que incorporan los microcontroladores en una placa con los componentes necesarios para su programación de una forma más sencilla. Además incorporan los pines en un formato físico estándar para conectar otros dispositivos.
Estas tarjetas permiten un desarrollo más rápido de proyectos y prototipos.
Arduino
Arduino es uno de los proyectos más populares. La mayoría de modelos permite programar un AVR mediante un cable USB desde la computadora. También existen modelos que incorporan un microcontrolador basado en ARM.
Te invito a esta entrada en la que doy una introducción a Arduino.
ESP32
ESP32 incorpora un módulo WiFi y un terminal Bluetooth en un único chip. Esto es muy conveniente al realizar proyectos de IoT. Existe tarjetas de desarrollo con el ESP32 que facilitan su programación mediante un cable USB. Para cargar un programa se puede utilizar ESP-IDF o desde integraciones con el editor de Arduino.
Entra aquí para ver proyectos con ESP32.
Beaglebone
Beaglebone es una placa con la capacidad de cargar una distribución de Linux embebido. El sistema operativo se carga en una tarjeta SD y puedes programar la placa con otra PC mediante un programa de monitor serial, como Putty.
Raspberry Pi
Otro proyecto que ganó popularidad es Raspberry Pi ya que es una mini computadora. Sus versiones suelen utilizar un CPU basado en ARM con gráfica integrada, cargar distribuciones de Linux con interfaz gráfica, contar con puerto HDMI, audio, Ethernet, pines de entrada y salida, principalmente.
Ordroid
Ordroid es una familia de mini computadoras que tienen similitudes con Raspberry Pi. Ordroid no solo se promociona como fabricante de mini ordenadores ya que también vende tabletas y consolas de videojuegos portátiles. Sus tarjetas pueden cargar sistemas operativos como Android y distribuciones de Linux.
Desafíos de diseñar sistemas embebidos
Elección de componentes
Como te habrás percatado, uno de los retos es elegir componentes. Ya que no únicamente debes ver por el microcontrolador, debes tener el cuenta los sensores que usarás, los actuadores, uso de energía, componentes para la PCB.
La elección que hagas también debe ser pensada en el futuro del proyecto. Imagina que debes actualizar el programa, que en un momento lleguen más datos de los esperados, que las condiciones del ambiente cambien, entre otros factores. Se deben tener en cuenta esas posibles situaciones para que el equipo que diseñemos pueda adaptarse.
Seguridad en sistemas embebidos
La seguridad es un aspecto importante. Hay que tener en cuenta la forma en que se actualizará el software, con que frecuencia lo hará, la seguridad al abrir el dispositivo y cómo evitar que otras personas lo hagan. Además, el protocolo de comunicación debe ser seguro, ya sea cableado o inalámbrico. Para esto se pueden utilizar certificados que autentifiquen y autoricen la conexión del dispositivo a las plataformas de IoT.
Por otro lado se puede optar por cifrar la información del dispositivo y también las conexiones.
Sistemas embebidos en IoT
Habrás notado que los sistemas embebidos tienen características alineadas con las funciones en un aplicación de Internet de las Cosas (IoT). Bajo consumo de energía, recolección de datos, salida de datos y portabilidad.
De hecho los sistemas embebidos ya se aplican en el IoT. Aquí hay una lista de usos:
- Altavoces inteligentes como los de Google. Estos altavoces se conectan a los servicios de Google y te permiten controlar dispositivos de tu vivienda utilizando comandos de voz. Al mismo tiempo pueden dar respuesta sonora.
- Aplicar sistemas de monitoreo de energía. Estos pueden recibir los datos leídos por sensores de energía y enviarlos bases de datos para analizarlos. Con esto se logra un uso eficiente de energía, que se traduce en ahorro económico.
- Sistemas para recolectar los datos de dispositivos médicos para que los profesionales de la salud puedan hacer un seguimiento más completo a los pacientes, incluso de forma remota.
- Aplicaciones industriales en las que los sensores y actuadores pueden ser parte importante de las cadenas de producción, verificación de calidad y seguridad.
Cuando una empresa aplica soluciones de IoT suele ser porque dicha solución le ahorrará costos o porque agilizará los procesos. Medir la energía, tener un mejor control de la producción, evitar averías, entre otros beneficios, son equivalentes a evitar gastos inesperados y ahorrar tiempo que se puede usar en otras tareas.
Las personas comunes también pueden ahorrar tiempo y dinero usando sistemas embebidos en IoT. Pero también podría hacerse énfasis en la comodidad que pueden ganar. Que los dispositivos en tu hogar respondan a comandos de voz, que tengan horas de encendido y apagado, que te den reportes, y demás, te quitan preocupaciones y puede darte tiempo.
Comunicación inalámbrica
En aplicaciones de IoT, como lo indica el nombre, necesitamos enviar los datos a internet. Dado que estos dispositivos estarán en entornos alejados o en movimiento son pocas las veces que podemos dar por hecho que habrá una red wifi o cableada. Una vez más, dependerá de las necesidades del proyecto.
Algunos microcontroladores o SoC cuentan con módulo para la comunicación inalámbrica. Como el ESP32 que es conocido por incorporar WiFi y Bluetooth en un solo módulo.
O podemos trabajar con módulo aparte comunicándose con el microcontrolador. Por ejemplo el SIM800L, este es un modem para GPRS y 2G. Puede enviar mensajes enviar y recibir mensajes SMS, llamadas y datos de internet.
Puede usar Sigfox o LoRa. Dos redes LPWAN (Low Power Wide Area Network) pensadas para el IoT con distintos modelos de implementación y negocio.
Sigfox depende de una empresa para la instalación de antenas y, por lo tanto, de su cobertura. Solo debes pagar por una suscripción, vincular tu equipo y puedes empezar a enviar datos a su callback. Tiene límites como que solo puedes enviar 140 mensajes al día de 12 bytes cada uno.
En cambio, en una red LoRa tú debes adquirir los equipos como transmisores y gateways, además de hacer la instalación y configuración. Tienes un mayor control a cambio de un mayor tiempo y costos de implementación. Ambas redes pueden ajustarse condiciones diferentes de trabajo, por lo que se debe elegir la que más conviene.
Conclusiones de sistemas embebidos en el internet de las cosas
Los sistemas embebidos sistemas embebidos en el IoT proveen funciones especializadas y estás funciones pueden cumplir los requerimientos de la solución a implementar. Entre los otros beneficios de los sistemas embebidos están su portabilidad y capacidad de proveer el procesamiento, entrada, salida, envío y recepción de datos.
El proceso de desarrollo de un sistema embebido puede ser complejo debido a todo lo que se debe considerar: materiales, módulos, requerimientos, programación, fabricación, entre otros.
Además se deben considerar los aspectos de seguridad física y de software.
Te invitamos a tomar el curso de Introducción al ESP32: Introducción al ESP32 | TodoMaker’s School