Semáforo com Arduino

Como referenciar este texto: Semáforo com Arduino’. Rodrigo Terra. Publicado em: 16/01/2025. Link da postagem: https://www.makerzine.com.br/educacao/semaforo-com-arduino/.

 

Semáforo com Arduino: projeto simples para aprender eletrônica, programação e pensamento computacional

Construir um semáforo com Arduino é uma das atividades mais clássicas para quem está começando no mundo da eletrônica, da programação e da cultura maker. Apesar de ser um projeto aparentemente simples, ele permite trabalhar conceitos muito importantes, como sequência lógica, temporização, controle de saídas digitais, montagem de circuitos, uso de LEDs, resistores e organização de código.

Além disso, o semáforo é um objeto presente no cotidiano dos estudantes. Isso torna a atividade mais significativa, pois o aluno não está apenas acendendo e apagando luzes aleatoriamente: ele está simulando o funcionamento de um sistema real de organização do trânsito.

Neste projeto, vamos montar um semáforo simples com três LEDs: vermelho, amarelo e verde. Cada LED será controlado pelo Arduino, acendendo em uma sequência parecida com a de um semáforo de trânsito.

 

O que é Arduino?

O Arduino é uma plataforma de prototipagem eletrônica composta por uma placa programável e um ambiente de desenvolvimento. Com ele, é possível criar projetos interativos usando sensores, motores, LEDs, botões, displays e diversos outros componentes eletrônicos.

Na prática, o Arduino funciona como um pequeno “cérebro” do projeto. Ele recebe um código escrito pelo usuário e executa comandos, como acender um LED, ler um botão, medir a temperatura ou controlar um motor.

No caso do semáforo, o Arduino será responsável por controlar o momento em que cada LED deve acender ou apagar.

 

Objetivo do projeto

O objetivo deste projeto é construir uma simulação de semáforo utilizando Arduino, três LEDs e resistores. Ao final da atividade, o estudante será capaz de compreender como o Arduino controla saídas digitais e como a programação pode ser usada para representar uma sequência lógica do mundo real.

 

Conceitos trabalhados

Este projeto permite trabalhar diversos conceitos de forma integrada:

  • Eletrônica básica: LEDs, resistores, polaridade, protoboard e conexões elétricas.
  • Programação: comandos de saída, estrutura básica de um código Arduino, temporização e sequência de instruções.
  • Pensamento computacional: decomposição do problema, criação de algoritmo, reconhecimento de padrões e depuração de erros.
  • Educação para o trânsito: funcionamento dos semáforos, segurança viária e organização do espaço urbano.
  • Matemática: noção de tempo, intervalo, sequência e proporcionalidade entre os tempos de cada luz.
  • Tecnologia e cultura maker: criação de protótipos, experimentação, testes e melhoria de soluções.

 

Materiais necessários

Para montar o projeto físico, você vai precisar de:

  • 1 placa Arduino Uno ou compatível;
  • 1 protoboard;
  • 1 LED vermelho;
  • 1 LED amarelo;
  • 1 LED verde;
  • 3 resistores de 220 Ω ou 330 Ω;
  • Jumpers macho-macho;
  • Cabo USB para conectar o Arduino ao computador.

Também é possível realizar este projeto no Tinkercad Circuits, sem precisar dos componentes físicos. Essa é uma ótima alternativa para escolas que ainda não possuem kits de Arduino ou para aulas introdutórias em laboratório de informática.

 

Entendendo os LEDs

O LED é um componente eletrônico que emite luz quando uma corrente elétrica passa por ele no sentido correto. Ele possui dois terminais:

  • Perna maior: polo positivo, chamado de ânodo;
  • Perna menor: polo negativo, chamado de cátodo.

No circuito, o terminal positivo do LED será conectado a uma porta digital do Arduino, passando por um resistor. O terminal negativo será conectado ao GND.

O resistor é importante porque limita a corrente elétrica que passa pelo LED. Sem ele, o LED pode queimar.

 

Portas usadas no projeto

Neste projeto, vamos utilizar três portas digitais do Arduino:

  • Porta 13: LED vermelho;
  • Porta 12: LED amarelo;
  • Porta 11: LED verde.

Você pode usar outras portas digitais, mas será necessário alterar o código para manter a correspondência correta.

 

Montagem do circuito

Monte o circuito da seguinte forma:

Conecte o LED vermelho à porta digital 13 do Arduino, usando um resistor em série. A outra perna do LED deve ser ligada ao GND.

Conecte o LED amarelo à porta digital 12 do Arduino, também usando um resistor em série. A outra perna do LED deve ser ligada ao GND.

Conecte o LED verde à porta digital 11 do Arduino, usando outro resistor em série. A outra perna do LED deve ser ligada ao GND.

Uma forma simples de organizar a montagem é colocar os três LEDs na protoboard, lado a lado, seguindo a ordem vermelho, amarelo e verde. Em seguida, conecte cada LED à sua respectiva porta digital e ao GND comum.

 

Lógica de funcionamento do semáforo

Um semáforo simples funciona com uma sequência de estados:

  • Luz verde acesa: os carros podem seguir.
  • Luz amarela acesa: atenção, o sinal está prestes a fechar.
  • Luz vermelha acesa: os carros devem parar.

Depois disso, a sequência se repete.

No Arduino, essa sequência será representada por comandos que ligam e desligam os LEDs em determinados intervalos de tempo.

 

Código completo do semáforo com Arduino

// Projeto: Semáforo com Arduino
// Autor: MakerZine
// Descrição: Simulação de um semáforo simples com três LEDs

// Definição das portas dos LEDs
int ledVermelho = 13;
int ledAmarelo = 12;
int ledVerde = 11;

void setup() {
  // Configura as portas dos LEDs como saída
  pinMode(ledVermelho, OUTPUT);
  pinMode(ledAmarelo, OUTPUT);
  pinMode(ledVerde, OUTPUT);
}

void loop() {
  // Luz verde acesa
  digitalWrite(ledVerde, HIGH);
  digitalWrite(ledAmarelo, LOW);
  digitalWrite(ledVermelho, LOW);
  delay(5000);

  // Luz amarela acesa
  digitalWrite(ledVerde, LOW);
  digitalWrite(ledAmarelo, HIGH);
  digitalWrite(ledVermelho, LOW);
  delay(2000);

  // Luz vermelha acesa
  digitalWrite(ledVerde, LOW);
  digitalWrite(ledAmarelo, LOW);
  digitalWrite(ledVermelho, HIGH);
  delay(5000);
}

 

Como o código funciona

O código começa definindo três variáveis:

int ledVermelho = 13;
int ledAmarelo = 12;
int ledVerde = 11;

Essas variáveis indicam em quais portas digitais os LEDs estão conectados. Isso facilita a leitura do código, pois é mais intuitivo escrever ledVermelho do que escrever apenas o número 13.

Na função setup(), configuramos essas portas como saídas:

pinMode(ledVermelho, OUTPUT);
pinMode(ledAmarelo, OUTPUT);
pinMode(ledVerde, OUTPUT);

Isso informa ao Arduino que essas portas serão usadas para enviar sinais elétricos aos LEDs.

A função loop() é executada repetidamente. É nela que criamos a sequência do semáforo.

Quando queremos acender um LED, usamos:

digitalWrite(porta, HIGH);

Quando queremos apagar um LED, usamos:

digitalWrite(porta, LOW);

O comando delay() pausa o programa por um determinado tempo, medido em milissegundos. Por exemplo:

delay(5000);

significa que o Arduino ficará aguardando 5000 milissegundos, ou seja, 5 segundos.

 

Tabela de tempos do semáforo

Luz Estado Tempo
Verde Passagem liberada 5 segundos
Amarelo Atenção 2 segundos
Vermelho Parada obrigatória 5 segundos

Esses tempos podem ser alterados no código. Para isso, basta modificar os valores dentro dos comandos delay().

Por exemplo, para deixar o sinal verde aceso por 8 segundos, altere:

delay(5000);

para:

delay(8000);

 

Testando o projeto

Depois de montar o circuito e enviar o código para o Arduino, observe se os LEDs acendem na sequência correta:

  • Verde acende por 5 segundos.
  • Amarelo acende por 2 segundos.
  • Vermelho acende por 5 segundos.
  • A sequência reinicia automaticamente.

Caso algum LED não acenda, verifique a posição das pernas do LED, a conexão com a porta correta, o resistor e a ligação com o GND.

 

Problemas comuns e como resolver

Se nenhum LED acender, verifique se o Arduino está conectado corretamente ao computador e se o código foi enviado para a placa.

Se apenas um LED não acender, confira se ele está colocado no sentido correto. A perna maior deve estar conectada ao lado positivo do circuito.

Se o LED ficar muito fraco, verifique o valor do resistor utilizado e as conexões na protoboard.

Se a sequência estiver errada, confira se os LEDs estão conectados às mesmas portas indicadas no código.

Se o código não compilar, verifique se não há erro de digitação, ausência de ponto e vírgula ou nomes de variáveis escritos de forma diferente.

 

Versão com constantes

Uma forma mais organizada de escrever o código é usando const int, indicando que os valores das portas não serão alterados durante a execução do programa.

// Projeto: Semáforo com Arduino usando constantes

const int ledVermelho = 13;
const int ledAmarelo = 12;
const int ledVerde = 11;

const int tempoVerde = 5000;
const int tempoAmarelo = 2000;
const int tempoVermelho = 5000;

void setup() {
  pinMode(ledVermelho, OUTPUT);
  pinMode(ledAmarelo, OUTPUT);
  pinMode(ledVerde, OUTPUT);
}

void loop() {
  acenderVerde();
  delay(tempoVerde);

  acenderAmarelo();
  delay(tempoAmarelo);

  acenderVermelho();
  delay(tempoVermelho);
}

void acenderVerde() {
  digitalWrite(ledVerde, HIGH);
  digitalWrite(ledAmarelo, LOW);
  digitalWrite(ledVermelho, LOW);
}

void acenderAmarelo() {
  digitalWrite(ledVerde, LOW);
  digitalWrite(ledAmarelo, HIGH);
  digitalWrite(ledVermelho, LOW);
}

void acenderVermelho() {
  digitalWrite(ledVerde, LOW);
  digitalWrite(ledAmarelo, LOW);
  digitalWrite(ledVermelho, HIGH);
}

Essa versão é um pouco mais avançada, mas apresenta uma vantagem importante: o código fica mais organizado. Cada função tem uma responsabilidade clara, como acender o verde, acender o amarelo ou acender o vermelho.

Esse é um bom momento para conversar com os estudantes sobre organização de código, legibilidade e manutenção de programas.

 

Desafio: semáforo de pedestres

Depois de montar o semáforo simples, é possível ampliar o projeto criando um semáforo de pedestres. Para isso, podemos adicionar mais dois LEDs:

  • LED vermelho para pedestres;
  • LED verde para pedestres.

A lógica pode ser a seguinte:

Quando o semáforo dos carros está verde, o semáforo dos pedestres fica vermelho.

Quando o semáforo dos carros está vermelho, o semáforo dos pedestres fica verde.

Essa ampliação torna o projeto mais próximo de uma situação real e permite discutir mobilidade urbana, segurança no trânsito e acessibilidade.

 

Exemplo de código com semáforo de pedestres

Para esta versão, usaremos cinco LEDs:

  • Vermelho dos carros: porta 13;
  • Amarelo dos carros: porta 12;
  • Verde dos carros: porta 11;
  • Vermelho dos pedestres: porta 10;
  • Verde dos pedestres: porta 9.
// Projeto: Semáforo com Arduino e travessia de pedestres

const int carroVermelho = 13;
const int carroAmarelo = 12;
const int carroVerde = 11;

const int pedestreVermelho = 10;
const int pedestreVerde = 9;

void setup() {
  pinMode(carroVermelho, OUTPUT);
  pinMode(carroAmarelo, OUTPUT);
  pinMode(carroVerde, OUTPUT);

  pinMode(pedestreVermelho, OUTPUT);
  pinMode(pedestreVerde, OUTPUT);
}

void loop() {
  // Carros seguem, pedestres aguardam
  digitalWrite(carroVerde, HIGH);
  digitalWrite(carroAmarelo, LOW);
  digitalWrite(carroVermelho, LOW);

  digitalWrite(pedestreVerde, LOW);
  digitalWrite(pedestreVermelho, HIGH);

  delay(5000);

  // Atenção para os carros, pedestres ainda aguardam
  digitalWrite(carroVerde, LOW);
  digitalWrite(carroAmarelo, HIGH);
  digitalWrite(carroVermelho, LOW);

  digitalWrite(pedestreVerde, LOW);
  digitalWrite(pedestreVermelho, HIGH);

  delay(2000);

  // Carros param, pedestres atravessam
  digitalWrite(carroVerde, LOW);
  digitalWrite(carroAmarelo, LOW);
  digitalWrite(carroVermelho, HIGH);

  digitalWrite(pedestreVerde, HIGH);
  digitalWrite(pedestreVermelho, LOW);

  delay(5000);
}

 

Desafio extra: semáforo com botão

Outra possibilidade é adicionar um botão para simular o pedido de travessia do pedestre. Nesse caso, o botão funciona como uma entrada digital.

A ideia é que o semáforo dos carros permaneça verde normalmente. Quando o pedestre aperta o botão, o Arduino aguarda um pequeno intervalo, acende o amarelo, depois o vermelho para os carros e libera a passagem dos pedestres.

Esse desafio é mais interessante porque aproxima o projeto de um sistema interativo. O Arduino deixa de apenas executar uma sequência automática e passa a responder a uma ação do usuário.

 

Perguntas para discussão em sala de aula

  • Por que o semáforo precisa ter uma sequência lógica?
  • O que poderia acontecer se duas luzes acendessem ao mesmo tempo?
  • Por que o sinal amarelo existe?
  • O tempo do sinal verde deveria ser sempre igual em todas as ruas?
  • Como os semáforos reais podem ser programados para melhorar o trânsito?
  • Como sensores poderiam ajudar um semáforo a funcionar de forma mais inteligente?
  • Como adaptar um semáforo para pessoas com deficiência visual?

Essas perguntas ajudam a transformar o projeto em uma atividade interdisciplinar, indo além da montagem do circuito.

 

Possibilidades interdisciplinares

Em Tecnologia, o projeto permite trabalhar programação, eletrônica básica e prototipagem.

Em Matemática, é possível explorar tempo, sequência, proporcionalidade e organização de tabelas.

Em Física, o professor pode abordar corrente elétrica, tensão, resistência e funcionamento dos LEDs.

Em Geografia, a atividade pode ser relacionada ao estudo da cidade, mobilidade urbana, trânsito e organização dos espaços públicos.

Em Língua Portuguesa, os estudantes podem produzir um relatório explicando o funcionamento do projeto ou criar uma campanha educativa sobre segurança no trânsito.

Em Arte, é possível construir uma maquete de uma rua, avenida ou cruzamento, integrando o circuito eletrônico ao cenário.

 

Sugestão de atividade prática

Uma proposta interessante é dividir a turma em pequenos grupos. Cada grupo deve montar um semáforo com Arduino e depois propor uma melhoria para o projeto.

Algumas possibilidades:

  • Alterar o tempo de cada luz;
  • Criar um semáforo para pedestres;
  • Inserir um botão de travessia;
  • Adicionar sinal sonoro;
  • Criar uma maquete de cruzamento;
  • Simular um semáforo inteligente;
  • Comparar o projeto físico com uma simulação no Tinkercad.

Ao final, cada grupo pode apresentar sua solução, explicar o código utilizado e justificar as escolhas feitas.

 

Avaliação da atividade

A avaliação pode considerar tanto o processo quanto o resultado final. Alguns critérios possíveis são:

  • Compreensão do circuito: o estudante consegue explicar a função dos LEDs, resistores e conexões.
  • Organização da montagem: o circuito está montado de forma clara e funcional.
  • Funcionamento do código: o semáforo executa a sequência corretamente.
  • Capacidade de explicação: o grupo consegue descrever como o projeto funciona.
  • Criatividade: o grupo propôs melhorias ou adaptações para o projeto.
  • Trabalho em equipe: os estudantes colaboraram na montagem, nos testes e na resolução de problemas.

 

Extensões do projeto

Depois que os estudantes compreenderem o funcionamento básico do semáforo, o professor pode propor novos desafios, como:

  • Criar um cruzamento com dois semáforos.
  • Adicionar um botão para pedestres.
  • Inserir um buzzer para sinal sonoro.
  • Usar um display para mostrar a contagem regressiva.
  • Utilizar sensores para detectar presença de veículos.
  • Programar o semáforo sem usar delay(), utilizando a função millis().
  • Criar uma maquete urbana com ruas, carros, faixas de pedestres e iluminação.

Essas extensões tornam o projeto mais rico e permitem trabalhar diferentes níveis de complexidade.

 

Usando o Tinkercad Circuits

O Tinkercad Circuits é uma ferramenta gratuita que permite simular circuitos eletrônicos no navegador. Com ele, os estudantes podem montar o semáforo virtualmente, programar o Arduino e testar o funcionamento sem utilizar componentes físicos.

Para usar o Tinkercad, basta criar um novo circuito, inserir uma placa Arduino Uno, uma protoboard, três LEDs, resistores e jumpers. Depois, é possível escrever o código diretamente no ambiente de programação e iniciar a simulação.

Essa alternativa é muito útil para aulas introdutórias, ensino remoto, laboratórios com poucos kits ou atividades de preparação antes da montagem física.

 

O que os estudantes aprendem com este projeto?

O projeto do semáforo com Arduino ajuda os estudantes a compreenderem que a programação não está distante da realidade. Pelo contrário, ela está presente em muitos sistemas do cotidiano, como semáforos, elevadores, portões automáticos, sensores de presença, caixas eletrônicos, sistemas de irrigação e equipamentos industriais.

Ao construir o semáforo, o estudante percebe que um problema real pode ser dividido em pequenas partes:

  • Primeiro, é preciso entender o funcionamento do sistema.
  • Depois, identificar os componentes necessários.
  • Em seguida, montar o circuito.
  • Depois, escrever o código.
  • Por fim, testar, corrigir e melhorar o projeto.

Esse processo é uma excelente introdução ao pensamento computacional e à cultura maker.

Sobre o autor

Rodrigo Terra

Rodrigo Terra é criador e mantenedor do MakerZine, atuando nas áreas de educação, tecnologia, ciência de dados, inteligência artificial e cultura maker. Desenvolve projetos e conteúdos sobre programação, automação, análise de dados, robótica educacional, computação criativa e metodologias ativas, conectando inovação, aprendizagem e tecnologia no cotidiano educacional. Apaixonado por café, boas conversas e aprendizado contínuo, está sempre explorando novas ideias, ferramentas e possibilidades.

Ver perfil no LinkedIn

Próxima leitura

Continue explorando

Carregando sugestões de leitura...