sábado, 16 de novembro de 2019

Sobre o projeto

           O projeto "Aviso de Invasor" foi desenvolvido com o software Arduino, a plataforma eletrônica NodeMCU, o aplicativo ThigSpeak e o site Easycoding.tn. 

             O software Arduino possui compatibilidade não apenas com a plataforma Arduino, mas também com o NodeMCU, por exemplo, por isso o utilizamos. Esse software usa, basicamente, a linguagem de programação C em conjunto com bibliotecas e funcionalidades próprias do Arduino, como a capacidade de ativar e desligar leds, ler os valores emitidos por sensores etc.

Figura: O software Arduino
Fonte: Guilherme Nunes, 2019.

                    NodeMCU é uma plaquinha com diversos pinos: 3.3V (saída de energia de 3.3V), Ground (o famoso "terra" dos circuitos elétricos), pinos digitais (usados para ligar e receber dados de leds e sensores) etc.

Figura: NodeMCU, pinos
Fonte: Blog Eletrogate, 2018.

                 ThingSpeak é um app que faz a integração entre ser humano e máquina, no sentido de enviar os dados gerados pela NodeMCU às pessoas. O ThingSpeak faz essa incrível tarefa por meio de apps internos a ele, como o ThingTweet, que envia um Tweet em uma conta previamente conectada a ele. Para fazer isso, o ThingTweet gera uma "chave" (API Key), que pode ser utilizada nos códigos em formato Arduino (exemplo.ino).


Figura: ThingTweet, API Key
Fonte: Guilherme Nunes, 2019.

                   Easycoding.tn é um site que permite o desenvolvimento de códigos no formato de blocos, especificamente para aplicações em NodeMCU, ou seja, permite a criação de estruturas que envolvem IOT (Internet Of Things).

Figura: Easyconding.tn, blocos
Fonte: Guilherme Nunes, 2019.

                  Agora, após introduzir os componentes do projeto, falemos dele, de fato. O título oficial de nosso trabalho é "Detecção de Intrusos Utilizando NodeMCU e Sensor PIR", destacando a presença de um sensor PIR, que é o principal responsável por determinar a presença de pessoas em uma residência, devido a sua capacidade de detectar variações nos níveis de radiação infravermelha (infrared - IR).
              
              O sensor é muito simples: a parte de cima (a redoma) possui o sensor, propriamente dito, que capta a radiação infravermelha, emitida por uma mão, por exemplo, e muda seu estado para HIGH, ou seja, ativado. Com essa funcionalidade construímos nosso projeto. 

Figura: Sensor PIR com a redoma
            
Fonte: Electrónica Embajadores, 2019.

Figura: Sensor PIR sem a redoma
Fonte: Arduino e Cia, 2014

                   O sensor possui ainda duas chaves que podem ser giradas para ajustar a sensibilidade e o tempo de ativação, ou seja, o raio de sensibilidade (em metros) e o tempo em que o sensor ficará HIGH ao ser ativado.

Figura: Ajustes do sensor PIR
Fonte: Mercado Livre, 2019.

                Ademais, é importante informar que o sensor possui três pinos: uma entrada de energia, uma saída digital e um "terra". VCC (5V) é o pino de energia, SIGNAL é a saída digital e GND (ground) é o terra.

Figura: Pinos do sensor PIR
Fonte: Blog Baú da Eletrônica, 2018.


                     Agora, falando do projeto em si: para montar o circuito, além de utilizar o sensor e NodeMCU, também utilizamos jumpers (os cabinhos coloridos na imagem), um cabo USB (cabo branco conectado à NodeMCU), um led (com a luz verde acesa) e uma protoboard, responsável por conectar todos os anteriores.

                      Segue abaixo uma ilustração do projeto em TinkerCad. As únicas ressalvas são que nessa imagem utilizamos um Arduino no lugar da NodeMCU pois o site TinkerCad não a possui e, além disso, os pinos digitais 7 e 0 deveriam ser substituídos por D1 e D0, respectivamente, sendo que o primeiro se refere ao led e o segundo ao sensor PIR.

Figura: Projeto em TinkerCad
Fonte: Guilherme Nunes, 2019.

                       A parte física do projeto foi construída com a NodeMCU, uma protoboard, jumpers, um sensor PIR, um led, um resistor de 150Ω, um cabo USB e uma fonte de energia (um computador, no caso). Confira abaixo uma foto.

Figura: Circuito do projeto
Fonte: Guilherme Nunes, 2019.

                      Toda vez que uma mão ou outra fonte de calor encostar no sensor será enviado um tweet pela conta conectada, com uma mensagem previamente definida, como a seguinte:

Figura: Tweet
Fonte: Guilherme Nunes, 2019.

A pessoa que estiver usando nosso código com um Arduino (software) poderá acompanhar algumas mensagens impressas no monitor serial. Se ninguém estiver em contato com o sensor, será impressa a mensagem "Ninguém presente", indicando que ninguém está tentando invadir a casa (o intuito do projeto é detectar invasores) e, quando aparecer a mensagem "Tweet enviado", significa que o tweet "Minha casa está sendo invadida" foi enviado pela conta do Twitter conectada à chave de ativação inserida no código.

Figura: Monitor serial
Fonte: Guilherme Nunes, 2019.

             Abaixo segue um vídeo fazendo uma demonstração do monitor serial e do envio da mensagem ao Twitter. Perdão pela marca d'água no vídeo, meu editor filmora9 possui essa regra para o plano gratuito.


               O vídeo abaixo mostra o funcionamento da parte física do projeto, ou seja, o que acontece no Twitter quando o led acende. Foi gravado com câmera de celular mesmo.



              Agora, por fim, explicarei o código: 

Figura: Código, parte 1
Fonte: Guilherme Nunes, 2019.

1: Inclui a biblioteca ESP8266WiFi.h, que permite a utilização das funcionalidades WiFi da plataforma NodeMCU;
3: Ativamos o cliente WiFi da NodeMCU;
5: Definimos uma lista do tipo “char” que recebe o site api.thingspeak.com, plataforma utilizada para permitir que nosso código envie uma mensagem pelo Twitter;
6: Essa variável recebe uma sequência de caracteres correspondentes a uma chave de ativação gerada pela aplicação ThingTweet. Essa chave, ao ser usada no código, permite o envio de um tweet por uma conta conectada;
7: “tsData” tem a função de receber a mensagem que será enviada por Twitter;
9: “pinoLED” é uma variável constante do tipo inteiro (const int) que recebe o pino de conexão de um led, nesse caso, D1. Ela deve ser constante pois seu valor jamais mudará;
10: “pinoPIR” também é uma “const int”, mas recebe o pino de entrada de um sensor PIR (sensor de calor – radiação infravermelha, mais precisamente), nesse caso, D0;
12: “timer” é uma variável unsigned long, ou seja, uma variável de tamanho extendido para armazenamento de números não negativos. Essa variável armazena dados em milissegundos, por isso utilizamos esse tipo de dados;
13: “cont”, como o nome sugere, é um contador, por isso possui o tipo inteiro (int);

Figura: Código, parte 2
Fonte: Guilherme Nunes, 2019.

15: A função “void setup” é utilizada para inicializar variáveis e configurar os pinos INPUT e OUTPUT;
16: Configuramos a variável pinoLED para apenas trabalhar como saída de dados (brilhar, no caso do led);
17: Configuramos a variável pinoPIR para apenas trabalhar recebendo dados externos ao programa (dados de radiação infravermelha, no caso do sensor PIR);
19: Iniciamos o funcionamento do monitor serial, aplicação gráfica do Arduino de visualização de “prints”;
20: A função “WiFi.disconnect()” faz com que a NodeMCU desligue a conexão com qualquer rede WiFi com a qual esteja conectada;
21: Um “delay” (espera) de 3000 milissegundos, ou 3 segundos, para executar o próximo comando;
22: “Serial.print” indica a impressão de uma mensagem no monitor serial, no caso, a mensagem é “START”, que informa o início da parte visual e interativa do programa;
23: A função “WiFi.begin” conecta a NodeMCU a uma rede WiFi. Os parâmetros “guilherme” e “santos2016” referem-se, respectivamente, ao nome da rede e à senha;
26: Essa estrutura “while” é responsável por imprimir no monitor serial reticências (“...”) a cada meio segundo, enquanto a NodeMCU não estiver conectada à internet;
27: O “println” indica que após imprimir as reticências, o próximo comando deverá ser executado (impresso, no caso) na próxima linha;
28: Esse delay é o tempo de espera entre cada impressão. 500 milissegundos é o mesmo que meio segundo;

30: Se o comando do loop (while) parar de ser executado, significa que a NodeMCU se conectou à rede e o programa, logo em seguida, imprimirá uma mensagem informando que ela está conectada;

Figura: Código, parte 3
Fonte: Guilherme Nunes, 2019.

33: “void loop” é uma função que será executada indefinidamente, até que a energia da plataforma seja cortada;
34: A variável “timer” é atribuída com a função “millis()”, que permitirá o armazenamento de dados de tempo em milissegundos;
36, 37 e 38: Se o valor da variável timer exceder 30000 milissegundos (30 segundos), ela passará por um novo teste: se seu valor corresponder a exatos 30000 então uma mensagem será impressa no monitor serial, indicando que o usuário já pode começar a interagir com o sensor. Adicionamos essa condição de tempo pois o tweet estava sendo enviado logo quando o loop era acionado;
40: Se o pino digital “pinoPIR” indicar o valor HIGH, ou seja, se o sensor PIR identificar a presença de radiação infravermelha, calor, uma nova condição será testada;
41: Caso a NodeMCU estiver conectada ao site api.thingspeak.com será ativado um loop, referente ao envio do tweet;
42: “cont++” representa um acréscimo de uma unidade à variável cont, toda vez que o loop é repetido. Percebemos que logo quando a NodeMCU se conectava ao site o tweet era enviado, mesmo sem ninguém tocar no led, então decidimos usar um contador para esperar um tempo e deixar o sistema se estabilizar;
43 – 51: Essas linhas foram produzidas a partir da programação em um site chamado easycoding.tn, que facilita a programação com aplicações em IOT. Veja abaixo um esboço do início de nosso código. A área marcada com 43 – 51 indica a linha que gerou as 9 linhas citadas (de 43 a 51 são 9 linhas ao todo). Nós baixamos esse código e ele passou para o formato “.ino” (referente ao software Arduino).

Figura: Easycoding.tn programming
Fonte: Guilherme Nunes, 2019.

Figura: Código, parte 4
Fonte: Guilherme Nunes, 2019.

52: Quando o contador está maior do que 10 percebemos que é um bom momento para permitir o envio do tweet, pois não há mais erros relacionados ao envio da mensagem sem a interação com o usuário (invasor);
53 e 54: Se o código foi executado até aqui, significa que o sensor possui valor HIGH, então o led deveria estar aceso, mas isso só é possível quando o contador chega a 10. Quando isso acontece, o led acende e é impressa no monitor serial a mensagem “Tweet enviado”;
56, 57 e 58: Enquanto o valor do contador for menor que 10 o led possuirá valor LOW e será impressa no monitor serial a mensagem “Ninguém presente”;
60: Entre a impressão de uma ou outra mensagem (“Tweet enviado” ou “Ninguém presente”) é dado um delay (uma espera) de 700 milissegundos (0,7 segundo);
63 – 66: Esse “else” refere-se ao comando condicional (if) do sensor PIR. Se o sensor possuir valor LOW, o valor do led também será LOW e será impressa no monitor serial a mensagem “Ninguém presente”, a cada 500 milissegundos (meio segundo);
69, 70 e 71: Esse último “else” refere-se à variável “timer”. Se o timer for menor que 30.000 milissegundos (30 segundos) serão impressas reticências (...) no monitor serial, com um delay de meio segundo.

Figura: Tweet enviado
Fonte: Guilherme Nunes, 2019.





Boas vindas


           Olá, seja muito bem vindo ao blog de nosso projeto! Aqui você encontrará informações explicando o Projeto "Aviso de Invasor", bem como fotos, vídeos etc. Para isso, basta acessar a postagem acima. Muito obrigado!