Olá, como estão? Hoje desenvolveremos um semáforo com Arduíno UNO, para este projeto usamos o KIT iniciante com Arduíno UNO da WJ Componentes.
Componentes Utilizados
OU
Funcionamento do Projeto Semáforo
Antes de mais nada como foi comentado acima iremos desenvolver um semáforo com o Arduíno, onde irá ter dois semáforos em paralelo com um botão. Assim quando o pedestre clicar no botão, ele irá fechar os semáforos, utilizamos a função millis ao invés do delay em alguns casos. Porém caso não conheça elas, iremos explicar abaixo como utilizar e para que elas servem.
Função Delay e Millis
Antes de tudo as duas funções têm como seu principal função esperar um determinado tempo para executar instruções. A função delay pausa o programa por um determinado tempo, ou seja, seu programa irá parar por um tempo assim ele não executara nenhuma outra função até que o tempo se esgote.
Sintaxe delay:
delay(ms);
Parâmetros:
- ms: tempo em milissegundos, por exemplo 1 segundo = 1000 milissegundos.
Já a função millis, por usa vez ela não utiliza contador então ela não irá parar seu programa, porém ela é um pouco mais difícil de se utilizar. Pois assim que você a usar irá retornar o tempo de uso do Arduíno a partir de quando ele foi ligado, assim você pode estar realizando um cálculo para saber a quantidade de tempo.
Sintaxe millis:
time = millis();
Montagem do Projeto Semáforo
Logo após compra dos componentes na WJ Componentes, vamos à montagem! Em seguida conectamos os LEDs na protoboard com os resistores que ligamos nos catodos dos LEDs, e para finalizar os LEDs ligaremos o anodo aos pinos 3, 4, 5, 6, 7 e 8 do Arduíno. Então conectamos um botão na protoboard e conectamos no pino 2 do Arduíno, ele será responsável por deixar vermelho os semáforos para os pedestres atravessarem.
Contudo segue abaixo uma imagem que demonstra a montagem do circuito.
Diagrama Esquemático do Projeto Semáforo
Código-fonte do Projeto Semáforo
Em seguida segue abaixo código completo do projeto semáforo.
//Definições -----------------------------------------------------------------------------------------
#define btn 2 // Define pino botão
#define verde 3 // Define LED verde
#define amarelo 5 // Define LED amarelo
#define vermelho 7 // Define LED vermelho
#define verde2 8 // Define LED verde 2
#define amarelo2 6 // Define LED amarelo 2
#define vermelho2 4 // Define LED vermelho 2
//Variáveis Globais ----------------------------------------------------------------------------------
unsigned long delay1 = 0; // Armazena Tempo
//Setup ----------------------------------------------------------------------------------------------
void setup() {
pinMode(verde, OUTPUT); // Configura LED como OUTPUT
pinMode(amarelo, OUTPUT); // Configura LED como OUTPUT
pinMode(vermelho, OUTPUT); // Configura LED como OUTPUT
pinMode(verde2, OUTPUT); // Configura LED como OUTPUT
pinMode(amarelo2, OUTPUT); // Configura LED como OUTPUT
pinMode(vermelho2, OUTPUT); // Configura LED como OUTPUT
pinMode(btn, INPUT_PULLUP); // Configura btn como INPUT
}
//Loop -----------------------------------------------------------------------------------------------
void loop() {
if(!digitalRead(btn)){ // Se botão pressionado
delay(2000); // Espera 2s
digitalWrite(amarelo, digitalRead(verde)); // Usa o sinal do verde
digitalWrite(verde, LOW); // Desliga LED verde
digitalWrite(amarelo2, digitalRead(verde2)); // Usa o sinal do verde2
digitalWrite(verde2, LOW); // Desliga LED verde 2
delay(2000); // Espera 2s
digitalWrite(amarelo, LOW); // Desliga LED vermelho
digitalWrite(amarelo2, LOW); // Desliga LED vermelho 2
digitalWrite(vermelho, HIGH); // Liga LED vermelho
digitalWrite(vermelho2, HIGH); // Liga LED vermelho 2
delay(5000); // Espera 5s
digitalWrite(vermelho, LOW); // Desliga LED vermelho
digitalWrite(vermelho2, LOW); // Desliga LED vermelho 2
}
else if((millis() - delay1) < 2000){ // Verificação de Tempo
digitalWrite(amarelo, LOW); // Desliga LED amarelo
digitalWrite(vermelho, HIGH); // Liga LED vermelho
digitalWrite(verde2, HIGH); // Liga LED verde 2
digitalWrite(vermelho2, LOW); // Desliga LED vermelho 2
}
else if((millis() - delay1) < 2000){ // Verificação de Tempo
digitalWrite(amarelo, LOW); // Desliga LED amarelo
digitalWrite(vermelho, HIGH); // Liga LED vermelho
digitalWrite(verde2, HIGH); // Liga LED verde 2
digitalWrite(vermelho2, LOW); // Desliga LED vermelho 2
}
else if((millis() - delay1) >= 2000 && (millis() - delay1) < 5000){ // Verificação de Tempo
digitalWrite(verde2, LOW); // Desliga LED verde 2
digitalWrite(amarelo2, HIGH); // Liga LED amarelo 2
}
else if((millis() - delay1) >= 5000 && (millis() - delay1) < 7000 ){ // Verificação de Tempo
digitalWrite(verde, HIGH); // Liga LED verde
digitalWrite(vermelho, LOW); // Desliga LED vermelho
digitalWrite(amarelo2, LOW); // Desliga LED amarelo 2
digitalWrite(vermelho2, HIGH); // Liga LED vermelho 2
}
else if((millis() - delay1) >= 7000 && (millis() - delay1) < 10000 ){ // Verificação de Tempo
digitalWrite(verde, LOW); // Desliga LED verde
digitalWrite(amarelo, HIGH); // Liga LED amarelo
}
else if((millis() -delay1) >= 10000){ // Verificação de Tempo
delay1 = millis(); // Atribui o retorno
}
}
Vamos dar uma olhada mais de perto no código:
Definições de Pinos
Primeiramente temos que estar definindo os pinos que utilizamos em nosso projeto.
//Definições -----------------------------------------------------------------------------------------
#define btn 2 // Define pino botão
#define verde 3 // Define LED verde
#define amarelo 5 // Define LED amarelo
#define vermelho 7 // Define LED vermelho
#define verde2 8 // Define LED verde 2
#define amarelo2 6 // Define LED amarelo 2
#define vermelho2 4 // Define LED vermelho 2
Variáveis Globais
Em seguida declaramos um variável global, sendo ela delay1 responsável por armazenar o tempo em milissegundos.
//Variáveis Globais ----------------------------------------------------------------------------------
unsigned long delay1 = 0; // Armazena Tempo
Funções Setup
Além disso na função setup, será onde configuramos o pino 2 como INPUT_PULLUP e também configuramos mais seis pinos sendo eles 3, 4, 5, 6, 7 e 8 como OUTPUT.
//Setup ----------------------------------------------------------------------------------------------
void setup() {
pinMode(verde, OUTPUT); // Configura LED como OUTPUT
pinMode(amarelo, OUTPUT); // Configura LED como OUTPUT
pinMode(vermelho, OUTPUT); // Configura LED como OUTPUT
pinMode(verde2, OUTPUT); // Configura LED como OUTPUT
pinMode(amarelo2, OUTPUT); // Configura LED como OUTPUT
pinMode(vermelho2, OUTPUT); // Configura LED como OUTPUT
pinMode(btn, INPUT_PULLUP); // Configura btn como INPUT
}
Funções Loop
Agora na função loop, verificamos se o botão foi pressionado, caso tenha sido esperamos 2 segundos, ler o sinal do LED verde para ligar ou desligar o LED amarelo, em seguida desligamos o LED verde, esperamos mais 2 segundos, mudamos os dois semáforos para vermelho, esperamos 5 segundos e desligamos o vermelho do semáforos.
//Loop -----------------------------------------------------------------------------------------------
void loop() {
if(!digitalRead(btn)){ // Se botão pressionado
delay(2000); // Espera 2s
digitalWrite(amarelo, digitalRead(verde)); // Usa o sinal do verde
digitalWrite(verde, LOW); // Desliga LED verde
digitalWrite(amarelo2, digitalRead(verde2)); // Usa o sinal do verde2
digitalWrite(verde2, LOW); // Desliga LED verde 2
delay(2000); // Espera 2s
digitalWrite(amarelo, LOW); // Desliga LED vermelho
digitalWrite(amarelo2, LOW); // Desliga LED vermelho 2
digitalWrite(vermelho, HIGH); // Liga LED vermelho
digitalWrite(vermelho2, HIGH); // Liga LED vermelho 2
delay(5000); // Espera 5s
digitalWrite(vermelho, LOW); // Desliga LED vermelho
digitalWrite(vermelho2, LOW); // Desliga LED vermelho 2
}
else if((millis() - delay1) < 2000){ // Verificação de Tempo
digitalWrite(amarelo, LOW); // Desliga LED amarelo
digitalWrite(vermelho, HIGH); // Liga LED vermelho
digitalWrite(verde2, HIGH); // Liga LED verde 2
digitalWrite(vermelho2, LOW); // Desliga LED vermelho 2
}
Então caso o botão não tenha sido clicado, passamos para a parte do controle de tempo do semáforo. Para isso temos que definir um ciclo, nós definimos 10 segundos, ou seja, cada loop do semáforo irá ter 10 segundos. Para isso verificamos se millis() menos delay1 é menor que 2000 milissegundos, para que assim ligue o LED vermelho do primeiro e o LED verde do segundo semáforo. Caso seja maior que 2000 milissegundo verificamos se é maior ou igual a 2000 milissegundos e menor que 5000 milissegundos, caso seja desligamos LED verde e ligamos LED amarelo do segundo semáforo, para finalizar fechamos o loop verificando se é maior ou igual 10000 milissegundos, caso seja atribuímos a delay1 o valor de millis assim fazendo com que ele refaça o loop corretamente.
else if((millis() - delay1) < 2000){ // Verificação de Tempo
digitalWrite(amarelo, LOW); // Desliga LED amarelo
digitalWrite(vermelho, HIGH); // Liga LED vermelho
digitalWrite(verde2, HIGH); // Liga LED verde 2
digitalWrite(vermelho2, LOW); // Desliga LED vermelho 2
}
else if((millis() - delay1) >= 2000 && (millis() - delay1) < 5000){ // Verificação de Tempo
digitalWrite(verde2, LOW); // Desliga LED verde 2
digitalWrite(amarelo2, HIGH); // Liga LED amarelo 2
}
else if((millis() - delay1) >= 5000 && (millis() - delay1) < 7000 ){ // Verificação de Tempo
digitalWrite(verde, HIGH); // Liga LED verde
digitalWrite(vermelho, LOW); // Desliga LED vermelho
digitalWrite(amarelo2, LOW); // Desliga LED amarelo 2
digitalWrite(vermelho2, HIGH); // Liga LED vermelho 2
}
else if((millis() - delay1) >= 7000 && (millis() - delay1) < 10000 ){ // Verificação de Tempo
digitalWrite(verde, LOW); // Desliga LED verde
digitalWrite(amarelo, HIGH); // Liga LED amarelo
}
else if((millis() -delay1) >= 10000){ // Verificação de Tempo
delay1 = millis(); // Atribui o retorno
}
}
Assim finalizamos todo o código com a explicação sobre o projeto de semáforo com Arduíno UNO.
Resultado do Projeto Semáforo
Por fim esse foi o resultado obtido com o projeto do Semáforo.
Agradecemos sua Presença
Por fim, espero que tenham gostado e aprendido. Compartilhe com seus colegas e deixe um comentário de qual projeto deveria ser o próximo aqui no Blog da WJ Componentes!!
Enfim estarei deixando o arquivo Arduíno e Fritzing, link dos posts anteriores referentes ao projeto e software e sites utilizados.
Fique à vontade para tirar suas dúvidas nos comentários.
Software e Sites Utilizados
Post Relacionados
- Código Morse com Arduíno UNOOlá, como estão? Hoje iremos desenvolver um decodificador de código… Leia mais: Código Morse com Arduíno UNO
- Como Programar pelo Celular o Arduíno!Olá, como estão? A princípio iremos explicar como programar pelo… Leia mais: Como Programar pelo Celular o Arduíno!
- Como Programar por BlocosOlá, como estão? A princípio iremos falar sobre alguns sites… Leia mais: Como Programar por Blocos
- Contador com Botões no Arduíno UNOOlá, como estão? A princípio iremos realizar um contador. Entretanto… Leia mais: Contador com Botões no Arduíno UNO
- Jogo da Forca com Arduíno UNOOlá, como estão? A princípio iremos falar sobre a Serial… Leia mais: Jogo da Forca com Arduíno UNO
Posts mais Recentes
- Programando Relé RF 4331 -Instruções de emparelhamento do modo de alternância Modo de… Leia mais: Programando Relé RF 433
- Acionando motor DC por meio do pino “Touch” do ESP-32Neste projeto, vamos explorar uma aplicação ainda mais dinâmica e… Leia mais: Acionando motor DC por meio do pino “Touch” do ESP-32
- Acendendo led RGB por meio do pino “Touch” do ESP-32No último post, exploramos o fascinante mundo dos pinos touch… Leia mais: Acendendo led RGB por meio do pino “Touch” do ESP-32
- Utilizando os Pinos touch do ESP32Nesse projeto Vamos aprender a usar os pinos touch´s do… Leia mais: Utilizando os Pinos touch do ESP32
- Como Programar e Localizar o Endereço de uma Tela OLED I2C com Arduinoeste guia, vou levá-lo através dos passos para programar uma… Leia mais: Como Programar e Localizar o Endereço de uma Tela OLED I2C com Arduino
Julio Cesar Bonow Manoel
Cursando Engenharia da Computação pelo Centro Universitário Facens e atua no desenvolvimento de projetos na WJ Componentes. Participante da equipe de robótica Omegabotz.
Deixe um comentário