Semana passada fiz uma compra interessante, três placas Arduino. O Arduino é uma plataforma para desenvolvimento de sistemas com microcontroladores. A diferença do Arduino e outros sistemas semelhantes é sua simplicidade de uso e seu baixo preço. Por cerca de R$ 70,00 você pode ter um deles.
O que se pode fazer com um brinquedo destes? Bem, as entradas analógicas podem ser usadas para receber informação de sensores, como sensores de temperatura, umidade, tensão, etc. As entradas e saídas digitais permitem a esta placa ser integrada a circuitos digitais, os mais diversos, receber entrada de teclados, dar saída a mostradores de LEDs de sete segmentos, mostradores de cristal líquidos paralelos ou seriais, etc.
Hardware
O Arduino é baseado em um microcontrolador Atmel AVR, o ATMega168 (na versão Arduino Diecimilla) e o ATMega8 (nas versões antigas Arduino NG), o microcontrolador opera à 16 MHz. Veja a imagem:
Pode-se ver claramente na foto que a placa dispõe de 14 entradas ou saídas digitais, no conector na parte de cima da placa, das quais 6 podem gerar sinais PWM (explicaremos isto depois) e 6 entradas analógicas, na parte de baixo da placa. Repare no jumper a esquerda, logo abaixo do conector USB, que permite opcionalmente "roubar" a alimentação da porta USB com a qual se comunica com o microcomputador. Existem versões RS-232 e USB do Arduino, mas na verdade a versão USB faz um RS-232 sobre USB, o que implica em instalar um driver no microcomputador para simular uma porta RS-232 (COM) usando aquela USB, isso simplifica o hardware pois as comunicações USB são muito rápidas para microcontroladores e bastante complexas também.
A placa possui um conector de 6 pinos [1] usado para ICSP (de In-Circuit Serial Programming) que é uma variante criada pela Microchip do ISP (In-System Programming) [MIC1], um protocolo serial usado para programar micro controladores já inseridos em um circuito. Isso é muito útil quando se precisa atualizar ou corrigir o programa de um microcontrolador ou adaptá-lo em campo, ou mesmo adicionar um número de série único. No caso do Arduino esta porta permite alterar o bootloader, ou removê-lo se necessário (no caso do uso da placa em um projeto final e não para prototipagem, de modo a ganhar os 2k de memória que o bootloader ocupa).
O microcontrolador AVR é RISC e tem uma arquitetura Harvard modificada [2], bastante popular em microcontroladores, nesta arquitetura o programa e os dados não ficam na mesma memória, existe uma memória para o programa, que em geral é uma EEPROM ou Flash de modo a ser não volátil, e uma memória para dados.
Software
Uma das coisas engenhosas do projeto desta placa é que você não precisa de um programador para gravar o programa no micro controlador, ele é fornecido programado com um bootloader [3], um programa que ao ser ligada a energia verifica a porta USB para ver se tem um programa para ser gravado na memória, se após um tempo não tiver nada vindo da USB, ele executa o programa que estiver na memória após o bootloader, se tiver algo vindo pela USB o bootloader carrega o programa vindo dela na memória e o executa, eliminando a necessidade de um programador.
Para programar para o Arduino usa-se uma IDE baseada em Java usando uma variante da linguagem C chamada Wired e compilada usando o GCC para o código objeto do microcontrolador. O fato de ser compilado e o AVR ter uma arquitetura RISC faz o código executar extremamente rápido.
Existem bibliotecas nesta linguagem para ler teclados de PC, escrever em mostradores de LCD seriais e paralelos, se comunicar com sensores usando o protocolo 1-wire (muito usado pois permite ligar vários sensores usando apenas uma linha de comunicação que também é usada para alimentar o sensor [WIKI3]), controlar dispositivos X10 (que é um protocolo que permite enviar comandos para controlar dispositivos domésticos através da rede elétrica), controlar mostradores de sete segmentos, motores de passo, e muito mais.
Comparando com os outros
Ao contrário de outros sistemas populares, como o BASIC Stamp, que são escritos em uma variante do BASIC (o PBASIC) e interpretados pelo BASIC Stamp, os programas para o Arduino são escritos em uma variante da linguagem C e compilados. Isto torna o Arduino ordens de grandeza mais rápido que o Basic Stamp (que deve sua popularidade ao fato de ser simples programar em BASIC).
Existem sistemas com bootloaders para outros microcontroladores como o PIC da Microchip, mas os microcontroladores PICs são bem mais caros que os AVR e os sistemas de desenvolvimento muito mais caros.
o Arduino é, sem dúvida, a mais simples de todas as plataformas deste tipo para se utilizar e programar. Os esquemas eletrônicos e o software são disponibilizados sob a licença Creative Commons, de modo que existem inúmeros clones, mas como o nome Arduino é registrado os clones tem outros nomes, como o que eu comprei, o Freeduino. Para conhecer outros clones do Arduino você pode consultar [COX1].
Algumas fraquezas e alternativas
Devido a simplicidade da placa necessária para que ela tenha baixo custo, o Arduino não permite você rodar um programa passo a passo. Para fazer debug passo a passo é necessário usar uma interface JTAG ou DebugWire.
A interface JTAG é um padrão da indústria permite testar placas de circuito impresso com múltiplos circuitos integrados. Ela utiliza 4 ou 5 fios e permite que todos os integrados da placa sejam ligados a estes fios permitindo teste individual de cada integrado. A interface JTAG é usada principalmente para fazer debug de microcontroladores, com direito a verificação de conteúdo, breakpoints, etc e também é usada para programar microcontroladores e FPGAs nas próprias placas. O micro controlador usado no Arduino permite o uso da JTAG [4], mas a placa do Arduino não permite.
Existe outra interface de debug que é específica dos controladores AVR que é mais simples que a JTAG, chamada DebugWire. Para fazer isso ela usa apenas o pino de reset de maneira bidirecional, permitindo breakpoints e alteração de conteúdo. Novamente, apesar dos microcontroladores suportarem esta interface a placa do Arduino não a suporta, a menos que o capacitor de reset automático ligado ao pino de reset seja desligado, para que o pino de reset seja usado para o DebugWire.
Existe uma plataforma de desenvolvimento da própria AVR de custo um pouco maior que o Arduino chamada AVR Dragon, que permite o uso da Interface JTAG [5] e da DebugWire. No entanto a IDE do Arduino não suporta nem debug, nem as interfaces JTAG ou DebugWire. Para uso delas você deve usar uma IDE da AVR chamada AVR Studio [ATM1].
Instalando o software
Existem vários tutoriais na Internet que ensinam como instalar o driver que simula a porta COM usando uma porta USB [LIM1] e a IDE do Arduino. Mas existem poucas ou nenhuma explicação de como fazer estas coisas no Windows Vista, assim aqui vai uma descrição simples.
Vou resumir o quadro: no Windows Vista 32-bit edition a instalação do driver é bem simples e tudo funciona (apesar de uns problemas às vezes), mas não existe este driver para o Windows Vista 64-bit edition e portanto não é possível usar o Arduino com USB, mas ainda é possível usar o Arduino RS-232, pois neste caso este driver não é necessário.
Em primeiro lugar conecte o seu Arduino no seu microcomputador via o cabo USB, perceba que é um cabo tipo A-B, ou seja, o conector de um lado é aquele conector retangular que em geral encaixa em microcomputadores e o do outro é um conector quadrado que em geral é o usado em impressoras. Este cabo não vem com o Arduino, assim você deve providenciar um.
Assim que conectar o Arduino no microcomputador ele deve ser detectado pelo Windows Vista e você receberá uma mensagem como esta:
Escolha a opção Locate and install driver software e neste ponto o seu UAC (User Account Control) vai pedir permissão de administrador para prosseguir [6]:
Aperte Continue, e você verá a janela minimizada para o systray e um balão o avisará disso, assim:
Clique no balão para observar o progresso e verá a primeira tela, assim:
Em seguida você verá a seguinte tela:
E, finalmente:
Agora que você já tem o driver instalado, anote o número da porta COM que é simulada pelo driver através da porta USB, pois vai precisar dele depois para configurar a IDE.
Agora podemos instalar o Arduino IDE [ARD1], você deve baixar uma versão igual ou posterior a versão 10 que foi a primeira versão à suportar o Windows Vista. O Arduino IDE para Windows vem em um arquivo ZIP e não requer instalação, basta descompactar o arquivo no lugar onde ele vai ficar.
Para abrir a IDE execute o programa arduino.exe , mas você precisa fazer mais uma coisa. o Arduino IDE se comunica com o Arduino pela porta COM virtual criada pelo driver FT232R que usa a porta USB ou pela porta serial se for um Arduino serial. No Windows Vista o acesso direto a estes dispositivos é ainda mais restrito do que já era nas outras versões do Windows, para poder usá-los você necessita executar o programa como administrador. Para fazer isso clique sobre o programa com o botão direito do mouse e selecione Run as administrator, como mostra a figura:
Agora o UAC vai se manifestar e perguntar:
Escolha Allow e a Arduino IDE irá ser executada, mas os sustos não acabaram, agora o Windows Vista vai desligar o Aero, o Aero é o esquema de cores que permite aquelas transparências na moldura das janelas, e permite ver miniaturas das janelas ao passar o mouse sobre os ícones da barra de tarefas e todas estas coisas tão úteis e indispensáveis. O Aero foi um dos principais motivos das incompatibilidades de vários programas nos primórdios do Windows Vista. Assim sendo, não se assuste se a tela piscar e você receber a mensagem:
Se você clicar no balão vai obter a seguinte informação:
Agora, finalmente a Arduino IDE vai abrir:
Você não vai desejar abrir a IDE dessa maneira toda vez, assim existe uma maneira de fazer a IDE ser executada como administrador toda vez. Para fazer isso clique sobre o programa com o botão direito do mouse e selecione Properties..., como mostra a figura:
Uma caixa de diálogo com vários tabs vai abrir, escolha o tab Compatibility e na seção Privilege Level marque a opção Run this program as an administrator, como mostra a figura:
Você perceberá que o ícone do programa agora tem um escudo superposto a ele, que indica que a UAC vai pedir permissão toda vez que ele for executado. Se você aumentar o ícone poderá ver melhor:
Configurando a Arduino IDE
Você ainda precisa configurar a IDE para o modelo de placa que você tem e em qual porta COM virtual o Arduino está conectado. Para configurar a IDE para o seu modelo de Arduino, vá em Tools/Board e escolha o modelo, Arduino Diecimila, no nosso caso.
Agora, você se lembra da instalação do driver, onde no final você anotou qual a porta COM virtual foi criada? Bem, você deveria ter anotado pois vai precisar dela agora. Em primeiro lugar conecte o Arduino ao microcomputador, pois a porta virtual só existe quando ele está conectado e então vá em Tools/Serial Port e escolha a porta serial, que é COM14 no nosso caso.
Começando a brincadeira
Depois de todo este trabalho, para que você não fique desapontado, vamos executar um programa que faz duas coisas, pisca um LED (este é o Hello World! do mundo dos microcontroladores) e manda para a porta serial uma informação que pode ser lida pelo seu microcomputador. Para isso não ficar muito chato mudei o programa clássico de modo que ele vai fazer um pouco mais que isso, tente entender o que o programa faz e faça um comentário a este post sobre o que ele faz.
int ledPin = 13; // LED connected to digital pin 13 void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output Serial.begin(9600);
}
void loop()
{
for(int j=0;j<10;j++)
{
for(int i=0;i<=j;i++)
{
digitalWrite(ledPin, HIGH); // sets the LED on delay(100);
digitalWrite(ledPin, LOW); // sets the LED off delay(50);
}
Serial.println(j,DEC);
delay(1000);
}
}
Após digitar com esse programa, compilá-lo e enviar para o Arduino (não vou explicar isso tudo aqui, porque é fácil e afinal você não vai querer que eu estrague toda a diversão, não é?), você pode monitorar o que a placa do Arduino está enviando para o seu microcomputador apertando o botão Serial Monitor, como indicado na figura:
Após aperta-lo, a parte de baixo da tela da IDE mostrará (após ser selecionada a velocidade certa, que é a mesma definida no programa), você poderá ver o que a placa está enviando, como mostrado na imagem:
Notas
[1]. O ICSP pode usar 6 ou 10 pinos, mas no Arduino ele usa 6.
[2]. A arquitetura Harvard [WIKI5] se chama assim por causa de um computador que era feito de relês criado pela IBM chamado Harvard Mark I (a IBM o chamava de ASCC) [WIKI4], ele usava uma fita de papel perfurado para guardar o código e contadores mecânicos para os dados, ou seja dois sistemas de memória completamente independentes. Como a memória de programas normalmente é não volátil o microcontrolador pode começar a executar o programa assim que é ligado, mas como em geral a memória de dados é volátil ela precisa ser inicializada, pois não tem dados no momento de ligar. Na arquitetura Harvard modificada [WIKI6] pode-se ler a memória de programas como se fosse de dados e assim buscar os valores com que inicializar a memória de dados no momento em que o microcontrolador é ligado
[3]. O microcontrolador não é fornecido com o bootloader pela AVR, mas é programado nele pelo fornecedor do Arduino.
[4]. O ATMega8 do modelo antigo não tem suporte ao on-chip debug.
[5]. O AVR Dragon suporta as interfaces JTAG e DebugWire, mas isso depende do microcontrolador usado, para o ATMega168 usado no Arduino não é suportado JTAG nem para debug nem para programação, apenas o DebugWire.
[6]. É isso que significa aquele escudo no lado esquerdo da opção, que o UAC vai se manifestar pedindo permissão de administrador. Se você não for administrador da máquina ou não tem a senha de administrador não vai poder instalar o driver.
Referências
[WIKI1]: ARDUINO. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/Arduino>. Acesso em: 12 nov. 2008.
[WIKI2]: ATMEL AVR. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/Atmel_AVR>. Acesso em: 12 nov. 2008.
[WIKI3]: 1-Wire. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/1-Wire>. Acesso em: 12 nov. 2008.
[WIKI4]: HARVARD MARK I. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/Harvard_Mark_I>. Acesso em: 15 nov. 2008.
[WIKI5]: HARVARD ARCHITECTURE. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/Harvard_architecture>. Acesso em: 15 nov. 2008.
[WIKI6]: MODIFIED HARVARD ARCHITECTURE. In: Wikipedia. Disponível em: <http://en.wikipedia.org/wiki/Modified_Harvard_architecture>. Acesso em: 15 nov. 2008.
[LIM1]: LIMOR, Alumna. Lesson 0 - Driver installation for Windows. In: Arduino Tutorial. [S.l.], November 2, 2008. Disponível em: <http://www.ladyada.net/learn/arduino/lesson0-win.html>. Acesso em: 12 nov. 2008.
[COX1]: COX, Landon. The Many Faces of Arduino. In: Open Logic Blogs. [S.l.], August 8th, 2008 . Disponível em: <http://www.openlogic.com/blogs/2008/08/the-many-faces-of-arduino/>. Acesso em: 12 nov. 2008.
[MIC1]: MICROCHIP Technology Inc. In-Circuit Serial Programming™ (ICSP™) Guide. [S.l], May 2003. Disponível em: <http://ww1.microchip.com/downloads/en/DeviceDoc/30277d.pdf>. Acesso em: 12 nov. 2008.
[ATM1]: ATMEL CORPORATION. Atmel Software Download Registration: AVR Studio 4.13 Build 528. San Jose, 2008. Disponível em: <http://www.atmel.com/forms/software_download.asp?fn=dl_aStudio4b528.exe>. Acesso em: 12 nov. 2008.
[ARD1]: Arduino Software. Disponível em: <http://www.arduino.cc/en/Main/Software>. Acesso em: 20 nov. 2008.
Recent Comments