Construa um Sistema de Segurança e Alarme com Arduino – Tutorial Passo a Passo
Neste projeto, aprenderemos como fazer um Sistema de Segurança e Alarme com Arduino. Você pode assistir ao vídeo a seguir ou ler o tutorial escrito abaixo.
Visão Geral
O alarme é ativado em 10 segundos após pressionar o botão A. Para detectar objetos, usa um sensor ultrassônico e, uma vez que o alarme detecta algo, um buzzer começa a emitir um som. Para parar o alarme, precisamos inserir uma senha de 4 dígitos. A senha padrão é 1234, mas também temos a possibilidade de alterá-la.

Ao pressionar o botão B, entramos no menu de alteração de senha, onde primeiro precisamos inserir a senha atual para continuar e, então, inserir a nova senha de 4 dígitos. Uma vez alterada a senha, da próxima vez que ativarmos o alarme, só poderemos pará-lo inserindo a nova senha. Se inserirmos uma senha errada, receberemos uma mensagem para tentar novamente.
Componentes Necessários
Agora, vamos ver os componentes necessários para este projeto. Obviamente, precisamos de uma placa Arduino, um sensor ultrassônico, um display LCD, um buzzer e um teclado 4x4.

Você pode obter os componentes necessários para este Projeto Arduino nos links abaixo:
- Teclado (Keypad)
- LCD 16x2
- Sensor Ultrassônico
- Buzzer
- Placa Arduino
- Protoboard e Jumpers
Esquemático do Circuito do Sistema de Alarme Arduino
Aqui está o esquemático do circuito.

Para o buzzer, precisamos apenas de um único pino, mas um com suporte PWM. O teclado 4x4 tem 8 pinos, 4 para as linhas e 4 para as colunas do teclado. Cada botão é na verdade um switch push-button que faz um curto entre uma linha e coluna quando pressionado.

Por exemplo, se definirmos a linha 1 como low e todas as linhas de coluna como high, quando pressionarmos, por exemplo, o botão 3, devido ao curto entre as duas linhas, a linha da coluna 3 cairá para low e, em tal caso, podemos registrar que o botão 3 foi pressionado.
Quanto aos outros dois componentes deste projeto, o sensor ultrassônico e o display LCD, você pode conferir meus tutoriais detalhados anteriores sobre como conectá-los e usá-los.
Código Fonte do Sistema de Alarme Arduino
Vamos ver o código Arduino. Como o código é um pouco longo, para melhor entendimento, postarei o código fonte do programa em seções com descrição para cada seção. E no final deste artigo, postarei o código fonte completo.
Então, precisamos incluir a biblioteca padrão LiquidCrystal para o LCD e a biblioteca Keypad, que precisa ser instalada adicionalmente. Então, precisamos definir os pinos do buzzer e do sensor ultrassônico, definir algumas variáveis necessárias para o programa, definir as teclas do teclado, bem como criar os dois objetos para o teclado e o LCD.
#include <LiquidCrystal.h> // inclui a biblioteca LiquidCrystal
#include <Keypad.h>
#define buzzer 8
#define trigPin 9
#define echoPin 10
long duration;
int distance, initialDistance, currentDistance, i;
int screenOffMsg = 0;
String password = "1234";
String tempPassword;
boolean activated = false; // Estado do alarme
boolean isActivated;
boolean activateAlarm = false;
boolean alarmActivated = false;
boolean enteredPassword; // Estado da senha inserida para parar alarme
boolean passChangeMode = false;
boolean passChanged = false;
const byte ROWS = 4; // quatro linhas
const byte COLS = 4; // quatro colunas
char keypressed;
// define os símbolos nos botões do keypad
char keyMap[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {14, 15, 16, 17}; // Pinos das linhas do keypad
byte colPins[COLS] = {18, 19, 20, 21}; // Pinos das colunas do keypad
Keypad myKeypad = Keypad(makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Cria objeto LC. Parâmetros: (rs, enable, d4, d5, d6, d7)
void setup() {
lcd.begin(16,2);
pinMode(buzzer, OUTPUT); // Define buzzer como saída
pinMode(trigPin, OUTPUT); // Define trigPin como saída
pinMode(echoPin, INPUT); // Define echoPin como entrada
}
Na seção setup, apenas precisamos inicializar o LCD e definir os modos de pino para o buzzer e o sensor ultrassônico.
Na seção loop, primeiro verificamos se o alarme está ativado ou não. Então, se o alarme não está ativado, no LCD teremos a tela inicial do programa que oferece duas opções: A para ativar o alarme e B para alterar a senha. Então, usando a função myKeypad.getKey(), lemos qual botão do teclado foi pressionado e, se for o botão A, o buzzer produzirá um som de 200 milissegundos e a variável activateAlarm se tornará true.
if (!alarmActivated) {
if (screenOffMsg == 0) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("A - Ativar");
lcd.setCursor(0,1);
lcd.print("B - Mudar Senha");
screenOffMsg = 1;
}
keypressed = myKeypad.getKey();
if (keypressed == 'A') {
// Se A pressionado, ativa alarme
tone(buzzer, 1000, 200);
activateAlarm = true;
}
Nesse caso, no LCD imprimiremos a mensagem "Alarme será ativado em" e, usando um loop while, faremos uma contagem regressiva de 9 segundos antes de o alarme ser ativado. Então, a mensagem "Alarme Ativado!" aparecerá e mediremos a distância inicial do nosso dispositivo de alarme aos objetos opostos a ele.
if (activateAlarm) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Alarme sera");
lcd.setCursor(0,1);
lcd.print("ativado em");
int countdown = 9; // contagem regressiva de 9 segundos antes de ativar alarme
while (countdown != 0) {
lcd.setCursor(13,1);
lcd.print(countdown);
countdown--;
tone(buzzer, 700, 100);
delay(1000);
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Alarme Ativado!");
initialDistance = getDistance();
activateAlarm = false;
alarmActivated = true;
}
O próximo passo é que o sensor ultrassônico verificará constantemente se a distância atualmente medida é menor que a distância inicial, corrigida por um valor de 10cm, e, se for verdade, significa que um objeto apareceu na frente do sensor e o alarme será ativado. A função tone() ativará o buzzer e a função personalizada enterPassword() será chamada.
if (alarmActivated == true) {
currentDistance = getDistance() + 10;
if (currentDistance < initialDistance) {
tone(buzzer, 1000); // Envia sinal sonoro de 1KHz
lcd.clear();
enterPassword();
}
}
Esta função personalizada imprimirá uma mensagem de que o alarme está ativado e que precisamos inserir uma senha para pará-lo. Então, usando o próximo loop while, estamos constantemente verificando se pressionamos um botão no teclado, e cada pressionamento de botão é adicionado à variável tempPassword. Se inserirmos mais de 4 dígitos ou pressionarmos o botão #, os dígitos inseridos anteriormente serão limpos para que possamos digitá-los novamente do início.
void enterPassword() {
int k = 5;
tempPassword = "";
activated = true;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" *** ALARME *** ");
lcd.setCursor(0,1);
lcd.print("Senha>");
while(activated) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY) {
if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' || keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' || keypressed == '8' || keypressed == '9') {
tempPassword += keypressed;
lcd.setCursor(k,1);
lcd.print("*");
k++;
}
}
if (k > 9 || keypressed == '#') {
tempPassword = "";
k = 5;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" *** ALARME *** ");
lcd.setCursor(0,1);
lcd.print("Senha>");
}
if (keypressed == '*') {
if (tempPassword == password) {
activated = false;
alarmActivated = false;
noTone(buzzer);
screenOffMsg = 0;
} else if (tempPassword != password) {
lcd.setCursor(0,1);
lcd.print("Errado! Tente Novamente");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" *** ALARME *** ");
lcd.setCursor(0,1);
lcd.print("Senha>");
}
}
}
}
Por outro lado, se pressionarmos o botão asterisco, verificaremos se a senha inserida atualmente é a mesma que a senha originalmente definida. Se for verdade, o alarme será desativado, o buzzer parará de produzir som e voltaremos à tela inicial. Mas se a senha inserida estiver errada, a mensagem "Errado! Tente Novamente!" aparecerá e teremos que tentar inserir a senha correta novamente.
Para alterar a senha, usamos um método similar. Aqui, primeiro precisamos inserir a senha atual para poder definir uma nova senha.
else if (keypressed == 'B') {
lcd.clear();
int i = 1;
tone(buzzer, 2000, 100);
tempPassword = "";
lcd.setCursor(0,0);
lcd.print("Senha Atual");
lcd.setCursor(0,1);
lcd.print(">");
passChangeMode = true;
passChanged = true;
while(passChanged) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY) {
if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' || keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' || keypressed == '8' || keypressed == '9') {
tempPassword += keypressed;
lcd.setCursor(i,1);
lcd.print("*");
i++;
tone(buzzer, 2000, 100);
}
}
if (i > 5 || keypressed == '#') {
tempPassword = "";
i = 1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Senha Atual");
lcd.setCursor(0,1);
lcd.print(">");
}
if (keypressed == '*') {
i = 1;
tone(buzzer, 2000, 100);
if (password == tempPassword) {
tempPassword = "";
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Defina Nova Senha");
lcd.setCursor(0,1);
lcd.print(">");
while(passChangeMode) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY) {
if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' || keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' || keypressed == '8' || keypressed == '9') {
tempPassword += keypressed;
lcd.setCursor(i,1);
lcd.print("*");
i++;
tone(buzzer, 2000, 100);
}
}
if (i > 5 || keypressed == '#') {
tempPassword = "";
i = 1;
tone(buzzer, 2000, 100);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Defina Nova Senha");
lcd.setCursor(0,1);
lcd.print(">");
}
if (keypressed == '*') {
i = 1;
tone(buzzer, 2000, 100);
password = tempPassword;
passChangeMode = false;
passChanged = false;
screenOffMsg = 0;
}
}
}
}
}
}
Código Fonte Completo do Sistema de Alarme Arduino
/*
* Arduino Security and Alarm System
* by Dejan Nedelkovski
* www.HowToMechatronics.com
*/
#include <LiquidCrystal.h>
#include <Keypad.h>
#define buzzer 8
#define trigPin 9
#define echoPin 10
long duration;
int distance, initialDistance, currentDistance, i;
int screenOffMsg = 0;
String password = "1234";
String tempPassword;
boolean activated = false;
boolean isActivated;
boolean activateAlarm = false;
boolean alarmActivated = false;
boolean enteredPassword;
boolean passChangeMode = false;
boolean passChanged = false;
const byte ROWS = 4;
const byte COLS = 4;
char keypressed;
char keyMap[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {14, 15, 16, 17};
byte colPins[COLS] = {18, 19, 20, 21};
Keypad myKeypad = Keypad(makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
void setup() {
lcd.begin(16,2);
pinMode(buzzer, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
if (activateAlarm) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Alarme sera");
lcd.setCursor(0,1);
lcd.print("ativado em");
int countdown = 9;
while (countdown != 0) {
lcd.setCursor(13,1);
lcd.print(countdown);
countdown--;
tone(buzzer, 700, 100);
delay(1000);
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Alarme Ativado!");
initialDistance = getDistance();
activateAlarm = false;
alarmActivated = true;
}
if (alarmActivated == true) {
currentDistance = getDistance() + 10;
if (currentDistance < initialDistance) {
tone(buzzer, 1000);
lcd.clear();
enterPassword();
}
}
if (!alarmActivated) {
if (screenOffMsg == 0) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("A - Ativar");
lcd.setCursor(0,1);
lcd.print("B - Mudar Senha");
screenOffMsg = 1;
}
keypressed = myKeypad.getKey();
if (keypressed == 'A') {
tone(buzzer, 1000, 200);
activateAlarm = true;
} else if (keypressed == 'B') {
lcd.clear();
int i = 1;
tone(buzzer, 2000, 100);
tempPassword = "";
lcd.setCursor(0,0);
lcd.print("Senha Atual");
lcd.setCursor(0,1);
lcd.print(">");
passChangeMode = true;
passChanged = true;
while(passChanged) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY) {
if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' || keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' || keypressed == '8' || keypressed == '9') {
tempPassword += keypressed;
lcd.setCursor(i,1);
lcd.print("*");
i++;
tone(buzzer, 2000, 100);
}
}
if (i > 5 || keypressed == '#') {
tempPassword = "";
i = 1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Senha Atual");
lcd.setCursor(0,1);
lcd.print(">");
}
if (keypressed == '*') {
i = 1;
tone(buzzer, 2000, 100);
if (password == tempPassword) {
tempPassword = "";
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Defina Nova Senha");
lcd.setCursor(0,1);
lcd.print(">");
while(passChangeMode) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY) {
if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' || keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' || keypressed == '8' || keypressed == '9') {
tempPassword += keypressed;
lcd.setCursor(i,1);
lcd.print("*");
i++;
tone(buzzer, 2000, 100);
}
}
if (i > 5 || keypressed == '#') {
tempPassword = "";
i = 1;
tone(buzzer, 2000, 100);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Defina Nova Senha");
lcd.setCursor(0,1);
lcd.print(">");
}
if (keypressed == '*') {
i = 1;
tone(buzzer, 2000, 100);
password = tempPassword;
passChangeMode = false;
passChanged = false;
screenOffMsg = 0;
}
}
}
}
}
}
}
}
void enterPassword() {
int k = 5;
tempPassword = "";
activated = true;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" *** ALARME *** ");
lcd.setCursor(0,1);
lcd.print("Senha>");
while(activated) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY) {
if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' || keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' || keypressed == '8' || keypressed == '9') {
tempPassword += keypressed;
lcd.setCursor(k,1);
lcd.print("*");
k++;
}
}
if (k > 9 || keypressed == '#') {
tempPassword = "";
k = 5;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" *** ALARME *** ");
lcd.setCursor(0,1);
lcd.print("Senha>");
}
if (keypressed == '*') {
if (tempPassword == password) {
activated = false;
alarmActivated = false;
noTone(buzzer);
screenOffMsg = 0;
} else if (tempPassword != password) {
lcd.setCursor(0,1);
lcd.print("Errado! Tente Novamente");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" *** ALARME *** ");
lcd.setCursor(0,1);
lcd.print("Senha>");
}
}
}
}
// Função personalizada para sensor ultrassônico
long getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
return distance;
}
Toque Final
Para finalizar o projeto, usei uma caixa elétrica plástica na qual encaixei todos os componentes e os conectei.

É isso, espero que tenha gostado deste projeto e sinta-se à vontade para fazer qualquer pergunta na seção de comentários abaixo.
Processo de manufatura
- Sistema de Presença RFID Confiável com Arduino e Python
- Crie Animações e Jogos Envolventes em LCD com Arduino UNO
- SERENA: Sistema de Alarme Personalizado Arduino Mega 2560 com Touchscreen TFT LCD
- Avaliando a Segurança de Sistemas de Alarme com Arduino e Módulos RF
- Detector de Frequência de Áudio com Arduino – Meça Picos de Som com Módulo de Alta Sensibilidade
- Automação Residencial Inteligente e Sistema de Segurança com 1Sheeld
- Jogo da Velha com Arduino, Matriz LED MAX7219 e Caixa de Papelão
- Construa um Voltímetro DIY com Arduino e Display Nokia 5110 – Guia Passo a Passo
- Construa um Temporizador Regressivo Confiável com Arduino e Display de 7 Segmentos SparkFun
- Sistema Inteligente de Ventilação de Porão: Controle de Umidade com Arduino