Sei sulla pagina 1di 6

Robótica - Princípios de construção de Projetos - Karl H.

Benz

Robótica - Princípios de construção de Projetos


O universo da robótica supõe a convivência de três mundos: hardware,
software e o mundo físico, representado por motores, sensores, atuadores,
leds, displays, rodas, engrenagens, atuadores diversos e outros. Para
aumentar a complexidade, o que num projeto é apenas um sensor pode ser, na
realidade, outro conjunto de hardware, software, sensores e atuadores – como,
por exemplo, um módulo GPS, um sensor de aceleração, e assim por diante.

A partir de um sinal de 5VCC precisaremos acionar uma lâmpada de


220V, ou um motor trifásico. Para tanto, não nos bastará a eletrônica digital,
teremos necessidade de investir algum esforço nas interfaces entre o mundo
digital e sensores/atuadores.

A propósito, podemos definir sensor como sendo todo dispositivo


(elétrico ou eletro-mecânico) que informa um circuito eletrônico a respeito de
condições específicas do mundo físico. Exemplos: sensores de temperatura,
aceleração, fim de curso de algum dispositivo mecânico. Atuador é todo
dispositivo (elétrico ou eletro-mecânico) que informa o mundo físico a respeito
de algum estado que deva ser assumido, em determinado momento.
Exemplos: leds, displays, relés, motores, atuadores hidráulicos.

Claramente, os sensores são as entradas (inputs) e os atuadores


funcionam como saídas (outputs). O nosso principal esforço será sempre
concentrado no processamento, ou seja, quais regras devem ser aplicadas aos
atuadores, a partir das informações coletadas pelos sensores, para que se
alcance(m) o(s) objetivo(s) do projeto. Desta forma, o principal esforço será
concentrado no software, o que necessariamente exigirá um hardware capaz
de processar instruções lógicas (microprocessador ou microcontrolador).

O mais recomendado, para que se evite o dantesco trabalho de


reinventar a roda, é adquirir um kit com um microcontrolador; existem várias
opções no mercado, envolvendo processadores PIC (Programmable Interface
Controller) e outros. Uma solução com boa relação custo/benefício e
abundante bibliografia (tanto livros quanto sites e fóruns na internet), que será
amplamente utilizada neste blog, é o ARDUINO (www.arduino.cc ), definido por
um dos seus criadores (Massimo Banzi, em Getting Started with Arduino) como
“uma plataforma de computação física de código aberto, baseada em uma
placa simples de I/O (entrada/saída) e um ambiente de desenvolvimento que
implementa a linguagem Processing (www.processing.org).”

Ainda segundo Massimo Banzi, o Arduino pode ser utilizado para


desenvolver objetos interativos autônomos (standalone) ou pode ser conectado
ao software em seu computador, através de linguagens como Flash,
Processing, VVVV ou Max/MSP.

1
Robótica - Princípios de construção de Projetos - Karl H. Benz

As principais características da plataforma italiana Arduino são:

• Uso dos microcontroladores ATMEL: ATmega1280, ATmega328,


ATmega168 ou ATmega8;
• Software e hardware são open source, ou seja, você tem o direito de
baixar o software gratuitamente, alterá-lo e redistribuí-lo; da mesma
forma, pode montar a placa de forma independente e mesmo
comercializá-la, sem pagar nada aos criadores do Arduino. A idéia
central é a democratização do conhecimento, não a obtenção do
lucro fácil com royalties;
• É um ambiente de desenvolvimento multiplataforma, sendo
compatível com Windows, Macintosh e Linux;
• A interface de desenvolvimento de software é baseada na IDE
(Integrated Development Environment) do software Processing,
ambiente de desenvolvimento fácil de usar (Processing tem uma
grande semelhança com a linguagem C);
• A conexão da placa do Arduino com o computador utiliza um cabo
USB;
• O custo de uma placa é baixo (no Brasil, em torno de R$ 150,00 a
versão mais recente - o Arduino Duemilanove com ATmega328,
incluindo impostos e taxa de entrega);
• Existe uma comunidade ativa de desenvolvedores, boa bibliografia e
uma grande quantidade de informação na internet;
• O Arduino é bastante versátil, prestando-se a projetos muito simples,
típicos de iniciantes, mas também possui recursos para
implementações bastante complexas.

Princípios

Para a construção bem sucedida de qualquer projeto, é preciso observar


alguns princípios elementares (mas raramente observados):

Documentação

Prototipação/experimentação

Modularização

Reuso de software e hardware

Aprendizado cumulativo

Open source

2
Robótica - Princípios de construção de Projetos - Karl H. Benz

Documentação

“Any fool can write code that computers can understand. Good
programmers write code that humans can understand” (Martin Fowler)

Uma boa documentação é fundamental. O que mais existe na internet


são projetos pela metade, mal documentados, praticamente incompreensíveis.
Muitas vezes descartamos um projeto porque simplesmente não o
entendemos.

Mais do que mera formalidade, uma documentação bem elaborada é a


melhor oportunidade de refinar o projeto, encontrar seus pontos fracos, revisar
as decisões tomadas. Uma documentação deve conter os objetivos do projeto,
limitações e especificações em geral, a descrição dos módulos que o
compõem, diagrama esquemático do hardware, descrição das sub-rotinas e
funções do software, e assim por diante.

O código-fonte deve ser escrito de forma que seja claramente


compreensível, e seus pontos mais importantes ou críticos devem ser
comentados adequadamente. Muitos programadores gostam de utilizar truques
na geração do seu código-fonte, o que é altamente perigoso. Exemplo:
int state = 0;

state = 1 – state;

A variável state é declarada como inteira e inicializada com 0. A


expressão matemática se baseia num truque: 1 - 0 = 1 e 1 - 1 = 0. Correto, mas
confuso, ainda mais que declaramos uma variável inteira para obter informação
digital (0 ou 1). Não é melhor tornar as coisas mais claras? Observe o trecho
abaixo:
boolean state = false;

state = not state;

A variável state é declarada como booleana e inicializada como falsa. O


valor da variável state será invertido, da mesma forma que antes, mas isto está
bem mais claro para quem lê o programa.

Evite truques de programação, artimanhas tão do gosto de


programadores C, principalmente. Não há ganho de tempo com este tipo de
truque. Além do mais, como o Arduino tem um clock rápido (16 MHz), um
código-fonte extremamente otimizado pode acabar não gerando ganho no
processamento.

3
Robótica - Princípios de construção de Projetos - Karl H. Benz

Melhor escrever um código mais limpo, melhor organizado, mais claro e


bem documentado.

Também deve haver clareza no nome das variáveis e dos módulos, e os


seus nomes devem ser significativos. Se um módulo busca informações em
uma série de chaves, um nome interessante para este módulo seria
“LeInfoChaves”, e não “extch” ou algo que o valha. A preguiça, como diziam os
latinos, é mortal ("pigritia morbus est")...

Por falar em documentação, existe muito material sobre o Arduino na


internet; por exemplo, consulte:
http://www.arduino.cc/playground/Main/ManualsAndCurriculum (em inglês) e
http://multilogica-shop.com/Referencia e http://multilogica-shop.com/Iniciando
(em português).

Prototipação/experimentação

À primeira vista, parece haver uma certa contradição entre


prototipação/experimentação e uma boa documentação: por um lado, existe a
noção de que somente consegue documentar bem um projeto quem tem amplo
conhecimento sobre os componentes envolvidos, e uma pessoa que está
iniciando não tem este conhecimento, portanto não conseguirá documentar
seus projetos.

Quem está iniciando certamente vai seguir os passos mostrados em


sites e em diversos fóruns (exemplo no caso do Arduino:
http://www.arduino.cc/playground/Portugues/Learning), onde existem projetos
simples muito bem documentados, alguns projetos mais complexos pouco
documentados e muitas idéias sobre projetos, praticamente não
documentados, à espera de alguém que as implemente e documente, e
compartilhe o conhecimento com os demais.

Voltando à prototipação, este é o primeiro passo: a idéia de “fazer coisas


e construir objetos que interagem com outros objetos, pessoas e redes”
(Massimo Banzi, em Getting Started with Arduino). Ainda segundo esse autor,
apenas uma resposta rápida dos circuitos que você está construindo - definição
perfeita de prototipação - é capaz de mantê-lo motivado a continuar.

Massimo Banzi utiliza o termo “tinkering” (sem uma tradução boa em


português) para definir a “brincadeira com a tecnologia, explorando diferentes
possibilidades diretamente no hardware e no software - muitas vezes sem um
objetivo definido”. Até que a pessoa tenha domínio sobre a tecnologia
envolvida, que é ampla e complexa, a prototipação tem um valor inestimável. O
Arduino tem uma boa tolerância com erros e bobagens, certamente mais do
que a maioria dos ambientes de desenvolvimento.

4
Robótica - Princípios de construção de Projetos - Karl H. Benz

Mas, depois do aprendizado, é indispensável “organizar o boteco”, ou


seja, depurar o circuito, otimizar o software e documentar todo o projeto, de
forma que ele se torne repetível por outra pessoa com menos conhecimento do
que o próprio autor do projeto.

Modularização

A idéia central da modularização é dividir um problema complexo em


subproblemas que possam ser resolvidos separadamente. Também existe a
questão do reuso, que veremos posteriormente.

Um módulo é uma parte endereçável de um sistema que realiza uma


função completa, independente de outras funções. Ou seja, um módulo deve
realizar uma função específica dentro de um sistema, podendo ser constituído
por outros módulos.

É importante que um módulo tenha alta coesão e baixo acoplamento


(estes conceitos foram introduzidos por Edward Yourdon e Larry Constantine,
no livro “Structured Design: Fundamentals of a Discipline of Computer Program
and Systems Design”, 1977). Basicamente, a coesão mede o grau de
homogeneidade funcional de elementos de processamento no interior de um
módulo, enquanto o acoplamento mede o grau de interconexão de um módulo
em relação aos demais.

Outro cuidado necessário é o uso moderado de variáveis globais


(variáveis acessíveis em todos os escopos de um programa de computador),
pois seu conteúdo pode ser potencialmente modificado em qualquer local, e
qualquer parte do código pode depender delas. Elas devem ser utilizadas
apenas quando realmente tiverem um âmbito global. Sempre que possível,
utilize, dentro dos módulos, variáveis locais (apenas o módulo no qual uma
variável local está definida pode utilizá-la).

Reuso de software e hardware

O reuso de módulos de software pode apresentar uma significativa


redução do custo e tempo de desenvolvimento de um projeto, desde que os
módulos a serem reutilizados obedeçam aos princípios aqui discutidos. Uma
vasta biblioteca de módulos, se corretamente documentada, evita o retrabalho,
mas uma biblioteca de módulos mal documentada é apenas mais uma tralha a
entupir o disco rígido do seu computador.

Também em relação ao hardware é importante o reuso: teclados e


mouses velhos, motores de impressoras quebradas, joysticks, sensores

5
Robótica - Princípios de construção de Projetos - Karl H. Benz

diversos, relés, além de toda tralha eletrônica (resistores, transistores, circuitos


integrados), devem ser guardados em local de fácil acesso e com alguma
organização; outra fonte interessante são os brinquedos: muito carrinho
eletrônico chinês com controle remoto pode ser adquirido em liquidações e ter
seus componentes reaproveitados em projetos interessantes.

Aprendizado cumulativo e colaboração

A prototipação/experimentação, da qual você não escapará, dará a


você uma das bases para acumular conhecimento; outra base é a teoria, e a
terceira base é o compartilhamento de informação.

Experiência sem teoria é mera repetição de projetos alheios; se você


precisar projetar algo por si mesmo, irá fracassar. Apenas teoria é, desculpem
o termo, masturbação intelectual. Você também não será capaz de projetar
nada se nunca tiver posto “mãos à obra”, experimentado soluções diferentes,
dormido à noite com um problema e sonhado com a solução. E, por fim, o
compartilhamento de informação permite que você cresça com o conhecimento
dos demais; permita aos demais crescerem com o SEU conhecimento.

Open source

Existe muita confusão a respeito do que é código-aberto. Pessoalmente,


considero interessante a “Licença Creative Commons”, que preserva alguns
direitos. Segundo esta licença, você tem a liberdade de:

• Compartilhar - copiar, distribuir e transmitir a obra.


• Remixar - criar obras derivadas.

sob as seguintes condições:

• Atribuição - Você deve creditar a obra da forma especificada pelo


autor ou licenciante (mas não de maneira que sugira que estes
concedem qualquer aval a você ou ao seu uso da obra).
• Uso não-comercial - Você não pode usar esta obra para fins
comerciais.
• Compartilhamento pela mesma licença - Se você alterar, transformar
ou criar em cima desta obra, você poderá distribuir a obra resultante
apenas sob a mesma licença, ou sob uma licença similar à presente.

Isto não significa que qualquer uso comercial da placa Arduino seja
vedado. Apenas não comercialize o que você copiou gratuitamente de outros.

A licença está em http://creativecommons.org/licenses/by-nc-sa/3.0/br/.

Potrebbero piacerti anche