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).
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 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.
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.
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:
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:
e muito mais!
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!
Resistores aproximadamente nos valores de:
Ou qualquer outra combinação de divisor resistivo que gere um Vout de aprox 3.3 v
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:
Pois é! A ligação é cruzada mesmo. Assim o Transmitter de um se conecta ao Receiver do outro.
//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é!?
Na páina inicial (https://appinventor.mit.edu/) clique em Create Apps!
Faça login com sua conta Google:
Aceite os termos:
Esta é a tela inicial, basta fecha-la:
Uma tela com links para tutoriais se abrirá (aconselho a dar uma olhada mais tarde)
Finalmente chegamos na tela de projetos, vamos criar um novo, clique em Start New Project:
Na tela de Nome de pojetos, coloque LED_CONTROL (ou o nome que preferir)
E finalmente esta é a tela de desenvolvimento:
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).
Vamos inserir:
Em user interface, clique em Label.
Segure e arraste para dentro da tela.
Repita o procedimento 1 vez.
A sua tela deve ficar assim:
Em Seguida, clique em ListPicker, segure e arraste para a tela.
Sua tela deve ficar assim:
Por fim, clique em Button, segure e arraste para a tela.
Repita o procedimento 2 vezes.
Sua tela deve ficar assim:
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’:
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:
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:
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:
Sua tela final deve ficar assim:
Agora vamos programar?
No canto superior direito. clique em Blocks:
Bem-vindo a tela de programação do App Inventor!
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!
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)
Mas se é a primeira vez, vamos por partes:
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:
Em seguida, rolando o menu para baixo, procure:
e arraste para viewer (dentro dos blocos amarelos) como na imagem abaixo:
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:
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
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:
Para os botões de led:
Para monstar a resposta do arduino na tela:
Para o controle de led pelo movimento:
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?
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:
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:
um QR-code irá se abir:
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!
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!
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.
Tenha a Metodologia Eletrogate na sua Escola! Conheça nosso Programa de Robótica Educacional.
|
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!