Portas Digitais – Arduino

Quando você adquire uma placa Arduino Uno, a primeira coisa que vem em mente é como ligar e desligar um equipamento ou eletrodoméstico,  ou como ler uma tecla do computador para enviar comandos para a placa.

Este artigo visa apresentar as funções de entrada e saída digital e exibir a correta configuração de um pino digital antes da utilização pela sua aplicação.

 A placa Arduino UNO possui 14 pinos que podem ser configurados como entrada ou saídas digitais conforme a necessidade de seu projeto. Estes pinos são numerados de 0 a 13, conforme destacado na figura a seguir:

Entradas e Saídas Digitais da placa Arduino

Entradas e Saídas Digitais da placa Arduino

Antes de utilizar cada um desses pinos em sua aplicação, você deve configurá-lo como entrada ou saída digital, conforme a necessidade. Por exemplo, para acionar um LED você deve configurar o pino como saída e para ler uma tecla você deve configurar o pino  como entrada.

Por padrão os pinos no Arduino estão configurados como entradas digitais, porém, para ficar mais explicito  na programação, deve-se configurar o pino como entrada. Dessa forma  o pino é colocado em um estado de alta impedância, equivalente a um resistor de 100 Megohms em serie com o circuito a ser monitorado. Dessa forma, o pino absorve uma corrente muito baixa do circuito que está monitorando. Devido a essa característica de alta impedância, quando um pino colocado com entrada digital encontrasse flutuando (sem ligação definida), o nível de tensão presente nesse pino fica variando não podendo ser determinado um valor estável devido a ruido elétrico e até mesmo capacitância de entrada do pino. Para resolver esse problema é necessário colocar um resistor de pull up (ligado a +5V) ou um resistor de pull down (ligado a GND) conforme a necessidade. Esses resistores garantem nível lógico estável quando por exemplo uma tecla não está pressionada. Geralmente utiliza-se um resistor de 10K para esse propósito. A seguir é exibida a ligação desses resistores no circuito para leitura de tecla:

O microcontrolador ATmega328, da placa Arduino UNO, possui resistores de pull-up internos ( 20 Kilohms) que facilitam a ligação de teclas, sensores sem a necessidade de conectar externamente um resistor de pull-up. A habilitação desses resistores é feita de maneira simples via software.

 Quando um pino é configurado com saída, ele se encontra em estado de baixa impedância. Dessa forma, o pino pode fornecer ou drenar corrente para um circuito externo. A corrente máxima que um pino pode fornecer ou drenar é de 40 mA, porém a soma das correntes não pode ultrapassar 200 mA.  Deve-se ficar atento a corrente maiores que este limite e a curto-circuitos que podem danificar o transistor de saída danificando o pino e até mesmo queimar o microcontrolador. Essa é uma característica perigosa para a placa Arduino e seria interessante se tivessem resistores ou algum tipo de proteção em todos os pinos utilizados como saída para limitar a corrente em uma situação anormal.

Funções para Entradas e Saídas digitais

A plataforma Arduino possui funções para trabalhar com entradas e saídas digitais que abstraem toda a configurações dos registradores que configuram e acessam os pino de I/O. Isso torna a programação do Arduino realmente fácil e esse é seu encanto. Essas funções são:

  • void pinMode();

Essa função é utilizada para configurar um pino como entrada ou saída digital. Ela geralmente é utilizada dentro da função setup(). Apresenta as seguintes características:

 Sintaxe:

pinMode(pino, modo);

Parâmetros:

pino: Número correspondente ao pino que se deseja configurar, conforme a placa que está trabalhando. No caso da Arduino UNO  pode ser de 0 a 13;

modo: Modo que deseja configurar o pino. INPUT, INPUT_PULLUP, OUTPUT.

  • INPUT: Entrada digital;

  • INPUT_PULLUP: Entrada digital com resistor de pull-up (ligado ao VCC) interno habilitado;

  • OUTPUT: Saída digital;

Retorno:

 Essa função não tem retorno algum.

  • int digitalRead();

Essa função lê o valor presente em um pino digital. Este valor pode ser HIGH ou LOW. Apresenta as seguintes características:

Sintaxe:

digitalRead(pino);

Parâmetros:

 pino: valor correspondente ao pino que se deseja ler.

 Retorno:

HIGH ou LOW.

  • void digitalWrite();

A função digitalWrite() coloca um nível lógico Alto (HIGH, 5V) ou baixo (LOW, 0V) em um pino configurado como saída digital.

Sintaxe:

digitalWrite(pino, valor)

Parâmetros:

 pino: Número correspondente ao pino;

valor: HIGH OU LOW

 Retorno:

 Essa função não tem retorno algum.

 Exemplo

Para exemplificar a utilização de pinos de I/O digitais, vamos desenvolver uma aplicação de leitura de tecla e acionamento de LED, conforme o a montagem feita no software Fritzing exibida a seguir:

O esquema elétrico obtido a partir do Fritzing é exibido abaixo, note que no circuito há um resistor de pull-up que garante nível lógico alto quando tecla não está pressionada:

O exemplo consiste em ler a tecla S1 e ligar o LED caso a mesma estiver pressionada. Caso não esteja sendo pressionada, o LED deve permanecer desligado. O Sketch a seguir exibe a programação:

 /*  
 Leitura de tecla  
 O exemplo le uma tecla conectada ao pino 2 e aciona um led conectado ao pino 13  
 */  
 const int ledPin = 13; // cria uma constante com o numero do pino ligado ao LED  
 const int inputPin = 2; // cria uma constante com o numero do pino conectado a tecla  
 void setup()  
 {  
  pinMode(ledPin, OUTPUT); // declara o pino do led como saída  
  pinMode(inputPin, INPUT); // declara o pino da tecla como entrada  
 }  
 void loop()  
 {  
  int val = digitalRead(inputPin); // le o valor na entrada  
  if (val == LOW) // se valor está em zero( tecla pressionada)  
  {  
   digitalWrite(ledPin, HIGH); // Liga LED indicando tecla pressionada  
  }  
  else  
  {  
   digitalWrite(ledPin, LOW); // Desliga LED indicando tecla solta  
  }  
 }  

A programação apresentada acima possui uma estrutura bem simples e serve de inicio para a  manipulação de pinos de I/O digitais. Com as três funções apresentadas é possível aplicar em diversos projetos que necessitem de acionamento e leitura de sinais digitais. Agora para fixar os conceitos apresentados é necessário colocar a mão na massa!!!  Fica como exercício o desenvolvimento de um sketch para leitura de tecla com resistor de pull up interno habilitado para o pino onde é conecta a tecla S1.

Fonte:

88x31

Arduino – Entradas e Saídas digitais por Fábio Souza. Esta obra está licenciado com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s