#3Iniciante

Semáforo

4.8(131)
395 concluído
Semáforo
Uma pequena versão do semáforo que você vê na rua todos os dias. O vermelho fica aceso por dois segundos, o amarelo acende por um instante, o verde fica aceso por dois segundos e depois volta ao vermelho, passando novamente pelo amarelo, sem parar. Ao acender e apagar três LEDs em sequência, você vê como definir os tempos de cada etapa.

Vídeo

Esquema do circuito

Semáforo - Circuit

Código-fonte

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Semáforo
4// ─────────────────────────────────────────
5// Ciclo de semáforo com LEDs vermelho, amarelo e verde: vermelho 2 s,
6// amarelo 0.3 s, verde 2 s, amarelo 0.3 s, e depois recomeça.
7//
8// Pinos:
9//   D2 -> LED vermelho
10//   D3 -> LED amarelo
11//   D4 -> LED verde
12//   Cada LED com um resistor de 330 ohm
13
14void setup() {
15  pinMode(2,OUTPUT);    // Vermelho
16  pinMode(3,OUTPUT);    // Amarelo
17  pinMode(4,OUTPUT);    // Verde
18}
19
20void loop() {
21  // Vermelho ligado, espera 2 s
22  digitalWrite(2,HIGH);
23  digitalWrite(3,LOW);
24  digitalWrite(4,LOW);
25  delay(2000);
26  // Amarelo ligado, espera 0.3 s
27  digitalWrite(2,LOW);
28  digitalWrite(3,HIGH);
29  digitalWrite(4,LOW);
30  delay(300);
31  // Verde ligado, espera 2 s
32  digitalWrite(2,LOW);
33  digitalWrite(3,LOW);
34  digitalWrite(4,HIGH);
35  delay(2000);
36  // Amarelo ligado, depois volta ao vermelho
37  digitalWrite(2,LOW);
38  digitalWrite(3,HIGH);
39  digitalWrite(4,LOW);
40  delay(300);
41}
42

Perguntas frequentes

Por quanto tempo a luz amarela do semáforo deve ficar acesa?

Em semáforos reais, a luz amarela geralmente fica acesa por 3–4 segundos. No projeto, esse tempo é definido com `delay()`; deixar o vermelho e o verde acesos por mais tempo e o amarelo por menos tempo cria um ciclo próximo do real.

Por que usar um resistor de 330 Ω em vez de 220 Ω?

Um resistor de 330 Ω reduz um pouco mais a corrente (para cerca de 9–10 mA); os LEDs continuam bem visíveis e os pinos fornecem menos corrente no total. Também funciona com 220 Ω; os LEDs apenas ficam um pouco mais brilhantes.

Posso adicionar um botão para pedestres?

Sim. Você pode adicionar um botão de pressão e um resistor pull-down de 10 kΩ e ler o estado do botão com `digitalRead`. Quando o botão for pressionado, você pode mudar o ciclo para o vermelho e acender um LED verde separado para pedestres; usar `millis()` em vez de `delay` permite detectar o botão imediatamente.

Os LEDs acendem na ordem errada. O que devo fazer?

Compare as definições dos pinos no código (vermelho, amarelo e verde) com os fios do circuito, uma por uma. A forma mais fácil é acender cada LED com um código de teste separado e verificar a qual pino ele está ligado.