Neste artigo será apresentado o novo Arduino Duemilanove. E em seguida veremos um projeto prático com o Arduino UNO.
Nota: Este artigo é de uma Eletrônica Total de 2012.
O Arduino é uma plataforma de prototipagem eletrônica de hardware livre, projetada com um microcontrolador Atmel AVR, com suporte embutido de entrada/ saída, e linguagem de programação padrão, a qual tem origem em Wiring, e é essencialmente C/C++. Com isto, temos uma ferramenta acessível de baixo custo e fácil de usar.
A placa Arduino é composta por um controlador, algumas linhas de E/S digital e analógica, além de uma interface serial ou USB. Ela não possui recurso de rede, assim é comum combinar um ou mais Arduinos, usando extensões apropriadas chamadas de Shields.
O Arduino foi projetado na cidade de Ivrea, Itália, em 2005, com o intuito de interagir em projetos escolares de forma a ter um orçamento menor que outros sistemas de prototipagem disponíveis naquela época. No Brasil temos a versão industrializada da TATO Equipamentos Eletrônicos, que desenvolveu o seu TATUINO.
Neste artigo, será apresentado o Arduino Duemilanove e a elaboração de um simples projeto com o Arduino UNO.
Apresentação do Arduino Duemilanove
Duemilanove (que significa dois mil e nove, em italiano) é o mais recente modelo do Arduino. Veja algumas especificações na tabela 1.
Alimentação
O Arduino Duemilanove pode ser alimentado pela ligação USB, ou por qualquer fonte de alimentação externa. A fonte de alimentação é selecionada automaticamente.
Alimentação externa (não USB) pode ser tanto de uma fonte como de uma bateria. A fonte pode ser ligada com um plugue de 2,1mm (centro positivo) no conector de alimentação. Cabos vindos de uma bateria podem ser inseridos nos pinos GND (Massa) e Vin (entrada de tensão) do conector de alimentação.
A placa pode funcionar com uma alimentação externa de 6 a 20 volts. Entretanto, se a alimentação for inferior a 7 volts, o pino 5V pode fornecer menos de 5 volts e a placa pode ficar instável. Se a alimentação for superior a 12 volts, o regulador de tensão pode sobreaquecer e avariar a placa. A alimentação recomendada é de 7 a 12 volts. Os pinos de alimentação são:
• VIN - Entrada de alimentação para a placa Arduino, quando uma fonte externa for utilizada. Poder-se-á fornecer alimentação por este pino ou, caso se use o conector de alimentação, utilizar a alimentação por este pino.
•5V - A fonte de alimentação utilizada para o microcontrolador e para outros componentes da placa. Pode ser proveniente do pino Vin através de um regulador on-board ou ser fornecida pelo USB, ou ainda de outra fonte de 5 volts.
• 3V3 - Alimentação de 3,3 volts fornecida pelo chip FTDI. A corrente máxima é de 50 mA.
• GND - Pino terra ou massa.
Memória
O ATmega328 tem 32 KB de memória flash para armazenar código (dos quais 2 KB são utilizados pelo bootloader), além de 2 KB de SRAM e 1 KB de EEPROM (que pode ser lida e escrita através da biblioteca EEPROM).
Entrada e Saída
Cada um dos 14 pinos digitais do Duemilanove pode ser usado como entrada ou saída, usando-se as funções de pinMode(), digitalWrite(), e digital-Read(). Eles trabalham com 5 volts. Cada pino pode fornecer ou receber um máximo 40 mA, e tem uma resistência de pull-up interna (vem desligada de fábrica) de 20 — 50 kΩ. Além disso, alguns pinos têm funções específicas, a saber:
• Serial: O (RX) e 1 (TX) — são usados para receber (RX) e transmitir (TX) dados série TTL. Estes pinos são ligados aos pinos correspondentes do chip serial FTDI USB-to-TTL.
• External Interrupts: 2 and 3 - Estes pinos podem ser configurados para ativar uma interrupção por um baixo valor, uma elevação ou falling edge, ou uma mudança de valor. Veja a função attachlnterrupt() para mais pormenores.
• PWM: 3, 5, 6, 9, 10, e 11 - Fornecem uma saída analógica PWM de 8 bits com a função analogWrite().
• SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) - Estes pinos suportam comunicação SPI, que embora compatível com o hardware, não está incluída na linguagem do Arduino.
• LED: 13 - Há um LED já montado e ligado de origem ao pino digital 13. Quando o pino está no valor HIGH, o LED acende; quando o valor está em LOW, ele apaga.
O Duemilanove tem 6 entradas analógicas e cada uma delas tem uma resolução de 10 bits (i.e., 1024 valores diferentes). Por padrão, elas medem de 0 a 5 volts, embora seja possível mudar o limite superior usando o pino AREF e um pouco de código de baixo nível. Adicionalmente alguns pinos têm funcionalidades específicas, a saber:
• I2C: 4 (SDA) and 5 (SCL) - Suportam comunicação 12C (TWI) usando a biblioteca Wire (documentação no site do WIRE). Há ainda mais alguns pinos na placa:
• AREF - Referência de tensão para entradas analógicas. São usados com o analogRefe-rence().
• Reset - Envia o valor LOW para efetuar o RESET ao microcontrolador. É tipicamente utilizado para adicionar um botão de reset aos Shields que bloqueiam o que há na placa. Analise o diagrama de blocos entre os pinos do Arduino e as portas do ATmega 168 e referência do ATmega328.
Comunicação
Com o Arduino Duemilanove, a comunicação com um computador, com outro Arduino ou com outros microcontroladores é muito simplificada. O ATmega328 permite comunicação-série no padrão UART TTL (5V), que está disponível nos pinos digitais O (RX) e 1 (TX). Um chip FTDI FT232RL na placa encaminha esta comunicação- série através do USB e os drives FTDI (incluídos no software do Arduino) fornecem uma porta COM virtual para o software no computador. O software Arduino inclui um monitor- série que permite que dados simples de texto sejam enviados à placa Arduino.
Os LEDs RX e TX da placa piscam, quando os dados estão para ser transferidos ao computador pelo chip FTDI. Pela ligação USB não dá, quando há comunicação- série pelos pinos 0 e 1.
A biblioteca SoftwareSerial permite a comunicação- série por quaisquer dos pinos digitais do Duemilanove.
O ATmega328 também oferece suporte aos padrões de comunicação I2C (TWI) e SPI. O software do Arduino inclui uma biblioteca Wire para simplificar o uso do bus I2C; para usar a comunicação SPI, veja a folha de informações do Atmega328.
Programação
O Arduino Duemilanove pode ser programado com o software Arduino.
O ATmega328 no Arduino Duemilanove vem pré-gravado com um bootloader que permite enviar novos programas sem o uso de um programador de hardware externo. Ele se comunica utilizando o protocolo original STK500 (referência, C header files).
Também poder-se-á programar o ATmega328 através do ICSP (In-Circuit Serial Programming) header;
Reset automático (Software)
Algumas versões anteriores do Arduino requerem um reset físico (pressionando o botão de reset na placa) antes de carregar um sketch. O Arduino Duemilanove é projetado de modo a permitir que isto seja feito através do software que esteja correndo no computador a que está ligado. Uma das linhas de controle de hardware (DTR) do FT232RL está ligada ao reset do ATmega328 por via de um capacitor de 100 nF.
Caso o Windows não reconheça o Arduino, essa situação poderá ser normal. É comum o Windows não reconhecer automaticamente o FTDI que vem no Arduino. É necessário efetuar manualmente essa tarefa. Este guião serve também para o modelo UNO, mesmo não tendo o FTDI. NO modelo UNO temos um microcontrolador da Atmel para essas mesmas funções. Como primeiro passo dever-se-á ligar o Cabo USB ao Arduino e ao PC (figura A). Agora, vamos aos passos a serem seguidos no computador:
• Abrir o Painel de Controle.
• Entre em "Hardware e Sons" e depois em "dispositivos e impressoras", dique em "Gerenciador de Dispositivos". Figura B.
• Neste momento, clicar com o botão direito do mouse no FT232R USB UART e ir na opção "atualizar o driver" (figura C). Escolha a opção "Procurar software de driver no computador (localizar e instalar software manualmente)". Observe que, se retirar o cabo USB essa porta será desativada.
• Agora, é necessário encontrar a pasta onde estão os drivers. Quando fez o download da IDE de programação do Arduino, efetuou também o download desses drives. Eles estão lá, numa pasta denominada "drivers':
• Selecione a pasta onde estão os drivers e depois dique em "OK” Figura D.
• Observe que o ícone da porta muda, e uma confirmação deve aparecer informando que tudo transcorreu corretamente.
Quando é feito o reset a esta linha (ativo baixo), o sinal cai por tempo suficiente para efetuar o reset ao chip. O software Arduino usa esta característica para permitir carregar o programa simplesmente pressionando o botão "upload" no ambiente Arduino. Isto significa que o "bootloader" pode ter um "timeout" mais curto, já que a ativação do DTR (sinal baixo) pode ser bem coordenada com o início do "upload"
Esta configuração tem outras implicações. Quando o Duemilanove está ligado a um computador com o Mac OS X ou Linux, ele faz o reset cada vez que a ligação é feita por software (via USB). No próximo meio segundo aproximadamente, o bootloader estará correndo no Duemilanove. Considerando-se que é programado para ignorar dados espúrios (i.e., qualquer coisa a não ser um "upload" de um novo código), ele interceptará os primeiros bytes dos dados que são enviados para a placa depois que a ligação é aberta.
Se um "sketch" rodando na placa recebe uma configuração de uma vez ou outros dados ao inicializar, dever-se-á assegurar que o software esteja em comunicação e espere um segundo depois de aberta a ligação antes de enviar estes dados.
Proteção contra sobrecorrente USB
O Arduino Duemilanove tem um fusível que protege a porta USB do seu computador contra curto-circuito. Apesar da maioria dos computadores possuírem proteção interna própria, o fusível proporciona uma proteção extra. Se mais de 500 mA foram aplicados na porta USB, o fusível irá automaticamente interromper a ligação até que o curto (ou sobrecarga) seja eliminado.
Características físicas
O comprimento e largura máximos do Duemilanove são 2,7" (68,50 mm) e 2,1" (53,34 mm) respectivamente, com o conector USB e o jaque de alimentação indo um pouco além destas dimensões. Três furos de fixação permitem a montagem da placa numa superfície ou caixa. Note que a distância entre os pinos de entrada e saídas digitais n° 7 e n° 8 é de 160 mil (milésimos de polegada), não é sequer múltiplo do espaçamento de 100 mil dos outros pinos.
Colocação de um LED para piscar
Existem dois blocos distintos de instruções entre chavetas (box 2).
A função setup() é chamada quando o código (sketch) é executado. Use-a para:
• Iniciar variáveis;
• O modo como os pinos deverão funcionar: entrada (INPUT) ou saída (OUTPUT);
• Bibliotecas.
• Cabeçalhos
Mas, atenção! Tudo o que estiver no setup() será executado apenas uma vez imediatamente após o microcontrolador ser alimentado.
Caso o botão de reset que se encontra na placa do Arduino for pressionado ou houver uma falha na alimentação, o código será reiniciado e nessa condição especial o setup() será executado novamente.
A função loop() tem um pressuposto fundamental que é repetir infinitamente o que está escrito. Bem..., mas qual a finalidade disso?
Ao repetir a mesma função, o microcontrolador nunca para de funcionar. Imagine como seria se ao digitar uma letra no editor de texto parasse de funcionar, e fosse preciso abri-lo novamente para escrever as outras letras da palavra? Ou, se após um carro passar num semáforo de trânsito, as luzes não brilhassem mais?
Basicamente, o loop() será o seu escravo e o setup() dirá como o escravo se comportará.
Usa-se: (duas barras invertidas) para fazer comentários na linha de código. O objetivo é deixar o mais claro possível para que terceiros possam entender o programa.
Tudo que é deixado como comentário será descartado no momento da gravação no microcontrolador.
O Primeiro Projeto com o Arduino
Para este projeto será preciso um LED, um resistor, fios condutores e uma bradboard (figura 1).
Aprendendo um pouco sobre os componentes em causa no projeto:
O LED é um componente polarizado e deve ser corretamente ligado. O polo positivo possui um terminal maior.
Alguns LEDs apresentam o polo negativo com um chanfro (parte ligeiramente plana) no seu encapsulamento. Temos no Arduino:
• VCC (+)
• GND ou Ground como (-).
O LED é um diodo emissor de luz e ao alimentá-lo corretamente, permitirá o fluxo de corrente apenas num sentido.
O resistor é um componente que oferece uma oposição à passagem da corrente elétrica. Ao combiná-lo com outros componentes, poder-se-á fornecer a corrente necessária para alimentar alguns componentes.
O filamento de tungstênio das lâmpadas incandescentes é uma resistência que transforma grande parte da energia que flui por ele em energia térmica e luminosa.
As faixas de cores determinam quanto será (maior ou menor) o valor dessa resistência.
A matriz de contatos ou bradboard possui apenas pontos interligados num sentido vertical. O que permite combinar e interligar os componentes rapidamente.
Veja na figura 2 duas fileiras independentes ("A' e "B") com seus respectivos pontos interligados.
Os fios condutores: existem modelos de fios que permitem uma fácil ligação elétrica. Dê preferência para estes modelos, pois vão garantir ligações seguras e a rapidez na montagem e manutenção do circuito.
Montagem do Projeto
Tendo todos os componentes referenciados anteriormente, poderemos montar o circuito das figuras 3 e 4.
Os valores das resistências poderão variar entre 220 Ω e 10 kΩ.
Após a montagem, copie o código no box 3 e cole na interface de programação do Arduino (software) e faça o upload, após alguns segundos ele executará automaticamente:
O código no box 2 é chamado Blink. Nele temos declarado no setup() que usaremos o pino 12 do Arduino e este não fará leitura de dados, mas enviará. Por isso é definido como Saída(OUTPUT).
Temos no loop() duas tarefas sendo executadas:
• digitalWrite(12,HIGH); diz-nos que o pino 12 é o polo + que alimenta o LED. Logo há um polo (+) e outro (-) e o Led liga, pois é possível fluir a corrente.
• digitalWrite(12,LOW); diz-nos que o pino 12 é o polo - logo não há fluxo de corrente com dois pólos
(-) e o LED fica desligado.
• delay(1000); Por cada "1000" temos 1s, logo se tivéssemos 5000 teríamos um atraso de 5 s.
Então, se temos o LED ligado por 1s e desligado por 1s, ele liga e desliga muito rápido. Como essa informação está no loop() que executa infinitas vezes, teremos o LED piscando o tempo todo.
Modifique o Código
M1 - Execute o código do box 4.
• Comente o código acima descrito.
• Observe que o valor do delay() foi modificado de (1000) para (100). O que aconteceria se fosse (10) ou qualquer outro valor?
• Experimente modificar e perceba que ligando e desligando algo, temos comportamentos de piscar diferentes. Explique essa situação.
M2 - Execute outro código (box 5)
• Substituímos no delay() o valor de (1000) por: random(100). O que que se pretende com essa alteração?
• Analise se está ocorrendo um "comportamento" inesperado no piscar do LED. Em caso afirmativo, identifique a razão desse "comportamento"
Experimente o seguinte em casa:
• Pegue em alguns centímetros de um papel branco. Papel higiênico seria excelente.
• Amolgue bem e posicione-o sobre o LED.
• Mude a cor do LED para testar os efeitos. Veja a figura 5.