9 - Arduino no protoboard

O microcontrolador que está inserido na placa Arduino pode ser retirado de seu soquete e instalado num protoboard ou mesmo num circuito impresso. Para isso, é necessário alimentá-lo com 5V, conectar um cristal de 16MHz e 2 capacitores de 22pF, conforme esquema abaixo que se refere a um microcontrolador de encapsulamento DIP28, como o ATMEGA8, ATMEGA168 ou ATMEGA328.


A correspondência de pinagem entre o microcontrolador e aquela utilizada no ambiente de programação é exibida na figura abaixo:

Se, por exemplo, no ambiente de desenvolvimento fosse elaborado um programa que alternasse o nível de tensão do pino digital 13 entre alto e baixo, conforme exemplificado no item 7 deste tutorial, tal efeito seria notado no pino 19 do microcontrolador.

8 - Pinagem

A placa mãe do Arduino apresenta uma série de marcações que identificam seus pinos conforme detalhado abaixo:
  • GND terra ou 0 Volts
  • 5V tensão de 5 Volts
  • 3v3 tensão de 3,3 Volts
  • Vin tensão da fonte de alimentação externa
  • Digital pinos digitais de 0 a 13, podendo ser entrada ou saída
  • Analog pinos analógicos de 0 a 6
  • AREF pino de referência
  • RESET pino de reinicio
É muito comum montar circuitos em protoboards ou matriz de contatos e depois conectá-los à placa do Arduino. Neste caso é fundamental utilizar um terra comum para o protoboard e a referida placa, o que é feito a partir do pino GND. Os pinos 5V e 3.3V fornecem esta tensão e podem também ser utilizados na protoboard.

O pino Vin disponibiliza a tensão de alimentação fornecida por uma fonte externa, a qual opcionalmente pode estar conectada à placa do Arduino. Esta pino pode ser útil quando há uma maior exigência de corrente para o circuito que está sendo alimentado a partir da placa do Arduino.

Os pinos digitais podem processar apenas sinais com níveis de tensão alto (HIGH) e baixo (LOW) que correspondem respectivamente a 0 e 5V. Estes podem ser de saída (OUTPUT), forneçendo tais níveis de tensão, ou de entrada (INPUT), capturando o nível de tensão aplicado em determinado pino. Vale observar que os pinos analógicos também podem ser configurados como digitais, sendo identificados como pinos digitais de 14 a 19 os pinos analógicos de 0 a 5.

Os pinos analógicos convertem proporcionalmente um sinal de 0 a 5V num valor entre 0 e 1023, ou seja, realizam a função de um conversor A/D de 10 bits. Se, por exemplo, for aplicada uma tensão T num pino analógico, o valor V lido internamente pelo Arduino será dado por:

V=1023T/5

O pino AREF fornece outra referência de tensão para os pinos analógicos ao invés de 5V. Se, por exemplo, for inserida uma tensão de referência de 2V em AREF, a fórmula acima teria que ser reescrita para:

V=1023T/2

7 - Programas de exemplo

O ambiente de desenvolvimento do Arduino disponibiliza uma série de programas de exemplo, os quais são categorizados de forma a trazer uma melhor visibilidade às diferentes formas de utilização da plataforma. Para ter acesso a estes programas basta ir em File-->Examples.

A título de exemplo, carregando-se o programa que se encontra em File-->Examples-->Digital-->Blink é obtido o código abaixo:

int ledPin = 13;


void setup() {
pinMode(ledPin, OUTPUT);
}

void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);

delay(1000);
}


Neste programa, é definida a variável ledPin em:

int ledPin = 13;

Em seguida é iniciada a função setup onde o pino digital 13, ou ledPin, é definido como de saída, ou seja, OUTPUT. Isso quer dizer que o microcontrolador pode alterar o nível de tensão neste pino como sendo baixo ou alto, o que normalmente corresponde a 0 e 5V respectivamente.

void setup() {
pinMode(ledPin, OUTPUT);
}


Após o setup, dá-se início a rotina de loop que se repete continuamente.

void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}

A função digitalWrite(pino,nivel) faz com que o pino especificado se mantenha em nível alto, HIGH, ou baixo, LOW. A função delay(x) faz com que um programa fique paralisado por um periódo de x milisegundos, sendo que 1000 milisegundos corresponde a 1 segundo.

Após o programa ser transferido ao Arduino, é possível testá-lo adicionando-se um led ao pino digital 13, conforme o circuito abaixo. Este led irá se acender e apagar a cada segundo.

6 - Primeiro programa

Todo programa para o Arduino deve seguir a estrutura abaixo:

void setup() {
}

void loop() {
}



A função setup roda uma única vez assim que o programa se inicia e nela são definidas configurações iniciais. A função loop, como o próprio nome sugere, roda indefinidamente e se inicia assim que concluída a função setup. A partir da função loop é estruturada a maior parte do programa que rodará no Arduino.

Para compilar o programa supracitado basta pressionar o botão:


Se não foram detectados problemas de compilação, surgirá a mensagem "Done compiling", conforme a tela abaixo.


Uma vez que o programa foi compilado, é possível transferi-lo ao Arduino pressionando-se a tecla:
Caso não surjam mensagens em vermelho no quadro negro da IDE, o processo foi realizado com êxito.

5 - Definindo a porta serial

Uma vez definida a placa, é necessário configurar a porta serial através da qual o Arduino se comunica com o computador. Isso é feito em Tools-->Serial Port.
Para saber qual é a porta correta, uma vez que pode aparecer mais de uma opção no referido menu, basta desconectar a placa do Arduino e marcar quais portas estão disponíveis. Em seguida a placa deve ser reconectada, o que fará com com que surja uma nova opção, ou seja, justamente aquela que deve ser escolhida.

4 - Definindo a placa

A programação do Arduino é feita a partir de um ambiente de desenvolvimento (IDE) que pode ser obtido livremente aqui. Um vez instalado este IDE, deve-se configurá-lo informando a placa mãe utilizada, o que é feito em Tools-->Board:



É importante observar que se o usuário adquiriu uma placa Arduino Duemilove, que vem com o microcontrolador ATMEGA328, e resolveu, por exemplo, substituir este microcontrolador pelo ATMEGA8, então será necessário apontar uma placa que contemple o ATMEGA8. Neste caso, uma escolha adequada seria Arduino NG or older w/ATmegaA8.

3 - Tipos de placas mãe

A placa mãe do Arduino é formada por:
  • microcontrolador
  • circuito de comunicação microcontrolador <--> computador (USB, porta serial)
  • conectores para permitir o acesso aos pinos do microcontrolador
De acordo com a disposição desses conectores é possível acoplar shields sobre a placa, os quais adicionam funcionalidades como a possibilidade de acesso a uma intranet, comunicação sem fio, tratamento de sinais de voz, entre outros.
Na figura abaixo temos uma placa Arduino com um microcontrolador da família ATMEGA de 28 pinos.
Como pode ser observado, estão identificados 13 pontos de conexão digital, 6 analógicos, 1 de reset e outros que fornecem tensões como 5V, 3.3V e terra. No conector USB de cor metálica é encaixado o cabo USB que permite a comunicação do Arduino com um computador. Ao lado desse conector, vemos um chip SMD que compatibiliza os sinais USB com aqueles utilizados pelo microcontrolador. O conector Jack, à esquerda e abaixo (negro), permite a alimentação da placa por uma fonte externa, valendo ressaltar que o seu uso é opcional, pois o conector USB já fornece a alimentação mínima necessária para o funcionamento da placa.

Na figura abaixo é possível observar um shield acoplado a uma placa Arduino.

Além do formato de placa que permite a adaptação de shields, existem outras mais compactas que podem ser utilizadas diretamente num protoboard, facilitando a prototipação. Abaixo vemos um exemplo da placa iDuino:



Há algumas placas que são conectadas ao computador por meio da porta serial ao invés da USB. Abaixo segue a placa Sanguino que apresenta característica.


Outras placas que contemplam algum hardware adicional também existem, facilitando a vida do usuário na confecção de seus protótipos.