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çãomillis(). - 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.
Próxima leitura