revista do arduino logo

Por favor, preencha todos os campos.



Lançamento 2013: "Experimentos com o Arduino" em pdf e epub

selo capa livro width=

Apos esgotar toda a edição impressa, está sendo lançado no formato digital o primeiro livro do autor brasileiro, João Alexandre da Silveira, sobre o Arduino. Por somente R$ 13,00 você pode adquirir a edição 2.0 em pdf ou epub para ser lida diretamente na tela do seu PC, tablet ou ebook reader. Nessa nova edição 2013 de 220 páginas quase todos os diagramas, fotos e tabelas estão agora em cores e com links ativos para páginas web.
Clique aqui e veja o sumário e os dois primeiros capítulos.

Clique no botão à direita e em ambiente seguro compre com seu cartão de crédito, boleto bancário ou débito on-line/TEF. Apos a confirmação do pagamento pela PagSeguro/UOL você receberá um e-mail com um exemplar do livro no formato pdf. Uma copia gratuita no formato epub poderá ser enviada para o comprador se solicitada.

capa do livro experimentos com o arduino capaZOOM do livro Experimentos com o Arduino

Mapa de pinos do Arduino

Esse Mapa de Pinos do Arduino é a versão interativa da Cartilha para Programação em C do Arduino em pdf que pode ser baixada gratuitamente. Para ver uma descrição de cada pino de entrada e de saída do Arduino e suas funções em C, mova o mouse sobre a placa ao lado e clique em alguns de seus componentes.

mapa de pinos do Arduino

A Estrutura da Linguagem

São 14 pinos digitais dispostos em duas barras de 8 pinos, marcadas com o nome DIGITAL (PWM) e numerados de 0 a 13. A direção do fluxo de informações nesses pinos é configurada com a função pinMode( ). A leitura do estado lógico em qualquer pino é feita com a função digitalRead( ) e a escrita com a função digitalWrite( ).

Os dois últimos pinos à esquerda dessas duas barras, AREF e GND, são a entrada de tensão de referência para o conversor A/D do Arduino e o terra, pino comum a todos os outros pinos.

Desses 14 pinos digitais, 6 são marcados com '~' e podem ser usados para gerar sinais analógicos com a função analogWrite( ) utilizando a técnica de Modulação por Largura de Pulso (PWM). são os pinos 3,5 e 6 e 9 a 11,

Os dois primeiros pinos digitais, pinos 0 e 1, são conectados diretamente a USART interna do microcontrolador do Arduino para comunicação serial com um computador.

Os pinos 2 e 3 podem detetar uma interrupção de hardware e assim chamar uma ISR (Interrupt Service Routine) para ser tratada com a função attachInterrupt( ).

São 6 pinos em uma só barra com o nome ANALOG IN e numerados de A0 a A5. Esses pinos são usados para leitura, com a função analogRead(), de sinais de sensores conectados ao Arduino. Esses sinais, tensões entre 0 e 5 volts CC, vão ao conversor A/D de 10 bits no microcontrolador do Arduino. O pino AREF, numa das barras de pinos digitais, é a entrada de tensão de referência para esse conversor.

Esses pinos de entradas analógicas não precisam ser previamente configurados com a função pinMode().

Obs.: Uma observação importante em relação a esses pinos analógicos é que eles podem ser configurados tambem como pinos digitais pela função pinMode( ), aumentando assim o número desses pinos de 14 para 20. Assim, a expressão pinMode(19,OUTPUT); transforma o pino analógico A5 em pino de saída digital como qualquer outro presente nas duas barras de pinos digitais.

Ficam na barra com 6 pinos, marcada como POWER, localizada ao lado dos pinos analógicos.

O primeiro pino dessa barra, RESET, quando forçado ao potencial de terra serve para resetar o Arduino. Do outro lado, Vin é um pino que tambem pode servir para alimentar o Arduino se nele for aplicada uma tensão regulada ou não entre 9 e 15 volts

Os 4 pinos do meio dessa barra de 6 pinos servem para alimentar um circuito externo conectado ao Arduino: são os pinos com as tensões de 3.3V e 5V e os dois pinos de terra; a corrente máxima fornecida é de 50mA.

É por meio desse conector USB fêmea do tipo A que o Arduino se comunica atraves de um cabo serial a um computador ou a outros dispositivos que tenham tambem uma interface USB. É tambem por esse conector que o Arduino recebe 5 volts diretamente da fonte de alimentação do computador.

Funções em C da porta serial:
begin( )
end( )
available( )
read( )
print( )
println( )

Todas essas funções para comunicação serial podem se testadas com esse código em C no Terminal de Comunicação do Arduino.

Sintaxe: pinMode(pino,modo);

Serve para estabelecer a direção do fluxo de informações em qualquer um dos 14 pinos digitais. Dois parâmetros devem ser passados à essa função: o primeiro, pino, indica qual pino vai ser usado; o segundo, modo, se esse pino vai ser entrada ou se vai ser saída dessas informações.

Exemplo: pinMode(2,OUTPUT);

Aqui o pino 2 é selecionado para transmitir informações do Arduino para um circuito externo qualquer. Para configurar esse mesmo pino como entrada, o parâmetro modo deverá ser INPUT.

Obs: Essa função deverá ser sempre escrita dentro da função setup( ).

Sintaxe: void setup() { ... }

Essa é a primeira função a ser chamada quando o programa inicia. E é executada apenas nessa primeira vez.
Esta é uma função de preparação: ela reune as funções que ditam o comportamento dos pinos do Arduino e de inicialização da porta serial.

Exemplo:

void setup() {
  pinMode (10,OUTPUT);
  Serial.begin(9600);
}

Sintaxe: void loop() { ... }

Essa função é chamada logo depois da função setup() e todas as outras funções ambarcadas nela são repetidamente executadas.

Ela fica lendo os pinos configurados como entrada e controlando os pinos configurados como saida e a porta serial.

Exemplo: aqui um led no pino 2 acende toda vez que uma chave normalmente aberta no pino 3 for pressionada:

void setup() {
  pinMode (2,OUTPUT);
  pinMode (3,INPUT);
}
void loop {
  int chave = digitalRead(3);
  digitalWrite(2,chave);
}

Sintaxe: digitalRead(pino);

Uma vez configurado um certo pino como entrada com a função pinMode( ) a informação presente nesse pino pode ser lida com a função digitalRead( ) e armazenada numa variável qualquer.

Exemplo: int chave = digitalRead(3);

Nesse exemplo a variável inteira ‘chave’ vai guardar o estado lógico (verdadeiro/falso) presente no pino digital 3.

Obs: Essa função deverá ser sempre escrita dentro da função loop( ).

digitalWrite(pino,valor)

Para enviar um nível lógico para qualquer pino digital do Arduino utiliza-se essa função. Dois parâmetros são requeridos: pino, que é o número do pino digital do Arduino e valor, que é o estado lógico (HIGH/LOW ) em que esse pino deve permanecer.

Exemplo: digitalWrite(2,HIGH);

Aqui uma tensão de 5 volts é colocada no pino 2. Para enviar 0 volt (terra) para esse mesmo pino o segundo parâmetro deverá ser LOW.

Obs.: É necessário configurar previamente o pino como saída com a função pinMode( ).

Sintaxe: analogWrite(pino,valor);

Utilizando a técnica PWM o Arduino pode gerar tensões analógicas em 6 de seus 14 pinos digitais com essa função. Dois parâmetros devem ser passados à função: o primeiro, pino, indica em qual pino será gerada a tensão; o segundo, valor, determina a amplitude dessa tensão, que deve ter valores entre 0 (para 0 volt) e 255 (para 5 volts).

Exemplo: analogWrite(10,128);

Com esses parâmetros uma tensão analógica de 2,5 volts vai aparecer no pino 10.

Obs.: Não é necessário configurar um pino PWM como saída com a função pinMode( ) quando se chama a função analogWrite( ).

Sintaxe: analogRead(pino)

Essa função lê o nível analógico presente no pino indicado pelo parâmetro entre parênteses e, após a conversão para o seu equivalente em bits, o guarda em uma variável determinada pelo programador.

Exemplo: int sensor = analogRead(A0);

Aqui a variável inteira sensor vai armazenar a tensão analógica convertida para digital presente no pino A0. Essa informação vai ser um valor inteiro entre 0 (para 0 volt no pino) e 1023 (se 5 volts no pino). Uma tensão de 2,5 volts no pino A0 vai fazer a variável sensor guardar o valor inteiro 512.

Obs.: Os pinos analógicos são reconhecidos pela linguagem do Arduino tanto como A0 a A5 como 14 a 19. Assim, a mesma expressão acima pode ser escrita tambem da seguinte forma:

int sensor = analogRead(14);

A técnica de produzir tensões analógicas a partir de sinais digitais recebe o nome de Modulação por Largura de Pulso, ou PWM (Pulse Width Modulation).

O Arduino trabalha com uma resolução de 8 bits para gerar sinais PWM em seis dos 14 pinos digitais; assim para produzir uma amplitude média de 5 volts o valor da variável que vai gerar essa tensão será 255.

Para produzir tensões analógicas em qualquer desses seis pinos PWM do Arduino utilizamos a função analogWrite( ).

Sintaxe: attachInterrupt(pino,função,modo);

Essa função é uma rotina de serviço de interrupção, ou ISR (Interrupt Service Routine) em inglês.

Ela monitora o pino 2 ou 3 do Arduino. Toda vez que ocorrer uma interrupção por hardware em um desses pinos, uma outra função, criada pelo programador, vai ser chamada. O terceiro parâmetro, modo, informa quando a interrupção vai ser disparada: se na borda de subida do pulso (RISING), se na borda de descida (FALLING), se quando o pulso for baixo (LOW) ou se na mudança de nível desse pulso (CHANGE).

Exemplo: attachInterrupt(0,contador,RISING);

Nesse exemplo a função contador vai ser chamada quando o Arduino detetar uma mudança do nível LOW para o nível HIGH em seu pino 2. Nessa ISR o parâmetro 0 monitora o pino 2, o parâmetro 1 monitora o pino 3.

Sintaxe: Serial.begin(taxa);

Essa função habilita a porta serial e fixa a taxa de transmissão e recepção em bits por segundo entre o computador e o Arduino.

Exemplo: Serial.begin(9600);

Nesse exemplo essa função fixa a taxa de comunicação em 9600 bps. Quando a porta serial é habilitada os pinos digitais 0 e 1 são usados para transmissão e recepção de dados e porisso não podem ser configurados nem como entrada nem como saída com a função pinMode().

Sintaxe: Serial.end( )

Essa função libera os pinos digitais 0 e 1 da porta serial e permite que eles possam ser usados como entrada ou saída de dados como qualquer outro pino de 2 a 13.

Sintaxe: Serial.available( )

A função Serial.available( ) retorna o número de bytes disponíveis para leitura no buffer da porta serial.

Exemplo: int total = Serial.available( );

Aqui a variável inteira total vai guardar o número de caracteres que estão disponíveis para leitura na porta serial.

Obs.: O valor 0 é retornado quando não há nenhuma informação para ser resgatada na porta serial.

Sintaxe: Serial.read( )

A função Serial.read( ) lê o primeiro byte que está no buffer da porta serial.

Exemplo: int valor = Serial.read( );

Aqui a variável inteira valor vai guardar o primeiro byte (caracter) disponível na porta serial.

Obs.: O valor -1 é retornado quando não há nenhuma informação para ser resgatada na porta serial.

Sintaxe: Serial.print(valor,formato)

Essa função envia para a porta serial um caracter ASCII, parâmetro valor, que pode ser capturado por um terminal de comunicação. O segundo parâmetro, formato, é opcional, e especifica com quantas casas decimais ou com que base numérica vai ser o número transmitido.

Exemplos:

Serial.print(1.23456); // transmite 1.23
Serial.print(1.23456,3); // transmite 1.234
Serial.print(“Alô Mundo“); // transmite frase
Serial.print(‘A’); // transmite o caracter A
Serial.print(‘A’,BIN); // transmite 01000001
Serial.print(‘A’,OCT); // octal 101
Serial.print(‘A’,HEX); // transmite o hexa 41
Serial.print(‘A’,DEC); // decimal 65

Sintaxe: Serial.println(valor,formato)

Como a anterior, essa função envia para a porta serial um caracter ASCII com os mesmos parâmetros opcionais do parâmetro formato, porem acrescenta ao final da transmissão o caracter CR (Carriage Return) ou retorno ao início da linha, e o caracter New Line (mudança para a próxima linha).