Semáforo com ATTINY

Semáforo no Tinkercad

Quando iniciamos na programação de microcontroladores, ou do Arduino, os primeiros projetos para praticar o famoso “Hello World” são projetos de leitura de teclas, e para ligar/desligar as saídas do microcontrolador. Neste post vamos explorar esses conhecimentos iniciais e montar um projeto de um Semáforo com ATTINY no Tinkercad.

O primeiro projeto que vamos fazer será bem simples, apenas acionando um LED com o microcontrolador, e depois vamos partir para o projeto do semáforo.

Hello World

A primeira parte do nosso post é entender como funciona a saída do microcontrolador, antes de programar um circuito mais complexo como um semáforo de trânsito. Para isso vamos utilizar o circuito abaixo, que consiste de uma fonte de alimentação, um resistor de 560Ω para limitar a correte que vai circular através do LED, e um LED verde.

Circuito com uma fonte de alimentação resistor LED

Com circuito acima montado podemos começar a programar. O objetivo do nosso código é fazer o LED piscar em intervalos de tempo que seja perceptível para nossa visão. Vamos fazer com que LED pisque a cada 500 milissegundos, o que corresponde a uma frequência de 2 Hz.

Abaixo temos o código utilizado para gravar o ATTINY, utilizando a IDE do Arduino.

/***********************************************************
Hello World ATTINY
www.wantronics.com.br
***********************************************************/

void trafficLight(int traffic, int time);

void setup()
{
  pinMode(0, OUTPUT);
}

void loop()
{
  digitalWrite (0, HIGH);
  delay (500);
  digitalWrite (0, LOW);
  delay (500);
}

na função delay(), o tempo é definido em milissegundos, então quando escrevemos delay(500) estamos gerando um atraso de 500 milissegundos, até que a outra instrução seja executada.

E abaixo é possível simular o circuito, e alterar o tempo que o LED permanece ligado ou desligado.

Semáforo com ATTINY

Com os conhecimentos básicos adquiridos no nosso “Hello World” podemos fazer um projeto um pouco mais complexo, como um semáforo com ATTINY.

O nosso semáforo vai possuir 6 LEDs, e 6 resistores, o microcontrolador ATTINY e a fonte de alimentação. O circuito é mostrado na figura abaixo:

Semáforo no Tinkercad

Abaixo temos o diagrama esquemático do nosso semáforo com todas as ligações para quem desejar fazer a montagem em protoboard.

E abaixo temos o código para ser gravado no microcontrolador:

/***********************************************************
Traffic Light ATTINY
www.wantronics.com.br
***********************************************************/

void trafficLight(int traffic, int time);

void setup()
{
  pinMode(0, OUTPUT); // LED green TL1
  pinMode(1, OUTPUT); // LED yellow TL1
  pinMode(2, OUTPUT); // LED red TL1
  pinMode(3, OUTPUT); // LED yellow TL2
  pinMode(4, OUTPUT); // LED green TL2
  pinMode(5, OUTPUT); // LED red TL2
}

void loop()
{
  trafficLight (0, 1000); // traffic light in the operation mode
   //trafficLight (1, 1000); // traffic light with a problem
}

void trafficLight(int traffic, int time)
{
  while (traffic == 0) // traffic light in the operation mode
  {
    digitalWrite (0, HIGH); // LED green TL1
    digitalWrite (1, LOW); // LED yellow TL1
    digitalWrite (2, LOW); // LED red TL1
    digitalWrite (3, LOW); // LED yellow TL2
    digitalWrite (4, LOW); // LED green TL2
    digitalWrite (5, HIGH); // LED red TL2
    delay (time);
    digitalWrite (0, LOW); // LED green TL1
    digitalWrite (1, HIGH); // LED yellow TL1
    digitalWrite (2, LOW); // LED red TL1
    digitalWrite (3, LOW); // LED yellow TL2
    digitalWrite (4, LOW); // LED green TL2
    digitalWrite (5, HIGH); // LED red TL2
    delay (time);
    digitalWrite (0, LOW); // LED green TL1
    digitalWrite (1, LOW); // LED yellow TL1
    digitalWrite (2, HIGH); // LED red TL1
    digitalWrite (3, LOW); // LED yellow TL2
    digitalWrite (4, HIGH); // LED green TL2
    digitalWrite (5, LOW); // LED red TL2
    delay (time);
    digitalWrite (0, LOW); // LED green TL1
    digitalWrite (1, LOW); // LED yellow TL1
    digitalWrite (2, HIGH); // LED red TL1
    digitalWrite (3, HIGH); // LED yellow TL2
    digitalWrite (4, LOW); // LED green TL2
    digitalWrite (5, LOW); // LED red TL2
    delay (time);
  }
    
  while (traffic != 0) // traffic light with a problem
  {
      digitalWrite (1, HIGH); // LED yellow TL1
      digitalWrite (3, HIGH); // LED yellow TL2
      delay (500);
      digitalWrite (1, LOW); // LED yellow TL1
      digitalWrite (3, LOW); // LED yellow TL2
      delay (500);
  }

}

A função trafficLight() possui dois modos de operação, o modo de operação normal, e o modo de operação com defeito, ou após a meia noite, que podem ser testados removendo o comentário da linha 21 e adicionando o comentário na linha 20.

Abaixo é possível testar a simulação do circuito no Tinkercad.

Conclusão

Apesar de ser um projeto simples utilizando um microcontrolador, existem muitos detalhes que foram deixados de lados e que são muito importante na hora de fazer um projeto eletrônico, e que devem ser consultados e implementados. A ideia dos projetos apresentados é mostrar uma forma fácil e rápida para aprender a programar e a utilizar o Tinkecad como ferramenta de simulação.

https://www.tinkercad.com/dashboard