Índice:

Máquina de estado no Arduino - um semáforo de pedestres: 6 etapas (com imagens)
Máquina de estado no Arduino - um semáforo de pedestres: 6 etapas (com imagens)

Vídeo: Máquina de estado no Arduino - um semáforo de pedestres: 6 etapas (com imagens)

Vídeo: Máquina de estado no Arduino - um semáforo de pedestres: 6 etapas (com imagens)
Vídeo: TRILHA 6: Aplicação de máquina de estados para implementação de um semáforo - DIA 2 2024, Novembro
Anonim
Máquina de estado no Arduino - um semáforo de pedestres
Máquina de estado no Arduino - um semáforo de pedestres

Olá! Vou mostrar a você como programar um semáforo de pedestres para Arduino em C ++ com uma máquina de estado finito usando YAKINDU Statechart Tools. Isso demonstrará o poder das máquinas de estado e pode ser usado como um modelo para projetos futuros.

Suprimentos

Você só precisa de um Arduino, alguns botões, LEDs, jumper e resistores.

Hardware

  • 2x botão de pressão
  • 2x semáforos ou você pode usar LEDs com resistores de 220 Ohm
  • 2 resistores de 10k Ohm
  • Tábua de pão
  • Saltador
  • Arduino Uno / Mega (ou qualquer outro, que tenha pelo menos 8 GPIOs)

Programas

  • YAKINDU Statechart Tools
  • Eclipse C ++ IDE para Arduino

Etapa 1: definir como funciona: semáforo de pedestres

Primeiramente, precisamos especificar como o semáforo de pedestres deve funcionar. Tentei resumir os pontos principais:

  • Dois semáforos são usados - um para os carros e outro para os pedestres
  • O semáforo pode ser ligado usando um botão
  • O pedestre pode solicitar o cruzamento da rua pressionando um botão
  • O semáforo desligado é indicado piscando os dois LEDs amarelos
  • Depois de ligar, o semáforo espera por 10 segundos no modo de segurança
  • Após o modo de segurança, os carros sempre têm uma fase verde até que um pedestre inicie uma solicitação
  • A solicitação de pedestres para travessia é indicada pelo LED amarelo alternado

Além disso, existem alguns eventos de tempo dependendo da forma como o semáforo funciona.

Etapa 2: construir o circuito

Construa o Circuito
Construa o Circuito

Vamos começar a configurar o circuito. No meu exemplo, como você pode ver na imagem de visualização, usei um Arduino Mega 2560, mas todos os outros Arduino com pelo menos oito GPIOs devem funcionar. Além disso, comprei alguns semáforos de 5V na Amazon. Basta pesquisar por Traffic Light Arduino. Caso contrário, você pode simplesmente usar seis LEDs diferentes. Além disso, você precisa de dois botões e dois resistores de 10k Ohm.

Os três LEDs da esquerda são usados para o tráfego de automóveis e os três LEDs da direita para os pedestres, onde o amarelo pode indicar uma solicitação.

Etapa 3: Criação da máquina de estado

Criando a Máquina de Estado
Criando a Máquina de Estado

Portanto, como você pode ver, há dois estados principais com membros compostos - estado ativado e estado desativado. Você pode alternar entre os dois estados usando o evento onOff, que está conectado ao botão ON / OFF. No estado inicial, o estado desligado, os dois LEDs amarelos começam a piscar a cada segundo. Uma vez que o semáforo foi ligado, ele começa no Safestate. Após 10 segundos, o comportamento típico dos semáforos será tratado. O LED vermelho e amarelo acenderá no estado StreetPrepare e o semáforo ficará verde após mais 2 segundos. A partir de agora, a máquina de estado está aguardando o evento pedestrianRequest, que está conectado ao segundo botão. Após o envio do evento, a solicitação será indicada alternando o LED amarelo a cada segundo no estado PedWating. 7 segundos depois, o semáforo será alterado primeiro para amarelo e depois para vermelho até que os pedestres recebam o sinal para entrar no estado PedestrianGreen. Depois disso, o PedestrianRed é ativado e o ciclo se repete. Isso só pode ser interrompido desligando o semáforo novamente.

Etapa 4: executando o exemplo

Etapa 5: código C ++ gerado

O código C ++ gerado é um caso de comutação clássico para lidar com a lógica da máquina de estado. Este é apenas um trecho de código de sua aparência:

void TrafficLightCtrl:: runCycle () {clearOutEvents (); para (stateConfVectorPosition = 0; stateConfVectorPosition <maxOrthogonalStates; stateConfVectorPosition ++) {switch (stateConfVector [stateConfVectorPosition]) {case main_region_on_r1_StreetGreen: {main_region_on_r1_StreetGreen_react (true); pausa; } case main_region_on_r1_PedWaiting_r1_waitOn: {main_region_on_r1_PedWaiting_r1_waitOn_react (true); pausa; } padrão: break; } clearInEvents (); }

Etapa 6: obtenha o exemplo

Todo o exemplo está pronto para compilar e executar. Ele vem com as ferramentas YAKINDU Statechart, que são gratuitas para uso não comercial. Após o download, você pode importar o exemplo diretamente na ferramenta:

Arquivo -> Novo -> Exemplo -> Exemplos de gráfico de estado YAKINDU -> Próximo -> Semáforo (C ++) para Arduino

> AQUI você pode baixar YAKINDU Statechart Tools <<

Você pode começar com um teste de 30 dias. Depois, você deve obter uma licença, que é gratuita para uso não comercial!

Recomendado: