Projetos

Controlando um LED com Movimentos do Celular

Eletrogate 2 de agosto de 2021

Introdução

Blog-Eletrogate-Bluetooth-AppInventor

Boa fazer esse pojeto?

O Arduino é com certeza uma das melhores plataformas de desenvolvimento para microcontroladores que existem. Com ele podemos fazer a leitura de diversos sensores e acionamentos de tantos outros atuadores de maneira simples e rápida. 

Porém, para aplicações específicas que exigem monitoramento constante, configuração e ajustes de diversos parâmetros surge a necessidade de um IHM (Interface Homem-Máquina).

Blog-Eletrogate-Bluetooth-AppInventor-IHM

Exemplo de um display IHM touchscreen

Através dessa interface, podemos visualizar e configurar todas as variáveis do sistema, para o perfeito funcionamento do seu circuito, tudo em um único lugar.
O IHM é o “painel de controle” do seu projeto.

Mas esses componentes – amplamente presentes na indústria – são muito caros e complexos para a maioria dos projetos que o Arduino e similares se propõe.

 Então uma alternativa – bastante popular entre a comunidade maker – é o desenvolvimento de aplicativos para celulares e/ou tablets que se conectam ao Arduino via bluetooth, que fazem o papel de uma IHM.

E é exatamente isso que vamos fazer aqui!


O Projeto

Blog-Eletrogate-Arduino-AppInventor-Tecnologias

Arduino + Bluetooth + Android e App Inventor

O objetivo principal aqui é demonstrar como criar uma IHM através de um dispositivo móvel (tablet ou celular) Android, para gerenciar seu sistema. E como configurar o aplicativo e arduino para se comunicarem através do protocolo de comunicação sem fio (bluetooth). No caso desse post: o controle de um led pelo movimento do celular. 

Porém, uma vez entendido esse processo, será totalmente possível adaptar seus aplicativos mobile para as necessidades específicas de monitoramento e controle de seus projetos futuros.


APP Inventor

Para desenvolver o nosso IHM, iremos utilizar uma ferramenta totalmente online e gratuita de desenvolvimento e muito legal. Foi criada pelo MIT (Massachusetts Institute of Technology) chamada App Inventor

Blog-Eletrogate-Arduino-AppInventor-Interface

Tela de desenvolvimento

Não iremos aprofundar na ferramenta em si, mas sim como utilizá-la para atender aos nossos objetivos. Então se você nunca mexeu nessa ferramenta, recomendo o acesso a alguns tutoriais online, em vídeo ou em pdf para download – em inglês – disponíveis no site oficial aqui.

E se você nunca programou um app para celular antes, não se preocupe, o App Inventor é a ferramenta certa para você. Basta modelar a sua aplicação no estilo “drag and drop” e a programação é no estilo de blocos com esses:

Blog-Eletrogate-Arduino-AppInventor-Blocos

blocos de programação App Inventor

Então a aplicação será construída da forma mais limpa possível, focada apenas na integração com o Arduino.

Posteriormente você poderá incrementar controles mais complexos como sliders, menus drop-down, imagens, layouts responsivos além de poder testar a interação com vários sensores dos seus dispositivos como por exemplo:

  • Giroscópio
  • Acelerômetro
  • Leitor de QR-Code
  • Localização por GPS

e muito mais!


Modulo Bluetooth

Aqui mesmo no blog da Eletrogate existe um post do Vitor Vidal, super completo sobre a tecnologia e sobre o módulo que iremos usar, o HC-05. Tudo que você precisa saber sobre ele está aqui:

Recomendo muito a leitura!


Materiais Necessários para o Projeto Controlando um LED com Movimentos do Celular

Resistores aproximadamente nos valores de:

Ou qualquer outra combinação de divisor resistivo que gere um Vout de aprox 3.3 v


Circuito

Circuito de ligação Arduino + modulo bluetooth hc-05 / hc-06

Caso deseje, você pode adicionar um led e seu resistor na porta 13, para ficar mais visual.

Se você sabe o que é um divisor resistivo de tensão e leu o post sobre módulos bluetooth do Vitor Vidal já entendeu o que aqueles resistores estão fazendo ali.
Se ficou com dúvida e você ainda não leu, vale dar uma lidinha no post dele!
Ou ainda nesse artigo aqui.

O circuito aqui é relativamente simples:

  • 5v do Arduino no 5v do Hc
  • Gnd do Arduino no Gnd do Hc
  • RX do Arduino no TX do Hc
  • TX do Arduino no divisor resistivo. 

Pois é! A ligação é cruzada mesmo. Assim o Transmitter de um se conecta ao Receiver do outro.


O programa (Arduino)

//cria a variável que vai receber o dado do IHM
char incomingByte; 

void setup() {
  //inicializa o pino 13, ligado ao led onboard da placa 
  pinMode(LED_BUILTIN, OUTPUT);
  //inicia a comunicação Serial
  Serial.begin(9600); 
}

void loop() {
  //verifica se existe algum dado na Serial
  if (Serial.available() > 0) {
    //lê o dado recebido e define na variável incomingByte
    incomingByte = Serial.read();
  }
  
  switch (incomingByte) {
  // caso (incomingByte igual a 'a') 
  case 'a': 
    //define o estado do led como HIGH
    digitalWrite(LED_BUILTIN, HIGH);
    //envia uma msg para o IMH com o estado do led
    Serial.println("led ligado");
    break;
  // caso (incomingByte igual a 'b')
  case 'b':
     //define o estado do led como LOW
    digitalWrite(LED_BUILTIN, LOW);
    //envia uma msg para o IMH com o estado do led
    Serial.println("led desligado");
    break;
 }
  //limpa o valor da variável
  incomingByte = ' ';
}

Eu fiz o arduino enviar uma resposta ao receber o comando do IHM. Dessa maneira posso demonstrar a comunicação tanto de recebimento como de envio de dados nas duas pontas.

Note que o protocolo Bluetooth é compatível com a Serial do Arduino. Logo, não há a necessidade de importar bibliotecas ou mesmo criar classes, objetos ou eventos específicos para a comunicação.

Você  programa exatamente como se estivesse enviando e recebendo dados direto na porta Serial. E… Na verdade é isso mesmo o que está acontecendo!
Você pode até mesmo testar o programa enviando os comandos e recebendo as respostas pela Serial Monitor da IDE do próprio arduino!

Isso por que o módulo HC também usa comunicação serial e se encarrega de passar a mensagem para frente e de escrever na serial do arduino tudo o que ele recebe do celular! Legal né!?


O programa (App Inventor) - layout

Na páina inicial (https://appinventor.mit.edu/) clique em Create Apps!

Blog-Eletrogate-Arduino-AppInventor-Site

 

Faça login com sua conta Google:

Blog-Eletrogate-Conta-Google

Aceite os termos:

Blog-Eletrogate-Arduino-AppInventor-Termos

Esta é a tela inicial, basta fecha-la:

Blog-Eletrogate-Arduino-AppInventor-Iniciando

Uma tela com links para tutoriais se abrirá (aconselho a dar uma olhada mais tarde)

Blog-Eletrogate-Arduino-AppInventor-2

Finalmente chegamos na tela de projetos, vamos criar um novo, clique em Start New Project:

Blog-Eletrogate-Arduino-AppInventor-Novo-Projeto

Na tela de Nome de pojetos, coloque LED_CONTROL (ou o nome que preferir)

Blog-Eletrogate-Arduino-AppInventor-3

E finalmente esta é a tela de desenvolvimento:

Blog-Eletrogate-Arduino-AppInventor-4

Nos menus a esquerda você encontra os itens que podem ser adicionados a tela clicando e arrastando. Em user interface estão todos os itens de interação como textos, caixa de texto, botões, check box etc. Ainda no lado esquerdo acessamos outros submenus  com mais funcionalidades que podem ser adicionadas . Já no lado direito, temos acesso as propriedades da tela e dos componentes adicionados. (Components e Properties).

Feitas as considerações iniciais, vamos ao nosso aplicativo:

Vamos inserir:

  • 2 labels;
  • 1 listPicker;
  • 3 botões;
  • 1 componente BluetoothClient;
  • 1 componente Clock

Adicionando elementos na tela

Em user interface, clique em Label.
Segure e arraste para dentro da tela.
Repita o procedimento 1 vez.
A sua tela deve ficar assim:

Blog-Eletrogate-Arduino-AppInventor-Criando-1

Em Seguida, clique em ListPicker, segure e arraste para a tela.
Sua tela deve ficar assim:

Blog-Eletrogate-Arduino-AppInventor-Criando-2

Por fim, clique em Button, segure e arraste para a tela.
Repita o procedimento 2 vezes.
Sua tela deve ficar assim:

Blog-Eletrogate-Arduino-AppInventor-Criando-3

Agora vamos configurar os objetos.
Nos menus a direita em Components clique em ‘Label1′ e em Properties vá em Text e esceva: ‘Status: ‘
Depois clique em Rename e em New Name escreva ‘lbl_stats’:

Blog-Eletrogate-Arduino-AppInventor-Criando-5

Renomeie Label2 para lbl_msg e em Text coloque ‘msg recebida:
Renomeie ListPicker1 para btn_connect e em Text coloque ‘Conectar
Renomeie Button1 para btn_discocnnect e em Text coloque ‘Desconectar
Renomeie Button2 para btn_led_on e em Text coloque ‘Ligar Led
Renomeie Button3 para btn_led_off e em Text coloque ‘Desligar Led

Sua tela agora deve ficar assim:

Blog-Eletrogate-Arduino-AppInventor-Criando-6

E por ultimo os componentes. No menu a esquerda vá em Connectivity, clique em BluetoothClient.
Segure e arraste para tela
Sua tela deve ficar assim:

Blog-Eletrogate-Arduino-AppInventor-Criando-7

Note que esse componente foi expulso automaticamente da tela e foi parar embaixo de “Non-visible components”
Isso aconteceu por que esse componente é um objeto “puramente manipulador de dados” e não tem nenhuma interface visual (e nem faz sentido ter, pelo propósito do qual ele foi criado)
E todos componentes sem interface vão pra esse lugar (só deles)!

E finalmente, no menu a esquerda vá em Sensors, cliquei em Clock.
Segure e arraste para tela.

Em Properties, deixe TimeInteval em 5:

Blog-Eletrogate-Arduino-AppInventor-Criando-Interface
Sua tela final deve ficar assim:

Blog-Eletrogate-Arduino-AppInventor-Criando-Interface-2

Pronto! layout terminado!

Agora vamos programar?


O programa (App Inventor) - progamação

No canto superior direito. clique em Blocks:

Blog-Eletrogate-Arduino-AppInventor-Criando-Codigo-1

Bem-vindo a tela de programação do App Inventor!

Blog-Eletrogate-Arduino-AppInventor-Criando-Codigo-2

No menu à direita temos os blocos de construção (built-in) e os objetos (Screen1).
Ao clicar nos itens dessa lista um menu irá se abrir com os blocos correspondentes. Tudo que você tem a fazer é selecionar os blocos que vai usar e arrastar para a tela (igual fizemos no layout).
Apenas blocos que se complementam encaixam-se entre sí. Isso já previne de antemão erros de lógica. E erros de sintaxe tb são evitados, pois os comandos estão todos em blocos e você não precisa digitar nenhum deles!

Então vamos lá!

Se você já tem uma certa segurança com o App Inventor pode olhar o código completo e aplicar no seu projeto:
(E já pode pular para o próximo capítulo)

Blog-Eletrogate-Arduino-AppInventor-Criando-Codigo-3

Código de blocos completo

Mas se é a primeira vez, vamos por partes:

Blog-Eletrogate-Arduino-AppInventor-Criando-Codigo-3

  • Na parte azul, estão os blocos responsáveis por identificar os módulos bluetooth, conectar e desconectar 
  • Na parte verde, estão os blocos responsáveis pelas ações de comando de ligar e desligar o led
  • Na parte laranja, os blocos responsáveis pela verificação se há resposta do arduino e mostrá-las na tela do app
  • Na parte amarela, os blocos responsáveis pelo acionamento do led de acordo com a posição do celular

Vou dar um direcionamento geral de como construir a primeira parte, e seguindo a mesma lógica, você pode montar todos os outros blocos tranquilamente!

No menu Blocks clique em btn_connect, clique em BeforePicking e arraste para tela viewer.
Depois em AfterPicking e arast para tela viewer:

Blog-Eletrogate-Arduino-AppInventor-Criando-Codigo-4

Em seguida, rolando o menu para baixo,  procure:

  • set btn_connected.Elements
  • set btn_connected.Selection

e arraste para viewer (dentro dos blocos amarelos) como na imagem abaixo:

Blog-Eletrogate-Arduino-AppInventor-Criando-Codigo-5

Agora no menu Blocks, procure por Bluetooth Client1 procure os elementos mostrados na imagem no menu e arraste para viewer.
Depois arraste btn_connect.Selection e encaixe no bloco roxo de Bluetooth:

Blog-Eletrogate-Arduino-AppInventor-Criando-Codigo-6

Em Blocks clique em lbl_status, no menu procure por set lbl_stats.Text e arraste dentro de btn_connect.AfterPincking
Em seguida, eem Blocks cliquei em Text, então, arraste o primeiro bloco e encaixe no bloco adicionado anteriormente.
Dê dois cliques em cima do quadradinho entre aspas e digite:
“Status: Conectado”
Ou qualquer mensagem que deseje mostrar na tela de seu app

Blog-Eletrogate-Arduino-AppInventor-Criando-Codigo-7

Pronto! A programação de conexão está finalizada!
Já deu pra pegar o jeito no negócio, né?

Então daqui pra frente (para não extender muito mais) vou mostrar somente os blocos pontos para você seguir e montar:
Se está na dúvida de onde encontrar os blocos no lado direito, você pode se basear pela cor

Para o botão de desconectar faça:

Blog-Eletrogate-Arduino-AppInventor-Criando-Codigo-7

Para os botões de led:

Blog-Eletrogate-Arduino-AppInventor-Criando-Codigo-8

Para monstar a resposta do arduino na tela:

Blog-Eletrogate-Arduino-AppInventor-Criando-Codigo-9

Para o controle de led pelo movimento:

Blog-Eletrogate-Arduino-AppInventor-Criando-Codigo-10

Nota: Para quem já programa e está familiarizado com funções, no App Inventor elas recebem o nome de Procedures.

Paa criar uma função Procedure, acesse o menu Blocks, clique em Procedure e arraste o primeiro bloco e crie um nome pra ele na parte superior.
E dentro coloque os blocos que deseja que sejam executados na chamada da Procedure.

Para adicionar uma chamada de uma Procedure basta encontra-la no mesmo menu, logo abaixo dos primeiros blocos, arrastar para dentro do(s) bloco(s) que fará(ão) a chamada.

Você pode adicionar o bloco if de dentro da Procedure changeLedState direto dentro do bloco de Screen1.SceenOrientationChanged caso ache mais prático.
Eu criei essa Procedure mais para demonstração prática de como funcionam as “funções” dentro do AppInventor.

Pogramação finalizada, vamos testar?


Botando para rodar (AI2 Companion)

Para poder visualizar o programa no seu celular e posteriormente gerar um arquivo executável (.apk) você precisa ter instalado – no seu celular – o aplicativo do AppInventor:

Blog-Eletrogate-Arduino-AppInventor-Aplicativo-

Basta procurar por AI2 Companion na Goole AppStore, ou clicando aqui:
https://play.google.com/store/apps/details?id=edu.mit.appinventor.aicompanion3

O programa é gratuito e a última versão (até o momento desta postagem) atualizada em 31 de Agosto de 2020 tem 15M.

O procedimento aqui é absurdamente simples, vamos ao passo a passo:

No menu superior vá em: Connect, depois em All Companion:

Blog-Eletrogate-Arduino-AppInventor-Aplicativo-1

um QR-code irá se abir:

Blog-Eletrogate-Arduino-AppInventor-Aplicativo-2

Abra o app no seu celular, clique em scan QR code ou digite o código que aparece na tela.
Aguarde o app sincronizar e pronto!

Blog-Eletrogate-Arduino-AppInventor-Carregando-Aplicativo

Voi lá!

Para gerar o APK, vá em Build, você terá as opções de fazer o download direto no seu celular através de um novo QR-code
ou fazer o download no seu computador.

Unkie dunkie!
Super simples assim!


Conclusão

Os módulos bluetooth permitem a conexão com diversos componentes, até mesmo, smartphones e tablets além de um alcance muito bom e uma velocidade rápida de comunicação que atendem a grande maioria dos projetos. Por trabalharem nativamente com comunicação serial, não exige nenhum trabalho extra além da própria comunicação serial do arduino.

O App Inventor apesar de limitado no dev de layouts mais elaborados,  tornam a troca de dados entre Arduino e celular extremamente fáceis de programar através dos blocos. E para as demais funcionalidades também não exige muito conhecimento em programação. Porém pode ser um pouco contra produtivo para programadores mais avançados. Outra vantagem é que não existe instalação de ambiente de produção (IDE) nem pacotes adicionais, no computador. Apenas o próprio app da AppInventor no celular, tudo feito online. Em linhas gerais, para aplicativos pessoais com finalidade de aprendizado e familiarização com dev de app é uma ótima e poderosa ferramenta. 

Se você precisa de uma IHM, que não tenha a necessidade de controles físicos reais – ou seja: controles digitais virtualizados em uma tela – com certeza essa é uma das soluções mais simples, rápidas e relativamente baratas para seu projeto.

Blog-Eletrogate-Arduino-GIF-Final

Aprooved!

Tenha a Metodologia Eletrogate na sua Escola! Conheça nosso Programa de Robótica Educacional.


Sobre o Autor


foto-autor
Diogo Zanardini
LinkedIn

Técnico em processamento de dados, em eletrotécnica e cursando engenharia de controle e automação.
Eletrogate Expert, apaixonado por pizza, carros elétricos, automação residencial / industrial e ciência de dados.


Eletrogate

2 de agosto de 2021

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!