46 Comentários

Usando os pinos digitais do Arduino

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 >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Arduino » Usando os pinos digitais do Arduino
Comentários:
Notificações
Notificar
guest
46 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
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?

Diego
Diego
26/12/2015 21:47

Fabio, estou com dificuldade de entender uma aplicação de entrada digital. Estou conectando um medidor de corente à uma ntrada digital. Porém apesar de a saída do medidor variar de acordo com a variação real de corrente do circuito a minha entrada digital só fica em HIGH.
Havia entendido que ao entrar com um valor de tensão (saida do meu medidor) nessa porta digital, ela faria a comparação com o VCC, definindo assim valor alto ou baixo.
Estou equivocado? Consegue me ajudar?

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Diego
03/01/2016 20:44

OLá Diego, um entrada digital só vai ler valores com nivel alto(HIGH) ou baixo(LOW) dependendo do dispositivo na entrada( botão, sensor, etc). No caso do sensor de corrente, ele provavelmente enviará um valor analógico( depende do sensor), dessa forma você deve ler na entrada analógica. Qual sensor está utilizando? abraços

Rafael Silva
Rafael Silva
31/10/2015 18:34

Posso usar 12v 5a para alimentar um uno e um mega?

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Rafael Silva
01/11/2015 15:12

Olá Rafael, pode sim. O Arduino consumirá da fonte a corrente necessária para funcionamento e acionamento de algumas cargas que estejam diretamente ligados a ele.

Abraços

Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 

Soluções inteligentes para acionamento de MOSFETs/IGBTs com família STDRIVE

Data: 08/10 às 15:00h - Apoio: STMicroelectronics
 
INSCREVA-SE AGORA »



 
close-link