Las máquinas de estados finitos sirven para diseñar proyectos de automatización y de aficionados con una estructura clara, y son una base de la electrónica y la automatización industrial. Open Electronics publicó una guía que muestra cómo llevarlas a una placa Arduino.
Una máquina de estados finitos (FSM, por finite state machine), también llamada autómata finito (FSA), es un modelo que describe el comportamiento de un sistema con un número finito de estados. En cada instante el sistema está en uno solo de ellos, el estado actual, y pasa de un estado a otro solo cuando se cumplen ciertas condiciones. Ese cambio se llama transición.
Máquinas de estados en la vida cotidiana
El modelo está muy extendido en la ciencia porque su funcionamiento se caracteriza por ser simple y claro, y se aplica especialmente bien en la automatización industrial. Diseñar a partir de una máquina de estados finitos facilita construir dispositivos y sistemas electrónicos.
Una vez aprendido, el método también le sirve a los makers. Con placas como Arduino, cada vez más personas sin conocimientos profundos de electrónica o de computación, o que parten de cero, entran a un campo que antes era de especialistas.
Incluso quienes tienen algo de base suelen pasar por alto que las máquinas de estados finitos están en todas partes. El ascensor, la lavadora, la máquina expendedora de bebidas o de colaciones, el semáforo y el portón automático son ejemplos. Visto como máquina de estados finitos, un ascensor es un autómata con tantos estados como pisos, y la transición de un estado a otro la definen los botones de llamada de cada piso y los de la cabina.
El diagrama de estados
Una máquina de estados finitos se define con un diagrama de estados, que se describe gráficamente con un grafo dirigido.
Un grafo dirigido (figura 1) es una estructura que casi siempre se representa con un número finito de círculos (nodos) y un número finito de flechas (aristas dirigidas) que conectan cada nodo con los demás. Las aristas de un grafo dirigido tienen sentido.
Los nodos representan los estados, a los que se asocian las acciones que hay que ejecutar dentro de cada uno (por ejemplo, encender una lámpara o arrancar un motor). Las aristas, que a veces se reemplazan por segmentos rectos orientados, definen las condiciones bajo las que ocurren las transiciones, provocadas por eventos externos (por ejemplo, apretar un botón).
¿Cómo se construye una máquina de estados?
Tras esta introducción, la guía describe el procedimiento para construir una máquina de estados. El diagrama que lo resume aparece en la figura 2.
El paso que va del análisis del problema a la definición del grafo dirigido es prácticamente independiente del entorno de desarrollo que se use, así que vale en general. Del análisis del problema salen el número de estados del autómata, las condiciones para pasar de un estado a otro y, en consecuencia, el grafo dirigido.
El paso siguiente, el que une el diagrama de estados con el código, depende en parte del entorno elegido. De aquí en adelante la guía usa una placa Arduino, la más difundida y la más simple para trabajar.
Del grafo al código con switch-case
Para escribir el código se puede seguir un procedimiento estándar. Al programar, la información del grafo dirigido se traduce en una estructura de selección múltiple (switch-case) con tantos casos como estados. A cada caso le corresponde una subrutina, y dentro de esa subrutina se definen, con estructuras de selección o iteración (if, while, for) según corresponda, las condiciones para pasar de un estado a otro y las acciones que hay que ejecutar en cada estado.
Los casos que se ejecutan en cada momento dependen del valor asignado a la variable sobre la que opera la instrucción, también llamada selector. Según la guía, este es el enfoque más claro en estilo y el más intuitivo. Una alternativa es prescindir de las subrutinas y poner dentro de cada caso las instrucciones que definen las transiciones y las acciones de ese estado. Los ejemplos que siguen son fáciles de armar y muestran el procedimiento, para después aplicarlo a casos más complejos.
Primer ejemplo, la combinación de luz de una casa
La combinación (o conmutación de dos puntos) es un dispositivo muy común en las instalaciones eléctricas domiciliarias. Permite encender un punto de luz desde dos lugares distantes. El esquema del circuito aparece en la figura 3.
El autómata que define su funcionamiento es muy simple, porque tiene dos estados, apagado y encendido de la lámpara L (llamada LED), definidos como estado 0 y estado 1. Las condiciones para pasar de apagado a encendido y al revés dependen de cómo se aprieten los dos botones, llamados P1 y P2, que reemplazan a los interruptores D1 y D2. Basta con apretar cualquiera de los dos botones para pasar de un estado al otro (grafo dirigido en la figura 4). El esquema de conexión de la figura 5 corresponde al montaje práctico del autómata con una placa Arduino UNO.
El código Arduino de la combinación
El código del autómata es para Arduino. El botón P1 va conectado al pin 10, el botón P2 al pin 12 y el LED al pin 8.
Como hay dos estados, la estructura switch-case lleva dos casos, y las subrutinas que resultan definen el estado del LED y las condiciones de las transiciones. En la solución alternativa que propone la guía, las instrucciones que definen las transiciones van dentro de los casos. Una variante posible es otra instalación común en las casas, encender un punto de luz desde tres lugares, el circuito conocido como conmutación con interruptor intermedio.
Segundo ejemplo, LED que se encienden en secuencia
El segundo montaje usa dos LED (LED 1 y LED 2) que se encienden y apagan en secuencia cada vez que se aprieta un botón. Se definen cuatro estados posibles.
- Estado 0. Es el estado inicial, con los dos LED apagados. Al apretar el botón se pasa al estado 1.
- Estado 1. Se enciende el LED 1. Al apretar el botón por segunda vez se pasa al estado 2.
- Estado 2. Se apaga el LED 1 y, después de 3 segundos, se encienden los dos. Al apretar el botón por tercera vez se pasa al estado 3.
- Estado 3. Se apagan los dos LED y, después de 3 segundos, se enciende el LED 2. Al apretar el botón por cuarta vez se vuelve al estado 0.
De la descripción del problema se llega fácilmente al grafo dirigido de la figura 6. El esquema de conexión de la figura 7 corresponde al montaje práctico del autómata con una placa Arduino UNO.
El botón va conectado al pin 12, el LED 1 al pin 8 y el LED 2 al pin 10. Con cuatro estados, la estructura switch-case lleva cuatro casos, y las subrutinas que resultan definen el estado de los LED y las condiciones de las transiciones.
Tercer ejemplo, hacia la automatización industrial
El tercer ejemplo muestra, de forma muy simplificada, algunas acciones típicas de la automatización industrial. La figura 8 presenta una cinta transportadora cuyo movimiento depende del estado de un botón (para arrancar la cinta), de dos finales de carrera (llamados de avance y de retorno, ubicados en los extremos de la cinta) y de una fotocelda en una posición intermedia. El funcionamiento se resume en cuatro estados.
- Estado 0. Es el estado inicial, con el motor detenido. Al apretar el botón PA se pasa al estado 1.
- Estado 1. La cinta arranca en avance. Desde aquí hay dos caminos. Si la fotocelda se activa, se pasa al estado 2. Si se activa el final de carrera FCA, se pasa directo al estado 3.
- Estado 2. El motor se detiene 60 segundos y retoma el movimiento, todavía en avance. Cuando se activa el final de carrera FCR, el sistema pasa al estado 3.
- Estado 3. El motor se detiene 60 segundos y retoma el movimiento en retroceso. Cuando se activa el final de carrera FCR, el sistema vuelve al estado 0.
El diagrama y el cableado de la cinta
De la descripción del problema se llega fácilmente al diagrama de estados de la figura 9. Para comprobar que el planteamiento es correcto, el montaje usa dos LED que simulan el avance y el retroceso del motor, un botón que simula el de arranque y tres botones que simulan los tres sensores. El esquema de conexión de la figura 10 corresponde al montaje práctico de la máquina de estados con una placa Arduino UNO.
Lo que deja la guía
Las máquinas de estados finitos permiten modelar sistemas de comportamiento determinista, y por eso tienen un lugar central en la ingeniería de control y automatización. Ofrecen un marco de método para describir sistemas complejos con estados bien definidos y transiciones precisas, lo que facilita diseñar circuitos electrónicos y sistemas de automatización industrial. Como cada estado posible del sistema queda representado de forma explícita, ayudan a prevenir errores y a mejorar la confiabilidad de los procesos automatizados.
La guía también destaca a plataformas como Arduino para llevar las FSM a la práctica, porque son accesibles tanto para ingenieros con experiencia como para aficionados y principiantes. Con Arduino, cualquier persona puede desarrollar y probar prototipos de sistemas automatizados.















