Take a Place
Eu sou o Diogo Torres e sou aluno do curso técnico de gestão e programação de sistemas informáticos na Escola Secundária da Boa Nova e este é o meu projeto de PAP.
O “Take a place” é um projeto que tem como objetivo gerir a ocupação dos lugares numa praia, através de sensores ultrassónicos implementados em cada cabana e leds para assinalar a ocupação ou não do lugar.
Decidi realizar este projeto pois o mundo está a passar por uma fase delicada e muito difícil de pandemia e, visto que o Verão está ai à porta, as pessoas querem e precisam de ir frequentar a praia. Para isso desenvolvi uma maquete de um protótipo, onde pretendo mostrar que é possível rentabilizar a ocupação dos lugares numa praia.
Material Utilizado
Esta é a lista de material que usei para o circuito
Arduíno uno R3
https://abcrobotica.pt/produto/placa-controladora-...
Conjunto de 20 fios m/m de 100mm
https://www.electrofun.pt/cabos-condutores/cabos-j...
Conjunto de 20 fios f/f de 100mm
https://www.electrofun.pt/fichas-e-adaptadores/kit...
Conjunto de 20 fios m/f de 100mm
https://www.electrofun.pt/cabos-condutores/cabos-j...
Sensor de Distância HC-SR04
https://www.electrofun.pt/sensores-arduino/sensor-...
2 LED 5mm - RGB
https://www.ptrobotics.com/led-rgb/4483-led-5mm-rg...
6 Resistência 220 Ohms 1/4W
https://www.electrofun.pt/componentes-eletronicos/...
Breadboard 830 pontos transparente
Montagem Do Circuito No Fritzing
Montagem Do Protótipo
Comecei por organizar o material que ia utilizar. Em seguida liguei o cabo vermelho ao Arduíno na porta 5v e na placa Breadboard no barramento positivo e o cabo preto na porta GND e no barramento negativo.
Logo depois coloquei as resistências de modo a que de seguida liga-se os leds através de cabos jumpers no mesmo barramento da breadboard e também conectei um cabo preto ao negativo para cada led. Para finalizar a parte dos leds bastou conectar ao Arduíno nas portas 11 (vermelho) e 10 (verde) para a cabana um e porta 5 (vermelho) e 4 (verde) para a cabana dois.
Para terminar o circuito falta os sensores ultrassónicos que apenas bastou ligar para cada um, um cabo jumper ao barramento positivo e outro ao negativo e também ligar ao Arduíno na porta 13 (trig) e na 12 (echo) para o sensor da cabana 1 e por fim na porta 7 (trig) e na 6 (echo) para a cabana dois.
Codificação
//Define entradas do Arduíno onde os Leds RGB estão conectados para a Cabana 1 e 2
const int RED1 = 11; //Led RGB da cabana 1
const int GREEN1 = 10; //Led RGB da cabana 1
const int RED2 = 5; //Led RGB da cabana 2
const int GREEN2 = 4; //Led RGB da cabana 2
//Define entradas do Arduíno onde os Sensores HC-SR04 estão conectados para a Cabana 1 e 2
int TRIGGER_PIN1 = 13; //Sensor da cabana 1
int ECHO_PIN1 = 12; //Sensor da cabana 1
int TRIGGER_PIN2 = 7; //Sensor da cabana 2
int ECHO_PIN2 = 6; //Sensor da cabana 2
//Declara variáveis para cálculos das distâncias
long duration1, distance1; //Variáveis da cabana 1
long duration2, distance2; //Variáveis da cabana 2
//Esta função serve para inicializar as variáveis
void setup() {
pinMode(TRIGGER_PIN1, OUTPUT); //Configura o pino para que funcione como saída para o sensor da cabana 1
pinMode(ECHO_PIN1, INPUT); //Configura o pino para que funcione como entrada para o sensor da cabana 1
pinMode(TRIGGER_PIN2, OUTPUT); //Configura o pino para que funcione como saída para o sensor da cabana 2
pinMode(ECHO_PIN2, INPUT); //Configura o pino para que funcione como entrada para o sensor da cabana 2
pinMode(RED1, OUTPUT); //Configura o pino que eu quero que funcione como saída para o led RGB da cabana 1
pinMode(GREEN1, OUTPUT); //Configura o pino que eu quero que funcione como saída para o led RGB da cabana 1
pinMode(RED2, OUTPUT); //Configura o pino que eu quero que funcione como saída para o led RGB da cabana 2
pinMode(GREEN2, OUTPUT); //Configura o pino que eu quero que funcione como saída para o led RGB da cabana 2
Serial.begin (9600); // inicia a porta serial, configura a taxa de dados para 9600 bps
}
//Esta função serve para trabalhar em loop ou seja repetir o código sem parar enquanto a placa estiver ligada
void loop() {
//Cabana de Praia (1)
//Cálculo da informação recebida pelo sensor ultrassónico
digitalWrite(TRIGGER_PIN1, LOW); //Serve para atribuir um valor,(no caso "LOW"), ao pino digital onde o pino trigger do sensor 1 está ligado
delayMicroseconds(2); //Pausa o programa por 2 microsegundos
digitalWrite(TRIGGER_PIN1, HIGH); //Serve para atribuir um valor,(no caso "HIGH"), ao pino digital onde o pino trigger do sensor 1 está ligado
delayMicroseconds(10); //Pausa o programa por 10 microsegundos
digitalWrite(TRIGGER_PIN1, LOW); //Serve para atribuir um valor,(no caso "LOW"), ao pino digital onde o pino trigger do sensor 1 está ligado
duration1 = pulseIn(ECHO_PIN1, HIGH); //Captura a duração de um pulso e atribui á variável duration1
distance1 = duration1*0.034/2; //Calcula a Distância utilizando a variável da última linha de código
Serial.print(distance1); //Imprime na linha de comandos o valor da distância
Serial.println(" cm"); //Imprime na linha de comandos o tipo de medida
if(distance1 <=4) { //Esta função serve para se a distância calculada for menor ou igual que 4 executa o código seguinte
digitalWrite(RED1, HIGH); //Acende a luz vermelha do led
digitalWrite(GREEN1, LOW); //Apaga a luz verde do led
Serial.print("Cabana 1 Ocupada"); //Imprime na linha de comandos "Cabana 1 Ocupada"
}
else //Senão for menor ou igual que 4 executa o código seguinte
{
digitalWrite(GREEN1, HIGH); //Acende a luz verde do led
digitalWrite(RED1, LOW); //Apaga a luz vermelha do led
Serial.print("Cabana 1 Livre"); //Imprime na linha de comandos "Cabana 1 Livre"
}
//Cabana de Praia (2)
//Calculo da informação recebida pelo sensor ultrassónico
digitalWrite(TRIGGER_PIN2, LOW); //Serve para atribuir um valor,(no caso "LOW"), ao pino digital onde o pino trigger do sensor 2 está ligado
delayMicroseconds(2); //Pausa o programa por 2 microsegundos
digitalWrite(TRIGGER_PIN2, HIGH); //Serve para atribuir um valor,(no caso "HIGH"), ao pino digital onde o pino trigger do sensor 2 está ligado
delayMicroseconds(10); //Pausa o programa por 10 microsegundos
digitalWrite(TRIGGER_PIN2, LOW); //Serve para atribuir um valor,(no caso "LOW"), ao pino digital onde o pino trigger do sensor 2 está ligado
duration2 = pulseIn(ECHO_PIN2, HIGH); //Captura a duração de um pulso e atribui á variável duration2;
distance2 = duration2*0.034/2; //Cálcula a Distância utilizando a variável da última linha de código
Serial.print(distance2); //Imprime na linha de comandos o valor da distância
Serial.println(" cm"); //Imprime na linha de comandos o tipo de medida
if(distance2 <=4) { //Esta função serve para se a distância calculada for menor ou igual que 4 executa o código seguinte
digitalWrite(RED2, HIGH); //Acende a luz vermelha
digitalWrite(GREEN2, LOW); //Apaga a luz verde do led
Serial.print("Cabana 2 Ocupada "); //Imprime na linha de comandos "Cabana 2 Ocupada"
}
else //Senão for menor ou igual que quatro executa o código seguinte
{
digitalWrite(GREEN2, HIGH); //Acende a luz verde do led
digitalWrite(RED2, LOW); //Apaga a luz vermelha do led
Serial.print("Cabana 2 Livre "); //Imprime na linha de comandos "Cabana 2 Livre"
}
}
Montagem Da Maquete Em 3D No Tinkercad
A minha preocupação aqui foi realizar uma maquete que simulasse a praia, que estivesse presente a zona da água e de maneira a que o circuito ficasse oculto.
Montagem Da Maquete
Nesta fase foi meter mãos à obra.
Como Funciona O Protótipo
Sugestões De Melhoria
Até aqui já tinha gasto muito dinheiro em material mas gostava ainda de adicionar um display OLED na entrada da praia para ser mais prático ver a ocupação das cabanas.
Criar uma app para telemóvel com o intuito de gerir as cabanas e até mesmo reservar antecipadamente uma cabana.