Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

SISTEMA DE ENSINO 100% OLINE 
ENGENHARIA ELÉTRICA 
NOME DO ALUNO 
 
 
SISTEMAS DIGITAIS E MICROPROCESSADORES 
AULA PRÁTICA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
NOME DO ALUNO 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
SISTEMAS DIGITAIS E MICROPROCESSADORES 
AULA PRÁTICA 
 
 
Atividade Prática Individual da disciplina de Sistemas 
Digitais e Microprocessadores realizada no Curso de 
Engenharia Elétrica, valendo como requisito parcial para 
a obtenção de nota para compor a média semestral. 
 
Tutor à Distância: nome do tutor 
 
CIDADE 
2025 
 
 
SUMÁRIO 
 
 
1 INTRODUÇÃO................................................................................................. 4 
2 DESENVOLVIMENTO...................................................................................... 6 
2.1 ATIVIDADE PRÁTICA 1 ............................................................................... 6 
2.2 ATIVIDADE PRÁTICA 2 ............................................................................. 13 
2.3 ATIVIDADE PRÁTICA 3 ............................................................................. 17 
2.4 ATIVIDADE PRÁTICA 4 ............................................................................. 25 
2.5 ATIVIDADE PRÁTICA 5 ............................................................................. 31 
3 CONCLUSÃO ................................................................................................ 41 
4 REFERÊNCIAS BIBLIOGRÁFICAS................................................................. 42 
 
 
4 
 
1 INTRODUÇÃO 
A realização de uma atividade prática dentro do contexto de uma disciplina 
acadêmica tem como objetivo principal sedimentar o conhecimento que foi aprendido 
durante as aulas. É uma maneira do aluno colocar em prática o que foi visto na teoria, 
vivenciando os conceitos, fundamentos e demais aspectos pertinentes à aplicação da 
disciplina em sua área de atuação. 
Durante o estudo desta disciplina de Sistemas Digitais e Microprocessadores, 
foi possível verificar muito conteúdo interessante, que no desenvolvimento dessas 
atividades, experimentamos uma abordagem prática e mão na massa, o que ajudou 
a consolidar vários conceitos teóricos aprendidos em sala de aula. Este portfólio não 
só mostra o desenvolvimento das habilidades técnicas, mas também o caminho de 
como resolver problemas complexos dentro do universo dos sistemas digitais e 
microprocessadores. As atividades desenvolvidas englobam desde a implementação 
de circuitos básicos até a programação avançada de microcontroladores Arduino. 
Na Aula Prática 1, foi projetado e implementado um circuito com a finalidade 
de registrar a produção de uma fábrica utilizando 8 teclas, cada uma representando 
uma quantidade específica de itens produzidos. Por meio do simulador Logisim, foi 
explorado conceitos como entradas e saídas, codificadores de prioridade e 
decodificadores, com o intuito de simular o funcionamento do circuito digital e verificar 
sua utilização na realização desta atividade e de atividades correlatas. 
A Aula Prática 2 ampliou o escopo ao focar no design, simulação e construção 
de circuitos lógicos mais sofisticados. Nesse contexto, empregou-se a ferramenta 
Logisim para desenvolver um contador binário de 4 bits e um contador BCD de 
década, fortalecendo as competências na manipulação de circuitos digitais. 
Já a Aula Prática 3 proporcionou a imersão no universo dos 
microcontroladores, com ênfase no Arduino. Durante esta etapa, foi possível 
compreender o funcionamento básico do microcontrolador e foram programados 
algoritmos simples, dando início à exploração de sistemas de controle. 
Na Aula Prática 4, o aprendizado foi aprofundado ao abordar a programação 
de algoritmos voltados para a criação de um relógio em tempo real e de uma estação 
meteorológica equipada com sensores de temperatura e umidade, consolidando ainda 
mais os conhecimentos adquiridos. 
5 
 
Por fim, a Aula Prática 5 investigou aplicações específicas de 
microcontroladores Arduino, como a implementação de um sensor ultrassônico 
combinado com LED RGB e um sensor ultrassônico com timer. 
As atividades descritas neste portfólio nos trazem uma abordagem prática e 
interativa que conecta teoria e prática, demonstrando não apenas o avanço das 
habilidades técnicas, mas também a capacidade de solucionar desafios complexos no 
campo dos sistemas digitais e microprocessadores. 
 
 
 
6 
 
2 DESENVOLVIMENTO 
2.1 ATIVIDADE PRÁTICA 1 
A atividade prática 1 traz a proposta de implementação de um circuito que 
registre a produção de uma fábrica através de 8 teclas, sendo pressionada a 
quantidade produzida (de 1 a 8) a cada produção, demonstrando na saída o número 
de itens produzidos na sequência decimal. 
Para a realização desta atividade, foi utilizado o software simulador Logisim. A 
seguir, os passos seguidos durante a atividade: 
Inicialmente, abriu-se o software simulador Logisim, que foi a plataforma 
escolhida para a simulação dos circuitos digitais a serem construídos na atividade e 
foi feita uma verificação de seu ambiente de trabalho para conhecimento das 
ferramentas e familiarização com os botões. 
Em seguida, para representar as 8 teclas correspondentes à produção, foram 
inseridas teclas alinhadas e rotuladas adequadamente para indicar qual número cada 
tecla representava, conforme Figura 1. 
Figura 1. Inserção de Teclas e Rótulos 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fonte: O autor 
7 
 
Na continuação foi adicionado um Codificador de Prioridade ao circuito, um 
componente que, ao receber várias entradas, exibe na saída o valor da entrada mais 
alta e feita a conexão das teclas ao codificador, conforme Figura 2. 
Figura 2. Inserção do Codificador de Prioridade e conexão das teclas a ele 
 
 
 
 
 
 
 
 
 
Fonte: O autor 
 
Uma entrada de Enable foi incorporada ao codificador de prioridade para 
habilitar seu funcionamento, conforme Figura 3. 
Figura 3. Inserção da entrada Enable 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fonte: O autor 
8 
 
Para exibir o valor binário correspondente à entrada habilitada de 0 a 7, foi 
inserida uma saída, conforme Figura 4. 
Figura 4. Inserção da Saída 
 
 
 
 
 
 
 
 
 
Fonte: O autor 
 
 
Em seguida, foi realizada a simulação do codificador de prioridade 
preenchendo uma tabela com entradas e saídas. Na simulação, observou-se que a 
saída representava o valor binário mais alto da entrada habilitada. Vide Tabela 1. 
Tabela 1. Resultados da simulação do codificador de prioridade 
Enable Tecla Acionada Saída 
0 Tecla de 1 a 8 acionada xxx 
1 Nenhuma tecla acionada xxx 
1 1 000 
1 2 001 
1 3 010 
1 4 011 
1 5 100 
1 6 101 
1 7 110 
1 8 111 
Fonte: O autor 
 
 
 
 
9 
 
Após a simulação do codificador de prioridade, foi inserido um decodificador no 
circuito. Foi configurado o número de bits corretamente na entrada e em seguida feita 
as conexões necessárias, conforme Figura 5. 
Figura 5. Inserção do decodificador 
 
Fonte: O autor 
 
Em seguida, foram incorporadas as saídas do decodificador ao circuito, 
conforme Figura 6. 
Figura 6. Saídas incorporadas ao decodificador 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fonte: O autor 
 
 
 
 
10 
 
Após o circuito pronto, testes foram realizados para verificar todas as 
possibilidades do circuito, registrando quais saídas eram acionadas em diferentes 
combinações de teclas, conforme Tabela abaixo: 
Tabela 2. Simulação do decodificador. 
Enable Tecla Acionada Saída do Decodificador 
0 Tecla de 1 a 8 acionada xxxxxxxx 
1 Nenhuma tecla acionada xxxxxxxx 
1 1 1 
1 2 2 
1 3 3 
1 4 4 
1 5 5 
1 6 6 
1 7 7 
1 8 8 
Fonte: O autor 
 
 
Assim, após os testes, verificamos que o codificador de prioridade tem a função 
de identificar a tecla de maior prioridade que está sendo acionada (ligada) e gerar uma 
saída bináriacorrespondente. O decodificador, por sua vez, recebe essa saída binária 
e a converte de volta para a representação decimal, indicando qual tecla foi acionada. 
A lógica de funcionamento pode ser resumida basicamente desta forma. 
 
Alguns exemplos do comportamento do circuito: 
Combinação 1: 
Tecla Acionada = 3 
Enable = 1 (Habilitado) 
Saída do Codificador = 010 (correspondente a 2 em binário, pois a sequência 
no decodificador inicia-se no 0 e finaliza do 7, correspondendo as teclas de 1 a 8) 
Saída do Decodificador = 3 
Resultado: Quando a tecla 3 for acionada e o codificador de prioridade detectar 
que ela é a de maior prioridade, converte em binário e envia para o decodificador que 
recebe o sinal em binário e converte para decimal, acionando assim a saída 3. Vide 
Figura 7. 
11 
 
Figura 7. Resultado da combinação 1 
 
 
 
 
 
 
 
Fonte: O autor 
 
Combinação 2: 
Tecla Acionada = 1 
Enable = 1 (Habilitado) 
Saída do Codificador = 000 (correspondente a 0 em binário) 
Saída do Decodificador = 1 (decimal) 
Resultado: Quando a tecla 1 for acionada e ela for a de maior prioridade, a 
saída 1 do decodificador será a correta. Vide Figura 8. 
Figura 8. Resultado da combinação 2 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fonte: O autor 
 
 
12 
 
Combinação 3: 
Tecla Acionada = 7 
Enable = 1 (Habilitado) 
Saída do Codificador = 110 (correspondente a 6 em binário) 
Saída do Decodificador = 7 
Resultado: Quando a tecla 7 for acionada e ela for a de maior prioridade, a 
saída 7 do decodificador será a correta. Vide Figura 9. 
Figura 9. Resultado da combinação 3 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fonte: O autor 
 
13 
 
2.2 ATIVIDADE PRÁTICA 2 
A segunda atividade prática trouxe a proposta de projetar e simular circuitos 
lógicos mais complexos, com destaque para a implementação de um meio somador 
binário, um contador assíncrono de 4 bits e um Contador de Década BCD. 
Para a realização desta atividade, foi utilizado novamente o software Logisim. 
A seguir, os passos realizados durante a atividade: 
Inicialmente, foi construído um circuito com a porta NAND e verificar sua 
equivalência com a porta OR Negativa. Para tanto, foi necessário adicionar as portas 
lógicas NAND e OR, bem como duas portas inversoras. Foram inseridas também as 
entradas A e B, as portas foram devidamente posicionadas e as foram realizadas as 
conexões, conforme Figura 10. Em seguida, vários testes foram efetuados alternando-
se os valores das entradas A e B e verificada com se comportara a saída. 
Figura 10. Circuito com portas inseridas e conexões efetuadas 
 
Fonte: O autor 
 
Importante ressaltar que uma maneira de verificar a equivalência entre dois 
circuitos lógicos é verificar se suas tabelas verdades são iguais. Vide Tabelas 3 e 4. 
Tabela 3. Tabela verdade da porta NAND 
A B S 
0 0 1 
0 1 1 
1 0 1 
1 1 0 
Fonte: O autor 
14 
 
Tabela 4. Tabela verdade da porta OR negativa 
A B S 
0 0 1 
0 1 1 
1 0 1 
1 1 0 
Fonte: O autor 
 
 Assim, foi possível verificar que os dois circuitos acima são equivalentes. 
 
2.2.1 Projeto do Circuito Meio Somador 
Utilizando as portas lógicas disponíveis no Logisim, foi projetado o circuito 
lógico para um meio somador binário, conforme Figura 11. Na simulação no Logisim, 
as entradas foram alternadas e as saídas foram analisadas para garantir a precisão 
do circuito, conforme Tabela 5. 
Figura 11. Meio somador 
 
 
 
 
 
 
 
 
Fonte: O autor 
 
Tabela 5. Tabela verdade para o meio somador 
Entradas Saídas 
A B S C 
0 0 0 0 
0 1 1 0 
1 0 1 0 
1 1 0 1 
Fonte: O autor 
 
 
15 
 
2.2.2 Projeto Contador Assíncrono de 4 bits 
Os contadores são circuitos lógicos projetados encadeando flip-flops, eles 
podem ser classificados como assíncronos ou síncronos, de acordo com a forma que 
recebem os pulsos do clock. 
Nos contadores assíncronos, o primeiro flip-flop recebe um sinal de clock 
externo e cada flip-flop subsequente recebe o clock através da saída do anterior. Nos 
contadores síncronos, o mesmo sinal de clock é fornecido para todos os flip-flops de 
forma que eles recebem o clock simultaneamente. 
Com base no conhecimento adquirido sobre contadores assíncronos, foi 
projetado um contador de 4 bits. Os flip-flops foram encadeados, e as conexões foram 
estabelecidas conforme as características desse tipo de contador. Vide Figura 12. 
Figura 12. Contador assíncrono de 4 bits 
 
 
 
 
 
 
 
 
 
 
 
Fonte: O autor 
2.2.3 Projeto Contador de Década BCD 
 
O contador de década também funciona de modo assíncrono. Esse tipo de 
circuito efetua a contagem em números binários de 0 a 9, ou seja, de 0000 a 1001. 
Assim, para um contador contar somente até 9, quando chegar no 1010, que é o 
número 10 em decimal, joga-se um nível 0 na entrada CLEAR do flip-flop. Desse 
modo, para realizar esse procedimento, liga-se as saídas Q3 e Q1 em uma porta 
NAND de duas entradas, conforme mostrada na Figura 13. 
16 
 
Figura 13. Contador de década 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Fonte: O autor 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17 
 
2.3 ATIVIDADE PRÁTICA 3 
 Esta atividade se divide em 2 atividades propostas. 
 
2.3.1 Atividade Proposta 1 
Na primeira atividade proposta da Atividade 3, foram desenvolvidos 4 
programas para Arduino Uno, utilizando a plataforma Arduino IDE, com o objetivo de 
realizar operações específicas. A seguir, breves descrições sobre o escopo, os 
códigos desenvolvidos e como se deu a estruturação e validação: 
Programa 1: Programa para Arduino Uno semelhante a um eco 
• Escopo do Programa: 
Foi criado um programa que implementa a funcionalidade de eco, ou seja, 
repete qualquer caractere recebido pela porta serial. O código incluiu a leitura de 
caracteres da porta serial e a retransmissão desses caracteres de volta para a porta. 
Segue o código abaixo desenvolvido para implementação da solução: 
 
 void setup() { 
 Serial.begin(9600); // Inicializa a comunicação serial com taxa de 9600 bps 
} 
 
void loop() { 
 if (Serial.available() > 0) { // Verifica se há dados disponíveis na porta serial 
 char receivedChar = Serial.read(); // Lê o caractere recebido 
 
 Serial.print("Você digitou: "); // Envia uma mensagem indicando o 
caractere recebido 
 Serial.println(receivedChar); // Envia o caractere recebido de volta pela 
porta serial 
 } 
} 
 
18 
 
• Validação: 
O programa foi enviado para o Arduino Uno através da Arduino IDE. Após o 
upload do programa, o Arduino foi conectado ao computador, e a comunicação serial 
foi estabelecida. Testes foram realizados enviando caracteres pela porta serial, e o 
Arduino respondeu repetindo os caracteres recebidos. Programa testado com 
sucesso! 
 
Programa 2: Programa de Piscar LEDs em Sequência para Arduino Uno 
• Escopo do Programa: 
Foi desenvolvido um programa que simula um registrador de deslocamento 
com 5 LEDs. Cada LED acende sequencialmente por 200 ms, de forma cíclica. O 
código incluiu a configuração dos pinos dos LEDs, a lógica de acendimento sequencial 
e o uso de delay para controlar o tempo de cada LED aceso. 
Segue o código abaixo desenvolvido para implementação da solução: 
 
 
const int numLEDs = 5; // Número de LEDs 
const int pinLEDs[] = {8, 9, 10, 11, 12}; // Pinos dos LEDs 
const int tempoAceso = 200; // Tempo em milissegundos que cada LED ficará 
aceso 
 
void setup() { 
 for (int i = 0; ilimitar a corrente. O programa foi enviado para o Arduino, e 
os LEDs foram observados piscando de forma sequencial conforme a lógica 
implementada. Assim, o teste foi realizado com sucesso! 
 
Programa 3: Controle de luminosidade de um LED com potenciômetro 
• Escopo do Programa: 
Foi desenvolvido um programa que controla a luminosidade de um LED 
conectado ao pino 10 do Arduino por meio de um potenciômetro. O código incluiu a 
leitura da posição do potenciômetro no pino A0 e o ajuste da luminosidade do LED 
proporcionalmente à posição do potenciômetro. 
Segue o código abaixo desenvolvido para implementação da solução: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
const int pinoPotenciometro = A0; // Pino analógico onde o potenciômetro 
está conectado 
const int pinoLED = 10; // Pino digital onde o LED está conectado 
 
void setup() { 
 pinMode(pinoLED, OUTPUT); // Configura o pino do LED como saída 
} 
 
void loop() { 
 int valorPotenciometro = analogRead(pinoPotenciometro); // Lê o valor do 
potenciômetro (0 a 1023) 
 int luminosidade = map(valorPotenciometro, 0, 1023, 0, 255); // Mapeia o 
valor para a faixa de brilho do LED 
 
 analogWrite(pinoLED, luminosidade); // Define a luminosidade do LED 
} 
 
20 
 
• Validação: 
Um LED foi conectado ao pino 10 do Arduino, e um potenciômetro foi conectado 
ao pino A0, com suas extremidades ligadas em 5V e GND. Um resistor de 220 Ω foi 
utilizado em série com o LED. Em seguida, o programa foi enviado para o Arduino, e 
o teste foi realizado ajustando o potenciômetro para observar as variações na 
luminosidade do LED. Teste realizado com sucesso! 
 
Parte 4: Controle de luminosidade de um LED por comunicação serial 
• Escopo do Programa: 
Foi desenvolvido um programa que controla a luminosidade de um LED no pino 
10 do Arduino por meio da comunicação serial. O programa espera receber comandos 
em ASCII, representando valores de brilho entre 000 e 255. A luminosidade do LED é 
ajustada de acordo com os valores recebidos. 
Segue o código abaixo desenvolvido para implementação da solução: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
const int pinoLED = 10; // Pino digital onde o LED está conectado 
char comandoSerial[4]; // Array para armazenar o comando recebido via serial 
 
void setup() { 
 Serial.begin(9600); // Inicializa a comunicação serial 
 pinMode(pinoLED, OUTPUT); // Configura o pino do LED como saída 
} 
 
void loop() { 
 if (Serial.available() >= 3) { // Verifica se há pelo menos 3 bytes disponíveis na serial 
 Serial.readBytes(comandoSerial, 3); // Lê os 3 bytes do comando 
 comandoSerial[3] = '\0'; // Adiciona o caractere nulo ao final para formar uma 
string 
 int luminosidade = atoi(comandoSerial); // Converte a string para um valor inteiro 
 // Limita a luminosidade entre 0 e 255 
 luminosidade = constrain(luminosidade, 0, 255); 
 analogWrite(pinoLED, luminosidade); // Define a luminosidade do LED 
 } 
} 
 
21 
 
• Validação: 
Um LED foi conectado ao pino 10 do Arduino, e a comunicação serial foi 
estabelecida. O programa foi enviado para o Arduino e testes foram realizados 
enviando comandos válidos (três caracteres entre 000 e 255) pela porta serial para 
ajustar a luminosidade do LED. O resistor de 220 Ω foi utilizado em série com o LED 
para limitar a corrente. Assim, teste realizado com sucesso! 
 
2.3.2 Atividade Proposta 2 
Na segunda atividade proposta da Atividade 3, foi realizado o desenvolvimento 
de um projeto no Tinkercad para criar um monitor de umidade do solo com o Arduino. 
Essa atividade foi bastante conveniente para a aplicação dos conhecimentos 
adquiridos na utilização do Arduíno e suas saídas digitais e analógicas, o que abre um 
mundo de possibilidades. 
A seguir, breves descrições sobre o escopo, os códigos desenvolvidos e como 
se deu a estruturação e validação: 
 
Projeto completo de Monitor de Umidade do Solo com Arduino 
• Componentes para o Projeto: 
Para a construção deste projeto, foram necessários os seguintes componentes: 
- 1 Arduino; 
- 1 Protoboard; 
- 5 LEDs (1 Vermelho, 1 Amarelo, 1 Laranja, 1 Azul e 1 Verde); 
- 5 resistores de 220 Ohms; e, 
- Módulo sensor de umidade do solo. 
 
 
 
22 
 
• Conexões a serem realizadas: 
As seguintes conexões foram feitas no Tinkercad: 
- Foi conectada as saídas 9, 10, 11, 12 e 13 do Arduino aos ânodos dos LEDs; 
- Foi criada a conexão do cátodo dos LEDs para os resistores de 220 Ohms; 
- Foi conectado o outro terminal dos resistores ao GND (negativo) do Arduino; 
- Foram criadas as conexões de forma organizada e limpa; 
- Foi conectado o pino VCC do sensor de umidade do solo à porta A0; 
- Foi conectado o pino GND do sensor de umidade do solo ao GND do Arduino; 
e por fim, 
- Foi conectado o pino SIG do sensor de umidade à porta A1. 
• Algoritmo em Linguagem C: 
Ao iniciar o desenvolvimento do código, foram definidas as seguintes variáveis: 
- Variável umidade para armazenar o valor do sinal de umidade, inicializada 
com valor 0; 
- Variáveis led_vermelho, led_amarelo, led_laranja, led_azul e led_verde 
para controlar os LEDs conectados aos pinos 13, 12, 11, 10 e 9, respectivamente, 
com a finalidade de acender cada LED à medida que o valor da variável umidade for 
alterado; e, 
- Variáveis pin_vcc com a porta A0 e pin_sensor com a porta A1, para controle 
do sensor de umidade. 
Para configuração do Setup, no bloco void setup(), foram realizadas as 
seguintes definições: 
- Definição das variáveis led_x como saída; 
- Definição da variável pin_vcc como saída; 
- Definição da variável pin_sensor como entrada; e, 
- Inicialização da comunicação serial com Serial.begin(9600). 
 
23 
 
• Loop de Execução: 
No bloco void loop(), as seguintes ações foram programadas: 
- Aplicação de tensão no pino VCC do sensor de umidade; 
- Leitura da variável umidade usando analogRead(pin_sensor); 
- Impressão do valor da variável umidade no monitor serial; 
- Desligamento de todos os LEDs; 
- Verificação para acender cada LED com base nas regras fornecidas: se menor 
que 200 acenderá o LED vermelho; se menor que 400 acenderá o LED amarelo; se 
menor que 600 acenderá o LED laranja; se menor que 800 acenderá o LED azul; e se 
for diferente destes valores, acenderá o LED verde. 
Segue o código abaixo desenvolvido para implementação da solução: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
const int led_vermelho = 13; 
const int led_amarelo = 12; 
const int led_laranja = 11; 
const int led_azul = 10; 
const int led_verde = 9; 
const int pin_vcc = A0; 
const int pin_sensor = A1; 
 
int umidade = 0; 
 
void setup() { 
 pinMode(led_vermelho, OUTPUT); 
 pinMode(led_amarelo, OUTPUT); 
 pinMode(led_laranja, OUTPUT); 
 pinMode(led_azul, OUTPUT); 
 pinMode(led_verde, OUTPUT); 
 pinMode(pin_vcc, OUTPUT); 
 pinMode(pin_sensor, INPUT); 
 Serial.begin(9600); 
} 
 
24 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
• Execução e Validação: 
Após seguir todas as etapas, a simulação foi executada para verificar a 
operação do projeto. O circuito foi projetado para acender os LEDs na sequência 
vermelho, amarelo, laranja, azul e verde, dependendo dos valores controlados pela 
barra de simulação do sensor de umidade. O circuito foi configurado como um loop 
infinito, mantendo a luz acesa conforme os valores recebidos na variável "umidade". 
Dessa forma, o teste foi realizado com sucesso! 
void loop() { 
 digitalWrite(pin_vcc, HIGH); 
 umidade = analogRead(pin_sensor); 
 Serial.println(umidade); 
 
 digitalWrite(led_vermelho, LOW); 
 digitalWrite(led_amarelo, LOW); 
 digitalWrite(led_laranja, LOW); 
 digitalWrite(led_azul, LOW); 
 digitalWrite(led_verde, LOW); 
 
 if (umidade
#include 
#include 
 
#define DHTPIN 2 // Pino de dados do sensor DHT11 
#define DHTTYPE DHT11 // Tipo do sensor DHT 
 
RTC_DS1302 rtc; 
DHT dht(DHTPIN, DHTTYPE); 
 
void setup() { 
 Serial.begin(9600); 
 
 if (!rtc.begin()) { 
 Serial.println("Não foi possível encontrar o módulo RTC!"); 
 while (1); 
 } 
 
 
26 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 if (!rtc.isrunning()) { 
 Serial.println("Configurando a hora!"); 
 rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); 
 } 
 
 dht.begin(); 
} 
 
void loop() { 
 DateTime now = rtc.now(); 
 
 float temperature = dht.readTemperature(); 
 float humidity = dht.readHumidity(); 
 
 Serial.print("Data e Hora: "); 
 Serial.print(now.year(), DEC); 
 Serial.print('/'); 
 Serial.print(now.month(), DEC); 
 Serial.print('/'); 
 Serial.print(now.day(), DEC); 
 Serial.print(" "); 
 Serial.print(now.hour(), DEC); 
 Serial.print(':'); 
 Serial.print(now.minute(), DEC); 
 Serial.print(':'); 
 Serial.println(now.second(), DEC); 
 Serial.print("Temperatura: "); 
 Serial.print(temperature); 
 Serial.print(" °C, Umidade: "); 
 Serial.print(humidity); 
 Serial.println(" %"); 
 
 delay(60000); // Aguarda 1 minuto antes da próxima leitura 
} 
 
 
27 
 
Programa 2: Programa para Simulação de Estação Meteorológica com 
Armazenamento na EEPROM 
Desenvolveu-se um programa que simula uma estação meteorológica, 
realizando medidas de umidade e temperatura a cada 1 minuto. Utilizou-se o módulo 
DS1302 para obter a data e hora com precisão. Os dados de data, hora, temperatura 
e umidade foram armazenados na EEPROM do Arduino. Evitou-se o uso da função 
delay para garantir a precisão da amostragem. Implementou-se uma lógica para evitar 
o estouro da EEPROM, considerando suas limitações (1024 posições de 1 byte cada). 
Ao receber o caractere "L" pela porta serial, o microcontrolador retornou todos os 
dados armazenados, possibilitando a leitura e, se desejado, a exclusão ou 
substituição dos dados. 
Segue o código abaixo desenvolvido para implementação da solução 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#include 
#include 
#include 
#include 
 
#define DHTPIN 2 // Pino de dados do sensor DHT11 
#define DHTTYPE DHT11 // Tipo do sensor DHT 
 
RTC_DS1302 rtc; 
DHT dht(DHTPIN, DHTTYPE); 
 
void setup() { 
 Serial.begin(9600); 
 
 if (!rtc.begin()) { 
 Serial.println("Não foi possível encontrar o módulo RTC!"); 
 while (1); 
 } 
 
 
28 
 
 
 
 
 
 
 
 if (!rtc.isrunning()) { 
 Serial.println("Configurando a hora!"); 
 rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); 
 } 
 
 dht.begin(); 
} 
 
void loop() { 
 DateTime now = rtc.now(); 
 
 float temperature = dht.readTemperature(); 
 float humidity = dht.readHumidity(); 
 
 Serial.print("Data e Hora: "); 
 Serial.print(now.year(), DEC); 
 Serial.print('/'); 
 Serial.print(now.month(), DEC); 
 Serial.print('/'); 
 Serial.print(now.day(), DEC); 
 Serial.print(" "); 
 Serial.print(now.hour(), DEC); 
 Serial.print(':'); 
 Serial.print(now.minute(), DEC); 
 Serial.print(':'); 
 Serial.println(now.second(), DEC); 
 
 Serial.print("Temperatura: "); 
 Serial.print(temperature); 
 Serial.print(" °C, Umidade: "); 
 Serial.print(humidity); 
 Serial.println(" %"); 
 
 
 
29 
 
 // Armazena dados na EEPROM 
 int address = 0; 
 EEPROM.write(address++, now.day()); 
 EEPROM.write(address++, now.month()); 
 EEPROM.write(address++, now.year() % 100); 
 EEPROM.write(address++, now.hour()); 
 EEPROM.write(address++, now.minute()); 
 EEPROM.put(address, temperature); 
 address += sizeof(float); 
 EEPROM.put(address, humidity); 
 address += sizeof(float); 
 
 delay(60000); // Aguarda 1 minuto antes da próxima leitura 
} 
 
void readAndPrintStoredData() { 
 int address = 0; 
 while (addresspara a cor vermelha do LED RGB 
const int greenPin = 10; // Pino PWM para a cor verde do LED RGB 
const int bluePin = 11; // Pino PWM para a cor azul do LED RGB 
 
const int maxDistance = 50; // Distância máxima para a cor verde (em cm) 
const int minDistance = 5; // Distância mínima para a cor vermelha (em cm) 
const int yellowDistance = 25; // Distância para a transição de verde para 
amarelo (em cm) 
 
 
 
 
32 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
void setup() { 
 Serial.begin(9600); 
 
 pinMode(trigPin, OUTPUT); 
 pinMode(echoPin, INPUT); 
 
 pinMode(redPin, OUTPUT); 
 pinMode(greenPin, OUTPUT); 
 pinMode(bluePin, OUTPUT); 
} 
 
void loop() { 
 long duration; 
 int distance; 
 
 // Gera um pulso no pino de trigger 
 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2); 
 digitalWrite(trigPin, HIGH); 
 delayMicroseconds(10); 
 digitalWrite(trigPin, LOW); 
 
 // Lê a duração do pulso no pino de echo 
 duration = pulseIn(echoPin, HIGH); 
 
 // Converte a duração para distância 
 distance = duration * 0.034 / 2; 
 
 // Imprime a distância no monitor serial 
 Serial.print("Distancia: "); 
 Serial.println(distance); 
 
 // Atualiza a cor do LED com base na distância medida 
 updateLEDColor(distance); 
 
 
33 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 delay(500); // Aguarda 500 milissegundos antes da próxima leitura 
} 
 
void updateLEDColor(int distance) { 
 if (distance > maxDistance) { 
 setColor(0, 255, 0); // Cor verde 
 } else if (distance yellowDistance) { 
 // Interpolação linear para obter a intensidade da cor amarela 
 int greenIntensity = map(distance, yellowDistance, maxDistance, 255, 0); 
 setColor(255, greenIntensity, 0); // Cor amarela 
 } else if (distance = minDistance) { 
 // Interpolação linear para obter a intensidade da cor vermelha 
 int redIntensity = map(distance, minDistance, yellowDistance, 0, 255); 
 setColor(redIntensity, 255, 0); // Cor vermelha 
 } else { 
 setColor(255, 0, 0); // Cor vermelha (distância abaixo do mínimo) 
 } 
} 
 
void setColor(int red, int green, int blue) { 
 analogWrite(redPin, red); 
 analogWrite(greenPin, green); 
 analogWrite(bluePin, blue); 
} 
 
34 
 
Programa 2: Programa para Leitura de Distância e Piscar de LED 
Proporcional à Distância 
Criou-se um programa que realiza a leitura da distância medida pelo sensor 
ultrassônico e a envia via porta serial a cada 1 segundo. A leitura da distância foi feita 
em centímetros. O LED conectado ao pino 13 do Arduino foi programado para piscar 
com uma velocidade proporcional à distância medida. Utilizou-se uma interrupção do 
timer para gerenciar as duas bases de tempo no programa: uma para amostragem e 
envio da distância via serial e outra para o LED. 
Definiu-se que, quando a distância medida for de 50 cm ou mais, o LED deverá 
mudar seu estado a cada 1 segundo. Com a redução da distância, esse período deve 
mudar proporcionalmente. O programa foi enviado para o Arduino e testado para 
verificar a correta leitura da distância e o piscar do LED de acordo com a distância 
medida. 
Segue o código abaixo desenvolvido para implementação da solução: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
const int trigPin = 2; // Pino de controle do trigger do sensor ultrassônico 
const int echoPin = 3; // Pino de controle do echo do sensor ultrassônico 
const int ledPin = 13; // Pino para o LED no Arduino 
 
volatile unsigned long pulseWidth; 
volatile unsigned long startTime; 
volatile boolean echoReceived = false; 
 
void setup() { 
 Serial.begin(9600); 
 
 pinMode(trigPin, OUTPUT); 
 pinMode(echoPin, INPUT); 
 pinMode(ledPin, OUTPUT); 
 
 // Configuração da interrupção do timer 
 cli(); // Desabilita interrupções durante a configuração 
 
 
 
35 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 TCCR1A = 0; 
 TCCR1B = 0; 
 TCNT1 = 0; 
 OCR1A = 15624; // Valor para 1 segundo com prescaler de 256 
 TCCR1B |= (1de controle do echo do sensor ultrassônico 
const int redPin = 9; // Pino do LED RGB para a cor vermelha 
const int greenPin = 10; // Pino do LED RGB para a cor verde 
const int bluePin = 11; // Pino do LED RGB para a cor azul 
 
void setup() { 
 Serial.begin(9600); 
 pinMode(trigPin, OUTPUT); 
 pinMode(echoPin, INPUT); 
 pinMode(redPin, OUTPUT); 
 pinMode(greenPin, OUTPUT); 
 pinMode(bluePin, OUTPUT); 
} 
 
void loop() { 
 long duration; 
 
 // Gera um pulso no pino de trigger 
 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2); 
 digitalWrite(trigPin, HIGH); 
 delayMicroseconds(10); 
 digitalWrite(trigPin, LOW); 
 
 // Aguarda o início do pulso de echo 
 while (digitalRead(echoPin) == LOW); 
 
 // Inicia o tempo no início do pulso de echo 
 long startTime = micros(); 
 
 // Aguarda o fim do pulso de echo 
 while (digitalRead(echoPin) == HIGH); 
 
39 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 // Calcula a duração do pulso de echo 
 long travelTime = micros() - startTime; 
 
 // Calcula a distância com base no tempo de viagem do ultrassom 
 // Considerando velocidade do som de 343 metros por segundo (34300 cm/s) 
 duration = travelTime / 2; 
 Serial.println(duration); 
 
 // Atualiza a cor do LED RGB com base na distância medida 
 updateLEDColor(duration); 
 
 // Aguarda um curto intervalo antes da próxima leitura 
 delay(100); 
} 
 
void updateLEDColor(long distance) { 
 // Define os valores limites de distância para cada cor 
 int greenDistance = 50; 
 int yellowDistance = 25; 
 int redDistance = 5; 
 
 // Atualiza as cores do LED RGB com base na distância 
 if (distance > greenDistance) { 
 analogWrite(redPin, 0); 
 analogWrite(greenPin, 255); 
 analogWrite(bluePin, 0); 
 } else if (distance > yellowDistance) { 
 analogWrite(redPin, 255); 
 analogWrite(greenPin, 255); 
 analogWrite(bluePin, 0); 
 } else if (distance > redDistance) { 
 analogWrite(redPin, 255); 
 analogWrite(greenPin, 165); 
 analogWrite(bluePin, 0); 
 
 
40 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
• Simulação no Tinkercad: 
Após a construção do código, foi realizada a simulação no Tinkercad, ajustando 
a distância medida pelo sensor ultrassônico clicando sobre ele. 
Foi colocado um resistor de 220 Ohms em série com cada cor do LED para 
limitar a corrente que passava por ele. 
Foram feitas algumas pesquisas sobre como fazer o sensor de distância 
ultrassônico funcionar corretamente no Tinkercad, ajustando as configurações 
necessárias para garantir a simulação adequada. 
Assim, o resultado final foi um circuito simulado que indicava visualmente a 
distância medida pelo sensor ultrassônico por meio das cores do LED RGB, seguindo 
as especificações estabelecidas no programa Arduino. Esse experimento 
proporcionou a prática da integração de sensores e atuadores, bem como a simulação 
de circuitos complexos no ambiente virtual do Tinkercad. 
 
 } else { 
 analogWrite(redPin, 255); 
 analogWrite(greenPin, 0); 
 analogWrite(bluePin, 0); 
 } 
} 
 
 
 
41 
 
3 CONCLUSÃO 
Este portfólio apresenta uma sequência de atividades planejadas e 
estruturadas, composta por práticas que possibilitaram a integração com a teoria da 
disciplina de Sistemas Digitais e Microprocessadores. Essa abordagem prática e 
fundamentada, foi de grande valor para que se possa consolidar as habilidades 
técnicas e ampliar a compreensão dos conceitos essenciais que fazem parte dessa 
área, assim como também proporcionou o conhecimento e o uso de ferramentas de 
simulação, como o simulador Logisim e a plataforma Arduino, onde realizamos desde 
projetos mais simplórios, até o desenvolvimento de firmware para microcontroladores. 
Na Atividade 1, foram apresentados os princípios de funcionamento do 
codificador de prioridade utilizando o simulador Logisim, possibilitando uma 
compreensão aprofundada de suas entradas e saídas e de sua relevância em 
aplicações práticas. 
A Atividade 2 avançou no domínio do Logisim, promovendo a construção e 
simulação de circuitos lógicos, bem como a construção de contadores assíncronos, 
fortalecendo as habilidades de projeto e análise de circuitos digitais. 
As Atividades 3, 4 e 5 focaram na programação e no desenvolvimento de 
sistemas de controle variados utilizando a plataforma Arduino. Projetos como o relógio 
em tempo real, a estação meteorológica e o monitor de umidade do solo 
demonstraram o potencial criativo e técnico inerente ao uso de microcontroladores. 
Essas atividades consolidaram conhecimentos teóricos e práticos, evidenciando as 
capacidades de programação e integração de funcionalidades em sistemas 
embarcados. 
Em resumo, este portfólio evidencia um percurso progressivo e bem 
estruturado no campo dos Sistemas Digitais e Microprocessadores. Cada atividade 
contribuiu significativamente para o fortalecimento de uma base sólida de 
conhecimentos teóricos e práticos, essencial para enfrentar os desafios do universo 
da eletrônica digital e dos sistemas embarcados. A experiência adquirida ao longo 
dessas atividades nos proporcionou um avanço técnico e profissional, que certamente 
se traduzirá na capacidade de planejar e implementar soluções inovadoras em 
contextos futuros. 
 
42 
 
4 REFERÊNCIAS BIBLIOGRÁFICAS 
 
ERCEGOVAC, M.; LANG, T.; MORENO, J. H. Introdução aos Sistemas Digitais. 
Bookman, SP, 2000. 
HEXSEL, Roberto A. Sistemas Digitais e Microprocessadores. Universidade Federal 
do Paraná: Departamento de Informática. 2006. [S.I.]. Disponível em: 
. Acesso em 
17/04/2025. 
NERI, Hermes Gustavo Fernandes. Utilização da Plataforma Arduino para Controle 
de Experimentos Remotos de Física. Universidade Federal de Uberlândia: Instituito 
de Física. 2014. [S.I.]. Disponível em: 
. Acesso em 18/04/2025. 
PERIM, Victor; LOPES, Giancarlo M.G; MARTIN, Andrea A. Sistemas Digitais e 
Microprocessadores. Londrina: Editora e Distribuidora Educacional S.A, 2020. 
SILVER, Luan. Guia da Robótica: Sensor ultrassônico Arduino para acender LED – 
Saiba como fazer. 2020. [S.I.]. Disponível em: 
. Acesso em: 19/04/2025. 
SOUZA, Fábio. Domine a linguagem C: Tudo o que você precisa sabem em um 
único lugar. Portal Embarcados: 2023. [S.I.]. Disponível em: 
. Acesso em 18/04/2025. 
TOCCI, R. J.; WIDMER, N. S. Sistemas Digitais – Princípios e Aplicações. 7.ed. RJ: 
LTD, 2000. 
 
VIANA, Carol Correia. Blog da Robótica: Como medir distância com o sensor 
ultrassônico HC-SR04 e Arduino. 2022. [S.I.]. Disponível em: 
. Acesso em 20/04/2025. 
https://www.blogdarobotica.com/2022/06/30/como-medir-distancia-com-o-sensor-ultrassonico-hc-sr04-e-arduino/
https://www.blogdarobotica.com/2022/06/30/como-medir-distancia-com-o-sensor-ultrassonico-hc-sr04-e-arduino/
https://embarcados.com.br/linguagem-c-guia-completo/
https://www.blogdarobotica.com/2022/06/30/como-medir-distancia-com-o-sensor-ultrassonico-hc-sr04-e-arduino/
https://www.blogdarobotica.com/2022/06/30/como-medir-distancia-com-o-sensor-ultrassonico-hc-sr04-e-arduino/

Mais conteúdos dessa disciplina