Sistema de segurança Laser – Enviando SMS usando SIM900 e Arduino
Constantemente, vemos em filmes sistemas de segurança de alta tecnologia, como lasers que protegem tesouros valiosos ou instalações secretas. Mas você sabia que é possível criar seu próprio sistema de segurança a laser com componentes eletrônicos simples? Neste tutorial, você aprenderá a criar um sistema de segurança a laser que enviará uma mensagem SMS para o seu telefone celular sempre que o feixe de luz for interrompido. Isso não é apenas coisa de filme, mas sim uma aplicação prática da tecnologia moderna que pode ser usada para proteger sua casa, escritório ou qualquer espaço que você queira manter seguro. Com nossas instruções passo a passo, você será capaz de construir um sistema de segurança personalizado e eficaz em pouco tempo. Então, vamos começar a construir seu sistema de segurança a laser agora!
MATERIAIS NECESSÁRIOS
- 1x Placa Uno SMD R3 atmega328;
- 1x Cabo USB compatível com Arduino;
- 1x Módulo SIM900;
- 1x Módulo Sensor de Luminosidade – LDR;
- 1x Módulo Laser;
- 1x Mini Protoboard;
- 1x Fonte 5V 2A;
- 20x Cabo Jumper Macho x Fêmea 20 cm;
ESQUEMÁTICO DE LIGAÇÃO
Abaixo temos o esquemático de ligação dos componentes desse projeto. Atente-se para os pinos dos módulos, pois pode acontecer da posição estar invertida devido a lotes ou empresas diferentes que fabricam o mesmo produto, como já foi notado com o caso do Módulo LDR. Já vimos casos em que o pino negativo (–) estar no lugar do pino S, portanto, se esse for o seu caso basta apenas entender que o pino – está no GND do Arduino e o S está no A0 e prosseguir com a montagem.
Ao montar o circuito preste atenção nos seguintes pontos:
- Verifique todas as ligações elétricas, pois a ligação incorreta pode acarretar na queima dos componentes;
- Utilize uma fonte de 5V com pelo menos 2A de corrente ou mais e que seja de qualidade e confiança de que ela tenha realmente 5V;
- Neste circuito o Arduino é alimentado com 5V da Fonte através da porta 5V, que serve tanto como entrada, quanto saída de alimentação;
- O feixe de luz do módulo laser deve ficar posicionado bem no centro do módulo LDR, conforme ilustrado na Figura 2.
Depois de ter a certeza de que o módulo laser está bem posicionado em relação ao LDR, vamos identificar se o Módulo SIM900 está conectado na Rede Móvel e, para isso, vamos analisar a frequência de piscadas do Led da placa. Na Figura 3 é mostrado um exemplo de como o Led deve piscar ao estar conectado na rede móvel:
O Led está piscando a cada 1 segundo? Então não houve conexão com a rede móvel, veja alguns motivos que podem causar isso:
- Chip mal encaixado: Se você estiver usando algum adaptador então certifique-se de que o chip está posicionado corretamente e dando contato com os terminais do módulo;
- Fonte de Alimentação: Se a fonte não prover pelo menos 5V 2A o módulo pode não conseguir realizar a conexão, pois no momento de conectar à rede é que exige uma corrente maior;
- Antena Folgada: Verifique se a antena do módulo está bem rosqueada ao módulo;
- Operadora Bloqueando a Conexão: Pode acontecer da operadora identificar a utilização do chip no Módulo SIM900 e bloquear o chip ou impedir a conexão, então recomendamos que teste o chip de outra operadora;
- IMEI Bloqueado: O IMEI é um número que vem identificando o módulo e ele é de uso único, mas pode acontecer da Anatel bloquear esse número e o módulo ficar inutilizável. Para verificar se o IMEI está bloqueado clique aqui, vá na opção “Consulte aqui a situação do seu aparelho celular” e digite o IMEI do módulo, se nada constar, então está tudo ok.
- Firmware desatualizado: Pode acontecer de alguns módulos estarem com uma versão de firmware desatualizada, como no caso de alguns modelos de SIM900A. No caso desse modelo nós criamos um tutorial de como atualizar o firmware do SIM900A para o mesmo usado no SIM900, clique aqui para saber mais.
Depois de ter revisado os passos acima esperamos que o seu módulo esteja funcionando e conectado à Rede para prosseguir para a parte da programação. Abaixo você encontrará os códigos completos e comentado.
ELABORANDO CÓDIGO
Antes de mais nada, é necessário que façamos um teste para verificar qual é o número que o Arduino identifica enquanto o laser está mirando no sensor de luminosidade e qual número ele lê quando o laser é interrompido. Para isso vamos usar um código bem simples e analisar através do monitor serial do Arduino. Faça o upload do seguinte código e abra o monitor serial do Arduino para acompanhar o resultado:
/* - Envio de SMS com Módulo SIM900 - ================================================= === BLOG DA ROBOTICA - www.blogdarobotica.com === ================================================= Autor: Kleber Bastos E-mail: contato@blogdarobotica.com Facebook: facebook.com/blogdarobotica Instagram:@blogdarobotica YouTube: youtube.com/user/blogdarobotica ================================================= === CASA DA ROBOTICA - www.casadarobotica.com === ================================================= Facebook: facebook.com/casadaroboticaoficial Instagram:@casadarobotica ================================================== */ // Declaração do pino do sensorLuminosida na porta Analógica A0 #define sensorLuminosidade A0 void setup() { //Setando velocidade de comunicação serial em 9600 Serial.begin(9600); //Configurando o pino do sensor de luminosidade como entrada pinMode(sensorLuminosidade, INPUT); } void loop() { //Imprime no monitor Serial o valor analógico lido pelo sensor de luminosidade Serial.println(analogRead(sensorLuminosidade)); delay(50); }
No nosso teste percebemos que quando o laser incide sob o LDR os número ficam abaixo de 10 e quando interrompemos o feixe do laser os valores ficam acima de 100, então já percebemos a diferença e é importante salientar que esse número vai variar de teste para teste, ou seja, o nosso resultado não é igual ao que vai aparecer para vocês, por isso é importante fazer essa verificação com o laser já posicionado no local correto, com a distância adequada conforme a sua necessidade.
Qual a conclusão desse teste?
Para valores baixos (vamos considerar abaixo de 50 para ter uma boa margem de segurança) significa que o laser está incidindo sobre o sensor de luminosidade, ou seja, tudo tranquilo e o ambiente está seguro. Já para valores altos (acima de 50) o feixe de luz foi interrompido e aí significa que em algum momento alguém ou alguma coisa passou na frente do sensor e é nesse momento que a mensagem via SMS deverá ser enviada para nos alertar. Dependendo do tipo de módulo de luminosidade que você estiver usando essa lógica pode ser inversa, por isso é importante realizar o teste e entender o significado desses números… anote aí a lógica encontrada que nos comentários do próprio código explicaremos a função desse número 50.
Código Completo que envia a mensagem:
Em resumo o código abaixo funciona assim: Ao iniciar é aguardado um tempo de 20 segundos para que o módulo se conecte na Rede Móvel e depois disso o loop é executado comparando se o valor da luminosidade é maior do que o valor que estipulamos no código anterior (maior que 50). Se for, significa que em algum momento o laser foi interrompido e a mensagem é enviada para o celular e aguarda 2 Minutos (120000 milissegundos) até que o código volte para verificação inicial e possa mandar uma nova mensagem. Esse tempo é para evitar que seja enviada milhares de mensagens de vez e a operadora acabe bloqueando o chip ou que fiquemos sem crédito 🤣.
Se o valor da luminosidade NÃO for maior do que o valor que estipulamos então a verificação continua até que alguém interrompa o feixe de luz do laser.
/* - Envio de SMS com Módulo SIM900 - ================================================= === BLOG DA ROBOTICA - www.blogdarobotica.com === ================================================= Autor: Kleber Bastos E-mail: contato@blogdarobotica.com Facebook: facebook.com/blogdarobotica Instagram:@blogdarobotica YouTube: youtube.com/user/blogdarobotica ================================================= === CASA DA ROBOTICA - www.casadarobotica.com === ================================================= Facebook: facebook.com/casadaroboticaoficial Instagram:@casadarobotica ================================================== */ //Inclusão da biblioteca SoftwareSerial que já é nativa da IDE do Arduino, ou seja, não precisa baixar #include <SoftwareSerial.h> // Declaração do pino do sensorLuminosida na porta Analógica A0 #define sensorLuminosidade A0 //Configurando novas portas de comunicação Serial, sendo RX a porta 7 e TX a porta 8 SoftwareSerial SIM900A(7, 8); void setup() { //Setando velocidade de comunicação serial em 9600 Serial.begin(9600); //Configurando o pino do sensor de luminosidade como entrada pinMode(sensorLuminosidade, INPUT); // O Arduino se comunica com o SIM900 a uma taxa de transmissão de 9600 SIM900A.begin(9600); //Tempo de 20 seg para que o SIM900 se conecte na rede móvel Serial.println("Aguarde 20seg"); delay(20000); Serial.println("Sistema Iniciado!"); } void loop() { //Imprime no monitor Serial o valor analógico lido pelo sensor de luminosidade Serial.println(analogRead(sensorLuminosidade)); delay(50); //Verifica se o valor lido pelo sensor é maior que 50, ou seja, se houve alguma interrupção do feixe de luz no sensor de luminosidade. //No teste realizado percebemos que para números maiores que 50 o sensor tinha sido interrompido e é por isso que chamamos a função que envia a mensagem quando analogRead(sensorLuminosidade) > 50. Altere esse 50 e o símbolo de > para < conforme o cenário identificado no teste realizado no código anterior. if (analogRead(sensorLuminosidade) > 50) { //Caso seja > 50 (sensor de luz foi interrompido em algum momento) chama a função enviarMensagem(); enviarMensagem(); } } //Função responsável por enviar a mensagem SMS void enviarMensagem() { Serial.println ("Sending Message"); SIM900A.println("AT+CMGF=1"); //Configura o Módulo GSM para modo Texto delay(1000); Serial.println ("Set SMS Number"); SIM900A.println("AT+CMGS=\"+55XXXXXXXXXXX\"\r"); //Substitua os XXXXXXXXXXX pelo DDD e número que receberá a Mensagem SMS. Mantenha o +55 que é o código do país Brasil delay(1000); Serial.println ("Set SMS Content"); SIM900A.println("CUIDADO CASA INVADIDA!");//Conteúdo da mensagem delay(100); Serial.println ("Finish"); SIM900A.println((char)26);// Código ASCII CTRL+Z para indicar o fim da mensagem delay(1000); Serial.println ("Mensagem enviada com Sucesso!"); if (SIM900A.available() > 0) { Serial.write(SIM900A.read()); } delay(120000); //Espera 2 Minutos (120000 milissegundos) para ficar pronto para enviar uma segunda mensagem (Recomendamos até aumentar esse tempo para um período maior). Esse intervalo pode ser configurado, mas não é recomendado ficar enviando SMS em períodos curtos, pois o chip pode ser bloqueado. }
Leiam todos comentários contidos no código para que consigam entender a execução do mesmo. Espero que consigam replicar nosso tutorial e que obtenham um resultado satisfatório. Qualquer dúvida estamos à disposição!
Atenciosamente, Kleber Bastos.
Bacharel em Engenharia de Computação. Um dos criadores do Blog da Robótica. Faz parte da equipe Casa da Robótica desde 2017. Apaixonado por tecnologias e pelas “loucuras” que é possível criar usando microcontroladores e impressoras 3D. Ex-BBB, mas isso é uma longa história... que poderá ser contada posteriormente.