Usando os pinos digitais do Arduino

Aprenda usar os pinos digitais do Arduino como entradas e saídas e faça aplicações de controle e leitura digital. Veja como é fácil a sua programação.
pinos digitais do 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, ou seja, usar os pinos digitais do Arduino para controlar o mundo a sua volta.

Este artigo visa apresentar as funções de manipulação dos pinos digitais do Arduino para usá-los como entrada ou saída digital, exibindo os passos para correta configuração e por fim o seu uso em algumas aplicações. 

Pinos digitais do Arduino UNO

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:

pinos digitais do Arduino
Pinos digitais da Arduino UNO – Entradas e Saídas Digitais da placa

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 digitais do 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 MegaOhms 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:

pinos digitais do Arduino

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 usos dos Pinos digitais do Arduino 

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:

pinos digitais do Arduino

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:

pinos digitais do Arduino

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:

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.

Saiba mais

Primeiros Passos com Arduino

Arduino UNO

Arduino – O documentário

Placas Arduino – trajetória até o UNO

Referências

Referência para programação Arduino

Pinos digitais Arduino

Outros artigos da série

<< Introdução ao Arduino – Primeiros passos na plataformaEntendendo as Entradas Analógicas do Arduino >>
Notificações
Notificar
guest
48 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
PMatos
PMatos
16/09/2021 20:43

Olá,
Estou a utilizar um Arduino Uno rev3 e preciso de accionar um relé que para isso precisa de 34mA.
Como cada I/O tem capacidade para fornecer 20mA, estou a pensar utilizar duas linhas de I/O, que podem fazer o drive de 40mA.
Como desconheço a arquitectura interna das portas de I/O, questiono se preciso de algum díodo de proteção para evitar problemas com o curto circuito das linhas.
Obrigado pela ajuda que me possam dar

Last edited 3 dias atrás by PMatos
Claudemir
Claudemir
15/05/2021 16:32

Só pra ficar bem claro, de acordo com o início do texto o pino 13 precisa ser ALTO quando se tratar de entrada digital e BAIXO quando for saída?

trackback
07/10/2019 23:53

[…] Usando os pinos digitais do Arduino […]

Celso Tenório de Menezes
Celso Tenório de Menezes
26/12/2018 08:11

Bom dia, sou novo na área, como faço pra mandar sinal de gnd nos pinos da saída, da placa uno, invés de sinal positivo nos pinos 0 a 7

JONI AGUILAR
JONI BELAI AGUILAR
29/06/2018 16:16

Olá, estou com um modulo de GSM e um arduino, para fazer um botão de pânico pro carro da minha esposa. O problema é que após a partida do veículo e alimentação do circuito, tenho que pressionar um botão para enviar o GND pro BOOT do módulo GSM, só assim ele fica ativo, e posso pressionar o então botão de pânico.
Teria como o arduino enviar esse GND pro boot, depois de uns 2 segundos da alimentação do circuito?
estou usando um arduino uno, mas pretendo trocar pelo nano e o modulo gsm é o Neoway m590e.

Obrigado!

JONI AGUILAR
Joni belai Aguilar
Reply to  Fábio Souza
29/06/2018 19:11

Olá Fábio.
Qual comando e porta eu uso? Já pesquisei e não encontrei nada.

Sandro Alves
Sandro Alves
12/05/2018 17:02

Como faço para dizer ao arduino ler a entrada 2 e sair na 4, ler a 9 e sair na 10 especificamente?

Hugo Bereta
Hugo Bereta
Reply to  Sandro Alves
20/05/2018 10:25

Coloque os pins 2 e 9 como INPUT e 4 e 10 como OUTPUT.

Eder Angelo Soares
Eder Angelo Soares
15/02/2018 08:08

Srs, sou curioso e sempre guarndo placas pcb que acho para reaproveitamento de peças, e já achei microcontroladores atmega 168 ou 328 , gostaria de saber como faço para transformar eles em uma placa arduino, tambem já achei placas de timers e outras placas comuns e gostaria de saber como faço para pegar essas placas e sacar os microcontroladores e transformar em arduino, ou até mesmo pegar a placa e reprogramar

Gerson Sena
Gerson Sena
Reply to  Eder Angelo Soares
25/04/2020 11:25

Excelente pergunta. A resposta é procure no Google pelos termos Arduino Standalone. Vai encontrar diversos circuitos. Depois é só pesquisar por carregar bootloader no arduino (nesse caso talvez precise de outro Arduino ou um dispositivo de interface que permita fazer essa gravação). As peças mais difíceis de achar são o microcontrolador e o cristal (o restos são pecinhas comuns de encontrar).
Espero ter ajudado

Thiago
Thiago
27/01/2018 12:53

Como seria se eu quisesse ler um sensor de nível que fecha o circuito quando atinge determinado nível?

Conectei um resistor na saída e liguei uma ponta no sensor e a outra ponta no +vcc.

Quando aciono o sensor (fecha o circuito), tenho a leitura de tensão alta, porém quando abro o circuito, o digitaRead continua retornando tensão alta.

Queria que ele retornasse tensão baixa quando o circuito estivesse aberto.

marcello
marcello
19/01/2018 10:30

Olá bom dia
Quantos sensores dht 22 posso conectar ao mesmo tempo no arduino Uno ?

Matheus
Matheus
28/11/2017 16:56

Olá…
Tem como fazer leituras com as entradas PWM parecidas com as feitas nas Analogicas?

WEBINAR

Visão Computacional para a redução de erros em processos manuais

DATA: 23/09 ÀS 17:00 H