projeto e inovaÇÃo de aplicaÇÕes de baixo custo...
TRANSCRIPT
PROJETO E INOVAÇÃO DE APLICAÇÕES DE BAIXO CUSTO BASEADAS NO
MICROCONTROLADOR ARDUINO
Riccieli Kendy Zan Minakawa¹ Ricardo Ribeiro dos Santos²
¹Aluno do Curso de Engenharia de Computação UFMS, voluntário de Iniciação Científica UFMS 2012/13
² Professor da UFMS, Faculdade de Computação; e-mail: [email protected]
Resumo: Objetivou-se neste trabalho projetar e implementar um sistema de gerenciamento de
conteúdo para televisores, propondo uma nova solução para a área de Sinalização Digital:
reaproveitar materiais eletrônicos obsoletos barateando o custo do produto final. O projeto é
composto de hardware e software que permite ao usuário enviar, via internet, mensagens de
texto para serem exibidas em um televisor. O sistema desenvolvido pode ser dividido em duas
partes: a construção e programação de um hardware que atendesse os objetivos do projeto e a
elaboração e desenvolvimento de uma interface web. De modo geral, o sistema é responsável
por gerenciar uma página web e controlar o fluxo de informações inseridas pelo usuário que
serão exibidas na tela de um televisor. Para isso, utilizou-se um televisor de tubo de raios
catódicos, um microncontrolador Arduino ATMega 2560 e bibliotecas responsáveis por
fazerem o interfaceamento das funcionalidades do software com o hardware desenvolvido.
Conclui-se ser possível reutilizar materiais eletrônicos que poderiam ser descartados com o
advento da tecnologia ao se adicionar novos recursos ao componente. O produto resultante
deste projeto é um sistema de hardware e software que apresenta um custo de aquisição de
hardware menor quando comparado a algumas soluções comerciais já existentes.
Palavras-chave: Sinalização Digital, televisores de tubo de raios catódicos, Arduino.
1. INTRODUÇÃO
Fruto da evolução tecnológica, a área Sinalização Digital [1] tem causado grande
impacto na maneira como órgãos e empresas se comunicam com seus públicos alvos. Com a
grande quantidade de informação exibida em variados meios de comunicação, a necessidade
de atrair a atenção do público gera ideias criativas para que seja possível atingir os resultados
esperados: fazer com que o público tenha interesse naquilo que se deseja passar. Assim, fazer
o uso da tecnologia para tornar essa comunicação mais prática, econômica e versátil tem se
tornado alvo de interesse de muitas empresas.
Naturalmente, existem vários sistemas de gerenciamento de conteúdo para televisores,
como por exemplo, os encontrados em aeroportos, terminais rodoviários, shoppings, táxis e
bares. Os principais diferenciais do projeto aqui apresentado são: a utilização do
microcontrolador Arduino [2,3], que proporciona baixo custo e flexibilidade, e a utilização de
televisores de tubos de raios catódicos, que oferece uma oportunidade de reaproveitar
equipamentos eletrônicos que poderiam ser descartados com o advento dos avanços
tecnológicos.
O objetivo inicial do projeto foi desenvolver um sistema de gerenciamento de
conteúdo composto de software e hardware que permite ao usuário enviar, via internet,
mensagens de texto para serem exibidas em um televisor de tubos de raios catódicos.
2. MATERIAL E MÉTODOS
O trabalho foi desenvolvido no Laboratório de Sistemas Computacionais de Alto
Desempenho (LSCAD) da Universidade Federal de Mato Groso do Sul (UFMS), Campo
Grande.
O projeto desenvolvido pode ser dividido em duas partes: a construção e programação
de um hardware que atendesse os objetivos do projeto e a elaboração e desenvolvimento de
uma interface web.
O sistema de hardware consiste em uma placa Arduino ATMega 2560, um cabo RCA,
um modulador de áudio e vídeo para fazer a comunicação entre a placa Arduino e o televisor,
um sensor DHT 11 para capturar a temperatura do ambiente, um shield Ethernet para
gerenciar a página web (interface web), um cartão micro SD e uma matriz de contato para
implementação do hardware.
O desenvolvimento do software que gerencia e controla o fluxo de informações que
são exibidas no televisor utiliza como base a linguagem de programação C com algumas
bibliotecas implementadas em C++. São estas:
DHT library: utilizada para realizar, calcular e converter medidas de temperatura.
TVOut library: utilizada para realizar o interfaceamento entre a placa Arduino e o
televisor de tubo de raios catódicos.
SD library: utilizada para fazer o interfaceamento entre Shield Ethernet e o cartão
Micro-SD.
Time library: utilizada para manipular e realizar cálculos de data e hora.
Ethernet library: utilizada para a implementação da interface web e para fazer
consultas de data e hora em servidores NTP [4].
A interface web tem como base a programação de páginas para Internet em HTML [5]
com auxílio de recursos da biblioteca Ethernet.
2.1 PLATAFORMA ARDUINO
Arduino é um kit de desenvolvimento open-source baseado em uma placa de circuito
impresso dotada de vários recursos de interfaceamento (pinagem de entrada e saída) e um
microcontrolador Atmel AVR. É um projeto descendente da plataforma Wiring [6] que foi
concebida com o objetivo de tornar o uso de circuitos eletrônicos mais acessível em projetos
multidisciplinares.
A linguagem usada para programação do Arduino é baseada na linguagem Wiring
(sintaxe + bibliotecas), e muito similar a C++, com pequenas modificações. O ambiente de
desenvolvimento adotado é baseada em Processing.
Atualmente, pode-se comprar um kit Arduino em diferentes versões. Também são
disponibilizadas informações do hardware para aqueles que desejam montar seu próprio kit
Arduino.
Além do ambiente de programação para o Arduino, existem outros softwares que
auxiliam o uso dessa tecnologia. Um exemplo disso é a ferramenta Fritzing [7] que é um
ambiente de desenvolvimento, dentro do projeto Arduino, que possibilita usuários documentar
seus protótipos e, principalmente, ilustrar a implementação de um projeto real de uma
maneira fácil e intuitiva de ser entendida por outros usuários.
2.1.1 AMBIENTE DE DESENVOLVIMENTO
A IDE (Integrated Development Environment) do Arduino foi desenvolvida em Java e
contém um editor de texto para escrita do código, uma área de mensagem, uma área de
controle de informações, uma barra de ferramentas com botões para funções comuns e um
conjunto de menus. Os programas escritos usando o ambiente de desenvolvimento Arduino
são chamados de sketches.
A linguagem de programação do Arduino é baseada em C/C++, preservando sua
sintaxe na declaração de variáveis, na utilização de operadores, na manipulação de vetores, na
conservação de estruturas, sendo também case sensitive. Contudo, ao invés de uma função
main, todos os sketches necessitam de duas funções elementares:
setup( ): é usada para fazer configurações: inicializar variáveis, configurar o modo dos
pinos, etc. Esta função é executada automaticamente uma única vez, assim que o kit
Arduino é ligado ou resetado. .
loop( ): faz exatamente o que seu nome sugere: entra em looping (executa sempre o
mesmo bloco de código), permitindo ao programa executar repetitivamente as
instruções que estão dentro desta função. A função loop( ) deve sempre ser declarada
após a função setup( ).
2.2 TVOUT LIBRARY
A biblioteca TVOut [8] (disponível em https://code.google.com/p/arduino-tvout/) tem
como objetivo gerar conteúdo em um televisor utilizando um microcontrolador Arduino. A
biblioteca está implementada para suportar tanto televisores que operam em sistema NTSC
quanto em sistema PAL. Basicamente, ela está estruturada em arquivos de configurações de
hardware e arquivos onde estão implementados os métodos acessíveis, nos quais permitem ao
usuário configurar, formatar, desenhar e gerar o conteúdo que deseja em um televisor. Essas
funções estão descritas no relatório parcial.
Mesmo o Arduino sendo um projeto open-source e a biblioteca TVOut ter sido escrita
por vários usuários, sendo possível fazer alterações, inclusões e aprimoramentos na biblioteca,
com a finalidade de adaptá-la para suprir as necessidades dos problemas em questão, a
biblioteca apresenta algumas limitações técnicas de utilização. Por exemplo, não é possível
aplicar cores diferentes de preto e branco devido às configurações de hardware sobre a qual
ela está implementada.
2.3 MONTAGEM DO CIRCUITO
Para utilizar a biblioteca TVOut com Arduino e um televisor de tubo de raios
catódicos é necessário construir o circuito apresentado na Figura 1. Essa configuração varia
de microcontrolador para microcontrolador. Como esse projeto foi desenvolvido utilizando
um ATMega 2560, deve-se soldar um jumper no centro de um Cabo RCA e conectá-lo através
de um resistor de 1 KΩ à porta 11 da placa Arduino, reservada para fazer a sincronização
(SYNC). Em paralelo, deve-se conectar um resistor de 470 Ω à porta digital 29 da placa
Arduino que corresponde à saída de vídeo. A parte externa do cabo RCA deve ser conectada
no GND da placa Arduino. O cabo RCA é conectado ao modulador de áudio e vídeo que por
sua vez é conectado no televisor
Figura 1: Prototipação do projeto de hardware desenvolvido utilizando a ferramenta Fritzing
2.4 SHIELD ETHERNET
O Shield Ethernet é utilizado para contectar a placa Arduino à Internet através de um
cabo RJ45 podendo ser programado para comportar-se como um servidor web ou um cliente.
Quando configurado para simular o funcionamento de um servidor, conhecendo-se o IP que é
atribuído à placa Arduino, é possível acessá-lo através de qualquer computador que esteja
conectado a mesma rede que a placa.
O Shield Ethernet ainda possui um slot reservado para inserção de um cartão micro-
SD, muito útil para armazenar dados que são enviados para o servidor.
No sistema desenvolvido, o Shield Ethernet é responsável por gerenciar a página web
(interface web) e por fazer consultas de disponibilidade de informação de data e hora em
servidores NTP (Network Time Protocol). Como o NTI (Núcleo de Tecnologia da
Informação), órgão responsável pelo gerenciamento da internet na Universidade, bloqueia o
acesso a alguns servidores, foram utilizados os seguintes endereços de servidor para manter
atualizado hora e data.
a.ntp.br 200.160.0.8
b.ntp.br 200.189.40.8
c.ntp.br 200.192.232.8
3. RESULTADOS
3.1 SISTEMA DE HARDWARE
O sistema de hardware desenvolvido para o projeto pode ser observado na Figura 2. A
Figura 2 mostra um Shield Ethernet acoplado à placa Arduino ATMEGA 2560, resistores,
jumpers, um cabo RCA soldado, um sensor de temperatura DHT11 e um cartão micro-SD no
slot reservado pelo Shield Ethernet. Note que, mesmo o Shield Ethernet sendo acoplado à
placa Arduino, é possível utilizar quase todas as portas da placa, ou seja, adicionar mais
recursos ao projeto. Apesar de não ter conexão visível, as portas digitais 50, 51 e 52 não
podem ser utilizadas, pois são reservadas para comunicação SPI, assim como as portas
digitais 4 e 53 que são utilizadas para selecionar e configurar o cartão micro-SD.
Figura 2: Implementação do circuito para conexão da placa Arduino
com os demais sensores e o televisor.
3.2 INTERFACE WEB
A interface web do sistema contém campos para inserir: um título para a mensagem,
de preenchimento opcional; uma mensagem obrigatória que contenha até 140 caracteres sem
acentuações; uma prioridade que deve ser obrigatoriamente selecionada pelo usuário. O
sistema pré-define que as mensagens podem ter prioridade baixa, média ou alta. O usuário
deve ainda selecionar: uma categoria obrigatória para a mensagem: graduação, pós-
graduação, notícias ou eventos; uma data que determinará quando a mensagem deve começar
a ser exibida no televisor e uma data de expiração da mensagem. A página web possui um
contador de caracteres que indica quantos caracteres o usuário ainda pode inserir no campo
mensagem. Quando a página é iniciada, esse contador possui o valor 140, ou seja, pode-se
digitar 140 caracteres no corpo da mensagem. Observe a Figura 3.
Figura 3: Interface web para acesso ao sistema de exibição de mensagens no televisor via
Arduino.
3.3 FUNCIONAMENTO DO SISTEMA
O funcionamento simplificado do sistema pode ser observado na Figura 4. O usuário
acessa a página web do sistema digitando o endereço de IP do Arduino, obtido a partir do
shield Ethernet, em um browser e aguarda a página carregar. Carregada a página, o usuário
deve preencher os campos de mensagem, título (se conveniente), categoria, prioridade e uma
data para a mensagem começar a ser exibida e uma data para que a mensagem deixe de ser
exibida. Ao clicar no botão enviar, essas informações são enviadas para o Arduino converter
os códigos de entidades HTML para caracteres correspondentes em ASCII. Finalmente, o
sistema atribui um identificador único para a mensagem e verifica as datas de início e término
para então gravar os dados em um arquivo na memória flash do cartão micro-SD.
No cartão micro-SD, as mensagens estão divididas em três arquivos de acordo com um
critério específico: mensagens com uma data de início futura em relação a data atual,
mensagens expiradas e mensagens ativas, que são mensagens que estão dentro de um período
válido para serem exibidas.
Figura 4: Digrama simplificado do funcionamento do sistema.
Para exibir as mensagens no televisor, o sistema utiliza apenas as mensagens que estão
no arquivo correspondente às mensagens ativas, ou seja, as que possuem data de início
anterior à data atual e as que a data de expiração não excedam a data atual. Essas mensagens
que estão no cartão micro-SD serão carregadas na memória do Arduino e exibidas uma a uma,
seguindo uma ordem de exibição definida pela prioridade utilizando o algoritmo MaxHeap
[9]. Toda vez que o sistema é reiniciado ou que uma nova mensagem é inserida, o MaxHeap
garante que a mensagem de maior prioridade sempre fique na raiz da estrutura, fazendo com
que mensagens de maior prioridade sejam exibidas primeiro que as mensagens de menor
prioridade.
Como a memória SRAM do Arduino ATMega 2560 (8 Kb) é relativamente pequena
dado à complexidade dessa aplicação, a estrutura do MaxHeap mantém na memória do
Arduino apenas o identificador das mensagens e a prioridade a ele associado. Quando o
MaxHeap determina que é a vez de uma mensagem ser exibida, o sistema busca a mensagem
no cartão micro-SD, através do identificador da mensagem e carrega o conteúdo
correspondente (mensagem e título) para a memória.
Finalmente, o Arduino utiliza recursos da biblioteca TVOut para exibir as mensagens
no televisor. Todas as mensagens são exibidas seguindo o mesmo frame como sugere a Figura
5. O tempo de exibição de cada mensagem é determinado pelo tamanho de cada uma.
Figura 5: Na tela do televisor é possível observar o título da mensagem: “ERI 2013” e a
mensagem “Escola Regional de Informática MS de 28 a 30 de Agosto. Três Lagoas – MS”,
bem como a data, hora e a temperatura do ambiente no momento em que a foto foi obtida e os
logotipos da FACOM, LSCAD e UFMS.
3.4 MONITORAMENTO DE MEMÓRIA
Para obter os dados apresentado na Tabela 1, utilizou-se a seguinte função para fazer-
se o monitoramento de memória SRAM livre no Arduino:
int freeRam ( )
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
O Arduino ATMega 2560 possui 8 Kb de memória SRAM, mas apenas 7103 bytes
estão disponíveis para serem utilizados quando o programa começa ser executado.
Para realizar as configurações necessárias do Shield Ethernet, por exemplo, gerar um
endereço IP, o Arduino consome, aproximadamente, 100 bytes da memória SRAM.
Tarefas como: consultar os servidores NTP, calcular corretamente a data e hora,
configurar o sistema a fim de manter esses valores acessíveis na memória, ou exibir
corretamente data e hora no televisor, utilizam, em média, 1538 bytes de memória SRAM.
Para inserir uma mensagem completa (140 caracteres), com um título de até 10
caracteres, selecionando uma prioridade, uma categoria e datas de início e término da
mensagem, utiliza-se, em média, 551 bytes de SRAM.
Para exibir o frame como o da Figura 10, que mostra logotipos do LSCAD, FACOM e
UFMS, exibe a temperatura ambiente, a data e hora atuais e uma mensagem de 140
caracteres, o Arduino precisa utilizar uma resolução de 230 x 180 pixels que corresponde,
aproximadamente, à 5175 bytes de memória SRAM.
Tabela 1: Utilização de memória SRAM do Arduino ao executar determinada tarefa.
Tarefa Uso da memória SRAM
(em bytes)
Configurar Shield Ethernet 100
Atualizar data e hora do sistema 1538
Inserir mensagem no sistema 551
Exibir mensagem no televisor 5175
Total: 7364
Logo é possível notar que apesar de desejável, o sistema ao executar todas essas
tarefas simultaneamente irá exceder à quantidade de memória SRAM livre do Arduino.
Quando isso ocorre o sistema trava e deve ser reiniciado manualmente.
4. CONCLUSÕES
Este trabalho projetou e desenvolveu um sistema de hardware e software para geração
de conteúdo em televisores de tubo de raios catódicos. Tendo em vista os objetivos iniciais,
pode-se dizer que eles foram atingidos até o limite imposto por dificuldades inflexíveis
encontradas ao longo do desenvolvimento do projeto.
A biblioteca TVOut possui algumas limitações da forma como está originalmente
implementada. Por exemplo, o fato de possuir apenas duas opções de cores (branco e preto)
limita a possibilidade de se desenvolver e aprimorar as aplicações. Outro fator complicador é
a ausência de documentação detalhada e de fácil acesso à implementação da biblioteca, que
dificulta bastante quaisquer alterações que se façam necessárias.
O microcontrolador Arduino ATMega 2560 possui pouca memória SRAM, se
comparado às exigências do projeto que manipula diversos componentes complexos. Isso
restringe a possibilidade de adicionar novos recursos e dificulta a manipulação dos dados já
obtidos pelo sistema.
Portanto, a insuficiência de memória SRAM livre para manipulação de dados somado
às limitações e falhas na implementação da biblioteca TVOut dificultaram na implementação
de um projeto auto-suficiente como esperado. O sistema funciona bem se as funcionalidades
não forem executadas todas simultaneamente, como é desejável.
Uma funcionalidade do sistema que se destaca é a flexibilidade para inserção, e
exibição dos conteúdos, uma vez que é utilizado apenas um microcontrolador, com acesso à
Web, responsável pelo gerenciamento de todo o sistema. Assim, não é necessário utilizar um
computador dedicado para organizar e sincronizar as mensagens, como as soluções
comerciais existentes no mercado. Isso torna o projeto aplicável em diversas situações em que
o usuário deseja exibir conteúdos digitais em um aparelho de televisor tais como:
informativos para clientes/usuários de serviços, publicidade, notícias, programação de
eventos, entre outras.
O produto resultante deste projeto é um sistema de hardware/software que apresenta
um custo de aquisição do hardware menor quando comparado a algumas soluções comerciais
existentes.
As próximas etapas do projeto envolvem o refinamento dos resultados já alcançados, o
estudo da substituição de alguns componentes por outros que oferecem maior capacidade de
armazenamento e desempenho, bem como a implantação do sistema no Laboratório de
Sistemas Computacionais de Alto Desempenho (LSCAD) e no hall de entrada da Faculdade
de Computação (FACOM). Ainda, será necessário realizar testes em vários modelos diferentes
de televisor, e adaptar o código para cada um deles, com o intuito de investigar a portabilidade
do software.
5. REFERÊNCIAS
[1] Digital Signage. Disponível em <http://en.wikipedia.org/wiki/Digital_signage>
[2] Arduino HomePage. Disponível em <http://www.arduino.cc/>
[3] Michael Margolis. Arduino Cookbook. O’Reilly, 1st ed. March, 2011
[4] Network Time Protocol – A Hora Legal Brasileira, via Internet. Disponível em
<http://www.ntp.br/>
[5] HTML Tutorial - (HTML5 Compliant). Disponível em
<http://www.w3schools.com/html/>
[6] Wiring: open-source programming framework for microcontrollers. Disponível em
< http://wiring.org.co/>
[7] Fritzing: From prototype to product. Disponível em <http://fritzing.org/>
[8] Arduino TVOut . Disponível em <https://code.google.com/p/arduino-tvout/>
[9] CORMEN, Thomas H. et al. Algoritmos: teoria e prática. Tradução da segunda edição
[americana]. Rio de Janeiro: Elsevier, 2002.
6. PRODUTOS ALCANÇADOS
Resumo aceito para apresentação na modalidade pôster na IV Escola Regional de
Informática (ERI), Três Lagoas/MS, agosto/2013.