Relatorio
Contextualize Your Topic with a Subtitle
Apresentação do projeto tinkercad
INDEX
Contextualize Your Topic with a Subtitle
- Fluxograma / Lógica de Programação
Introdução
Apresentação geral do projeto e o seu propósito.
O projeto consiste no desenvolvimento de um sistema automático de abertura de porta que combina segurança, facilidade e gestão energética. O sistema utiliza um sensor de proximidade ultrasonico para detetar a presença de uma pessoa e um teclado numérico para introdução de um código de acesso. Após a inserção do código, um visor informa se o código está correto ou incorreto, enquanto um LED indica a proximidade do utilizador em relação à porta. Quando o código é validado com sucesso, o mecanismo de abertura é ativado, permitindo o acesso de forma segura e controlada e caso o utilizador coloque o código errado 3 vezes o sistema bloqueia durante 10 segundos.
Contextualize Your Topic with a Subtitle
+INFO
Objetivo do projeto
O que prentendemos alcançar com o projeto.
Com este projeto pretendemos criar um sistema de segurança automatizado e 100% personalizavel para locais restritos em que o usuario necessita de um codigo que pode ser alterado no script que controla o sistema e caso o usuario coloque o codigo errado 3 vezes ativa o sistema de bloqueio que consiste em desativar o teclado numerico durante 10 segundos mas que tambem pode ser alterado no script que controla o sistema.
Contextualize Your Topic with a Subtitle
+INFO
LISTA
Componentes ultizados
Lista abaixo
Funcionamento do Sistema
Explicação de como o sistema funciona
O sistema tem um sensor ultrasonico que envia um pulso que vai e volta assim descubrindo a distancia a que o utilizador se encontra da porta se esta distancia for superior a 50cm o LCD mostra "Esperando ultilizador" caso seja menor o teclado matricial e ativado e o LCD mostra "Digite o codigo" caso o codigo seja digitado correto a porta(micro servo) sera abertae o LCD mostrara "Acesso concedido" caso ocorra o contrario e o codigo esteja errado o LCD mostrara "Codigo incorreto" mas se o utilizador errar 3 vezes o sistema de bloqueio sera ativado, este sistema consiste em desligare o teclado matricial durante 10 seg fazendo com que nao seja possivel escrever o codigo
Contextualize Your Topic with a Subtitle
Fluxograma / Lógica de Programação
Subtitle here
Explicação do codigo
Bibliotecas e defenição das ligações
O que são Bibliotecas?As bibliotecas nao são mais do que um codigo pre-escrito que nos podemos usar sem termos de o escrever novamente e são adicionadas com #include <Nome da biblioteca>
Bibliotecas usadas:#include <Servo.h>
#include <Keypad.h>
#include <LiquidCrystal.h>
Definição das ligações LiquidCrystal lcd(12, 11, 5, 4, 3, 2); Servo portaServo;
O que e que este trecho faz? Este trecho faz algo muito simples e importante. O LiquidCrystal lcd(12, 11, 5, 4, 3, 2); esta a dizer que esses sao os pinos em que o (RS, E, D4, D5, D6, D7) estao ligados. O Servo portaServo; e um objeto criado usado para enviar comandos a um servo motor
+INFO
Explicação do codigo
Deteção de Presença
O que faz o trecho ao lado?O digitalWrite(trigPin, HIGH); envia um pulse que ao bater em algo volta e aqui entra o duration = pulseIn(echoPin, HIGH); que recebe o pulse e calcula quantos segundos demorou a ir e voltar
Medidor de distancia ultrassonico: digitalWrite(trigPin, HIGH);
duration = pulseIn(echoPin, HIGH);
Calcula a distancia em cm: distance = duration * 0.034 / 2;
O que e que este trecho faz? Este trecho faz algo muito simples que e calcular a distancia em centimeteros. Explicando mais tecniamente o codigo faz a seginte conta A distancia(cm) = Tempo×Velocidade do som/2
Explicação do codigo
Deteção de Presença
Confirma o codigo e abre o Micro Servo: if (codigoDigitado==codigoCorreto) {
lcd.print("Acesso concedido");
portaServo.write(90);
}
Vamos explicar por partes: Aqui diz que se o codigoDigitado for igual ao correto alguma coisa acontece: if (codigoDigitado == codigoCorreto) { Como o lcd.print("Acesso concedido"); e o portaServo.write(90); } estao dentro do if quer dizer que se o codigoDigitado for igual ao codigoCorreto o LCD vai escrever Acesso concedido e o servo vai rodar 90 graus
Explicação do codigo
Deteção de Presença
Tentativas e bloqueio: if (tentativas >= 3) {
bloqueado = true;
tempoBloqueio = millis();
}
Vamos explicar por partes: Aqui o codigo diz que se o numero de tentativas for maior que o limete que neste caso e 3 ela ativa o bloqueio e o tempoBloqueio liga
Conclusão
Resumindo as funções do projetoO projeto desenvolvido no Tinkercad teve como objetivo criar um sistema de segurança com sensor de distância, teclado e servo motor. Quando alguém se aproxima a menos de 50 cm, o sistema pede uma senha. Caso a senha esteja correta, o servo abre e o LCD mostra “Acesso concedido”. Após três erros seguidos, o sistema bloqueia por 10 segundos.
Que conhecimentos ganhei Através deste projeto aprendi a integrar diferentes componentes eletrónicos e a compreender melhor a lógica de programação em Arduino e a importancia de ir testando o codigo a cada adição
THANK YOU!
With this function...
With this function...You can add additional content that excites the brain of your audience: videos, images, links, interactivity... Whatever you want!
Write an awesome headline
An awesome presentation...
- Represent data with graphics.
- Use timelines.
- It is animated and interactive.
- Excite the brain through multimedia elements.
- DO NOT go overboard with bullet points 🙃.
- It is clear and structured
- It tells stories hierarchically.
- It matches your audience.
- It adapts fonts and color to the theme.
- It includes images and entertains.
Write an awesome headline
An awesome presentation...
- Represent data with graphics.
- Use timelines.
- It is animated and interactive.
- Excite the brain through multimedia elements.
- DO NOT go overboard with bullet points 🙃.
- It is clear and structured
- It tells stories hierarchically.
- It matches your audience.
- It adapts fonts and color to the theme.
- It includes images and entertains.
PROMPT SCRIPT
#include <Servo.h>
#include <Keypad.h>
#include <LiquidCrystal.h>
int ledPin = A5;
//LCD pinos(RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//Servo
Servo portaServo;
const byte LINHAS = 4;
const byte COLUNAS = 4;
char teclas[LINHAS][COLUNAS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pinosLinhas[LINHAS] = {A0, A1, A2, A3};
byte pinosColunas[COLUNAS] = {8, 9, 10, A4};
Keypad teclado = Keypad(makeKeymap(teclas), pinosLinhas, pinosColunas, LINHAS, COLUNAS);
//sensor distance
const int trigPin = 7;
const int echoPin = 6;
long duration;
int distance;
//variaveis Codigo
String codigoDigitado = "";
String codigoCorreto = "1234";
//contador de tentativas
int tentativas = 0;
bool bloqueado = false;
unsigned long tempoBloqueio = 0;
//Estado do sistema
enum Estado {ESPERAR, DIGITAR, RESULTADO};
Estado estadoAtual = ESPERAR;
unsigned long ultimoTempoLCD = 0; //evitar atualizaçoes desnecessárias
void setup () {
lcd.begin(16, 2);
portaServo.attach(13);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// define o LED como saída e garante que começa desligado
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
lcd.print("Sistema PRONTO...");
delay(1500);
lcd.clear();
portaServo.write(0);
}
void loop () {
// se o sistema estiver bloqueado
if (bloqueado) {
if (millis() - tempoBloqueio < 10000) { // 10 segundos de bloqueio
lcd.setCursor(0, 0);
lcd.print("Acesso bloqueado");
lcd.setCursor(0, 1);
lcd.print("Aguarde...");
return; // ignora o resto do loop
} else {
bloqueado = false;
tentativas = 0;
lcd.clear();
lcd.print("Sistema pronto");
delay(1000);
lcd.clear();
}
}
//impulso ultrasonico
digitalWrite(trigPin, LOW);
delay(2);
digitalWrite(trigPin, HIGH);
delay(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); //pulse
int distance = duration * 0.034 / 2; //tempo em CM
//LCD
if (distance > 50 && estadoAtual != ESPERAR) {
estadoAtual = ESPERAR;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Waiting");
lcd.setCursor(0, 1);
lcd.print("Utilizador ");
delay(700);
codigoDigitado = "";
} else if (distance <= 50 && estadoAtual == ESPERAR){
estadoAtual = DIGITAR;
lcd.clear ();
lcd.setCursor(0, 0);
lcd.print("Digite o Codigo");
}
//quando digitarem
if (estadoAtual == DIGITAR) {
char tecla = teclado.getKey ();
if (tecla) {
if (tecla == '#') {
lcd.clear();
if (codigoDigitado == codigoCorreto) {
lcd.print("Acesso concedido");
portaServo.write(90);
digitalWrite(ledPin, HIGH);
delay(5000);
portaServo.write(0);
digitalWrite(ledPin, LOW);
tentativas = 0; // reset tentativas
codigoDigitado = "";
} else {
tentativas++;
lcd.print("Codigo incorreto");
codigoDigitado ="";
if (tentativas >= 3) {
bloqueado = true;
tempoBloqueio = millis();
lcd.clear();
lcd.print("Acesso bloqueado");
lcd.setCursor(0, 1);
lcd.print("Aguarde 10 seg");
codigoDigitado = "";
}
}
estadoAtual = RESULTADO;
ultimoTempoLCD = millis();
}
else if (tecla == '*') {
codigoDigitado = "";
lcd.setCursor(0, 1);
lcd.print(" ");
}
else {
codigoDigitado += tecla;
lcd.setCursor(0, 1);
lcd.print(codigoDigitado);
}
}
}
if(estadoAtual == RESULTADO && millis() - ultimoTempoLCD > 2000 && !bloqueado) {
estadoAtual = ESPERAR;
lcd.clear();
lcd.print("Aguardando");
lcd.setCursor(0, 1);
lcd.print("Utilizador...");
}
delay(50);
}
Relatorio
Sergio Rodrigues
Created on October 12, 2025
Start designing with a free template
Discover more than 1500 professional designs like these:
View
Corporate Christmas Presentation
View
Business Results Presentation
View
Meeting Plan Presentation
View
Customer Service Manual
View
Business vision deck
View
Economic Presentation
View
Tech Presentation Mobile
Explore all templates
Transcript
Relatorio
Contextualize Your Topic with a Subtitle
Apresentação do projeto tinkercad
INDEX
Contextualize Your Topic with a Subtitle
Introdução
Apresentação geral do projeto e o seu propósito.
O projeto consiste no desenvolvimento de um sistema automático de abertura de porta que combina segurança, facilidade e gestão energética. O sistema utiliza um sensor de proximidade ultrasonico para detetar a presença de uma pessoa e um teclado numérico para introdução de um código de acesso. Após a inserção do código, um visor informa se o código está correto ou incorreto, enquanto um LED indica a proximidade do utilizador em relação à porta. Quando o código é validado com sucesso, o mecanismo de abertura é ativado, permitindo o acesso de forma segura e controlada e caso o utilizador coloque o código errado 3 vezes o sistema bloqueia durante 10 segundos.
Contextualize Your Topic with a Subtitle
+INFO
Objetivo do projeto
O que prentendemos alcançar com o projeto.
Com este projeto pretendemos criar um sistema de segurança automatizado e 100% personalizavel para locais restritos em que o usuario necessita de um codigo que pode ser alterado no script que controla o sistema e caso o usuario coloque o codigo errado 3 vezes ativa o sistema de bloqueio que consiste em desativar o teclado numerico durante 10 segundos mas que tambem pode ser alterado no script que controla o sistema.
Contextualize Your Topic with a Subtitle
+INFO
LISTA
Componentes ultizados
Lista abaixo
Funcionamento do Sistema
Explicação de como o sistema funciona
O sistema tem um sensor ultrasonico que envia um pulso que vai e volta assim descubrindo a distancia a que o utilizador se encontra da porta se esta distancia for superior a 50cm o LCD mostra "Esperando ultilizador" caso seja menor o teclado matricial e ativado e o LCD mostra "Digite o codigo" caso o codigo seja digitado correto a porta(micro servo) sera abertae o LCD mostrara "Acesso concedido" caso ocorra o contrario e o codigo esteja errado o LCD mostrara "Codigo incorreto" mas se o utilizador errar 3 vezes o sistema de bloqueio sera ativado, este sistema consiste em desligare o teclado matricial durante 10 seg fazendo com que nao seja possivel escrever o codigo
Contextualize Your Topic with a Subtitle
Fluxograma / Lógica de Programação
Subtitle here
Explicação do codigo
Bibliotecas e defenição das ligações
O que são Bibliotecas?As bibliotecas nao são mais do que um codigo pre-escrito que nos podemos usar sem termos de o escrever novamente e são adicionadas com #include <Nome da biblioteca>
Bibliotecas usadas:#include <Servo.h> #include <Keypad.h> #include <LiquidCrystal.h>
Definição das ligações LiquidCrystal lcd(12, 11, 5, 4, 3, 2); Servo portaServo;
O que e que este trecho faz? Este trecho faz algo muito simples e importante. O LiquidCrystal lcd(12, 11, 5, 4, 3, 2); esta a dizer que esses sao os pinos em que o (RS, E, D4, D5, D6, D7) estao ligados. O Servo portaServo; e um objeto criado usado para enviar comandos a um servo motor
+INFO
Explicação do codigo
Deteção de Presença
O que faz o trecho ao lado?O digitalWrite(trigPin, HIGH); envia um pulse que ao bater em algo volta e aqui entra o duration = pulseIn(echoPin, HIGH); que recebe o pulse e calcula quantos segundos demorou a ir e voltar
Medidor de distancia ultrassonico: digitalWrite(trigPin, HIGH); duration = pulseIn(echoPin, HIGH);
Calcula a distancia em cm: distance = duration * 0.034 / 2;
O que e que este trecho faz? Este trecho faz algo muito simples que e calcular a distancia em centimeteros. Explicando mais tecniamente o codigo faz a seginte conta A distancia(cm) = Tempo×Velocidade do som/2
Explicação do codigo
Deteção de Presença
Confirma o codigo e abre o Micro Servo: if (codigoDigitado==codigoCorreto) { lcd.print("Acesso concedido"); portaServo.write(90); }
Vamos explicar por partes: Aqui diz que se o codigoDigitado for igual ao correto alguma coisa acontece: if (codigoDigitado == codigoCorreto) { Como o lcd.print("Acesso concedido"); e o portaServo.write(90); } estao dentro do if quer dizer que se o codigoDigitado for igual ao codigoCorreto o LCD vai escrever Acesso concedido e o servo vai rodar 90 graus
Explicação do codigo
Deteção de Presença
Tentativas e bloqueio: if (tentativas >= 3) { bloqueado = true; tempoBloqueio = millis(); }
Vamos explicar por partes: Aqui o codigo diz que se o numero de tentativas for maior que o limete que neste caso e 3 ela ativa o bloqueio e o tempoBloqueio liga
Conclusão
Resumindo as funções do projetoO projeto desenvolvido no Tinkercad teve como objetivo criar um sistema de segurança com sensor de distância, teclado e servo motor. Quando alguém se aproxima a menos de 50 cm, o sistema pede uma senha. Caso a senha esteja correta, o servo abre e o LCD mostra “Acesso concedido”. Após três erros seguidos, o sistema bloqueia por 10 segundos.
Que conhecimentos ganhei Através deste projeto aprendi a integrar diferentes componentes eletrónicos e a compreender melhor a lógica de programação em Arduino e a importancia de ir testando o codigo a cada adição
THANK YOU!
With this function...
With this function...You can add additional content that excites the brain of your audience: videos, images, links, interactivity... Whatever you want!
Write an awesome headline
An awesome presentation...
Write an awesome headline
An awesome presentation...
PROMPT SCRIPT
#include <Servo.h> #include <Keypad.h> #include <LiquidCrystal.h> int ledPin = A5; //LCD pinos(RS, E, D4, D5, D6, D7) LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Servo Servo portaServo; const byte LINHAS = 4; const byte COLUNAS = 4; char teclas[LINHAS][COLUNAS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte pinosLinhas[LINHAS] = {A0, A1, A2, A3}; byte pinosColunas[COLUNAS] = {8, 9, 10, A4}; Keypad teclado = Keypad(makeKeymap(teclas), pinosLinhas, pinosColunas, LINHAS, COLUNAS); //sensor distance const int trigPin = 7; const int echoPin = 6; long duration; int distance; //variaveis Codigo String codigoDigitado = ""; String codigoCorreto = "1234"; //contador de tentativas int tentativas = 0; bool bloqueado = false; unsigned long tempoBloqueio = 0; //Estado do sistema enum Estado {ESPERAR, DIGITAR, RESULTADO}; Estado estadoAtual = ESPERAR; unsigned long ultimoTempoLCD = 0; //evitar atualizaçoes desnecessárias void setup () { lcd.begin(16, 2); portaServo.attach(13); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); // define o LED como saída e garante que começa desligado pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); lcd.print("Sistema PRONTO..."); delay(1500); lcd.clear(); portaServo.write(0); } void loop () { // se o sistema estiver bloqueado if (bloqueado) { if (millis() - tempoBloqueio < 10000) { // 10 segundos de bloqueio lcd.setCursor(0, 0); lcd.print("Acesso bloqueado"); lcd.setCursor(0, 1); lcd.print("Aguarde..."); return; // ignora o resto do loop } else { bloqueado = false; tentativas = 0; lcd.clear(); lcd.print("Sistema pronto"); delay(1000); lcd.clear(); } } //impulso ultrasonico digitalWrite(trigPin, LOW); delay(2); digitalWrite(trigPin, HIGH); delay(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); //pulse int distance = duration * 0.034 / 2; //tempo em CM //LCD if (distance > 50 && estadoAtual != ESPERAR) { estadoAtual = ESPERAR; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Waiting"); lcd.setCursor(0, 1); lcd.print("Utilizador "); delay(700); codigoDigitado = ""; } else if (distance <= 50 && estadoAtual == ESPERAR){ estadoAtual = DIGITAR; lcd.clear (); lcd.setCursor(0, 0); lcd.print("Digite o Codigo"); } //quando digitarem if (estadoAtual == DIGITAR) { char tecla = teclado.getKey (); if (tecla) { if (tecla == '#') { lcd.clear(); if (codigoDigitado == codigoCorreto) { lcd.print("Acesso concedido"); portaServo.write(90); digitalWrite(ledPin, HIGH); delay(5000); portaServo.write(0); digitalWrite(ledPin, LOW); tentativas = 0; // reset tentativas codigoDigitado = ""; } else { tentativas++; lcd.print("Codigo incorreto"); codigoDigitado =""; if (tentativas >= 3) { bloqueado = true; tempoBloqueio = millis(); lcd.clear(); lcd.print("Acesso bloqueado"); lcd.setCursor(0, 1); lcd.print("Aguarde 10 seg"); codigoDigitado = ""; } } estadoAtual = RESULTADO; ultimoTempoLCD = millis(); } else if (tecla == '*') { codigoDigitado = ""; lcd.setCursor(0, 1); lcd.print(" "); } else { codigoDigitado += tecla; lcd.setCursor(0, 1); lcd.print(codigoDigitado); } } } if(estadoAtual == RESULTADO && millis() - ultimoTempoLCD > 2000 && !bloqueado) { estadoAtual = ESPERAR; lcd.clear(); lcd.print("Aguardando"); lcd.setCursor(0, 1); lcd.print("Utilizador..."); } delay(50); }