#include <Servo.h> // biblioteca do servomotor ,que serve para configurar o proprio e seus pinos
#include <SoftwareSerial.h> // biblioteca de software ,para pegar coisa do monitor serial e mandar pro servo
#include <LiquidCrystal.h> // biblioteca do lcd , que serve para configurar o lcd e seus pinos
// o que é uma biblioteca?? uma biblioteca é um código muito grande para configurar alguma
//coisa que a gnt implementa no nosso código para não termos que fazer novamente
int pir = 2; // pino em que o sensor de presença está
int pirstate = 0; // estado do sensor de presença, se ele está ligado ou não
int botao = 4; //declarando pino do botão
int estadobotao= 0; //estado do botão, se ele está apertado ou não
int posservo1 = 0; //variavel que controla a posição do servo 1
int posservo2 = 0; //variavel que controla a posição do servo 2
int anterior = 0; // variavel para controle de sistema, para que ele não tenha conflito
int trig = 6; // declarando pino de trigger do sensor de distância
int eco = 5; // declarando pino do eco do sensor de distância
float distancia = 0; // variavel que conta a distância que o sensor de distância está medindo
// oq são variaveis, variaveis é como se voce guardasse um numero numa caixa esse numero vai ficar ali até voce tirar e é exatamente assim que funciona
// uma variavel, ou seja uma variavel é como se fosse uma caixa onde voce guarda informações para utilizar no código
// int e float são configurações de variavel é só a gnt explicando para o código para o que aquela variavel serve,
// a variavel int serve para numeros inteiros e a variavel float serve para numeros com virgula
LiquidCrystal lcd_1(23, 25, 27, 29, 31, 33); // declarando os pinos em que estou usando no lcd1(que fica fora da nave)
LiquidCrystal lcd_2(37, 39, 41, 43, 45, 47); // declarando os pinos em que estou usando no lcd2(que fica dentro da nave)
Servo servo_10; // declarando que o servo motor está no pino 10
Servo servo_11; // declarando que o servo motor está no pino 11
//essas linhas acima servem só para a configuração das bibliotecas e servem só para mostrar pro arduino que dentro
//daquela biblioteca a gnt está usando esses pinos como os pinos configurados
void setup() // serve para declarar os comandos que serão usados na programação
{
lcd_1.begin(16, 2); // diz para o arduino qual o formato do lcd
lcd_2.begin(16, 2); // diz para o arduino qual o formato do lcd
servo_10.attach(10); //ativa o servo motor do pino 10
servo_11.attach(11); // ativa o servo motor do pino 11
pinMode(botao, INPUT); // declara que o botao é uma entrada
pinMode(pir, INPUT); // declara que o sensor de presença é uma entrada
pinMode(eco, INPUT); // declara que o pino de eco do sensor de distância é uma entrada
pinMode(trig, OUTPUT); // declara que o pino de trigger do sensor de distância é uma saida
Serial.begin(9600); // inicia o monitor serial
}
void loop() // onde todo o código começa tudo que acontece no código acontece aqui dentro
{
pirstate = digitalRead(pir); // faz a variavel pirstate receber o estado do sensor de presença que seria HIGH ou LOW (ligado ou desligado)
estadobotao = digitalRead(botao); // faz a variavel estadobotao receber o estado do botão que seria HIGH ou LOW (ligado ou desligado)
servo_10.write(posservo1); //faz o servo do pino 10 ir para a posição inicial
servo_11.write(posservo2); // faz o servo do pino 11 ir para a posição inicial
/* essas linhas de cima iniciam os comandos necessários para a inicialização de alguns componentes do programa*/
/*como funciona o sensor de distância? ele lança uma onda sonora e capta a distancia que essa onda foi
o que foi um grande problema para nós pois o som não se propaga no vacuo*/
digitalWrite(trig, LOW); // faz o sensor de distância lançar um sinal para detectar algo uma parede
delay(15); // pula um tempo
digitalWrite(trig, HIGH); // faz isso novamente
delay(15);
digitalWrite(trig, LOW);
//essas linhas acima fazem o sensor de distância mandar e receber o sinal para ver se alguma coisa passou ali
distancia = pulseIn(eco, HIGH); // faz o eco do sensor de distancia receber a distância que o sensor está pegando
distancia = distancia * 0.01723; // calcula uma formula para fazer a distância ficar em centimetros
// pois o sensor de distancia pega as distancias como um numero irracional por isso a formula e faz a variavel da distancia guardar o resultado dessa conta
Serial.println(distancia); // faz o monitor serial mostrar a distância que o sensor de distância está captando por meio da variavel distancia
/*o que é uma condicional? uma condicional é uma "variavel" que precisa de uma condição para funcionar
a variavel if se resume a: certo comando só vai funcionar se isso estiver acontecendo
senão não vai acontecer e vai continuar rodando o resto do código que não está na variavel*/
if (anterior == 0) // cria uma condicional onde o código só vai executar esse comando quando a variavel "anterior" for igual a 0]
{
if (distancia < 300) // cria outra condicional onde o código só será executado quando a distância captada pelo sensor for menor que 300
{
anterior = 2; // faz a variavel "anterior" receber 2 que serve para não haver conflito no código
delay(2000); // declara o tempo de 2 segundos para iniciar o programa
for (posservo2 = 0; posservo2 <= 180; posservo2 += 2)
//cria uma condição for que seria para a variavel isso ocorreria isso que no caso em questão faz a porta abrir
{
servo_11.write(posservo2); // fala para o servo ir para a posição da variavel posservo2 e abre a "porta"
lcd_1.setCursor(0, 0); // define onde o lcd1 deve colocar as palavras
lcd_1.print(" "); // reseta todas as palavras do lcd1
lcd_1.setCursor(0, 1); // define onde o lcd1 deve colocar as palavras
lcd_1.print(" "); // reseta todas as palavras do lcd1
lcd_1.setCursor(0, 0); // define onde o lcd1 deve colocar as palavras
lcd_1.print("porta abrindo"); // coloca no lcd1 as palavras "porta abrindo"
lcd_1.setCursor(0, 1); // define onde o lcd1 deve colocar as palavras
lcd_1.println("NAO APERTE BOTAO"); /* coloca no lcd1 as palavras "nao aperte botao" para avisar
quem tá de fora que não devesse apertar o botão e nem tentar entrar*/
lcd_2.setCursor(0, 0); // define onde o lcd1 deve colocar as palavras
lcd_2.print("=========================="); // coloca no lcd linhas só para estética
lcd_2.setCursor(0, 1); // define onde o lcd1 deve colocar as palavras
lcd_2.println("=============================="); /* coloca no lcd1 linhas só para estética */
}
}
}
if (estadobotao == HIGH) // faz uma condicional onde o código abaixo só irá começar quando o botão for pressionado
{
anterior = 1; // adiciona 1 a variavel "anterior" para não gerar conflito no código
delay(2000); // faz o código esperar 2 segundos antes de continuar executando o código
for (posservo1 = 0; posservo1 <= 180; posservo1 += 2) //declara a posição em que o servo1 está e faz ele se mecher para "abrir a porta"
{
servo_10.write(posservo1); // fala para o servo ir para a posição da variavel posservo1 e abre a "porta"
lcd_2.setCursor(0, 0); // define onde o lcd2 deve colocar as palavras
lcd_2.print(" "); // reseta todas as palavras do lcd2
lcd_2.setCursor(0, 1); // define onde o lcd2 deve colocar as palavras
lcd_2.print(" "); // reseta todas as palavras do lcd2
lcd_2.setCursor(0, 0); // define onde o lcd2 deve colocar as palavras
lcd_2.print("porta abrindo"); // coloca no lcd2 as palavras "porta abrindo"
lcd_2.setCursor(0, 1); // define onde o lcd2 deve colocar as palavras
lcd_2.println("SE AFASTE"); /* coloca no lcd2 as palavras "se afaste" para avisar
quem tá dentro da nave*/
lcd_1.setCursor(0, 0); // define onde o lcd2 deve colocar as palavras
lcd_1.print("=========================="); // coloca no lcd2 linhas só para estética
lcd_1.setCursor(0, 1); // define onde o lcd2 deve colocar as palavras
lcd_1.println("=============================="); /* coloca no lcd2 linhas só para estética */
}
}
if (anterior >= 2); // aqui está o porque da variavel anterior pois sem ela o código em varios momentos iriam conflitar
{
if (pirstate == HIGH) //adiciona uma condicional onde o código abaixo só é acionado quando o sensor de presença for ativado
{
for (posservo2 = 180; posservo2 >= 0; posservo2 -= 2) //declara a posição em que o servo2 está e faz ele se mecher para "fechar a porta"
{
servo_11.write(posservo2); // fala para o servo ir para a posição da variavel posservo2 e fecha a "porta"
}
delay(5000); // faz o código esperar 5 segundos antes de continuar executando o código
for (posservo1 = 0; posservo1 <= 180; posservo1 += 2) //declara a posição em que o servo1 está e faz ele se mecher para "abrir a porta"
{
servo_10.write(posservo1); // fala para o servo ir para a posição da variavel posservo1 e abre a "porta"
}
delay(5000); // faz o código esperar 5 segundos antes de continuar executando o código
for (posservo1 = 180; posservo1 >= 0; posservo1 -= 2) //declara a posição em que o servo1 está e faz ele se mecher para "fechar a porta"
{
servo_10.write(posservo1); // fala para o servo ir para a posição da variavel posservo1 e fecha a "porta"
anterior -= 2; // faz a variavel anterior ser resetada possibilitando a execussão do código novamente
lcd_1.println(" "); // reseta a escrita do lcd
}
}
}
if (anterior <= 1) // aqui está o porque da variavel anterior pois sem ela o código em varios momentos iriam conflitar
{
if (pirstate == HIGH) // cria uma condicional onde só é executado o código abaixo se o sensor de presença for ativado
{
for (posservo1 = 180; posservo1 >= 0; posservo1 -= 2) //declara a posição em que o servo1 está e faz ele se mecher para "fechar a porta"
{
servo_10.write(posservo1);// fala para o servo ir para a posição da variavel posservo1 e fecha a "porta"
}
delay(2000); // faz o código esperar 2 segundos antes de continuar executando o código
for (posservo2 = 0; posservo2 <= 180; posservo2 += 2)//declara a posição em que o servo2 está e faz ele se mecher para "abrir a porta"
{
servo_11.write(posservo2);// fala para o servo ir para a posição da variavel posservo2 e abre a "porta"
}
}
if (distancia < 300) // cria uma condicional que só vai ser acionada se a distancia medida pelo sensor de distancia for menor que 300
{
delay(2000); // faz o código esperar 2 segundos antes de continuar executando o código
for (posservo2 = 180; posservo2 >= 0; posservo2 -= 2) //declara a posição em que o servo2 está e faz ele se mecher para "fechar a porta"
{
servo_11.write(posservo2); // fala para o servo ir para a posição da variavel posservo2 e fecha a "porta"
anterior -= 1; // faz a variavel anterior ser resetada possibilitando a execussão do código novamente
lcd_2.println(" "); // reseta a escrita do lcd
}
}
}
}