DEV Community

Cover image for Farol de LED's - Arduino
Johnny Meneses
Johnny Meneses

Posted on • Edited on

Farol de LED's - Arduino

Uma das coisas mais legais de mexer com Arduino é ver seu código “ganhando vida”. A primeira LED que acende é uma vitória.

LED Vermelho

Um bom exemplo pra começar a brincar com luzes no Arduino é justamente fazer um semáforo. A ideia é simples, três cores: vermelho, amarelo e verde sendo acesas em sequência. Ainda é possível adicionar um modo de atenção com um amarelo piscante.

O projeto abaixo é um pouco maior, em termos de componentes e linhas de código, mas o princípio é o mesmo. Eu fiz um cruzamento onde o farol de uma das ruas só acende se o farol da outra estiver fechado

Lista de Componentes:
1 – Arduino Uno R3 (ou similar)
4 – LED’s na cor vermelha
4 – LED’s na cor amarela
4 – LEd’s na cor Verde
12 – Resistors de 220 Ω

Pra ficar mais fácil, eu defini um nome para cada LED e sua respectiva porta:

#define red1    13
#define yel1    12
#define green1  11
#define red2    10
#define yel2    9
#define green2  8
#define red3    7
#define yel3    6
#define green3  5
#define red4    4
#define yel4    3
#define green4  2
Enter fullscreen mode Exit fullscreen mode

Assim, na hora de fazer a instalação, ou seja, informar ao Arduino qual porta será usada e com qual finalidade, ficará mais fácil:

void instalaLed()
{   
  pinMode(red1, OUTPUT);
  pinMode(yel1, OUTPUT);
  pinMode(green1, OUTPUT);

  pinMode(red2, OUTPUT);
  pinMode(yel2, OUTPUT);
  pinMode(green2, OUTPUT);

  pinMode(red3, OUTPUT);
  pinMode(yel3, OUTPUT);
  pinMode(green3, OUTPUT);

  pinMode(red4, OUTPUT);
  pinMode(yel4, OUTPUT);
  pinMode(green4, OUTPUT);

}
Enter fullscreen mode Exit fullscreen mode

Eu preferi criar um método para instalação e informar este método dentro do void setup(). Acredito que fica mais organizado.

O esquema do projeto ficou assim:
Alt Text

Eu criei 6 métodos:

void rua1e3Aberta()
Enter fullscreen mode Exit fullscreen mode

Neste método o tráfego entre as ruas 1 e 3 está livres, com suas respectivas LED’s verdes ligadas. Nas ruas 2 e 4, o farol está fechado.

void rua1e3Fechando()
Enter fullscreen mode Exit fullscreen mode

Neste método, começa a transição de sinalização. O vermelho das ruas 2 e 4 permanece ligado, entretanto, neste momento os faróis verdes são desligados e os faróis amarelos das ruas 1 e 3 são acesos, indicando que o ciclo está próximo de fechar.

void tudoFechado()
Enter fullscreen mode Exit fullscreen mode

Eu poderia simplesmente migrar do vermelho para o verde, e liberar o tráfego na outra rua, mas achei que ficaria abrupto. Fiz esse método para manter os quatro faróis vermelhos ligados por alguns segundos, antes de chamar a próxima sequência.

rua2e4Aberta e rua2e4Fechando
Enter fullscreen mode Exit fullscreen mode

São basicamente os mesmos métodos das ruas 1 e 3, com o mesmo comportamento, só que agora referenciando o outro lado do cruzamento.

void tudoDesligado()
Enter fullscreen mode Exit fullscreen mode

Achei que seria interessante um método que eu poderia desligar todas as luzes, antes de chamar o Amarelo Piscante. Este método serve pra isso.

void amareloPiscante()
Enter fullscreen mode Exit fullscreen mode

Este é o sinal de alerta para tirar o pé do acelerador e passar com calma e atenção no cruzamento. Neste método, as luzes amarelas se alternam entre ligado e ligado em um looping que será executado 10 vezes.

Para ver o projeto funcionando, acesse o link no meu Tinkercad

O código fonte completo está no meu GitHub:

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay