Arquivo diários:21 de setembro de 2022

Semáforo simples com Arduino e impressão 3D

Hoje veremos como programar um semáforo em Arduíno. A impressão foi feita por mim para ser usada nas aulas, no entanto vou compartilhar o desenho e o processo de como fiz a montagem.

O Semáforo 3D

O desenho foi feito no Tinkercad e pode ser visualisado a seguir.

Os LEDs foram colados com cola escolar líquida (de PVC) usada pra colar papel e outros materiais escolares. O resultado final ficou como nas fotos a seguir.

Semáforo impresso em impressora 3D
Semáforo impresso e os LEDs colados

Para conectar os LEDs aos fios que vão ao Arduino, tentei duas estratégias: soldar fios aos LEDs e conectar diretamente um fio M/F aos LEDs. A segunda opção se saiu melhor.

Detalhe dos fios soldados aos leds no semáforo. Uma das soldas se rompeu.
Tentativa de soldar os cabos nos LEDs: as soldas se rompem com a manipulação.
Detalhe com cabos conectados nos leds e fixos por fitas adesivas
Mesmo não ficando com uma aparência muito boa, usar uma fita adesiva e para segurar um conector fêmea diretamente no LED pareceu ser a melhor opção.

Apesar de decidir por não soldar os cabos os fios nos LEDs, achei bom colar os GNDs dos LEDs um no outro, diminuindo o uso de fios por parte dos alunos.

Semáforo com os gê ene dês , ou terras, dos leds soldados entre si,
Semáforo com GNDs dos LEDs soldados entre si.

O circuito no Tinkercad

Confira o circuito abaixo:

Se o circuito não carregar, acesse o circuito na página do Tinkercad.

O código

Baixe, compartilhe ou copie o código acessando o site do GitHub.

Vamos discutir o código a seguir.

Primeiramente inserimos variáveis com valores que correspondem às portas digitais a serem usadas.

int verde1 = 2, amarelo1 = 3,
    vermelho1 = 4, verde2 = 5, 
    amarelo2 = 6, vermelho2 = 7;

No setup, configuramos cada uma das portas acima como saída.

void setup() {
  pinMode(verde1, OUTPUT);
  pinMode(amarelo1, OUTPUT);
  pinMode(vermelho1, OUTPUT);
  pinMode(verde2, OUTPUT);
  pinMode(amarelo2, OUTPUT);
  pinMode(vermelho2, OUTPUT);
}

No loop, vamos detalhar um pouco mais. Começando com a parte do código que liga o LED verde do semáforo 1 e o vermelho do semáforo 2 e aguarda 2 segundos (2000 milissegundos).

void loop() {
  digitalWrite(verde1, HIGH);
  digitalWrite(vermelho2, HIGH);
  delay(2000);

Para mudar o semáforo 1 para amarelo precisamos desligar o verde e só então ligarmos o verde. Fazemos isso e aguardamos mais um segundo:

  digitalWrite(verde1, LOW);
  digitalWrite(amarelo1, HIGH);
  delay(1000);

Para mudar o semáforo 1 para vermelho temos que desligar o LED amarelo do semáforo 1. Logo em seguida, para mudar o semáforo 2 para verde, temos que desligar o LED vermelho do semáforo 2 e ligar o LED verde do semáforo 2. Depois, aguardamos mais 2 segundos.

  digitalWrite(amarelo1, LOW);
  digitalWrite(vermelho1, HIGH);
  digitalWrite(vermelho2, LOW);
  digitalWrite(verde2, HIGH);
  delay(2000);

Para colocar o semáforo 2 no amarelo precisamos desligar o LED verde e ligar o amarelo. Aguardamos mais um segundo no final:

  digitalWrite(verde2, LOW);
  digitalWrite(amarelo2, HIGH);
  delay(1000);

Por fim, deligamos o amarelo do semáforo 2 e o vermelho do semáforo 1.

  digitalWrite(amarelo2, LOW);
  digitalWrite(vermelho1, LOW);
}

Note que ao terminar o algoritmo o Arduino volta a executar tudo desde o começo, portanto, não precisamos escrever mais nada. Para verificar, veja abaixo o início do nosso código novamente:

  digitalWrite(verde1, HIGH);
  digitalWrite(vermelho2, HIGH);

Resultado final do projeto

Confira no vídeo a seguir o resultado final. Minha câmera não é boa, portanto o vídeo vai começar já na parte em que mostro o circuito funcionando. Em seguida discuto o código. A montagem do circuito ficou prejudicada e não recomendo o vídeo desde o começo.