Tabla de contenido:

State Machine en Arduino: un semáforo para peatones: 6 pasos (con imágenes)
State Machine en Arduino: un semáforo para peatones: 6 pasos (con imágenes)

Video: State Machine en Arduino: un semáforo para peatones: 6 pasos (con imágenes)

Video: State Machine en Arduino: un semáforo para peatones: 6 pasos (con imágenes)
Video: 10. Finite State Machine 2024, Mes de julio
Anonim
State Machine en Arduino: un semáforo para peatones
State Machine en Arduino: un semáforo para peatones

Hola, voy a mostrarte cómo programar un semáforo para peatones para Arduino en C ++ con una máquina de estado finito usando YAKINDU Statechart Tools. Esto demostrará el poder de las máquinas de estado y se puede utilizar como modelo para otros proyectos.

Suministros

Solo necesitas un Arduino, algunos pulsadores, LEDs, Jumper y resistencias.

Hardware

  • 2x pulsador
  • 2x semáforos o puede utilizar LED con resistencias de 220 ohmios
  • 2x resistencias de 10k Ohm
  • Tablero de circuitos
  • Saltador
  • Arduino Uno / Mega (o cualquier otro, que tenga al menos 8 GPIO)

Software

  • Herramientas de gráficos de estado de YAKINDU
  • Eclipse C ++ IDE para Arduino

Paso 1: defina cómo funciona: semáforo para peatones

En primer lugar, debemos especificar cómo debe funcionar el semáforo para peatones. Intenté resumir las viñetas:

  • Se utilizan dos semáforos, uno para los coches y otro para los peatones.
  • El semáforo se puede encender con un botón
  • El peatón puede solicitar cruzar la calle presionando un botón
  • El semáforo apagado se indica mediante el parpadeo de ambos LED amarillos
  • Después de encenderse, el semáforo espera 10 segundos en modo seguro.
  • Después del modo seguro, los automóviles siempre tienen una fase verde hasta que un peatón inicia una solicitud
  • La solicitud de un peatón para cruzar se indica al alternar el LED amarillo

Además, hay algunos eventos de tiempo dependiendo de la forma en que funciona un semáforo.

Paso 2: construye el circuito

Construye el circuito
Construye el circuito

Comencemos a configurar el circuito. En mi ejemplo, como puede ver en la imagen de vista previa, he usado un Arduino Mega 2560, pero cualquier otro Arduino con al menos ocho GPIO debería estar bien. Además, compré algunos semáforos de 5V en Amazon. Simplemente busque Traffic Light Arduino. De lo contrario, simplemente puede usar seis LED diferentes. Además, necesita dos pulsadores y dos resistencias de 10k Ohm.

Los tres LED de la izquierda se utilizan para el tráfico de automóviles y los tres LED de la derecha para los peatones, donde el amarillo puede indicar una solicitud.

Paso 3: crear la máquina de estado

Creando la máquina de estado
Creando la máquina de estado

Entonces, como puede ver, hay dos estados principales con miembros compuestos: estado activado y estado desactivado. Puede cambiar entre ambos estados utilizando el evento onOff, que está conectado al botón ON / OFF. En el estado inicial, el estado apagado, ambos LED amarillos comienzan a parpadear cada segundo. Una vez encendido el semáforo, comienza en Safestate. Pasados 10 segundos se manejará el comportamiento típico de los semáforos. El LED rojo y amarillo se encenderá en el estado StreetPrepare y el semáforo se pondrá verde después de 2 segundos más. A partir de ahora, la máquina de estado está esperando el evento pedestrianRequest, que está conectado al segundo botón. Después de enviar el evento, la solicitud se indicará alternando el LED amarillo cada segundo en el estado PedWating. 7 segundos después, el semáforo cambiará a amarillo primero y luego a rojo hasta que los peatones reciban la señal para entrar en el estado PedestrianGreen. Después de esto, el PedestrianRed se activa y el ciclo se repite. Esto solo se puede interrumpir apagando el semáforo nuevamente.

Paso 4: ejecutar el ejemplo

Paso 5: Código C ++ generado

El código C ++ generado es un caso de conmutación clásico para manejar la lógica de la máquina de estado. Esto es solo un fragmento de código de cómo se ve:

void TrafficLightCtrl:: runCycle () {clearOutEvents (); for (stateConfVectorPosition = 0; stateConfVectorPosition <maxOrthogonalStates; stateConfVectorPosition ++) {switch (stateConfVector [stateConfVectorPosition]) {caso main_region_on_r1_StreetGreen: {main_region_on_r1_StreetGreen_react (verdadero); rotura; } caso main_region_on_r1_PedWaiting_r1_waitOn: {main_region_on_r1_PedWaiting_r1_waitOn_react (verdadero); rotura; } predeterminado: romper; } clearInEvents (); }

Paso 6: Obtenga el ejemplo

Todo el ejemplo está listo para compilar y ejecutar. Viene con YAKINDU Statechart Tools, que es gratuito para uso no comercial. Después de la descarga, puede importar el ejemplo directamente en la herramienta:

Archivo -> Nuevo -> Ejemplo -> Ejemplos de gráficos de estado de YAKINDU -> Siguiente -> Semáforo (C ++) para Arduino

> AQUÍ puedes descargar YAKINDU Statechart Tools <<

Puede comenzar con una prueba de 30 días. Luego, debe obtener una licencia, que es gratuita para uso no comercial.

Recomendado: