Skip to content

Instantly share code, notes, and snippets.

@vavasilva
Last active May 13, 2024 02:07
Show Gist options
  • Save vavasilva/e4645aa5ad763640ce6fcdb158477d6e to your computer and use it in GitHub Desktop.
Save vavasilva/e4645aa5ad763640ce6fcdb158477d6e to your computer and use it in GitHub Desktop.
Trabalho

Descrição Detalhada da Lógica do Sistema de Alarme Automotivo

  1. Inicialização: Todos os componentes são inicializados em estado seguro (portas travadas, LEDs e buzzer desligados).

  2. Travamento das Portas: Acionamento: Pressionar o botão de travamento ativa os motores das portas para girar durante 2 segundos, efetuando o travamento. Os LEDs das setas piscam duas vezes para confirmar o travamento.

  3. Destravamento das Portas: Acionamento: Pressionar o botão de destravamento faz os motores das portas girarem por 2 segundos no sentido oposto, destravando as portas. Os LEDs do farol baixo acendem e ficam acesos por 20 segundos.

  4. Detecção de Abertura de Porta Não Autorizada (Furto):

Condição de Detecção:

Se um interruptor de porta é ativado sem o prévio destravamento:

O buzzer é acionado.

Os LEDs das setas piscam.

Manutenção do Alerta:

O buzzer e as setas continuam ativos enquanto a porta estiver aberta.
  1. Detecção de Intrusão Sem Abertura de Portas (Quebra de Vidro):

Condição de Detecção:

Se o sensor PIR detecta movimento sem prévio destravamento:

  O buzzer soa.

  Os LEDs das setas piscam.

Manutenção do Alerta:

O sistema mantém o alarme enquanto detectar presença.

Fluxograma

                   +---------------+
                   |     Início    |
                   +-------+-------+
                           |
                   +-------v-------+
                   |  Ler entradas |
                   | (interruptores|
                   |  botões, PIR) |
                   +----------------+
                           |
            +---------------v---------------+
            |     Botão Armar pressionado?   |
            |                                |
         +--+--+                          +--+--+
         |     |                          |     |
         | Sim |                          | Não |
         |     |                          |     |
         +--+--+                          +--+--+
            |                                 |
            |        +-----------------------+-------------------+
            |        |                       |                   |
            |  +-----v------+        +-------v-------+   +-------v-------+
            |  | Travar      |        |               |   | Botão Desarmar|
            |  | portas      |        |               |   | pressionado?  |
            |  | Piscar setas|        |               |   |               |
            |  | 2x          |        |        Não    |   +-------+-------+
            |  +-------+-----+        |               |           |
            +----------|--------------+               |           |
                       |                               |          | Sim
                       |                               |          |
                       +---------------+----------------+         |
                                       |                          |
                                       |                          |
                                +-------v-------+                 |
                                | Destravar     |                 |
                                | portas        |                 |
                                | Acender faróis|                 |
                                | 20 segundos   |                 |
                                +----------------+                |
                                       |                           |
                                       +---------------------------+
                                       |
                          +------------v-----------+
                          |  Porta aberta ou       |
                          |  presença detectada    |
                          |  enquanto armado?      |
                          |                        |
                       +--+--+                  +--+--+
                       |     |                  |     |
                       | Sim |                  | Não |
                       |     |                  |     |
                       +--+--+                  +--+--+
                          |                        |
                          |   +----------------+   |
                          |   | Acionar buzzer |   |
                          +---+ Piscar setas   +---+
                              | continuamente  |
                              +----------------+

Implementação do Código

// Código Arduino comentado, implementando a lógica do alarme

// Definições de pinos
const int interruptor1 = 2;    
const int interruptor2 = 3;
const int botaoArmar = 4;
const int botaoDesarmar = 5;
const int sensorPIR = 6;
const int buzzer = 7;
const int seta1 = 8;
const int seta2 = 9; 
const int seta3 = 10;
const int seta4 = 11;
const int farolBaixo1 = 12;
const int farolBaixo2 = 13;
const int motorTrava1 = 14;
const int motorTrava2 = 15;

// Variáveis de estado
bool armado = false;
bool porta1Aberta = false;
bool porta2Aberta = false;
bool presencaDetectada = false;

void setup() {
  // Configurar pinos de entrada e saída
  pinMode(interruptor1, INPUT_PULLUP);
  pinMode(interruptor2, INPUT_PULLUP);
  pinMode(botaoArmar, INPUT_PULLUP);
  pinMode(botaoDesarmar, INPUT_PULLUP);
  pinMode(sensorPIR, INPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(seta1, OUTPUT);
  pinMode(seta2, OUTPUT);
  pinMode(seta3, OUTPUT);
  pinMode(seta4, OUTPUT);
  pinMode(farolBaixo1, OUTPUT);
  pinMode(farolBaixo2, OUTPUT);
  pinMode(motorTrava1, OUTPUT);
  pinMode(motorTrava2, OUTPUT);
}

void loop() {
  // Verificar estado das portas
  porta1Aberta = !digitalRead(interruptor1);
  porta2Aberta = !digitalRead(interruptor2);

  // Verificar presença detectada pelo sensor PIR
  presencaDetectada = digitalRead(sensorPIR);

  // Verificar acionamento dos botões
  if (digitalRead(botaoArmar) == LOW) {
    armarAlarme();
  } else if (digitalRead(botaoDesarmar) == LOW) {
    desarmarAlarme();
  }

  // Verificar condições de furto
  if (armado && (porta1Aberta || porta2Aberta || presencaDetectada)) {
    acionarAlarme();
  }
}

void armarAlarme() {
  armado = true;
  
  // Travar portas
  digitalWrite(motorTrava1, HIGH);
  digitalWrite(motorTrava2, HIGH);
  delay(2000); // Motores giram por 2 segundos
  digitalWrite(motorTrava1, LOW);
  digitalWrite(motorTrava2, LOW);
  
  // Piscar setas 2 vezes
  piscarSetas();
  delay(500);
  piscarSetas();
}

void desarmarAlarme() {
  armado = false;
  
  // Destravar portas
  digitalWrite(motorTrava1, HIGH);
  digitalWrite(motorTrava2, HIGH);
  delay(2000); // Motores giram por 2 segundos
  digitalWrite(motorTrava1, LOW);
  digitalWrite(motorTrava2, LOW);
  
  // Acender faróis baixos por 20 segundos
  digitalWrite(farolBaixo1, HIGH);
  digitalWrite(farolBaixo2, HIGH);
  delay(20000);
  digitalWrite(farolBaixo1, LOW);
  digitalWrite(farolBaixo2, LOW);
}

void acionarAlarme() {
  // Acionar buzzer
  digitalWrite(buzzer, HIGH);
  
  // Piscar setas continuamente
  while (armado && (porta1Aberta || porta2Aberta || presencaDetectada)) {
    piscarSetas();
    delay(500);
  }
  
  // Desativar buzzer
  digitalWrite(buzzer, LOW);
}

void piscarSetas() {
  digitalWrite(seta1, HIGH);
  digitalWrite(seta2, HIGH);
  digitalWrite(seta3, HIGH);
  digitalWrite(seta4, HIGH);
  delay(500);
  digitalWrite(seta1, LOW);
  digitalWrite(seta2, LOW);
  digitalWrite(seta3, LOW);
  digitalWrite(seta4, LOW);
  delay(500);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment