Logotipo





TP1 - Arduino: Dado | Relógio | Semáforo

Logo

  • No mundo em que vivemos, cada vez mais tecnológico, a automatização e o controle de dispositivos eletrónicos desempenham um papel fundamental na nossa rotina diária. Nesse contexto, desenvolveremos três projetos utilizando a plataforma de prototipagem Arduíno e toda a sua versatilidade.

    O Arduíno é uma plataforma de código aberto, amplamente utilizada para o desenvolvimento de projetos eletrónicos. Iremos desenvolver, utilizando as capacidades de programação e controle do Arduíno, os seguintes projetos: visualização dos outputs com um relógio digital, preciso e confiável, fornecendo informações temporais, com um formato visualmente atrativo por meio de uma matriz 8x8 de LEDs, simulando um Dado; um relógio digital que permite a gestão do tempo, utilizando um display de 7 Segmentos com 4 Dígitos e, por fim, um projeto que visa simular um sistema de semáforos interativo. O sistema de semáforos implementado permitirá a regulação de fluxo de tráfego ou de processos em ambientes específicos, tornando-se uma solução prática e versátil para diversas aplicações.

    A tecnologia utilizada nos projetos mencionados, torna este projeto uma exploração empolgante do potencial do Arduíno e das suas aplicações, no mundo real, devido a toda a sua criatividade e utilidade.


    • (1x) Arduino Uno R3;
    • (1x) Breadboard;
    • Cabos macho-macho;
    • (1x) Matriz 8x8 Matriz LED Display do tipo Ânode;
    • (1x) Display de 7 Segmentos com 4 Dígitos do tipo Ânode;
    • (8x) Led Vermelho;
    • (4x) Led Amarelo;
    • (8x) Led Verde;
    • (20x) Resistências 1 KΩ

    Image 3

    Figura 1 - Arduíno Uno.

    Image 3

    Figura 2 - Breadboard.

    Image 3

    Figura 3 - Cabo macho.


    Image 3

    Figura 4 - Matriz 8x8.

    Image 3

    Figura 5 - Display de 7 Segmentos com 4 Dígitos.

    Image 3

    Figura 6 - Leds.


    Image 3

    Figura 7 - Resistência 1 KΩ.


  • Sevseg Library: Biblioteca para o controlo de displays de 7 segmentos com 4 dígitos. Esta biblioteca permite controlar o display utilizando, para tal, apenas o Arduíno sem a necessidade da implementação de um outro hardware para esse efeito.


  • Image Dado

    Figura 8 – Diagrama do projeto Dado com uma Matriz 8x8.



    Image Relogio

    Figura 9 – Diagrama do projeto Relógio com um Display de 7 Segmentos com 4 Dígitos.



    Image Semaforos

    Figura 10 – Diagrama do projeto Semáforos.



  • Projeto Dado - Matriz de 8x8

    Para representar cada figura na matriz usou-se uma função que ativa uma linha da matriz de cada vez e as colunas necessárias de forma a representar a figura. A função percorre todas as linhas da matriz ativando e desativando as colunas consoante a figura.

    De forma a definir as figuras que vão ser representadas na matriz são utilizados arrays de bytes com oito elementos, cada elemento do array é iniciado pela letra B seguida de uma sequência de oito algarismos de zeros e uns, cada elemento do array representa uma linha e cada número da sequência de algarismos representa uma coluna, sendo que os uns representam uma coluna inativa e os zeros representam uma coluna ativa.

    Após diversos testes, foi possível inferir que o uso de delays fazia com que a matriz apresentasse as figuras de forma indevida causando intervalos de tempo prolongados entre a ativação de cada linha; porém a ausência de delays também se mostrou problemática uma vez que devido a mesma as figuras apareciam durante um intervalo de tempo tão reduzido que mal se conseguiam ver. Este problema com os delays foi ultrapassado criando um parâmetro na função que projeta as imagens na matriz, o qual foi denominado de duration, juntamente com este parâmetro colocou-se a função responsável por representar as figuras na matriz dentro de um ciclo for que ocorre enquanto o seu contador for menor que duration.



    Projeto Relógio

    De forma a simular um relógio, utilizou-se a biblioteca SevSeg, as definições da mesma devem ser determinadas no setup do código. Para controlar o número que é mostrado no display usam-se as funções setNumber e refreshDisplay, a primeira função altera o número que é mostrado no display e define o número de casas decimais no mesmo enquanto a segunda garante que o display mostre aquilo que é necessário.

    Para simular um relógio foram definidas duas variáveis globais denominadas de hour e min, representando respetivamente a horas e os minutos, sempre que um loop termina min é incrementado, e se min for maior ou igual a 60 hour é incrementado e min igualado a 0 sendo que também existe uma condição que verifica se hour é maior ou igual a 24 que ao se verificar iguala hour e min a 0.

    Como foi referido anteriormente, a hora é mostrada no relógio por meio da função setNumber neste exercício a mesma toma como input hour*100 + min e 2, onde hour*100 + min representa a hora e 2 representa o número de casas decimais o qual foi utilizado para criar uma distinção visual entre as horas e os minutos no display.

    O uso de delays muito prolongados neste exercício mostrou-se ineficaz, pois a presença do mesmo fazia com que os segmentos fossem ativados um de cada vez tornando difícil a visualização de cada número presente no display, para resolver este problema fez-se uso de um ciclo for para garantir que cada hora fosse mostrada durante aproximadamente um minuto no display, após diversos testes definiu-se que o número de ciclos que devem ocorrer durante cada loop era 26200, uma vez que com este número de ciclos cada minuto no relógio durava aproximadamente num minuto.

    Apesar de as horas funcionarem devidamente havia uma funcionalidade que estava em falta para simular devidamente um relógio, sendo esta a possibilidade de o acertar. Para implementar esta funcionalidade montaram-se 3 botões na breadboard o mais à esquerda servia para reduzir o valor de hour ou min em 1, o do meio para alternar entre a alteração das horas e dos minutos e o mais à direita para incrementar o valor de hour ou min em 1. Após implementar o aumento e redução das horas e dos minutos, foi necessário definir condições para que a hora em sim não assumisse valores irregulares. Assim definiu-se que quando min é manualmente alterado para ser maior ou igual a 60 o mesmo seria igualado a 0 e quando o mesmo fosse manualmente alterado para ser menor que 0 o mesmo seria igualado a 59; quanto a hour sempre que o seu valor é manualmente incrementado para ser maior ou igual a 24 o mesmo é alterado para 0 e se o seu valor for manualmente decrementado para ser menor que 0 o mesmo é igualado a 23.

    Durante os testes do código, determinou-se que os botões eram demasiado sensíveis o que motivou a criação de uma variável global chamada cooldown e de outras duas que definiam quando é que cada botão foi carregado pela última vez através da função millis, a qual conta os milissegundos que passaram desde que o Arduíno começou a executar o programa atual, o botão só poderia ser pressionado se a diferença entre o retorno da função millis e a variável que define quando o botão foi carregado (um retorno anterior da função millis) for superior a cooldown.



    Projeto Semáforos

    A implementação dos semáforos teve de seguir uma metodologia distinta na qual os LEDs foram montados em duas linhas numa breadboard, as 3 colunas mais à direita representam os semáforos da estrada que foi denominada de estrada 1 enquanto as 3 colinas mais à esquerda pertencem à estrada denominada de estrada 2. Cada estrada possui 2 botões associados e na montagem eles seguem o mesmo padrão, os dois mais à direita estão associados à estrada 1 e os dois mais à esquerda estão associados à estrada 2, de cada grupo de botões o mais à esquerda é considerado o primeiro enquanto o mais à direita é considerado o segundo da estrada a que está associado.

    O código deste exercício passou por muitas iterações até chegar à versão final, na qual se decidiu optar por uma abordagem simples na qual uma das duas estradas estariam sempre abertas, sendo que enquanto uma estaria aberta a outra permaneceria fechada. Cada estrada possui uma variável global do tipo bool que define quando na mesma estão a transitar veículos, sendo que o código considera que estão a transitar veículos na estrada quando esse bool é igual a true.

    Para controlar quando cada LED se acende criou-se a variável global time a qual é incrementada em 2 durante cada loop. Inicialmente, os LEDs verdes da estrada na qual transitam veículos estão abertos enquanto que na outra os LEDs vermelhos estão acesos; passado um pouco, os LEDs verdes da estrada onde transitam veículos são desativados e os LEDs amarelos do semáforo associado a essa estrada são ativados enquanto que os LEDs vermelhos da outra estrada se mantêm ativos. Quando time ultrapassa um determinado limite, o mesmo é igualado 0 e os bools associados às estradas têm os seus valores invertidos fazendo com que a estrada que estava aberta fique fechada e a estrada que estava fechada fique aberta, a partir deste momento o ciclo irá repetir-se, mas desta vez com as estradas em estados opostos aos quais estavam num ciclo anterior.

    A cada estrada estão também associados dois semáforos de travessia de peões cada um possui um LED verde e um LED vermelho associado a sim mesmo, quando a estrada está fechada apenas os LEDs verdes dos semáforos de travessia de peões dessa estrada encontram-se ligados e quando começam a transitar veículos na estrada apenas os LEDs vermelhos dos semáforos de travessia de peões dessa estrada estão acesos. Outra adição feita aos LEDs foi fazer com que os LEDs verdes dos semáforos de travessia de peões piscassem sempre que os semáforos da outra estrada tivessem os LEDs amarelos ativos.

    A última coisa implementada no código foi a possibilidade de carregar num botão para a travessia de veículos na estrada para possibilitar a travessia de peões, carregar no botão só terá efeito quando o semáforo da estrada onde está a passadeira está verde e quando o mesmo é carregado o mesmo iguala time a um determinado valor fazendo com que os semáforos dessa estrada fiquem amarelos durante um período de tempo mais curto do que quando os semáforos fiquem amarelos, após carregar num botão durante um dado intervalo de tempo carregar em qualquer botão não irá surtir efeito, isto garante um pouco de realismo ao exercício uma vez que assim é impossível impedir permanentemente a passagem dos veículos. Apesar desta abordagem ser mais simples a mesma possui uma grande desvantagem que é a impossibilidade de manter as duas estradas fechadas em simultâneo.



  • Projeto Dado - Matriz de 8x8


    Image 1

    Figura 11 - Fotografia da montagem do projeto Dado.


    Image 1

    Figura 12 - Fotografia dos outputs dos Sprites da Matriz.


    Video 1 - Video dos outputs do Dado.




    Projeto Relógio - 4x7 Segment Display


    Image 1

    Figura 13 - Fotografia da montagem do projeto Relógio.


    Image 1

    Figura 14 - Botões que permitem acertar as horas e os minutos.
    O botão vermelho permite alternar entre minutos e horas.


    Image 1

    Figura 14.1 - Figura 14.1 - Output das horas e dos minutos.



    Video 2 - Video da temporização do relógio.


    Video 3 - Acertar as horas e os minutos.




    Projeto Semáforos


    Image 1

    Figura 15 - Fotografia da montagem do projeto Semáforos.
    Os botões são usados pelos peões para obter o sinal verde.


    Image 1

    Figura 16 - Output dos semáforos.



    Video 4 - Video do projeto dos semáforos.




  • Projeto Dado - Matriz de 8x8
    • Display de texto.
    • Dado
    • Display de Mensagens de textgo e Emojis


    Projeto Relógio - Display de 7 Segmentos com 4 Dígitos
    • Cronómetro
    • Contador
    • Relógio Digital
    • Display de um eletrodoméstico


    Projeto Semáforos
    • Dispositivo de alertas com leds de várias cores
    • Dispositivo que mede ciclos temporais alertando com avisos visuais(leds)
    • Implementações de segurança em sistemas eletrónicos empresariais
    • Controlo e regulação do fluxo de tráfego ou de processos em ambientes específicos


  • Ao longo deste projeto, exploramos a incrível versatilidade do Arduíno, demonstrando as inúmeras possibilidades desta plataforma, tendo sido implementados um sistema multifuncional que combina um relógio digital, uma matriz de LEDs e um sistema de semáforos. Esta iniciativa destaca não apenas a capacidade do Arduíno de controlar dispositivos eletrônicos, mas também a sua aplicação em cenários do mundo real, onde a automatização e a visualização de dados desempenham um papel crucial.

    A implementação do relógio digital permite acompanhar uma maneira simples e visual o tempo, enquanto a matriz de LEDs oferece uma plataforma criativa para a exibição de informações. O sistema de semáforos permite uma gestão eficiente do fluxo de tráfego ou de processos, tornando-se uma solução prática para diversas aplicações, desde a melhoria da segurança no trânsito até o controle de máquinas industriais.

    As funcionalidades implementadas permitem uma abordagem flexível e personalizável, na qual os semáforos podem ser programados para ativar e desativar de acordo com horários específicos, demonstrando o potencial de automatização e controle oferecida pela plataforma Arduíno. A flexibilidade torna este projeto valioso tanto para entusiastas quanto para profissionais que desejam explorar a automatização de tarefas diárias ou a otimização de processos industriais.

    Como resultado, este projeto destaca a capacidade do Arduíno de criar soluções práticas e interativas que podem melhorar a eficiência e a segurança em diversas situações. Ao continuar a explorar e aprimorar essas tecnologias, podemos criar sistemas ainda mais inteligentes e integrados, contribuindo para um mundo mais conectado e eficiente. O potencial do Arduíno e a sua aplicação são ilimitados, oferecendo oportunidades para futuros desenvolvimentos e inovações no campo da eletrónica e automatização.


  • Projeto do Dado:
    https://projecthub.arduino.cc/SAnwandter1/programming-8x8-led-matrix-a3b852
    https://github.com/jackdonofrio/diceroll
    https://www.youtube.com/watch?v=xQZ_rrt7hF4

    Projeto Relógio:
    https://www.youtube.com/watch?v=3m4jhmafg8E
    https://www.youtube.com/watch?v=6XY9PooMrms&t=1101s
    https://www.youtube.com/watch?v=fYAlE1u5rno&t=44sS
    https://www.electronicssimplified.in/feed/2062/
    https://github.com/DeanIsMe/SevSeg/tree/master
    https://www.arduino.cc/reference/en/libraries/sevseg/
    https://projecthub.arduino.cc/SAnwandter1/programming-4-digit-7-segment-led-display-5c4617
    https://docs.arduino.cc/built-in-examples/digital/Button

    Projeto Semáforos:
    https://projecthub.arduino.cc/natalmakers/arduino-pedestrian-crossing-traffic-lights-1c534d

Ver Relatório