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.

Website | Veja + conteúdo

Estudante de Engenharia de Computação na Universidade Federal de Santa Catarina e assistente de pesquisa no Laboratório de Experimentação Remota (RExLab). Nos últimos 3 anos atuou em alguns projetos pesquisa e desenvolvimento de tecnologias educacionais dentro do RExLab. Tem conhecimento em sistemas embarcados, sistemas web e aplicativos móveis, e pretende continuar aplicando este conhecimento na área educacional.

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.

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

Séries

Menu