Monitor do Portão de Garagem (com o Blynk App!)

Esqueceu o portão da garagem aberto? Não fique encanado. Seja avisado e monitore-o em tempo real com o Blynk e Thingspeak.

 

O Projeto

 

A ideia de um projeto nasce de uma necessidade real, normalmente. Satisfeita a necessidade, a ideia deste artigo nasceu de “Ops, acho pode ser útil a mais gente”. Com isso em mente, relatamos aqui um projeto simples de um monitor de portões eletrônicos de garagem.

 

Já saiu de casa algumas vez e não lembra se fechou o portão? Ou será que alguém possa tê-lo esquecido aberto? Eu, Tiago, já passei por isso algumas vezes e – acredite – é bem comum esquecermos o portão aberto, principalmente quando moramos com muitas pessoas.

 

Algum tempo atrás eu e o Ronaldo Nunez escrevemos um artigo para apresentar o Blynk aqui mesmo no Embarcados , recomendamos que leiam a introdução ao Blynk para melhor se familiarizar com este projeto. Aliás, eu e o Ronaldo Nunez estaremos na Campus Party Brasil 2019 apresentando um workshop sobre o Blynk: dia 16/fev às 15h .

 

Agora, apresentamos aqui uma aplicação que utiliza o Blynk - além de outras coisinhas – para monitorar o portão elétrico de uma residência. Este projeto foi fortemente inspirado no projeto Garage Door Status Monitor with Alert to SMS / Text. Vamos lá!

 

 

O Conceito

 

A ideia do projeto é muito simples: boa parte dos portões eletrônicos possuem um relé para indicar se o portão está aberto ou fechado na central de controle do motor do portão. A partir da leitura deste relé, o monitor do portão de garagem vai relatar continuamente o estado do portão via WiFi para o Blynk – onde será possível visualizar o estado atual do portão pelo App personalizado que criaremos – e também enviar um e-mail para notificar que o portão está/ficou aberto por alguns minutos, nos alertando para fechá-lo. Quando fechado, também será enviada uma notificação por e-mail. Finalmente (e por que não?), iremos também enviar esta leitura do estado atual do portão para o Thingspeak, onde poderemos monitorar o estado do portão por um gráfico disponível na internet. A Figura 1 a seguir exibe a ideia geral do projeto.

 

Figura 1 - Conceito Geral do Monitor do Portão de Garagem

 

 

O Hardware

 

Para este projeto utilizaremos a Launchpad CC3200, da Texas Instruments. O Hardware foi escolhido por ser “o que tínhamos em mãos”. No entanto, o código pode ser compilado diretamente para dispositivos baseados no ESP8266 e facilmente adaptado para outras placas (ESP32, Arduino, Raspberry Pi). Esta é uma das grandes vantagens do Blynk: ele suporta mais de 400 placas de desenvolvimento!

 

Figura 2 - Launchpad do CC3200

 

Leitura do Estado do Portão

 

A leitura do estado do portão será feita através de um pino do CC3200 configurado como entrada. O mesmo pode ser feito com qualquer outro hardware - Arduino, ESP32, ESP8266 – bastando nos atentarmos à lógica de leitura. O relé do portão eletrônico de garagem atua, normalmente, como uma chave simples (SPST). Ou seja, quando o portão está aberto (ou fechado, dependendo da lógica do portão) o relé fecha o contato de uma extremidade do relé à outra.

 

Assim, é necessário definir um estado inicial para quando o portão estiver fechado – por exemplo, um nível lógico zero – e outro estado quando o relé estiver fechado. Precisaremos, então, de um resistor de pull-down (ou pull-up) para manter o estado do pino em baixo (ou alto) quando o portão estiver fechado (ou aberto), conectando uma extremidade do relé ao pino de leitura e a outra no VCC (ou GND) da placa. Pareceu confuso? Vou explicar melhor com um exemplo. Esta lógica deverá ser ajustada também no software para que seja possível identificar quando o portão está aberto ou fechado.

 

 

Exemplo de Controlador do Portão com o CC3200

 

O controlador do portão de casa que utilizaremos neste exemplo é o modelo GATTER 3000 da Peccinin. Normalmente, os controladores possuem uma função chamada “Luz de Cortesia”, que é na verdade uma chave simples de um relé. Procure pelo manual do fabricante de seu portão eletrônico. Em nosso exemplo, temos identificado no manual:

 

Figura 3 - Sessão do Manual do Portão Eletrônico Gatter 3000

 

A Figura 3 indica a posição dos terminais do relé nos bornes de controle. Medindo-se a continuidade com um multímetro, pode-se verificar que os contatos NA e C são fechados quando o portão é aberto.

 

Voltando-se agora para o hardware da Launchpad CC3200, identificamos que a GPIO22 está ligada a um resistor de pull-down (R128 na Figura 4 a seguir). Este pino é ligado também ao botão táctil SW2 da Launchpad. De modo a aproveitar o hardware já disponível, utilizaremos o mesmo pino para ligá-lo ao relé do controlador do portão. Para tal, o relé atua de forma semelhante à chave tátil: ou seja, uma extremidade do terminal do relé (C, por exemplo) é conectada ao VCC da Launchpad CC3200, enquanto que a outra extremidade (NA) é conectada à GPIO22.

 

Assim, considerando o controlador do portão eletrônico GATTER 3000 e o hardware CC3200, a placa fica continuamente no nível lógico 0 enquanto o portão estiver fechado (e, consequentemente, os contatos do relé abertos) através do resistor de pull-down. Por outro lado, quando o portão é aberto o relé fecha o contato entre seus terminais, conectando o pino GPIO22 ao VCC e, portanto, impondo nível lógico 1 para esta situação. Portanto, é através da interpretação destes níveis que nosso programa consegue identificar se o portão está aberto ou fechado e enviar notificações aos usuários.

 

Figura 4 - Switches no Hardware da Launchpad CC3200

 

 

Alimentação e Instalação

 

As placas de desenvolvimento normalmente possuem a opção de serem alimentadas com 5V, uma vez que são alimentadas pelo USB do computador. Não é diferente com a Launchpad CC3200: ela pode ser alimentada pelo USB (5V), embora o VCC que indicamos na placa seja 3,3V: normalmente as placas de desenvolvimento (Arduino/Raspberry Pi/ESP8266/ESP32) recebem 5V e contam com um regulador de tensão para alimentar o microcontrolador. Desta forma, para este projeto foi utilizada uma fonte de 5V para alimentar o monitor do portão de garagem: um carregador de celular antigo serve bem à função!

 

Todo o sistema pôde ser instalado junto ao controlador do portão. É comum haver espaço sobressalente dentro da proteção plástica e, assim, é possível afixar o hardware e a fonte de alimentação diretamente no controlador: certifique-se que há uma alimentação AC (da rede de energia) e que o Wi-Fi de sua residência esteja disponível no local de instalação e mãos à obra! (Calma, não ainda: precisamos gravar o software antes...)

 

 

O Software Embarcado

 

Como dissemos anteriormente, o projeto do monitor de portão de garagem foi inspirado em um projeto postado no Hackster.io. No entanto, o projeto original não refletia nossas necessidades: precisávamos de um sistema que pudesse armazenar um histórico dos dados do portão e também nos avisar prontamente assim que o portão ficasse aberto durante um tempo (“será que alguém esqueceu de fechá-lo?”). Morando-se com algumas pessoas, precisaríamos ainda que estas notificações fossem enviadas a todos (“alguém corre lá para fechá-lo!”).

 

Antes de mais blá blá blá, aqui está o software (https://github.com/tmedicci/garage-door-monitor). Clone o repositório em sua máquina, altere-o conforme indicado aqui (logo a seguir) ou no README do repositório e faça o upload em sua placa 😉

 

Diagrama de Funcionamento do Programa

 

O funcionamento do programa está brevemente explicado no fluxograma da Figura 5 a seguir. O código em si está bem documentado e, qualquer dúvida, só usar os comentários, logo ali no final do artigo. Responderemos com prazer 😉

 

Figura 5 - Fluxograma do Software do Monitor de Portão de Garagem

 

É necessário, agora, fazer alguns ajustes para que o software funcione corretamente. Vejamos:

  • É possível ajustar os timers no código para que seja considerado que o portão foi esquecido aberto (e, então, enviar o e-mail de notificação):
#define debug       1   // 1 for debug mode - progress diagnostics - with or without faster (debug) timers
#define debugTimers 1   // use debug timers in debug mode (else use normal timers)
  • É possível definir de quanto em quanto tempo o alerta vai ser enviado enquanto o portão estiver aberto:
#define DEBUG_REMINDER 5L    // Debug time in minutes
#define NORMAL_REMINDER 15L  // Normal interval between reminders
  • E, finalmente, definir quanto tempo esperar para enviar o primeiro alerta de que o portão está aberto:
 if (debug & debugTimers) {
    timeout = 3 * minuteM;
  }
  else timeout = 5 * minuteM; // how long to wait before sending out an alarm

 

 

Configure as Credenciais para sua Rede Wi-Fi

 

É necessário configurar as credenciais de acesso à sua rede Wi-Fi. Os dados são reportados ao Blynk e ao Thingspeak por esta conexão. Preencha a porção do código a seguir com os dados de sua rede:

 

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";

 

 

Blynk App

 

Utilizaremos o Blynk neste projeto como uma biblioteca do Arduino. A Launchpad do CC3200 é programada com a IDE Energia, que pode ser entendida como um port do Arduino para dispositivos da Texas Instruments. Em nosso projeto, especificamente, utilizaremos o Blynk por dois motivos:

  • Utilizaremos o Widget de E-mail para que possamos enviar um e-mail de notificação;
  • Utilizaremos a cloud do Blynk para reportar o estado do portão e exibi-lo no Blynk App.

 

Utilizar o Blynk facilita bastante a interface com a “nuvem”, porém temos de nos atentar que precisamos alterar um pouco o conceito de programação Arduino: não é possível, por exemplo, rodar todas as rotinas do nosso programa dentro da função void loop {}, uma vez que isto atrapalharia a comunicação com o servidor do Blynk. Para contornar esta característica, utilizaremos os Timers do Blynk.

 

 

Crie sua Aplicação no Blynk App

 

É necessário criar um projeto no Blynk App para que o sistema envie seu Auth Token (para o e-mail cadastrado no Blynk App). É através desse token que o app é capaz de controlar seu hardware e também enviar um e-mail para notificar que o portão está aberto. Se tiver dúvidas neste sentido, não deixe de consultar o artigo de introdução ao Blynk que eu e o Ronaldo Nunez escrevemos. Insira seu Auth Token a seguir:

 

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "YourAuthToken";

 

Ainda em relação ao Blynk, cabe mencionarmos que o estado do portão é reportado pelo pino virtual V0:

 

if( Door == CLOSED ){
  Blynk.virtualWrite(V0, CLOSED);
}else{
  Blynk.virtualWrite(V0, OPEN);
}

 

Pinos virtuais são canais de dados genéricos que podem ser enviados ao Blynk. Em nossa aplicação será utilizado, por exemplo, para mandar um dado do tipo boolean, indicando se o portão está aberto (1) ou fechado (0).

 

 

Widgets

 

Utilizaremos em nosso projeto dois widgets do Blynk: o widget de e-mail () e o widget Superchart, utilizado para visualizar dados históricos.

  • E-mail: basta adicionar o widget de e-mail ao projeto. As propriedades do widget não precisam ser alteradas: são irrelevantes, uma vez que definiremos o e-mail no próprio código.

Ao longo do código, substitua "[email protected]", por seu e-mail:

Blynk.email("[email protected]", "[Monitor do Portão da Garagem] Sistema Reiniciado", "O monitor acabou de ser reiniciado");

 

  • Superchart: como este widget é um visualizador de dados históricos, ou seja, dos dados do estado do portão que enviamos ao Blynk, é necessário que façamos alguns ajustes para exibi-los corretamente:
    • Adicionaremos um DATASTREAM denominado Status, conforme a Figura 6 a seguir. Clique em Add Datastream.

 

Figura 6 - Adicionando um Datastream

 

    • Este canal de dados será do tipo BINARY, conforme indicado no campo DESIGN da Figura 7. Finalmente, será selecionado o pino virtual V0 como input de dados de 0 (FALSE) a 1 (TRUE), sendo que FALSE indica o portão fechado e TRUE, aberto.

 

Figura 7 - Configurando o Datastream: Estilo, Input de Dados e Labels.

 

Voltando à tela do app com os widgets inclusos, teremos a seguinte visualização do projeto no Blynk. Basta agora selecionar o ícone de “play”, no canto superior direito, para que as funções no Blynk sejam ativadas.

 

Figura 8 - Visualização do Projeto no Blynk

Thingspeak

 

Por que não também reportar o estado do portão no Thingspeak, mostrando um histórico online (público ou privado, como você preferir) de quando o portão esteve aberto ou fechado? Para isso criaremos um canal no Thingspeak e enviaremos o estado do portão através da comunicação MQTT.

 

O Thingspeak é uma plataforma online para exibição de dados históricos (e outras features que não iremos explorar neste projeto). É possível criar visualizações públicas (acessíveis a qualquer pessoa que tenha o link) ou privadas (acessíveis a usuários selecionados). Enviaremos o estado do portão a cada 15s para o Thingspeak. As figuras a seguir exibem configurações básicas do Thingspeak para que seja configurado o envio dos dados em nosso programa.

 

Será necessário preencher os seguintes campos com dados específicos de sua conta no Thingspeak no código:

 

// Your ThingSpeak credentials through MQTT
char mqttPass[] = "YourThingSpeakMQTTAPIKey";       // Change this your MQTT API Key from Account > MyProfile.
char writeAPIKey[] = "YourThingSpeakChannelWriteAPIKey";  // Change to your channel Write API Key.
long channelID = YourThingSpeakChannelID;
short fieldID = 1;

 

A seguir, exibiremos onde estas informações podem ser obtidas na plataforma do Thingspeak. Após criar sua conta e seu canal no Thingspeak, teremos as seguintes opções: a Figura 9 a seguir exibe o formato de um gráfico que vai ser preenchido com o estado do portão:

 

Figura 9 - Visualização do Estado do Portão no Thingspeak

 

Clicando-se no ícone da caneta na frente do campo Field Chart (no gráfico), é possível ajustar as configurações de exibição do mesmo, conforme Figura 10 a seguir:

 

Figura 10 - Opções do Field Chart para Exibição dos Dados.

 

Após ajustar o as opções do gráfico, volte à tela anterior. Movendo-se para a aba Channel Settings, encontraremos as configurações deste canal (o que pode ser entendido como o projeto que estamos desenvolvendo no Thingspeak). Habilitaremos um único campo, o Campo 1 – para onde o estado do portão será reportado. A Figura 11 exibe estas configurações.

 

Figura 11 - Configurações do Canal

 

A escolha do campo habilitado é de fundamental importância, pois é o “endereço de dados” para o qual enviaremos o estado do portão ao publicar por MQTT.

 

Precisamos ainda verificar o parâmetro Write API Key (ou Chave de Escrita), que permite publicar dados no Thingspeak. Para tal, mova-se para a aba “Chaves”, conforme Figura 12 a seguir:

 

Figura 12 - Exibição da Chave para Escrita no Canal

 

Por fim, ainda precisaremos da chave para acessar o MQTT. Navegue para Account > My Profile. A Figura 13 exibe a tela com o parâmetro MQTT API Key.

 

Figura 13 - Informações da Conta no Thingspeak

 

Ufa! É isso!

 

Entendido sobre o hardware que usamos ou podemos usar, sobre as funções dos pinos de leitura, sobre o software e as interfaces com o Blynk e o Thingspeak, é hora de compilar e fazer o upload do seu código da forma que está habituado, através das IDEs Arduino ou Energia (para o CC3200).

 

Recomendo que teste o sistema em bancada antes de instalá-lo junto à central do portão. É possível simular o funcionamento do relé do portão com uma chave táctil e monitorar a serial de debug para verificar o funcionamento do programa.

 

Uma vez conectado à internet, é possível verificar que o sistema está online diretamente pelo Blynk, conforme imagem a seguir:

 

Figura 14 - Confirmação que o Monitor está Online no Blynk

 

Esperamos pelos comentários de vocês! Contribuições no software, sugestões para o artigo e dúvidas são bem-vindas!

 

Ainda assim achou que precisa entender melhor o Blynk? Eu e o Ronaldo Nunez estaremos na Campus Party Brasil 2019 apresentando um workshop sobre o Blynk: “Criando um Aplicativo para Controlar seu Hardware Remotamente”, dia 16/fev às 15h. Confirme sua presença em (https://campuse.ro/events/campus-party-brasil-2019/workshop/criando-um-aplicativo-para-controlar-seu-hardware-remotamente-cpbr12/), traga sua placa de desenvolvimento e vamos aprender juntos!


Let’s Hack the World!

 

Referências

 

Documentação do Blynk 

Imagens de autoria própria.

 

Saiba mais

Introdução ao Blynk App

Beaglebone Black - IoT com ThingSpeak

PIC na IoT com ESP8266 e ThingSpeak

 

 

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Tiago Medicci Serrano
Apaixonado por tecnologia! Plaquinhas, embarcados, clouds, IoT, comunidades e ensino: tudo isso faz parte do meu dia-a-dia, do trabalho às horas de lazer. Atualmente desenvolvo soluções inteligentes para o setor elétrico, SmartGrid e IoT na Time Energy, em Campinas.

5
Deixe um comentário

avatar
 
3 Comment threads
2 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
4 Comment authors
Robson Ruella de OliveiraTiago Medicci SerranoAndré GiovanniTiago Medicci SerranoAndré Lucas Silva Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Robson Ruella de Oliveira
Membro
Robson Ruella de Oliveira

Amigo Tiago parabéns pelo projeto antes de mais nada.
Bem ao compilar o projeto obtive eroos várias que depois de muita perceverancia minha fui resolvendo. Digo isto porque sou curioso e nunca fiz curso nenhum sobre programação.
Bom vou ao assunto. Tenho agora um erro na compilação que diz respeito ao "DebuqPrint. h e agora vi um arquivo por aqui exatamente com este nome, pergunto. Como usar este arquivo para resolver o meu erro.
É desde já obrigado pela atenção.
Vtaremos a falar se assim não se opuser.

André Giovanni
Visitante
André Giovanni

Parabéns pelo artigo. Eu tô na praia e meu vizinho avisou que meu portão ficou aberto. Voltando, já vou fazer meu ESP8266 trabalhar com essa sua idéia pra monitorar e até controlar o portão.

Tiago Medicci Serrano
Visitante
Tiago Medicci Serrano

Legal, André!

Parece simples (e é), mas esta é uma aplicação para um problema que sempre nos pega de surpresa...

André Lucas Silva
Visitante
André Lucas Silva

Artigo muito interessante, parabéns!