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 >>
NEWSLETTER

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

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Fábio Souza
Engenheiro com experiência no desenvolvimento de projetos eletrônicos embarcados. Hoje é diretor de operações do portal Embarcados, onde trabalha para levar conteúdos de eletrônica, sistemas embarcados e IoT para o Brasil. Também atua no ensino eletrônica e programação pelo Brasil. É entusiastas do movimento maker, da cultura DIY e do compartilhamento de conhecimento, publica diversos artigos sobre eletrônica e projetos open hardware, como o projeto Franzininho Participou da residência hacker 2018 no Redbull Basement. Quando não está ministrando palestras, cursos ou workshops, dedica seu tempo “escovando bits” ou projetando placas eletrônicas.

44
Deixe um comentário

avatar
 
28 Comment threads
16 Thread replies
5 Followers
 
Most reacted comment
Hottest comment thread
22 Comment authors
Celso Tenório de MenezesJONI AGUILARHugo BeretaSandro AlvesEder Angelo Soares Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Celso Tenório de Menezes
Visitante
Celso Tenório de Menezes

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
Visitante
JONI BELAI AGUILAR

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
Visitante
Joni belai Aguilar

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

Sandro Alves
Visitante
Sandro Alves

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
Visitante
Hugo Bereta

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

Eder Angelo Soares
Visitante
Eder Angelo Soares

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

Thiago
Visitante
Thiago

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
Visitante
marcello

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

Matheus
Visitante
Matheus

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

Edson Ferraz
Visitante
Edson Ferraz

Ola boa noite, para usar o pin 13 como entrada preciso tirar o LED que já vem conectado?

Marcos Menezes
Visitante
Marcos Menezes

Olá Fabio tudo bem ? primeiramente parabéns pelo trabalho! " sou completamente leigo " estou com esquema pronto para ligar 2 servos motores em um Arduino Nano V 3.0 Atmega 328p com alimentação de batéria de 9 V, mas a coisa que talvez seja a mais simples eu não sei onde ligar os servos no arduíno ?? poderia me ajudar ?

Fabio_Souza_Embarcados
Visitante
Fabio_Souza_Embarcados

OLá Marcos, você ]pode fazer algo parecido com isso: http://www.instructables.com/id/Sweep-Servo-Motor-With-Arduino-Nano/

edeinstein
Visitante
edeinstein

Olá Fabio a matéria é interessante, tenho um trabalho aqui comigo de faculdade mas não entendo muito de arduíno, vi que você possui uma excelente formação e sou um iniciante na área de engenharia elétrica, por enquanto não entendo muito de arduíno e se você se interessar em me ajudar com o meu trabalho, por favor me escreva pelo email " [email protected]". grato pela atenção!

Fabio_Souza_Embarcados
Visitante
Fabio_Souza_Embarcados

@edeinstein:disqus fico feliz que esteja inciando na área de engenharia elétrica. Qual é a sua dúvida em relação ao Arduino?

Abraços

edeinstein
Visitante
edeinstein

Olá Fábio, obrigado pelo retorno, já tente entender esse trabalho aqui mas para um iniciante como eu, fica realmente díficil de saber, é o seguinte é um trabalho que se trata de "acessar diretamente as portas de I/O e registradores do microcontrolador AVR do arduino" e este é o titulo e ele pedi pra desenvolver um programa (Sketch) para o arduino para adicionar um display de 7 segmentos, onde todas as funções de I/O (pinMode, digitalRead e digitalWrite) e as funções de delay do arduino sejam substtuidas por funções de I/O e manipulação de registradores/contadores do AVR, implementadas através do… Leia mais »

Fabio_Souza_Embarcados
Visitante
Fabio_Souza_Embarcados

Acho que esse artigo pode ter ajudar: https://www.embarcados.com.br/atmel-studio/