Você está na página 1de 10

Trabalho prático nº 1: Gestão do Parque de Estacionamento

Licenciatura em Engenharia Informática


Sistemas Digitais 2023/2024

Trabalho Prático nº 1

Gestão do Parque de
Estacionamento

Realizado em: 15/03/2024


Elaborado em: 16/03/2024

David Chaves a2022158546

Sistemas Digitais 2020/2021 Pág. 1 de 10


Trabalho prático nº 1: Gestão do Parque de Estacionamento

Índice
1. Introdução .......................................................................................................... 3
2. Métodos .............................................................................................................. 3
3. Resultados.............................................................................................................. 4
4. Discussão .......................................................................................................... 10
5. Conclusão ......................................................................................................... 10

Sistemas Digitais 2020/2021 Pág. 2 de 10


Trabalho prático nº 1: Gestão do Parque de Estacionamento

1. Introdução

Este relatório descreve o desenvolvimento de uma aplicação para a gestão de um


parque de estacionamento com dois lugares disponíveis. Este trabalho visa fornecer
uma solução eficaz e automatizada para o controlo da entrada e saída dos carros
garantindo assim a eficiência na utilização do parque.

Para a implementação desta aplicação existiam quatro requisitos, a deteção dos carros
nos lugares de estacionamento, a disponibilidade dos lugares, alerta luminosos e o
processo de entrada e saída dos lugares.

2. Métodos
Para realizar o trabalho comecei por realizar o circuito e o código referente a
cada requisito e desde aí avançar de requisito.

Figura 1- Lista de Componentes

Sistemas Digitais 2020/2021 Pág. 3 de 10


Trabalho prático nº 1: Gestão do Parque de Estacionamento

3. Resultados
Neste capítulo vou apresentar o desenho do circuito, o algoritmo e fluxograma
a implementação do código de acordo com o algoritmo e a simulação no Tinkercad

Figura 2-Desenho do Circuito

Sistemas Digitais 2020/2021 Pág. 4 de 10


Trabalho prático nº 1: Gestão do Parque de Estacionamento

Algoritmo:

Medir a distância dos lugares de estacionamento 1 e 2.


Se ambos os lugares estiverem ocupados, acender o LED vermelho na entrada
do parque.
Se pelo menos um lugar estiver disponível, acender o LED verde na entrada do
parque.

Se a luminosidade estiver abaixo do valor definido, acender o LED de alerta


luminoso.
Verificar se o botão de entrada foi pressionado.
Se pressionado, verificar a disponibilidade de vagas.
Se houver vagas, atribuir um número de ordem e enviar mensagem para o
computador.
Se não houver vagas, enviar a mensagem "Sem lugares de estacionamento".

Verificar a distância medida para cada lugar de estacionamento.


Ativar o alarme sonoro se a distância estiver abaixo do limite de alarme.
Controlar os LEDs dos lugares de estacionamento com base na distância
medida.

Código:

const int verde_1 = 4;


const int vermelho_1 = 3;
const int verde_2 = 6;
const int vermelho_2 = 5;
const int buzzer = A1;
const int buzzer_2 = A2;
const int trig_pin_1 = 7;
const int echo_pin_1 = 8;
const int trig_pin_2 = 10;
const int echo_pin_2 = 11;
const int led_alerta = 12;
const int verde_parque = 13;
const int vermelho_parque = 2;
const int botao = A3;

const int alarme = 20;


const int saida = 100;
const int estacionado = 50;

Sistemas Digitais 2020/2021 Pág. 5 de 10


Trabalho prático nº 1: Gestão do Parque de Estacionamento

const int luz = 500;

int contadorEntrada1 = 0;
int contadorSaida1 = 0;
int contadorEntrada2 = 0;
int contadorSaida2 = 0;

void setup() {
Serial.begin(9600);
pinMode(verde_1, OUTPUT);
pinMode(vermelho_1, OUTPUT);
pinMode(led_alerta, OUTPUT);
pinMode(verde_2, OUTPUT);
pinMode(vermelho_2, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(buzzer_2, OUTPUT);
pinMode(trig_pin_1, OUTPUT);
pinMode(echo_pin_1, INPUT);
pinMode(trig_pin_2, OUTPUT);
pinMode(echo_pin_2, INPUT);
pinMode(vermelho_parque, OUTPUT);
pinMode(verde_parque, OUTPUT);
pinMode(botao, INPUT_PULLUP);

digitalWrite(verde_1, HIGH);
digitalWrite(vermelho_1, LOW);
digitalWrite(verde_2, HIGH);
digitalWrite(vermelho_2, LOW);

void loop() {
int distanciaLugarUm = medirDistanciaLugarUm();
int distanciaLugarDois = medirDistanciaLugarDois();

if (digitalRead(vermelho_1)== HIGH && digitalRead(vermelho_2) == HIGH){


digitalWrite(vermelho_parque, HIGH);
digitalWrite(verde_parque, LOW);

}else {

digitalWrite(verde_parque, HIGH);
digitalWrite(vermelho_parque, LOW);
}

Sistemas Digitais 2020/2021 Pág. 6 de 10


Trabalho prático nº 1: Gestão do Parque de Estacionamento

if(analogRead(A0)< luz ){

digitalWrite(led_alerta, HIGH);
}else {
digitalWrite(led_alerta, LOW);
}

if (digitalRead(botao) == HIGH) {
delay(200);
disponibilidade();
}

if (distanciaLugarUm < estacionado) {


if(distanciaLugarUm < alarme){
alarmeBuzzerUm();
}

digitalWrite(verde_1, LOW);
digitalWrite(vermelho_1, HIGH);
}
else if (distanciaLugarUm > saida) {

digitalWrite(verde_1, HIGH);
digitalWrite(vermelho_1, LOW);

if (distanciaLugarDois < estacionado) {


if(distanciaLugarDois < alarme){
alarmeBuzzerDois();
}

digitalWrite(verde_2, LOW);
digitalWrite(vermelho_2, HIGH);
}
else if (distanciaLugarDois > saida) {

digitalWrite(verde_2, HIGH);
digitalWrite(vermelho_2, LOW);

Sistemas Digitais 2020/2021 Pág. 7 de 10


Trabalho prático nº 1: Gestão do Parque de Estacionamento

int medirDistanciaLugarUm() {
digitalWrite(trig_pin_1, LOW);
delayMicroseconds(2);
digitalWrite(trig_pin_1, HIGH);
delayMicroseconds(10);
digitalWrite(trig_pin_1, LOW);
return pulseIn(echo_pin_1, HIGH) * 0.034 / 2;
}

int medirDistanciaLugarDois() {
digitalWrite(trig_pin_2, LOW);
delayMicroseconds(2);
digitalWrite(trig_pin_2, HIGH);
delayMicroseconds(10);
digitalWrite(trig_pin_2, LOW);
return pulseIn(echo_pin_2, HIGH) * 0.034 / 2;
}

void alarmeBuzzerUm() {
digitalWrite(buzzer, HIGH);
delay(3000);
digitalWrite(buzzer, LOW);
delay(1000);
}

void alarmeBuzzerDois() {
digitalWrite(buzzer_2, HIGH);
delay(3000);
digitalWrite(buzzer_2, LOW);
delay(1000);
}

void disponibilidade() {
static int ordem = 0;
int lugares = 0;

if (digitalRead(verde_1) == HIGH) {
lugares++;
}
if (digitalRead(verde_2) == HIGH) {
lugares++;

Sistemas Digitais 2020/2021 Pág. 8 de 10


Trabalho prático nº 1: Gestão do Parque de Estacionamento

if (lugares == 0) {
Serial.println("Sem lugares de estacionamento");
} else {
ordem++;
Serial.print("Utilizador: ");
Serial.print(ordem);
Serial.print(", existem ");
Serial.print(lugares);
Serial.println(" lugares disponíveis.");
}
}

Figura 3-Circuito no TinkerCad

Link do Circuito no TinkerCad:


https://www.tinkercad.com/things/h6HEG7AStGw-
tp1tac/editel?returnTo=%2Fdashboard%3Fcollection%3Ddesigns&sharecode=l9gaQt7
p1kYAfH22JBmpM4qT3n_Al_var1g-U55I8Qw

Sistemas Digitais 2020/2021 Pág. 9 de 10


Trabalho prático nº 1: Gestão do Parque de Estacionamento

4. Discussão
Neste trabalho apenas não fazer a contagem das entradas e saídas dos lugares,
tive dificuldade na gestão das portas pois estava a usar os buzzers nas portas
digitais e depois era necessário usar uma porta lógica para os leds do parque,
mas como não consegui utilizar a porta passei os buzzers para as portas
analógicas e tinha espaço para os leds.

No futuro algumas oportunidades para o desenvolvimento deste trabalho seria


a contabilização de saídas e entradas.

5. Conclusão

O desenvolvimento deste trabalho exigiu a aplicação de conhecimentos tanto


de programação como de montagem do circuito. Através da integração dos
diversos componentes utilizados foi possível realizar o trabalho.

Em resumo, este trabalho proporcionou-me uma experiência de aprendizagem


muito rica, já que pude aplicar vários conhecimentos.

Sistemas Digitais 2020/2021 Pág. 10 de 10

Você também pode gostar