Buscar

ARDUINO I O LIVRO flipbook

Prévia do material em texto

Robótica
Flávio Luiz Puhl Junior
Entradas e saídas digitais
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
 � Identificar os comandos de leitura das entradas digitais.
 � Examinar as configurações do hardware utilizado nas entradas e saídas 
digitais.
 � Analisar as aplicações das entradas e saídas digitais.
Introdução
O uso de entradas e saídas digitais é o recurso que permite a interação 
do sistema microcontrolado com o meio no qual ele está inserido, na 
sua forma mais básica. Esse recurso é responsável, por exemplo, por 
realizar o acionamento de cargas, a verificação do estado dos botões, a 
comunicação com displays, etc. 
Neste capítulo, você vai estudar os códigos de programação utilizados 
para comandar os pinos do microcontrolador para que atuam como 
entradas ou saídas digitais. Vai também conhecer o funcionamento dos 
circuitos eletrônicos compreendidos nas entradas e saídas digitais e 
entender a aplicação em sistemas reais.
Comandando entradas e saídas digitais
Vamos começar este capítulo estudando os comandos de software envolvi-
dos na leitura e escrita nos pinos de entradas e saídas digitais de uma placa 
eletrônica Arduino, que é open-source, ou seja, é disponibilizado livremente 
para qualquer um que deseje ter acesso.
As entradas digitais têm a função de interpretar a condição externa do 
pino quanto à existência ou não de tensão nele. Por outro lado, quando o pino 
assume a função de saída digital, ele externa uma condição previamente 
definida em código para o meio externo. Um clássico exemplo é um LED e 
um botão. Se quisermos ligar o LED, devemos configurar o pino com saída 
digital, e se quisermos obter a informação da condição do botão, devemos 
configurar o pino como entrada digital.
Para fazer a programação do Arduino, precisamos de um ambiente de programação 
(IDE, Integrated Development Environment), que é onde são colocados, de forma lógica, os 
comandos de programação para obtermos os resultados esperados. A IDE desenvolvida 
especialmente para o Arduino costuma ser a mais utilizada, mas existem muitas outras, 
de diferentes origens e características.
As placas de desenvolvimento Arduino fazem uso de microprocessa-
dores ATmega328, que têm o recurso de pinagem configurável. Assim, ao 
contrário dos antigos microprocessadores (por exemplo, o 8051), que tinham 
pinos dedicados para serem saídas e pinos dedicados para serem entradas, no 
ATmega, os pinos podem ser definidos como entrada ou saída via programação. 
Veremos os seguintes comandos para fazer essa programação: digitalRead( ), 
digitalWrite( ) e pinMode( ).
Na primeira etapa de nosso código, ou software, é necessário declarar qual 
a função de cada pino de acordo com a necessidade do projeto. Por padrão, 
inicialmente o Arduino assume que todos os seus pinos são entradas digitais, 
portanto, não é necessário declará-las. Mesmo assim, é uma boa prática que 
haja essa declaração, até mesmo para uma melhor interpretação posterior do 
código.
A função que provê a definição da funcionalidade do pino é a 
pinMode(pin,Mode), cujos parâmetros são pin, onde devemos informar qual 
o pino estamos configurando, e Mode, onde devemos informar a configuração 
do pino. Essa configuração pode assumir as seguintes possibilidades.
Entradas e saídas digitais2
 � INPUT: define o pino como uma entrada digital. O pino assume um 
estado de alta impedância, na ordem de 100Mohm.
 � OUTPUT: define o pino como uma saída digital. O pino assume um 
estado de baixa impedância.
 � INPUT_PULLUP: define o pino como uma entrada digital e ainda 
aciona um circuito de pull-up interno do microprocessador.
A função digitalRead(pin) faz a leitura do estado digital do pino. Ela 
possui como único parâmetro o pin, que é onde devemos indicar qual o pino 
estamos utilizando. Essa função pode retornar somente dois valores: HIGH 
ou LOW, sendo que HIGH significa que o pino tem tensão aplicada e LOW, 
que não tem tensão aplicada.
A função digitalWrite(pin, value) faz a escrita digital no pino e possui 
dois parâmetros: pin, que assim como a função anterior indica qual o pino 
está sendo tratado, e value, que é o valor que será externado pelo pino e que 
pode assumir somente duas condições, HIGH ou LOW. 
Como recurso pronto para uso no Arduino, a placa tem um LED conectado 
ao pino 13 (conhecido como built-in LED). Um exemplo clássico da utilização 
do pino como saída digital é o código-exemplo blink disponível na IDE do 
Arduino, que faz o built-in LED piscar. Veja um exemplo dele na Figura 1.
Figura 1. Exemplo da montagem e código blink para acionar o built-in LED.
Fonte: Arduino (2019c).
Como você pode observar na Figura 1, o código se divide em duas etapas: 
setup, que é executado somente uma vez e define a funcionalidade do pino, 
e loop, que é a função que executa infinitamente e possui as instruções para 
ligar e desligar o pino.
3Entradas e saídas digitais
Vejamos um exemplo de uso da entrada digital. Infelizmente, o Arduino 
não tem um interruptor built-in, portanto precisamos adicionar os componentes 
externamente à placa. O exemplo a seguir demonstra a integração das duas 
funções (leitura e escrita) em um único código com o intuito de fazer o aciona-
mento do built-in LED quando o interruptor estiver acionado. Veja a Figura 2.
Figura 2. Montagem eletrônica e código de leitura e escrita digitais.
Inicialmente, é realizada a configuração dos pinos conforme a necessidade do 
seu projeto. Aqui, vamos definir o pino 2 como entrada digital, o pino 13 como 
saída digital e as instruções incorporadas ao void loop(), onde digitalRead(2) 
retornará o valor HIGH ou LOW dependendo da condição do interruptor.
Por ser um projeto com o objetivo de ser financeiramente acessível e fácil de ser 
reproduzido, a placa de desenvolvimento Arduino não possui componentes eletrô-
nicos, para proteção de seus pinos. Os pinos do microprocessador estão diretamente 
ligados ao barramento que utilizamos para fazer nossas conexões (PROGRAMMING 
ELECTRONICS ACADEMY, 2019). Portanto, alguns cuidados devem ser observados para 
que o hardware não seja danificado.
 � Não conectar os pinos para ground. Isso poderá exceder a corrente máxima per-
mitida do pino (40 mA).
 � Não conectar os pinos uns aos outros. Como o item anterior, isso poderá exceder 
a capacidade de corrente do(s) pino(s).
 � Não exceder a tensão de 5VDC aplicada nos pinos. Como a tensão de funciona-
mento é de 5VDC, aplicar tensão maior do que essa no pino ocasionará inversão 
da corrente, e o dano ocorrerá pelo evento “corrente reversa”.
Entradas e saídas digitais4
Hardware das entradas e saídas digitais
A placa de desenvolvimento Arduino possui um barramento com os pinos de 
entrada e saída digitais. Esse barramento também pode ser conhecido como 
conectores de expansão, que ficam expostos na borda da placa. Existem 14 
pinos que podem ser configurados individualmente como entrada ou saída 
digitais, conforme a necessidade de seu projeto. Eles são numerados de 0 a 13, 
como você pode ver na Figura 3 (WHEAT, 2016).
Figura 3. Arduino Uno com destaque para o barramento de entradas e saídas 
digitais.
Fonte: Adaptada de Souza (2013).
Entradas / saídas digitais
Os pinos 0 e 1 do barramento de entradas e saídas digitais têm a nomenclatura de TX 
e RX, pois são os pinos responsáveis pela comunicação serial com o computador para 
gravação dos códigos na placa de desenvolvimento. Não é recomendado utilizar esses 
pinos no projeto, pois isso pode causar perda da funcionalidade de comunicação e, 
consequentemente, não será possível realizar a gravação do código, a não ser que 
o circuito adicionado seja removido para gravação e depois recolocado. Portanto, 
apesar de dizermos que o Arduino tem 14 pinos digitais dedicados disponíveis, na 
prática, são 12 pinos.
5Entradas e saídas digitais
Os pinos de entrada analógica também podem ser configurados como 
entradas e saídas digitais, possibilitando a adição de mais seispinos para seu 
projeto.
Entradas digitais
A arquitetura de hardware do Arduino segue o padrão TTL, no qual, tipi-
camente, a condição “desligada” (LOW, 0) é considerada quando o nível 
de tensão aplicado está entre 0 e 0,8 V e a condição “ligada” (HIGH, 1) é 
considerada quando a tensão aplicada está entre 2,0 V e 5,0 V. Entre 0,9 V e 
1,9 V não existe uma condição definida, e o sistema assume valores aleatórios 
(OMEGA, [199-?]).
Quando os pinos são configurados para assumir a função de entrada digi-
tal, com uso da instrução pinMode(pin, Mode), ocorre que, internamente ao 
microprocessador, alguns registradores são definidos para essa função. Para 
um correto desempenho da função de entrada digital, o pino deve ser ligado 
a resistores de pull-up ou pull-down, de acordo com seu projeto. Via código é 
possível ativar o resistor de pull-up interno do microprocessador.
Se o pino estiver conectado ao circuito sem os resistores adicionais, durante 
o funcionamento ele pode assumir valores aleatórios de ligado e desligado 
devido à sensibilidade do circuito e aos ruídos elétricos inerentes ao meio 
em estamos. Sendo assim, é recomendado que o pino faça uso dos resistores 
conforme indicado na Figura 4.
Alguns pinos de entrada digital ainda podem ter funcionalidades especiais 
e dedicadas, como, por exemplo, os pinos com funcionalidade PWM e os pinos 
para comunicação SCK, MISO, MOSI, SCL e SDA.
Os pinos 13, 12 e 11 têm a funcionalidade adicional de comunicação SPI 
(Serial Peripheral Interface). A SPI é uma comunicação serial síncrona de alta 
velocidade e é normalmente utilizada para comunicação entre o Arduino e 
periféricos externos, tipicamente displays, EEPROM, cartões SD, etc. (TEXAS 
INSTRUMENTS, 2012).
Os pinos A4 e A5 têm a funcionalidade de comunicação I2C (Inter-Inte-
grated Circuit), que é um sistema desenvolvido pela Phillips Semiconductor 
para comunicação entre periféricos. A grande diferença entre este modo de 
comunicação e o SPI é que ele utiliza apenas dois fios e não permite fluxo 
simultâneo entre os periféricos (BARNETT; COX; O’CULL, 2006).
Entradas e saídas digitais6
Figura 4. Possíveis configurações das entradas digitais.
Ar
du
in
o
AT
m
eg
a 
32
8
Ar
du
in
o
AT
m
eg
a 
32
8
Ar
du
in
o
AT
m
eg
a 
32
8
Ar
du
in
o
AT
m
eg
a 
32
8
Ar
du
in
o
AT
m
eg
a 
32
8
Ar
du
in
o
AT
m
eg
a 
32
8
VSS VSS
VSSVSS
A) Sem resistor, conexão
direta
B) Pull-up resistor
Chave aberta, entrada
digital em HIGH
D) Pull-down resistor
Chave aberta, entrada
digital em LOW
E) Pull-down resistor
Chave fechada, entrada
digital em HIGH
F) Pull-up resistor interno
Chave aberta, entrada
digital em HIGH
C) Pull-up resistor
Chave fechada, entrada
digital em LOW
Saídas digitais
Os mesmos pinos que acabamos de ver como entradas digitais podem ser 
configurados como saídas digitais. Cada pino de saída digital pode fornecer 
até 40 mA, mas a corrente total dos pinos utilizados não pode exceder 200 mA. 
Essa corrente individual é suficiente para energizar um LED, sendo necessário 
adicionar em série um resistor de pelo menos 470ohms, para limitar a corrente 
e proteger a placa. 
Para acionamento de cargas que exigem mais corrente, como uma lâmpada 
residencial, é necessário incluir uma etapa física de amplificação de corrente, 
também conhecida como driver. Essa etapa física pode ser composta por relés 
ou optoacopladores, que manterão a corrente dos pinos do Arduino dentro 
7Entradas e saídas digitais
de limites aceitáveis de operação enquanto a carga opera com seus valores 
nominais. 
Os pinos 3, 5, 6, 9, 10 e 11 podem prover o recurso de PWM (Pulse With 
Modulation), que é uma técnica de modulação do tempo de acionamento do pino 
(duty cycle) com a frequência fixa. No caso do Arduino, essa frequência é fixa 
em 490 Hz, sendo esses pinos considerados de alta frequência de acionamento. 
Os outros pinos não conseguem realizar a troca de estados ligado/desligado de 
forma tão rápida. O PWM é utilizado para controle de velocidade de motores, 
controle de luminosidade, etc. Acompanhe um exemplo de driver na Figura 5.
Figura 5. Exemplo de driver do Arduino para acionamento de uma lâmpada.
Fonte: Adaptada de MaxPhi (2017).
Arduino
Uno
(Rev3)
R2
1 kΩ
R3
1 kΩ
LED1
Vermelho 
(633 nm)
U2
Q1
BC548
Relé
Conectar a 
alimentação 
de corrente 
alternada em série
J1
Terminal 
Interagindo com o meio externo
Os hardwares de desenvolvimento Arduino possibilitam inúmeras aplica-
ções, pois o baixo custo desses hardwares, combinado com a facilidade de 
programação e grandes comunidades fazendo uso e divulgando o conheci-
mento, colaborou para a permeabilidade do uso em diferentes áreas e níveis 
de conhecimento. Veremos agora algumas aplicações práticas do Arduino 
utilizando entradas e saídas digitais.
Entradas e saídas digitais8
Com uma placa de desenvolvimento e alguns LEDs, podemos criar um dado 
eletrônico para substituir o tradicional dado utilizado nos jogos de tabuleiro. 
Para este projeto, utilizaremos as funções de entrada e saída digitais e uma 
função matemática chamada random(max), na qual a função retornará um 
número aleatório limitado ao valor estipulado em max (MONK, 2010). 
Neste exemplo, podemos observar que os pinos conectados aos LEDs são 
inicializados como saídas digitais dentro da função void setup( ) logo no 
início do código. Em seguida, é definido o estado lógico LOW, ou desligado, 
para que as saídas iniciem em baixo nível e os LEDs iniciem desligados. Não 
é necessário declarar a entrada digital, pois, naturalmente, os pinos já estão 
configurados como entradas. Observe que os LEDs estão conectados direta-
mente aos pinos, utilizando somente um resistor para a limitação de corrente; 
a entrada digital possui um resistor de pull-down para evitar acionamentos 
indesejados.
Ao apertar o botão de “rolar o dado”, a função random retorna um valor 
inteiro aleatório entre os limites definidos para a função e então o resultado é 
exibido nos LEDs. O código apresentado na Figura 7 (e seu esquema elétrico 
e circuito, mostrados na Figura 6) tem uma funcionalidade mínima, mas mais 
características podem ser adicionadas para uma apresentação mais parecida 
com a de um dado usual, como, por exemplo, os LEDs piscarem gradualmente 
até chegarem no valor final.
Figura 6. Esquema elétrico e circuito montado do dado eletrônico.
Fonte: Monk (2010).
9Entradas e saídas digitais
Figura 7. Código-fonte para o dado eletrônico.
Fonte: Adaptada de Monk (2010).
Um dos temas mais populares em discussão atualmente é a Internet das 
Coisas (IoT, Internet of Things), que trata da utilização de placas de desenvolvi-
mento como o Arduino para atuação a distância, via Internet, de praticamente 
qualquer coisa. Um exemplo clássico de IoT é o acionamento a distância de 
lâmpadas, motores, sistemas de irrigação ou algum outro periférico, algo que, 
até algum tempo atrás, teria um custo significativo para o usuário residencial 
comum. No próximo exemplo, utilizaremos o pino de saída digital com fun-
cionalidade PWM para controlar a velocidade de um pequeno ventilador, mas 
que poderia ser uma iluminação LED ou alguma outra carga (MONK, 2014).
Como a corrente necessária para o funcionamento do motor é muito maior 
do que a corrente máxima permitida para o pino digital do Arduino (40mA 
máximo), precisamos implementar uma etapa de potência, ou driver, para que 
não haja danos à placa e para que o motor possa funcionar em pleno regime.
O funcionamento desse programa é simples: por meio do terminal na IDE 
do Arduino, o usuário irá digitar um valor numérico de 0 a 9 e o código irá 
mapear esse valor para a saída PWM, que fornecerá de 0 a 100% de tensão 
para a carga. Acompanhe como fazemos isso nas Figuras 8 e 9.
Entradas e saídas digitais10
Figura 8. Esquema elétrico e circuito montado do controle de velocidade.
Fonte: Monk (2014, p. 139).
Figura 9. Código-fonte para o controle de velocidade.
Fonte: Adaptada de Monk (2014, p. 140).
Note que esse exemplo utilizaa função analogWrite( ) para enviar o co-
mando de PWM para o pino digital. Apesar de fazer referência a uma escrita 
analógica, trata-se de uma saída digital PWM.
11Entradas e saídas digitais
ARDUINO. Blink. [S. l.], 2019c. Disponível em: https://www.arduino.cc/en/tutorial/blink. 
Acesso em: 27 mar. 2019.
ARDUINO. DigitalRead( ). [S. l.], 2019a. Disponível em: https://www.arduino.cc/reference/
en/language/functions/digital-io/digitalread/. Acesso em: 27 mar. 2019.
ARDUINO. DigitalWrite( ). [S. l.], 2019b. Disponível em: https://www.arduino.cc/reference/
pt/language/functions/digital-io/digitalwrite/. Acesso em: 27 mar. 2019.
BARNETT, R. H.; COX, S.; O’CULL, L. Embedded C programming and the Atmel AVR. 2. ed. 
New York: Cengage, 2006.
MAXPHI. Relay interfacing with Arduino. [S. l.], 2017. Disponível em: https://www.maxphi.
com/relay-interfacing-arduino-tutorial. Acesso em: 27 mar. 2019.
MONK, S. 30 Arduino projects for the evil genius. New York: McGraw-Hill, 2010.
MONK, S. 30 projetos com Arduino. 2. ed. Porto Alegre: Bookman, 2014. (Série Tekne).
OMEGA. Digital I/O Functionality. [S. l.], [199-?]. Disponível em: https://www.omega.com/
literature/transactions/volume2/digitalio.html. Acesso em: 27 mar. 2019.
PROGRAMMING ELECTRONICS ACADEMY. 5 ways to destroy an Arduino. [S. l.], 2019. 
Disponível em: https://programmingelectronics.com/5-ways-to-destroy-an-arduino/. 
Acesso em: 27 mar. 2019.
SOUZA, F. Usando os pinos digitais do Arduino. Brasil, 2013. Disponível em: https://www.
embarcados.com.br/pinos-digitais-do-arduino/. Acesso em: 27 mar. 2019.
TEXAS INSTRUMENTS. KeyStone Architecture Serial Peripheral Interface (SPI). Dallas, 2012. Dis-
ponível em: http://www.ti.com/lit/ug/sprugp2a/sprugp2a.pdf. Acesso em: 27 mar. 2019.
WHEAT, D. Arduino internals. New York: Apress, 2016.
Leituras recomendadas
ATMEL CORPORATION. ATmega328P Datasheet. San Jose, 2015. Disponível em: http://ww1.
microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-
-ATmega328P_Datasheet.pdf. Acesso em: 27 mar. 2019.
BENETTA, A. et al. Stepper motor drives for robotic applications. In: IEEE International 
Power Engineering and Optimization Conference, 2012, Melaka, Malaysia. Anais ele-
trônicos… Disponível em: https://ieeexplore.ieee.org/abstract/document/6230890. 
Acesso em: 27 mar. 2019.
RUGGED CIRCUITS. 10 ways to destroy an Arduino. Michigan, [201-?]. Disponível em: 
https://www.rugged-circuits.com/10-ways-to-destroy-an-arduino. Acesso em: 27 
mar. 2019.
Entradas e saídas digitais12

Continue navegando