domingo, 31 de janeiro de 2021

EX14 - Programa: Calculadora simples com Arduino

Usaremos teclado e LCD, portanto, precisaremos incluir a biblioteca desses dispositivos em nossos códigos para garantir que estes dispositivos possam funcionar em nossa calculadora.


Como usaremos o teclado, precisaremos configurá-lo primeiro. O que você precisa saber a respeito do teclado é que ele é estruturado como uma matriz, então cada botão precisa ser salvo nos elementos da matriz. Em seguida, os pinos conectados entre o Arduino e o teclado são, respectivamente, Linhas (ROWS) e colunas (COLUMNS). Portanto, precisaremos declarar e configurar esses pinos digitais.

Quanto ao LCD ou Display de cristal líquido, você precisará declarar todos os pinos digitais que estão conectados ao LCD e declarar o objeto "LiquidCrystal".

O arquivo do código fonte Calculadora simples está disponível em: 21_02_11_Calculadora_simples_SRG (PDF).

O arquivo do diagrama elétrico Calculadora simples está disponível em: 21_02_11_Calculadora_simples_SRG (PDF).

© Direitos de autor. 2020: Gomes; Sinésio Raimundo. Última atualização: 21/02/2021 


sábado, 30 de janeiro de 2021

Aula 07 - Teclado Matricial 4x4 para Arduino

Figura 01 - Teclado Matricial 4x4

    O Teclado Matricial 4x4 foi desenvolvido para facilitar a entrada de dados em projetos microcontrolados. Este teclado possui 16 teclas, onde 10 delas são números, 4 são letras e 2 são caracteres especiais. Com ele podemos criar uma infinidade de projetos, tais como criar controles de acesso, teclados musicais, entre outros.
    Nesse tutorial iremos montar um simples projeto, assim aprendendo o funcionamento básico do teclado, de imprimir as teclas pressionadas no monitor serial. 
    O teclado possui 16 teclas, que estão dispostas em 4 linhas por 4 colunas, e ele possui 8 pinos para ligação. Embaixo de cada tecla há um interruptor de membrana. Cada interruptor em uma linha é conectado aos outros interruptores da mesma linha por um traço condutor sob o bloco, e da mesma forma são conectadas às colunas, onde todos os botões da coluna também estão conectados. Ou seja, todos os botões do teclado estão conectados a uma linha e a uma coluna, por isso que é chamado de teclado matricial. A imagem abaixo ilustra o circuito do teclado.
Figura 02 - Funcionamento do
Teclado Matricial 4x4

    
Para identificar qual botão foi pressionado, a placa Arduino executa quatro passos. O primeiro é configurar todas as colunas da matriz como entradas em nível lógico alto (resistor de pull-up interno ativado), e todas as linhas como saídas em nível lógico baixo. Deste modo, caso o botão "5" seja pressionado, a coluna "2" passará para o nível lógico baixo, completando o segundo passo. Já no terceiro passo, o Arduino identifica a linha que foi pressionada invertendo o nível lógico anterior, ou seja, configurando as colunas para nível lógico baixo, e mantendo as linhas em nível lógico alto. Desta forma, a linha "2", em nosso exemplo, passará para o nível lógico baixo, e o microcontrolador identificará que o botão pressionado está na linha "2" e coluna "2", completando, portanto, o quarto e último passo, como na imagem abaixo.
    Com a posição das teclas, é possível configurar o teclado para exibir os caracteres que você desejar, ou até mesmo acionar outras portas do Arduino,  já que , como comentamos no início, o teclado nada mais é do que uma série de push-buttons dispostos em forma de matriz.
Figura 03 - Placa Arduino e 
Teclado Matricial 4x4

    
Para começar a trabalhar com o teclado matricial, vamos criar um projeto simples de exibição das teclas pressionadas na tela do computador. Com a biblioteca adicionada à Arduino IDE, copie o código abaixo e carregue-o para sua placa Arduino. Para exibir no monitor serial as teclas presionadas, monte o circuito da figura 03.
    Logo no início, após a inclusão da biblioteca "Keypad", declaramos em variáveis a quantidade de linhas e de colunas do teclado utilizado, no nosso caso, 4 linhas e 4 colunas.
    Também criamos a matriz TECLAS_MATRIZ, responsável por armazenar as informações do nosso teclado, e onde indicamos para nosso microcontrolador, através de uma matriz, qual caractere é impresso quando um determinado botão do teclado é pressionado.
    Abaixo definimos em vetores quais pinos são responsáveis pelas linhas e pelas colunas (respectivamente PINOS_LINHAS e PINOS_COLUNAS). Posteriormente inserimos o comando Keypad teclado_personalizado, para iniciar o teclado e associar nossa matriz de acordo com o pinos estabelecidos para colunas e linhas.
    No setup do programa, inserimos o comando Serial.begin(9600), assim iniciando a porta serial em 9600 bits por segundo.
    Por fim, no looping do programa, e com o comando leitura_teclas = teclado_personalizado.getKey(), atribuímos à variável leitura_teclas o caractere do botão que foi pressionado. Com essa variável, verificamos se alguma tecla foi realmente pressionada através da condição if (leitura_teclas). Caso alguma tecla tenha sido realmente pressionada, o valor da variável será diferente de "0" e a condição será verdadeira, resultando na impressão da tecla pressionada no monitor serial.
    
#include <Keypad.h> // Biblioteca do codigo

const byte LINHAS = 4; // Linhas do teclado
const byte COLUNAS = 4; // Colunas do teclado

const char TECLAS_MATRIZ[LINHAS][COLUNAS] = { // Matriz de caracteres (mapeamento do teclado)
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

const byte PINOS_LINHAS[LINHAS] = {9, 8, 7, 6}; // Pinos de conexao com as linhas do teclado
const byte PINOS_COLUNAS[COLUNAS] = {5, 4, 3, 2}; // Pinos de conexao com as colunas do teclado

Keypad teclado_personalizado = Keypad(makeKeymap(TECLAS_MATRIZ), PINOS_LINHAS, PINOS_COLUNAS, LINHAS, COLUNAS); // Inicia teclado

void setup() {
  Serial.begin(9600); // Inicia porta serial
}

void loop() {

  char leitura_teclas = teclado_personalizado.getKey(); // Atribui a variavel a leitura do teclado

  if (leitura_teclas) { // Se alguma tecla foi pressionada
    Serial.println(leitura_teclas); // Imprime a tecla pressionada na porta serial
  }
Ao abrir o Monitor Serial em 9600 bps, pressione o botão desejado e o mesmo será impresso na tela.

O manual com diagrama elétrico da placa do Teclado Matricial 4x4 está disponível em: Teclado Matricial 4x4 .

© Direitos de autor. 2020: Gomes; Sinésio Raimundo. Última atualização: 02/04/2021

quarta-feira, 27 de janeiro de 2021

EX14 - Binguino: um gerador de números de bingo baseado em Arduino

Figura 01 - Binguino

    
"Bingo" - em algum lugar a qualquer hora, alguém está jogando Bingo. É divertido, fácil de jogar e apreciado por muitos. 
    No entanto, a escolha dos números para os jogos geralmente são feita por uma pequena gaiola de bolas. Se você gostaria de atualizar seus jogos para o século 21, considere fazer este gerador de números de bingo. Usando o circuito Arduino e um módulo LCD, os números são escolhidos aleatoriamente e anotados para que não sejam repetidos no mesmo jogo. 
    Essencialmente, o que o programa faz é escolher números aleatórios no domínio do Bingo (1 - 75) e combiná-los com a letra apropriada ( BINGO ). 
    Em qualquer execução, os números duplicados são filtrados, portanto, você não deve obter nenhum. Para começar um novo jogo de Bingo, pressione o botão de reinicialização integrado ou desligue o tabuleiro e ligue-o novamente. Isso inicia uma nova sequência de números.
 
Figura 02 - Display Binguino

   
O número gerado é armazenado em uma matriz que consiste em 75 posições preenchidas com "0" ou "1". Se o novo número gerado já existir, um novo número aleatório é gerado automaticamente.
    O novo número é mostrado no Módulo LCD até que um número válido seja alcançado. Quando o jogo é reiniciado, através do botão reset, a matriz é apagada e uma nova rodada pode ser iniciada.
    Uma nova rodada também pode ser iniciada desconectando a alimentação, que reinicia o Arduino e o programa.
     A conferência dos números é realizada através da comunicação serial, no PC. Dever ser corrigido o código que para a contagem com cerca de 38 números.
Figura 03 - Cartela Binguino
    
O arquivo do código fonte gerador de números de bingo  está disponível em: 21_04_28_Binguino_SRG (PDF).

   O arquivo para impressão de cartelas de bingo  está disponível em: 21_04_28_Cartelas_Binguino_SRG (PDF).

    O arquivo do diagrama elétrico gerador de números de bingo estará disponível em: 21_04_28_Circuito_Binguino_SRG (PDF).

© Direitos de autor. 2021: Gomes; Sinésio Raimundo. Última atualização: 01/04/2021 .

terça-feira, 26 de janeiro de 2021

EX13 - Programa: T-Rex Running com Arduino

T-Rex Running

Este projeto foi encontrado na internet, onde o autor faz o seguinte relato: "Algo que já estava me incomodando há algum tempo é que eu não fazia nada divertido há algum tempo, principalmente porque me faltam boas ideias para coisas assim. Por sorte, surgiu a ideia de fazer esse projeto T-Rex Running do nada, e aqui estamos".

Agora, só para ressaltar, este projeto não foi escrito em Arduino, mas em código AVR C puro usando Atmel Studio. Para usar em Arduino Uno e em um display compatível com o Uno, principalmente porque é barato e disponível. Então, para qualquer pessoa familiarizada com linguagem C, mas que só trabalha em Arduino, cerca de metade do código parecerá confuso, mas acredite em alguém que aprendeu AVR C (sozinho), não é nada difícil, pois consegui me adaptar a ele em menos de uma semana. Na maior parte, o projeto está explicado no próprio código.

Display LCD Hitachi HD44780 e seu modo de 4 bits
A comunicação do arduino com o display LCD ocorre com a configuração dos bits nos 4 pinos superiores do registro PORTD e do uso dos pinos EN e RS corretamente. Certifique-se de que, ao fazer a interface com este IC, use os atrasos apropriados, caso contrário, ele não conseguirá processar os dados corretamente (é um chip bastante lento). Outro ponto é que a velocidade do jogo é limitada pela rapidez com que a tela pode ser atualizada. Em sua mais alta velocidade de pico, a tela se atualiza em 11,8 Hz (85ms de atraso no loop) e é legível o suficiente para jogar este tipo de jogo, tudo ainda causa grandes problemas de brilho e fantasmas. 


Geração de número aleatório
Como eu queria tornar este jogo o mais aleatório possível, toda vez que faço um loop, leio o valor analógico de ADC5 que fica flutuando e esse número é usado como uma semente para a função de geração de número aleatório (RNG) na liguagem C. Isso está longe de ser perfeito, pois podem aparecer sequências repetidas que levam alguns segundos para desaparecer, mas sem adicionar nenhum hardware adicional, isto é provavelmente o melhor que pode ser feito.

Agrupamento de botões
A cada 500us o temporizador Timer1 é definido como triger atavés do comando TIMER1_COMPA_vect ISR, onde é verificado se o botão "Up" está pressionado e a (s) variável (s) global (is) está (ão) configurada (s) de acordo.
Upper, Downer Buffers e Screen Drawing
Para tornar mais fácil de codificar e reduzir efetivamente a lógica do aplicativo, foi usado um buffer para a linha um e outro buffer para a linha dois do display. Tudo é gravado nesses 2 buffers e eles são gravados como um único display.

Personagens personalizados para dinossauros e cactos
Os personagens fforam feitos em uma imagem 5x8 no "Paint" onde foi e desenhado o dinossauro e o cacto. Cada quadrado colorido representa 1 e um vazio (branco) representa zero. Depois disso, traduziu para hexadecimal e adicionei tudo aos duas matrizes (arrays uint8). Esses 2 caracteres são armazenados no registro CGRAM do IC, onde dinossauro é 0x00 e cacto é 0x01 em seu registro.

Visão geral das características do jogo
  • O jogo acelera quanto mais você joga;
  • Os cactos são inicialmente separados por, no mínimo, 5 espaços, conforme o jogo avança, ele desce para 3;
  • A pontuação atual é exibida no jogo, a atual e a melhor pontuação são exibidas após a derrota;
  • Há um loop de interrupção de 500 ns para verificar se o botão "Up" foi pressionado e, portanto, não há problemas com o atraso de bloqueio de acionamento do botão de entrada;
  • Trapaças segurando o botão para cima constantemente ou enviando spam são impedidos;
  • O dinossauro ficará no ar por 3 ciclos de loop depois de pular;
  • Caracteres especiais personalizados feitos para cactos e dinossauros;
  • Depois de perder, pressione o botão select para reiniciar o jogo.
O arquivo do código fonte T-Rex Running está disponível em: 21_02_10_T-Rex_Running_SRG (PDF).

O arquivo do diagrama elétrico T-Rex Running está disponível em: 21_02_10_S_T-Rex_Running_SRG (PDF).

© Direitos de autor. 2020: Gomes; Sinésio Raimundo. Última atualização: 21/02/2021 

domingo, 24 de janeiro de 2021

EX12 - Programa: Relógio de Xadrez com Arduino

O Relógio de Xadrez é composto de dois cronômetro de contagem regressiva de construído com a placa "Arduino UNO" e a placa "LCD Keypad Shield" O código de programação do teclado LCD é baseado em um exemplo de como usar o teclado LCD. O cronômetro de contagem regressiva tem três telas.

Figura 01 - Circuito - Relógio de Xadrez

  • Uma tela de cronômetro para mostrar o tempo restante de cada jogador.
  • Uma tela de menu para definir o número de minutos disponíveis para cada jogador.
  • Uma tela de game over, exibida quando um dos jogadores fica sem tempo.
O arquivo do código fonte - Relógio de Xadrez está disponível em: 21_01_05_Relógio_de_Xadrez_SRG (PDF).

O arquivo do diagrama elétrico - Relógio de Xadrez está disponível em: 21_01_05_Circuito_Relógio_de_Xadrez_SRG (PDF).

© Direitos de autor. 2020: Gomes; Sinésio Raimundo. Última atualização: 13/02/2021 

EX11 - Programa: Relógio preciso e simples com Arduino

Figura 01 - Relógio com Arduino
Este é um relógio de quartzo simples, você deve definir manualmente o tempo exato pelos botões de pressão, horas e minutos. Isso pode ser feito com precisão de 1 segundo, enquanto um toque no botão de pressão de minutos aumenta os minutos em 1 e também zera os segundos. Portanto, quando o relógio exibe por exemplo 04:15:59, pressionando brevemente o botão minutos e o relógio do Arduino vai para 04:16:00. Depois disso, o relógio está perfeitamente sincronizado, isto foi acompanhado após a variação após 1 hora, 1 dia, etc .... 

O tempo é mantido tão preciso quanto o cristal de 16 MHz do Arduino UNO, então você não normalmente vê erro mesmo após 24h de operação.

Arquivo do código fonte - Relógio preciso e simples está disponível em:  21_01_07_Relógio_preciso_simples_SRG (PDF).

O arquivo do diagrama elétrico - Relógio preciso e simples está disponível em: 21_01_07_Circuito_Relógio_preciso_simples_SRG (PDF).

Há também o manual para utilização de DISPLAYS LCD com o controlador HD44780 no Proteus elaborado por Daniel Madeira Bueno disponível em: Manual de implementação e simulação de projetos utilizando Arduino UNO e Proteus/ISIS .

© Direitos de autor. 2020: Gomes; Sinésio Raimundo. Última atualização: 13/02/2021 

sábado, 23 de janeiro de 2021

EX10 - Programa: Leitura de chaves e escrita em display LCD com LCD Keypad Shield no Arduino

Iremos programar agora uma aplicação para identificar qual tecla do módulo LCD Keypad Shield foi acionado, e escrever uma mensagem corresponde á tecla que foi acionada. 

 O LCD Keypad Shield é um módulo integrado que emprega toda a praticidade dos shields, de um display 16×2 e de um conjunto de pequenos botões push buttons que são utilizados para navegar em menus na diretamente na tela, com funções selecionar e resetar.

Devido ao LCD Keypad Shield com botões ser conectado diretamente sobre a face superior do Arduino a possibilidade de falhas nas ligações é nula, além de evitar interrupções de imagens devido a pequenas vibrações no microcontrolador ou na base onde ele encontra-se localizado.

A biblioteca do LCD Keypad Shield, tem a função de exibir um menu de navegação que através do botão SELECT proporciona a escolha de uma das opções apresentadas junto ao display.

O Display LCD Shield com Teclado é uma opção compacta para incluir uma interface homem-máquina nos seus projetos com Arduino. Basta encaixar o shield em uma placa Arduino para acrescentar ao seu projeto um display alfanumérico e cinco teclas. Conectores de expansão no shield dão acesso aos demais pinos do Arduino para ligação de sensores e atuadores.

Arquivo do código fonte - LCD Keypad Shield está disponível em:  23_05_07_LCD_Keypad_Shield_SRG (PDF).

O arquivo do diagrama elétrico - LCD Keypad Shield estará disponível em: 23_05_07_Circuito_Semáforo_com_contador_SRG (PDF).

© Direitos de autor. 2023: Gomes; Sinésio Raimundo. Última atualização: 16/05/2023

sexta-feira, 22 de janeiro de 2021

EX09 - Programa: Leitura de luminosidade com LDR e escrita em display LCD com Arduino

 Iremos programar um modelo de sensor de luminosidade com quatro níveis de detecção, com acionamento de lâmpadas e informações de luminosidade escrita dos valores em um display LCD. 
Para esta aplicação utilizei o Módulo LCD Keypad Arduino, além de um LDR e o módulo relé.
 O LCD Keypad Shield é um módulo integrado que emprega toda a praticidade dos shields, de um display 16×2 e de um conjunto de pequenos botões push buttons que são utilizados para navegar em menus na diretamente na tela, com funções selecionar e resetar.
A biblioteca do LCD Keypad Shield, tem a função de exibir um menu de navegação que através do botão SELECT proporciona a escolha de uma das opções apresentadas junto ao display.

O Display LCD Shield com Teclado é uma opção compacta para incluir uma interface homem-máquina nos seus projetos com Arduino. Basta encaixar o shield em uma placa Arduino para acrescentar ao seu projeto um display alfanumérico e cinco teclas. Conectores de expansão no shield dão acesso aos demais pinos do Arduino para ligação de sensores e atuadores.

Arquivo do código fonte - LDR e LCD Arduino está disponível em:  23_06_12_LCD_LDR_SRG_V2 (PDF).
O arquivo do diagrama elétrico - Semáforo de duas vias estará disponível em: 23_05_07_Circuito_Semáforo_com_contador_SRG (PDF).
Exercício proposto pelo Professor Murilo Henrique Miranda.
© Direitos de autor. 2023: Gomes; Sinésio Raimundo. Última atualização: 16/05/2023

quinta-feira, 21 de janeiro de 2021

Aula 06 - LCD Keypad Shield para Arduino

 O LCD Keypad Shield é um módulo integrado que emprega toda a praticidade dos shields, de um display 16×2 e de um conjunto de pequenos botões push buttons que são utilizados para navegar em menus na diretamente na tela, com funções selecionar e resetar.

Devido ao LCD Keypad Shield com botões ser conectado diretamente sobre a face superior do Arduino a possibilidade de falhas nas ligações é nula, além de evitar interrupções de imagens devido a pequenas vibrações no microcontrolador ou na base onde ele encontra-se localizado.


A biblioteca do LCD Keypad Shield, tem a função de exibir um menu de navegação que através do botão SELECT proporciona a escolha de uma das opções apresentadas junto ao display.

O Display LCD Shield com Teclado é uma opção compacta para incluir uma interface homem-máquina nos seus projetos com Arduino. Basta encaixar o shield em uma placa Arduino para acrescentar ao seu projeto um display alfanumérico e cinco teclas. Conectores de expansão no shield dão acesso aos demais pinos do Arduino para ligação de sensores e atuadores.

Um único produto reproduz a funcionalidade de três: Display, Botões e pinos de expansão ocupando mínimo espaço físico.

  • Display - O shield contém um display alfanumérico de 2 linhas de 16 colunas, com backlight azul. Ao ser encaixado, o shield necessariamente ocupa alguns pinos do Arduino que serão dedicados ao display. 
  • Botões - O shield possui cinco botões para interação com o operador. O shield possui as legendas Up, Down, Left, Right e Select, entretanto, você tem a liberdade para definir a ação de cada botão de acordo com a sua aplicação.
  • Conectores de Expansão - Quatro conectores permitem ligar outros dispositivos aos pinos não utilizados do Arduino.
O manual com diagrama elétrico da placa do LCD KeyPad Shield está disponìvel em: LCD Keypad Shield .

© Direitos de autor. 2020: Gomes; Sinésio Raimundo. Última atualização: 02/04/2021 

quarta-feira, 20 de janeiro de 2021

EX08 - Programa: Semáforo de duas vias com temporização do vermelho com Arduino


Iremos programar um modelo simples de semáforo com duas vias, que conta o tempo do vermelho da avenida. 

Para esta aplicação utilizei o Módulo LED 8mm Tipo Semáforo que é composto por 3 LEDs, sendo um na cor verde, um na cor amarela e outro na cor vermelha. A disposição dos LEDs no módulo faz com que o mesmo fique parecido com um semáforo e isto possibilita projetos bem interessantes. O Módulo LED 8mm Tipo Semáforo conta com os pinos para controle individual de cada LED e a configuração dos LEDs é catodo comum. 

Utilizei também quatro LED's vermelhos de 3 mm para indicar a temporização do sinaleiro vermelho da avenida.

Arquivo do código fonte - Semáforo de duas vias com contador está disponível em:  23_05_07_Semáforo_com_contador_SRG (PDF).

O arquivo do diagrama elétrico - Semáforo de duas vias estará disponível em: 23_05_07_Circuito_Semáforo_com_contador_SRG (PDF).

Exercício proposto pelo Professor Murilo Henrique Miranda.

© Direitos de autor. 2023: Gomes; Sinésio Raimundo. Última atualização: 16/05/2023



terça-feira, 19 de janeiro de 2021

EX07 - Programa: Semáforo de duas vias e travessia de pedestres com Arduino

Vamos programar agora um modelo mais avançado de semáforo com duas vias e travessia de pedestres. Em vez de uma faixa de pedestres, mudaremos o circuito para ter dois semáforos.

Figura 01 - Semáforo de duas vias e
 travessia de pedestres.
Primeiro, atribuímos os novos pinos de semáforo a variáveis ​​e configuramos como saídas, como no primeiro exemplo, depois atualizamos a sequencia de funcionamento.

Arquivo do código fonte - Semáforo de duas vias está disponível em:  21_01_06_Semáforo_duas_vias_travessia_pedestres_SRG (PDF).
O arquivo do diagrama elétrico - Semáforo de duas vias está disponível em: 21_01_06_Circuito_Semáforo_duas_vias_travessia_pedestres_SRGG (PDF).
© Direitos de autor. 2020: Gomes; Sinésio Raimundo. Última atualização: 13/02/2021 

segunda-feira, 18 de janeiro de 2021

EX06 - Programa: Semáforo de pedestre com botão em Arduino

Figura 01 - Circuito - Semáforo de pedestre
Vamos agora criar um semáforo com botão para travessia de pedestre com Arduino - Controle de botão de pressão para pedestres . Quando os pedestres atravessam a rua, os carros devem parar. Na verdade, há duas partes - uma é construir os semáforos e a segunda parte é a codificação. Estamos usando um botão de pressão, mas pode ser um sensor. Temos um exemplo de implementação básica de modelagem de máquinas de estados finitos embarcados. 
Quando o botão é pressionado:

  • O LED verde do semáforo apagará;
  • O LED amarelo do semáforo acenderá por 2 segundos;
  • Em seguida o LED vermelho do semáforo acenderá;
  • Nesse momento, o LED verde da luz de pedestre acenderá;
  • Após 4 segundos, o LED verde da luz de pedestre piscará por 5 segundos e apagará;
  • O LED vermelho do semáforo apagará;
  • E por fim o LED verde do semáforo acenderá.

Arquivo do código fonte - Semáforo de pedestre está disponível em: 21_01_04_Semáforo_de_pedestre_SRG (PDF)

© Direitos de autor. 2020: Gomes; Sinésio Raimundo. Última atualização: 13/02/2021 

domingo, 17 de janeiro de 2021

EX05 - Programa: Semáforo de duas vias com Arduino

Figura 01 - Semáforo de duas vias.
Iremos programar um modelo simples de semáforo com duas vias. 

Para esta aplicação utilizei o Módulo LED 8mm Tipo Semáforo que é composto por 3 LEDs, sendo um na cor verde, um na cor amarela e outro na cor vermelha. A disposição dos LEDs no módulo faz com que o mesmo fique parecido com um semáforo e isto possibilita projetos bem interessantes. O Módulo LED 8mm Tipo Semáforo conta com os pinos para controle individual de cada LED e a configuração dos LEDs é catodo comum. 

A primeira coisa que fazemos no início do programa é colocar uma pequena observação sobre o nome do programa, sua função e quem o criou:

1
2
3
// Programa : Semáforo Rua Avenida com Arduino
// Autor : Sinésio Gomes
// Data : 16/05/2023
  1. Comece uma linha com barras duplas ( // ) e tudo o que vier depois dessa linha será tratado como um comentário. Uma das boas práticas de programação é documentar o seu código por meio das linhas de comentário. Com elas, você pode inserir observações sobre como determinada parte do programa funciona ou o que significa aquela variável xyz que você criou. Isso será útil não só para você, se precisar alterar o código depois de algum tempo, como também para outras pessoas que utilizarão o seu programa.

Após os comentários, vem a estrutura do setup(). É nela que definimos que os pinos de 8 a 13 do Arduino serão utilizados como saída.

4
5
6
7
8
9
10
11
12
13
14
void setup()
{
  //Define as portas dos led's como saídas
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);   pinMode(10, OUTPUT);
pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT);
}

Por último, temos o loop(), que contém as instruções para acender e apagar os led's da vias, e também o intervalo entre essas ações.

15
16
17
18
19
20
21
22
23
24
25
26





50
void loop()
{
  //Acende e apaga os led's de cada semáforo das vias
  digitalWrite(8, HIGH);
digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, LOW); digitalWrite(13, HIGH);
   
  //Aguarda o intervalo especificado
  delay(6000);
      
  // A estrutura de programação acima irá se repetir para cada intervalo
//de funcionamento do semáforo, mudando apenas o led que será acionado
//e o intervalo de tempo.
 
}

  1. A linha do código contendo digitalWrite(13, HIGH) coloca a porta 13 em nível alto (HIGH, ou 1), acendendo o led embutido na placa. 
  2. O comando delay(6000), especifica o intervalo, em milissegundos, no qual o programa fica parado antes de avançar para a próxima linha.
  3. O comando digitalWrite(13, LOW), apaga o led, colocando a porta em nível baixo (LOW, ou 0), e depois ocorre uma nova parada no programa, e o processo é então reiniciado.
Figura 02 - Módulo LED 8mm.
Arquivo do código fonte - Semáforo de duas vias está disponível em:  
23_05_01_Semáforo_duas_vias_SRG (PDF).

O arquivo do diagrama elétrico - Semáforo de duas vias estará disponível em: 23_05_01_Circuito_Semáforo_duas_vias_SRG (PDF).

Exercício proposto pelo Professor Murilo Henrique Miranda.

© Direitos de autor. 2023: Gomes; Sinésio Raimundo. Última atualização: 16/05/2023