O que há por trás do aplicativo block.ino

block-ino-destaque

O ensino de lógica e programação está em evidência nas discussões de novas tendências para educação. Apesar de o cenário da infraestrutura ainda ser carente, iniciativas inovadoras têm se adaptado e auxiliado na implantação de cursos, oficinas e espaços de criação. Dentre as mais novas alternativas está o aplicativo block.ino.

O block.ino permite desenvolver códigos usando uma linguagem de programação visual e, em seguida, testar programas em placas de Arduino e componentes eletrônicos reais. O projeto foi desenvolvido por estudantes do Laboratório de Experimentação Remota (RExLab) da Universidade Federal de Santa Catarina (UFSC), foi destaque na 4ª edição da Campus Mobile e está entre os finalistas deste concurso. Além do aplicativo block.ino, os estudantes também desenvolveram uma versão web para programar e testar projetos no Arduino usando a linguagem do Arduino, que está disponível no aplicativo block.ino do RExLab.

Uma apresentação sobre as motivações e objetivos deste projeto foi feita no Embarcados Innovation. Neste artigo serão apresentados detalhes sobre o desenvolvimento do aplicativo, da aplicação de servidor e hardware necessários para conectar um usuário em qualquer lugar a um Arduino remoto.

Introdução

O block.ino segue a arquitetura cliente-servidor, assim como outros projetos de laboratórios remotos. Por sua natureza, os laboratórios de acesso remoto dependem de uma aplicação com interface de usuário que solicita um serviço e outra aplicação que provê um recurso ou serviço. De modo geral, o recurso é um sistema relacionado a algum tópico, por exemplo, química, mecânica e eletrônica, e possui sensores e atuadores conectados a ele. Os valores lidos e a interação têm significado para o estudante e o professor, e pretendem aproximar ao máximo da experiência que é possível ter em um laboratório real.

No block.ino, o recurso é composto por uma placa de Arduino e componentes eletrônicos, como sensor de temperatura, sensor ultrassônico, servo motor, entre outros. Os estudantes programam e controlam os sensores e atuadores usando um smartphone ou tablet.  Até o momento, somente a versão para sistemas Android foi disponibilizada, porém fazem parte do roadmap as versões web, iOS e desktop. Nas seções a seguir é apresentado o desenvolvimento do projeto em três diferentes partes: o aplicativo móvel, a aplicação de servidor, também chamada de lab server, e o laboratório de Arduino.

Aplicativo móvel

O aplicativo móvel é baseado em tecnologias web (HTML, CSS e JavaScript) para que seja portável em diferentes sistemas e por contar com bibliotecas que estão disponíveis somente na versão web. A interface de usuário usa o Materialize como framework CSS para front-end. Uma das bibliotecas mais importantes no projeto é a Blockly do Google, que é responsável pelo editor de código em blocos e gerador de código para diferentes linguagens. Além disso, o Phonegap  está sendo usado para fazer a conexão entre a interface web e os recursos nativos do sistema via plugins, como os plugins para acesso ao sistema de arquivos e estado da rede.

Quando o usuário arrasta os blocos, que estão separados em categorias, para a área de trabalho, o código fonte na linguagem do Arduino é atualizado na aba “Código Fonte”, como mostra a figura 1. Na aba “Diagrama do Circuito” há uma figura do circuito preestabelecido, onde estão identificados pinos e componentes eletrônicos montados em uma protoboard. Acima da área de trabalho há três botões que, da esquerda para direita, são usados para ampliar a área do editor, enviar um programa para o Arduino e compilar código. Abaixo do editor há a saída da IDE do Arduino, onde o retorno da compilação e do envio do código são apresentados, auxiliando o usuário a encontrar erros durante o desenvolvimento e teste.

Edição e compilação do código fonte no block.ino
Figura 1 – Edição e compilação do código fonte.

Toda comunicação entre o aplicativo e o Lab Server utiliza websocket como protocolo de transferência de dados. Na prática,  é utilizada a biblioteca socket.io, que facilita o uso do protocolo tanto em cliente como no servidor. Já os dados trocados estão estruturados em JSON (Javascript Object Notation).

Como cada usuário deve ter o acesso exclusivo no momento de teste do seu código, boa parte das ações são gerenciadas por uma fila de usuários que será detalhada na seção seguinte. A compilação do código no servidor é o único serviço que não possui restrição de fila. Já a ação de reiniciar a placa, o envio do programa para a placa e o uso do terminal serial são mediados por uma fila que sincroniza os acessos. No aplicativo são apresentas mensagens compreensíveis para os usuários indicando o estado da fila, como mostrado na figura 2.  

O aplicativo encontra-se traduzido em três línguas (português, inglês e espanhol). Além disso, existem outras funcionalidades, como salvar e abrir arquivos localmente, exemplos de códigos e tutorial. Usando uma câmera de vídeo, as mudanças são apresentadas de modo simultâneo ao que ocorre no laboratório por um fluxo de imagens no formato MJPEG.

 Envio e teste do código no block.ino
Figura 2 – Envio e teste do código.

Lab Server

No backend há duas aplicações, uma responsável pelo laboratório de Arduino e gerência de acessos, e outra para o streaming de vídeo. A principal aplicação foi escrita em Node.js e é uma interface para as ferramentas da IDE original do Arduino na forma de serviço web. Já para o streaming de vídeo está sendo utilizada a aplicação open source Motion.  

Esta interface de comunicação do cliente com o servidor é baseada em conceitos do estilo arquitetural REST sobre o protocolo websocket. O websocket é um protocolo assíncrono que, juntamente com o paradigma orientado a eventos do Node.js, é considerado ideal para aplicações de laboratórios remotos. Isto porque estes sistemas geralmente precisam entregar resultados ao cliente quando algum evento interno ocorre, como o acionamento de um sensor de presença em um sistema mecânico.

A compilação e programação do microcontrolador utiliza o conjunto de ferramentas da Atmel para µC AVR e bibliotecas próprias do Arduino, como na IDE convencional. Como o Arduino está sempre conectado em uma porta USB da máquina que hospeda esta aplicação, é possível utilizar o terminal serial como na IDE convencional.  Além disso, é possível reiniciar o microcontrolador via software, o que é  útil para o usuário que está utilizando o Arduino remotamente.

Na mesma aplicação ocorre a gerência dos acessos às funções em que é permitido somente um usuário por vez. Cada usuário tem o tempo máximo de um minuto para enviar seu código e testá-lo, podendo se estender caso não haja outro usuário na fila. Este tempo máximo é configurável e provavelmente será alterado no futuro.

A primeira versão do aplicativo se conecta somente a um lab server. No entanto, os ajustes para permitir o uso de vários laboratórios de Arduino já estão sendo realizados, inclusive prevendo kits com diferentes componentes eletrônicos. Para isto, cada lab server irá conter metadados para descrição dos componentes eletrônicos e pinos e utilizará um serviço de diretório para descoberta e descrição dos kits, já que todos serviços são semelhantes com variações somente no conjunto de componentes.

A aplicação não exige muito processamento e memória, e pode ser utilizada em qualquer computador com Linux. Neste projeto estamos usando um Raspberry Pi somente para executar a aplicação do lab server. Assim, é possível reunir todo hardware em um pequeno espaço, como a figura 3 mostra.

Laboratório de Arduino

O laboratório, também chamado de kit, tem a aparência de um protótipo de projeto de Arduino, com protoboard, jumpers, alguns componentes e a placa em si (Figura 3). No laboratório, apesar de conter um número limitado de componentes e serem fixos, é possível criar aplicações simples que são suficientes para quem está iniciando os estudos e não possue um kit de desenvolvimento completo.

Laboratório físico com o block.ino
Figura 3 – Laboratório físico.

O kit é organizado em cima de uma caixa de acrílico que envolve a fonte de alimentação, o Raspberry Pi e demais suportes. Embora só um dos kits esteja sendo utilizado pelo aplicativo, existem mais 2 laboratórios com diferentes componentes eletrônicos em fase de desenvolvimento.

O motivo de usar o Raspberry Pi como servidor do laboratório deve-se à alta disponibilidade no mercado brasileiro e a melhor relação custo / benefício em comparação ao uso de um computador pessoal dedicado a esta aplicação. A partir do que foi desenvolvido é possível replicar com facilidade por um baixo custo, tornando a colaboração e investimento na ampliação de projetos atrativos.

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

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

[wpseo_breadcrumb]
Comentários:
Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments
Talvez você goste:

Séries

Menu
Privacy Settings saved!
Configurações de Privacidade

Entenda quais dados e informações usamos para ter melhor entrega de conteúdo personalizado para você.

These cookies are necessary for the website to function and cannot be switched off in our systems.

Para usar este site, usamos os seguintes cookies tecnicamente exigidos

  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec

Decline all Services
Accept all Services