Prévia do material em texto
,
E-BOOK
SISTEMAS MICROCONTROLADOS
SISTEMAS DIGITAIS
Sidney Cerqueira
Bispo dos Santos
Introdução aos
microcontroladores
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
Identificar a diferença entre microprocessador e microcontrolador.
Relacionar os elementos da arquitetura interna de um microcontrolador.
Definir a aplicação básica dos microcontroladores.
Introdução
O emprego de componentes sólidos na eletrônica passou por uma revolu-
ção tecnológica sem precedentes na história dos dispositivos eletrônicos.
Os circuitos integrados evoluíram e hoje há computadores completos
em um único chip. É o caso dos microcontroladores.
Imagine um computador muito pequeno, com custo muito baixo e
encapsulado em um chip: esse é o microcontrolador. Ele traz embutido
o próprio gerador de clock, memórias ROM, flash e RAM, interfaces de
entrada e saída, processador, conversores de sinais e outros componen-
tes próprios de cada modelo. Os microcontroladores são utilizados em
sistemas específicos ou em aplicações embarcadas, como brinquedos,
controles remotos, eletrodomésticos e máquinas industriais.
Neste capítulo, você vai ver a diferença entre microprocessador e mi-
crocontrolador. Também vai conhecer os elementos da arquitetura interna
de um microcontrolador e as aplicações básicas dos microcontroladores.
Microprocessadores e microcontroladores
Na década de 1960, engenheiros de uma empresa japonesa encomendaram à
INTEL circuitos integrados para calculadoras. Nesse contexto, um engenheiro
da INTEL teve a ideia de projetar um circuito integrado cujo comportamento
fosse determinado por um programa armazenado no chip. Desse modo, nasceu
o primeiro microprocessador. A partir daí, a INTEL percebeu a potencialidade
da sua criação e comprou de volta a licença e a patente do seu produto, lançando
no mercado o 4004, com palavras de 4 bits e velocidade de 6 mil instruções
por segundo. No ano seguinte, foi lançado o 8008, com palavras de 8 bits.
Esse microprocessador podia acessar 16 kB de memória, com velocidade de
300 mil instruções por segundo, e possuía 45 instruções.
Depois disso, outras empresas perceberam o potencial dos microproces-
sadores e começaram a desenvolver os seus próprios, produzindo grande
diversidade de arquiteturas e características. Cada empresa fabricante possui
seu projeto de arquitetura, com vantagens e desvantagens. Essa arquitetura diz
respeito à forma com que as unidades básicas são organizadas, ao conjunto de
instruções e ao modo como elas são executadas. Entretanto, existem unidades
constituintes dos microprocessadores encontradas em todos eles: a Unidade
Lógica Aritmética (ULA), o arranjo de registradores, a unidade de controle e
o decodificador de instrução, como você pode ver na Figura 1.
Figura 1. Visão interna de um microprocessador.
Unidade lógica
aritmética
Decodi�cador
de instrução
Arranjo de
registradores
Unidade
de controle
Microprocessador
Introdução aos microcontroladores2
A unidade lógica aritmética é que realiza, a partir dos dados obtidos do
arranjo de registradores, as operações aritméticas básicas (adições, multipli-
cações, desvios, etc.) e as operações lógicas (e, ou, não, ou-exclusivo, etc.). A
ULA é gerenciada pela unidade de controle.
O decodificador de instrução, na verdade, pode ser considerado uma parte
da ULA, mas é interessante ser definido separadamente porque executa uma
função muito importante. O microprocessador funciona executando instruções
que ficam armazenadas em uma memória. Essas instruções são armazena-
das em binário. O decodificador decodifica cada instrução armazenada, em
sequência, para uma forma que a ULA entenda.
Para que a ULA possa executar um programa, é necessário efetuar o
armazenamento temporário de dados e endereços a fim de que eles sejam
processados. Isso é feito em um conjunto de registradores chamado de arranjo
de registradores.
Após o decodificador de instrução efetuar seu trabalho, a unidade de
controle entra em ação, expedindo sinais de controle e temporização para que
os dados sejam transferidos para fora ou para dentro do microprocessador.
Além disso, ela garante o sincronismo na execução das instruções.
O microprocessador é o principal dispositivo de qualquer sistema compu-
tacional. Mas, para que ele seja operacional, ou seja, entregue alguma resposta
útil, necessita de uma série de periféricos ou elementos funcionais, tais como:
memórias RAM, memórias de programas, conversores analógico/digital (A/D),
osciladores e interfaces, entre outros.
Os microprocessadores são circuitos integrados muito flexíveis, mas essa
flexibilidade possui suas desvantagens, que são o custo e as dimensões, além
da exigência dos periféricos e interfaces. Uma forma de superar essas des-
vantagens é encapsular tudo o que é necessário para entregar determinado
resultado em um só chip, com a possibilidade de modificar o resultado por
meio da programação, ou seja, por meio de software.
Observe a Figura 2 para compreender melhor essa ideia. Os periféricos,
memórias e interfaces são encapsulados em um único chip, ou seja, o mi-
crocontrolador é fabricado para exigir o mínimo possível de componentes
externos. Isso proporciona economia de tempo de projeto, espaço e custo.
3Introdução aos microcontroladores
Figura 2. Microcontrolador.
Fonte: Adaptada de Sena (2017).
Elementos da arquitetura interna
de um microcontrolador
Um microcontrolador é composto de circuitos lógicos, registradores de função
especial (Special Function Register — SFR), portas de entrada/saída (I/O),
unidades de memória, unidade central de processamento (Central Processing
Unit — CPU), barramentos, oscilador, temporizadores e contadores. A seguir,
você vai conhecer cada um deles.
Circuitos lógicos
O funcionamento dos microcontroladores é baseado em circuitos lógicos ou
portas lógicas. As portas lógicas são conjuntos de transistores, diodos, resistores
e capacitores, interligados, que realizam operações matemáticas binárias e
lógicas com os números 0 e 1. As portas lógicas básicas são as portas E ou
AND, OU ou OR, NÃO ou NOT e OU-exclusivas ou XOR. A partir delas, você
pode defi nir outras portas e efetuar arranjos para obter resultados específi cos.
Introdução aos microcontroladores4
O conceito dessas portas pode ser estendido para a programação. Por exemplo, quando
a operação OR faz parte de um programa, a operação lógica é efetuada pelas instruções.
As portas lógicas AND possuem duas ou mais entradas e uma saída. A
saída terá um nível lógico 1 sempre que todas as entradas tiverem um nível
lógico 1. Qualquer outra combinação produz uma saída no nível lógico 0.
As portas lógicas OR possuem duas ou mais entradas e uma saída. Sempre
que qualquer uma das entradas possuir o nível lógico 1, a saída será no nível
lógico 1. Caso contrário, será no nível lógico 0.
As portas lógicas NOT possuem somente uma entrada e uma saída. Essas
portas apresentam, na saída, um nível lógico que é o inverso da entrada. Se a
entrada possuir nível lógico 1, a saída será nível lógico 0 e vice-versa.
As portas XOR podem ser consideradas uma combinação das anteriores.
Elas apresentam nível lógico 1 na saída apenas quando as suas entradas apre-
sentam níveis lógicos diferentes.
A saída da porta XOR, dependendo do número de entradas, pode gerar certa confusão.
Se a porta possuir só duas entradas, então a saída será o nível lógico 1 apenas quando
suas entradas apresentarem níveis lógicos diferentes. Se ela possuir mais do que
duas entradas, a saída só será nível lógico 1 quando o número de níveis lógicos 1 nas
entradas for ímpar. Por exemplo, para uma porta XOR de três entradas, se a entrada
for 100 (número ímpar de nível 1), a saída será 1. Se a entrada for 110 (número par de
nível 1), a saída será 0.
Registradores
O registrador é um dispositivo eletrônico que armazena os níveisLeitura recomendada
SEBESTA, R. W. Conceitos de linguagens de programação. Porto Alegre: Bookman, 2018.
13Estrutura do Arduino
ROBÓTICA
Fernando Esquírio Torres
Principais protocolos
de comunicação
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
� Diferenciar os protocolos de comunicação utilizados no Arduino.
� Reconhecer os componentes que são utilizados pelos protocolos de
comunicação do Arduino.
� Relacionar os componentes com o protocolo de comunicação
utilizado.
Introdução
Protocolos de comunicação são regras ou normas que controlam a
conexão entre dois ou mais sistemas computacionais. Eles definem as
configurações de parâmetros, sintaxe, semântica e padrões que os dis-
positivos conectados devem obedecer para garantir que eles estejam
interpretando os dados da mesma forma. Os protocolos foram criados para
permitir a comunicação padronizada entre os equipamentos interligados,
pois, sem eles, a transmissão de dados seria caótica.
Os sistemas microcontrolados, como o Arduino, têm vários protocolos
de comunicação disponíveis. Neste capítulo, vamos abordar os protocolos
com mais destaque, que são o UART, o I2C e o SPI. Assim, você aprenderá
a diferenciar esses protocolos de comunicação e a reconhecer os com-
ponentes que são utilizados por eles. Por fim, você verá como relacionar
os componentes com o protocolo de comunicação utilizado.
Protocolos de comunicação utilizados
no Arduino
O Arduino utiliza protocolos de comunicação para estabelecer uma conexão
segura e confiável com diversos periféricos externos (sensores e atuadores)
ou com outros microcontroladores e, desse modo, possibilita a troca dados
entre esses dispositivos (MCROBERTS, 2011). Segundo Monk (2015), os
protocolos mais comuns no Arduino são o UART, o I2C e o SPI, e o motivo
dessa popularidade é que esses protocolos realizam a conexão com taxas de
transmissão de dados altas entre os dispositivos utilizando poucos fios/pinos
do microcontrolador. Vejamos mais sobre cada um desses protocolos.
Protocolo de comunicação UART
Segundo Monk (2017), a comunicação UART (Universal Asynchronous
Receiver Transmitter) é um tipo de comunicação serial assíncrona que trans-
mite os dados sequencialmente através de um barramento de comunicação.
Ela é a mais antiga entre as comunicações seriais e utiliza níveis de tensão
TTL, que possui valores 0V e 5V para representar os níveis lógicos 0 e 1,
respectivamente.
A UART pode ser configurada nos três modos de transmissão: simplex,
half-duplex ou full-duplex, conforme você pode ver na Figura 1. No primeiro
modo, simplex, somente o dispositivo 1 pode transmitir os dados para o
dispositivo 2. No segundo modo, half-duplex, os dispositivos 1 e 2 podem
transmitir os dados, porém um de cada vez. No terceiro modo, full-duplex,
existe um canal para cada dispositivo realizar a transmissão e, assim, os
dispositivos podem enviar dados simultaneamente (EVANS; NOBLE; HO-
CHENBAUM, 2013). Nesse modo, as ligações dos canais transmissor e
receptor devem ser cruzadas entre os dispositivos (observe a parte inferior
da Figura 1).
Principais protocolos de comunicação2
Figura 1. Modos de transmissão UART.
Simplex Half-duplex
Full-duplex
Dispositivo 1
Dispositivo 1
Dispositivo 2 Dispositivo 1 Dispositivo 2
Dispositivo 2
TX
TX
TX
RX
RX
RX
TX/RX RX/TX
Protocolo de comunicação I2C
De acordo com Banzi e Shiloh (2015), a comunicação I2C (Inter-Integrated
Circuit) é uma comunicação serial síncrona que trabalha no modelo de hie-
rarquia mestre-escravo, podendo ter mais de um mestre (master), mas não
simultaneamente, e vários escravos (slaves). O mestre, que costuma ser um
microcontrolador ou dispositivos programáveis como FPGA, CLP etc., é
responsável por coordenar a comunicação e requisitar informações dos outros
dispositivos escravos. Cada dispositivo escravo tem um endereço único na
comunicação.
A I2C é um tipo de comunicação half-duplex e necessita de dois fios
para estabelecer a conexão entre os dispositivos, o SDA e o SCL. A co-
nexão SDA (Serial Data Line) é um canal bidirecional por onde os dados
são transmitidos (do mestre para o escravo e do escravo para o mestre). A
conexão SCL (Serial Clock Line) é o canal do clock, que é controlado pelo
dispositivo mestre, utilizado na sincronização da comunicação (MONK,
2015).
3Principais protocolos de comunicação
Figura 2. Comunicação I2C.
MASTER
SDA
SCL
SLAVE 1 SLAVE 2
Segundo Monk (2015), a transmissão de dados na comunicação I2C é
iniciada com o sinal de Start enviado no barramento pelo dispositivo mestre.
A condição de Start funciona como um sinal para avisar a todos os dispositivos
ligados que algo será transmitido no barramento. Assim, todos os circuitos
conectados irão “prestar atenção” e “escutar” o barramento. O sinal de Start
consiste em fazer a transição do canal SDA (dados) do nível lógico 1 para 0
e, em seguida, fazer a transição do canal SCL (clock) do nível lógico 1 para
0 também.
Em seguida, o mestre envia o endereço do dispositivo com o qual ele quer
estabelecer a comunicação. Os dispositivos comparam esse endereço com o
seu e, se for compatível, o escravo envia uma resposta chamada de sinal de
Acknowledge (ACK). Uma vez o mestre recebeu o sinal de ACK, ele pode
começar a transmissão ou recepção dos dados. Por fim, o mestre envia o sinal
de Stop no barramento para finalizar a comunicação. O sinal de Stop consiste
em fazer a transição do canal SCL (clock) do nível lógico 0 para 1 e, em seguida,
fazer a transição do canal SDA (dados) do nível lógico 0 para 1 também.
Principais protocolos de comunicação4
Protocolo de comunicação SPI
Segundo Monk (2015), a comunicação serial SPI (Serial Peripheral Interface)
é umas das comunicações seriais mais rápidas, porém atinge apenas pequenas
distâncias. Esse tipo de comunicação também trabalha com a hierarquia
mestre-escravo, como a I2C, mas no modo de transmissão full-duplex.
Tipicamente a SPI, que você pode visualizar na Figura 3, utiliza pelo menos
três conexões comuns entre os dispositivos:
� MISO (Master In Slave Out) — Linha do dispositivo Escravo para
enviar dados para o dispositivo Mestre.
� MOSI (Master Out Slave In) — Linha do dispositivo Mestre para enviar
dados para o dispositivo Escravo.
� SCK ou SCLK (Serial Clock) — Pulsos de clock de sincronismo da
transmissão gerada pelo dispositivo Mestre.
A conexão SS (Select Slave) é necessária quando existir mais de um dis-
positivo Escravo no barramento.
Figura 3. Comunicação SPI.
MASTER
SLAVE 1
SLAVE 2
SCLK
MOSI
MISO
SS1
SS2
SCLK
MOSI
MISO
SS
SCLK
MOSI
MISO
SS
5Principais protocolos de comunicação
De acordo com Geddes (2017), a transmissão de dados na comunicação SPI
é iniciada com a configuração do clock pelo dispositivo Mestre, utilizando a
frequência suportada pelo dispositivo Escravo. Em seguida, o Mestre utiliza o
pino SS para selecionar o dispositivo Escravo com o qual ele quer estabelecer
a comunicação. E, então, o dispositivo Mestre começa a enviar dados para
o dispositivo Escravo pelo barramento MOSI e a receber dados do Escravo
pelo barramento MISO. Para finalizar a transmissão, o dispositivo Mestre
dá um toggle no sinal de clock e desativa o canal SS.
Componentes utilizados pelos protocolos
de comunicação do Arduino
A maioria das placas Arduino possui pelos menos um periférico de cada uma
das comunicações seriais: UART, I2C e SPI. Vamos agora focar na placa Ar-
duino Uno, que é a base das principais placas Arduino disponíveis, de modo
que todas as informações apresentadas servirão para essas placas, como, por
exemplo, o Arduino Mega.
Comunicação serial UART no Arduino
Segundo Monk (2013), a comunicação serial UART permite a comunicação
com o computador e com módulos eletrônicos como, por exemplo, o Bluetooth
HC-05. Por padrão, ela está ligada aos pinos digitais 0 (receptor, RX) e 1
(transmissor, TX). No Arduino Uno, esses são os mesmospinos ligados ao
microcontrolador ATmega16U2, responsável por gerenciar a comunicação
USB entre o computador e o Arduino, que permite a gravação do firmware
na placa Arduino. Acompanhe a Figura 4.
Principais protocolos de comunicação6
Figura 4. Comunicação serial UART no Arduino Uno.
Fonte: Adaptada de Monk (2015).
Arduino Uno
Rx/D0 Tx/D1
Tx
RxATmega328 UART Interface
USB
Computador
Na comunicação UART, o transmissor e o receptor devem ter as mesmas
configurações dos parâmetros da comunicação (taxa de transmissão, bits de
dados, bit de paridade e bits de parada). Desse modo, ambos interpretarão os
dados da mesma forma.
Comunicação serial I2C no Arduino
A comunicação I2C no Arduino Uno é também conhecida como Two Wire
Interface (TWI, interface de dois fios) e está disponível nos pinos analógicos
A4 (SDA) e A5 (SCL). Existem diversos dispositivos que utilizam a comu-
nicação I2C para se comunicar com o Arduino, conforme mostra a Figura 5.
Entre eles podemos citar os módulos display da Adafruit, o módulo receptor
FM TEA5767, o módulo Real Time Clock (RTC, relógio de tempo real) e o
acionador servo PWM.
7Principais protocolos de comunicação
Figura 5. Dispositivos I2C.
Fonte: Adaptada de Monk (2015).
Display de LEDs de 7
segmentos da Adafruit
Matriz de LEDs
da Adafruit
Pequena matriz de
LEDs da Adafruit
Módulo TEA5767
receptor de FM
Relógio de
tempo real (RTC)
Acionador servo/PWN
de 16 canais
De acordo com Monk (2015), o módulo TEA5767 é o dispositivo eletrônico
utilizado para sintonizar uma frequência de rádio configurada na comunicação
I2C. O módulo Real Time Clock contém um cristal oscilador utilizado para
guardar data e hora exatas. O acionador servo PWM possui 16 canais de
PWM (Pulse Width Modulation, Modulação por Largura de Pulso); segundo
Culkin e Hagan (2018), a técnica de PWM permite reduzir a tensão média de
um sinal elétrico.
Segundo Monk (2015), o Arduino tem uma biblioteca específica para
trabalhar com a comunicação I2C, chamada de Wire, que deve ser incluída
por meio do comando #include no início do código. Essa biblio-
teca permite ao Arduino se comunicar com dispositivos via interface I2C.
Essa biblioteca tem uma classe com o mesmo nome, Wire, e disponibiliza
métodos/funções e atributos para facilitar a configuração e a transmissão de
dados entre os dispositivos conectados. A seguir, estão listadas as principais
funções disponíveis.
Principais protocolos de comunicação8
� Wire.begin (): inicializa a biblioteca e barramento I2C como mestre
ou escravo.
� Wire.beginTransmission(endereço): inicializa a transmissão e espe-
cifica o endereço do dispositivo para o qual o mestre deseja enviar os
dados. Sinal de Start.
� Wire.write(): escreve um byte de dados no barramento.
� Wire.send(): escreve uma sequência de caracteres no barramento.
� Wire.endTransmission(): finaliza a transmissão. Sinal de Stop.
� Wire.requestFrom(): requisição realiza pelo mestre ao escravo de
uma quantidade de bytes.
� Wire.available(): usada pelo dispositivo escravo para determina se os
dados chegaram e qual o número de bits solicitados.
� Wire.read(): lê os dados enviados para o dispositivo escravo.
O módulo I2C LCD é outro componente muito utilizado para trocar dados
com o Arduino. O módulo I2C necessita de apenas dois pinos para realizar a
conexão com o Arduino, enquanto, sem ele, seriam necessários de 4 a 8 pinos.
Isso é importante porque, muitas vezes, a quantidade de pinos disponíveis no
Arduino é limitada e reduzir o uso de pinos com o display LCD possibilita
conectar mais dispositivos — por exemplo, sensores diversos (STEVAN JU-
NIOR; SILVA, 2015). Outra vantagem é ter uma biblioteca específica para
trabalhar com esse módulo (LiquidCrystal_I2C.h).
Comunicação serial SPI no Arduino
Segundo Monk (2015), a comunicação SPI permite conectar um ou mais
dispositivos com velocidades rápidas a curtas distâncias. No Arduino Uno, a
interface serial está disponível nos pinos 11, pino MOSI; 12, pino MISO; 13,
pino SCK; e 10, pino SS.
Diversos sensores e atuadores se comunicam com o Arduino por meio da
interface SPI, como o sensor de temperatura digital TC72 da Texas Instruments,
a DAC MCP4921/4922 da Microchip, o Display OLED SPI, entre outros. O
TC72 é um sensor digital capaz de ler temperaturas de −55ºC a +125ºC e pode
ser usado para ler a temperatura continuamente ou ler uma única amostragem.
A DAC MCP4921/4922 é um conversor digital analógico com grande precisão,
utilizado em aplicações em que a calibração e a precisão de sinais (como
temperatura, pressão, humidade, etc.) são necessárias. O display OLED, que
tem uma opção que comunica via I2C, é um display gráfico que permite exibir
mensagens diversas (MCROBERTS, 2011).
9Principais protocolos de comunicação
Segundo Monk (2013), o Arduino possui uma biblioteca específica para
trabalhar com a comunicação SPI, que pode ser incluída por meio do comando
#include no início do seu código. Essa biblioteca permite ao Arduino
se comunicar com dispositivos via interface SPI. Essa biblioteca possui uma
classe com o mesmo nome, SPI, e disponibiliza métodos/funções e atributos
para facilitar a configuração e a transmissão de dados entre os dispositivos
conectados. A seguir estão elencadas as principais funções disponíveis.
� SPI.begin(): inicializa a comunicação SPI configurando os barramentos
MOSI, SCK e SS no dispositivo mestre.
� SPI.beginTransmission(): inicializa a transmissão SPI.
� SPI.transfer(): transfere os dados através do barramento SPI.
� SPI.endTransmission(): finaliza a comunicação SPI.
Relação dos componentes com o protocolo de
comunicação utilizado
Como vimos, existem diversos componentes que utilizam os protocolos de
comunicação serial UART, I2C e SPI para se comunicarem com o Arduino.
O Quadro 1 mostra alguns desses componentes e exemplos de aplicações em
que eles podem ser utilizados.
Componente Comunicação Aplicações
Computador UART � Sistema supervisório para monitora-
mento de uma planta industrial.
� Chat virtual.
Bluetooth
HC-05
UART � Robô móvel controlado pelo celular.
� Domótica (automação industrial).
� Internet das Coisas.
Quadro 1. Componentes eletrônicos, protocolos de comunicação e aplicações
(Continua)
Principais protocolos de comunicação10
Quadro 1. Componentes eletrônicos, protocolos de comunicação e aplicações
Componente Comunicação Aplicações
MPU6050 I2C � Sistema de detecção de
movimentação do solo.
� Controle de videogame (por exemplo,
Nintendo Wii).
� Sistema de detecção de quedas de
idosos.
I2C LCD I2C � Mostrador de mensagens integrado a
diversos sistemas.
Real Clock
Time
I2C � Relógio digital
� Log de dados de eventos.
TC72 SPI � Monitoramento da temperatura de
um ambiente.
� Controle de temperatura de um
sistema de fabricação de cerveja.
DAC
MCP4921/4922
SPI � Leitores de música.
� Celulares.
� Reconstrução de sinais.
Diplay OLED SPI ou I2C � Exibição de gráficos simples.
� Exibição de mensagens.
(Continuação)
Programação do MPU6050 I2C no Arduino
Segundo Monk (2013), o módulo MPU6050 possui em uma mesma placa um
acelerômetro e um giroscópio de alta precisão de três eixos cada um. Esse
modulo contém um conversor analógico digital de 16 bits por canal e permite
capturar os canais x, y e z ao mesmo tempo. Esse sensor utiliza a comunica-
ção I2C para interligar-se a outros dispositivos, assim você deverá utilizar a
interface I2C (Pino A4-SDA e A 5-SCL) do Arduino para realizar a ligação
do circuito, conforme mostra a Figura 6.
11Principais protocolos de comunicação
Figura 6. Circuito entre o Arduino e o módulo MPU6050.
Fonte: Elaborado pelo autor com o Software Fritzing (2019).
O código do sketch mostrado na Figura 7 é utilizado para programar o
Arduino para estabelecer a comunicação com o módulo MPU6050 e, desse
modo, ler dados do acelerômetro e giroscópio e exibir o resultado no monitor
serial da IDE (Monk, 2013).
Principais protocolos de comunicação12Figura 7. Programação para o Arduino se comunicar com o módulo MPU6050.
BANZI, M.; SHILOH, M. Primeiros Passos com o Arduino. 2. ed. São Paulo: Novatec, 2015.
CULKIN, J.; HAGAN, E. Aprenda eletrônica com Arduino: um guia ilustrado de eletrônica
para iniciantes. São Paulo: Novatec, 2018. (Série Make).
EVANS, M.; NOBLE, J.; HOCHENBAUM, J. Arduino em ação. São Paulo: Novatec, 2013.
13Principais protocolos de comunicação
GEDDES, M. Manual de projetos do Arduino: 25 projetos práticos para começar. São
Paulo: Novatec, 2017.
MCROBERTS, M. Arduino básico. São Paulo: Novatec, 2011.
MONK, S. Programação com Arduino: começando com sketches. 2. ed. Porto Alegre:
Bookman, 2017. (Série Tekne).
MONK, S. Programação com Arduino II: passos avançados com sketches. Porto Alegre:
Bookman, 2015. (Série Tekne).
MONK, S. Projetos com Arduino e Android: use seu smartphone ou tablet para controlar
o Arduino. Porto Alegre: Bookman, 2013. (Série Tekne).
STEVAN JUNIOR, S. L.; SILVA, R. A. Automação e instrumentação industrial com Arduino:
teoria e projetos. São Paulo: Saraiva, 2015.
Leituras recomendadas
ARDUINO. Serial. [S. l.], 2019a. Disponível em: https://playground.arduino.cc/Referencia/
Serial. Acesso em: 6 abr. 2019.
ARDUINO. Wire library. [S. l.], 2019b. Disponível em: https://www.arduino.cc/en/reference/
wire. Acesso em: 6 abr. 2019.
MADEIRA, D. Protocolo I2C: comunicação entre Arduinos. In: VIDA DE SILÍCIO. Brasil, 2017.
Disponível em: https://portal.vidadesilicio.com.br/i2c-comunicacao-entre-arduinos/.
Acesso em: 6 abr. 2019.
ROBOCORE. Módulo I2C: primeiros passos. Brasil, 2017. Disponível em: https://www.
robocore.net/tutoriais/primeiros-passos-com-modulo-i2c.html. Acesso em: 6 abr. 2019.
Principais protocolos de comunicação14
ROBÓTICA
Fernando Esquírio Torres
Serial
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
� Reconhecer as características da comunicação serial.
� Aplicar os comandos para leitura e escrita na serial do Arduino.
� Relacionar a aplicação da comunicação serial com periféricos para
Arduino.
Introdução
A comunicação serial é largamente utilizada para transferir informações
entre o Arduino e periféricos externos. Esse tipo de comunicação permite
conectar o Arduino a módulos eletrônicos, a outros microcontroladores
e ao computador para trocar dados sequencialmente. Como toda co-
municação, a comunicação serial possui protocolos que definem regras
para a transmissão de dados entre os dispositivos.
Neste capítulo, você vai conhecer as características da comunicação
serial. Em seguida, vai ver como funcionam os comandos para leitura e
escrita na serial do Arduino e, por fim, vai conhecer uma aplicação da
comunicação serial com periféricos Arduino.
Características da comunicação serial
A comunicação serial transmite dados entre dispositivos de forma sequencial
por meio de um canal de comunicação ou barramento. Esse tipo de comunica-
ção também pode ser chamada de UART (Universal Asynchronous Receiver
Transmitter) ou de USART (Universal Synchronous Asynchronous Receiver
Transmitter).
A UART (Figura 1a) é uma comunicação serial assíncrona, que permite
configurar parâmetros da transmissão, como, por exemplo, o formato dos
dados e a taxa de transmissão. A USART (Figura 1b) é uma comunicação serial
síncrona, que se diferencia da UART por um canal de clock para sincronismo
da transmissão dos dados. Esse tipo de comunicação utiliza níveis lógicos
TTL (3,3V ou 5V) e não deve ser conectado diretamente em uma porta serial
RS232, pois essa porta opera em níveis lógicos de +/− 12V; assim, é necessário
utilizar um adaptador para evitar o risco de danificar o microcontrolador.
Figura 1. Comunicação serial UART (a) e comunicação serial USART (b).
Serial UART Serial USART
Dispositivo 1 Dispositivo 1Dispositivo 2
TX
TXRX
TX
RX
CLK CLK
RX
Dispositivo 2TX
RX
(a) (b)
O Arduino tem apenas o periférico de comunicação UART, que é respon-
sável por realizar a comunicação serial entre dispositivos e também com o
computador, e não tem a opção de comunicação com sincronismo. Sendo assim,
daqui para frente veremos apenas as características da comunicação UART.
Existem três modos de transmissão na comunicação serial (NELSON, 1999):
� Simplex: neste modo, somente o dispositivo 1 pode transmitir os dados
para o dispositivo 2.
� Half-duplex: neste modo, os dispositivos 1 e 2 podem transmitir os
dados, porém um de cada vez.
� Full-duplex: neste modo, mostrado na Figura 1, existe um canal para
cada dispositivo realizar a transmissão e, assim, os dispositivos podem
enviar dados simultaneamente.
A comunicação serial UART possui quatros parâmetros configuráveis: a
taxa de transmissão, o tamanho/formato dos bits de dados, o bit de paridade
e os bits de parada (MONK, 2017).
Serial2
A taxa de transmissão, também conhecida como Baud Rate, é a velocidade
da comunicação serial. Ela indica o número de bits transmitidos por segundo
(medida em bps, bits por segundo); por exemplo, 19200 bps significa que são
transmitidos 19200 bits por segundo.
O formato dos bits de dados define o tamanho do pacote de informação
transmitido, que pode ser de 5 a 8 bits. O bit de paridade é um método de
verificação de erro utilizado na comunicação serial. Existem quartos tipos de
verificação de paridade: par, ímpar, marcada e espaçada.
Os bits de parada são utilizados para sinalizar o fim da comunicação para
um único pacote na transmissão serial. Os valores típicos são 1 e 2 bits. Além
desses bits, temos o bit de início da transmissão. Desse modo, o overhead
(Figura 2) da comunicação serial UART pode ter até 12 bits de informação
(AXELSON, 2007). Esses parâmetros devem ser configurados entre os dis-
positivos conectados para que ambos sigam o mesmo padrão de comunicação.
Figura 2. Overhead da comunicação serial UART.
8 bits de dados
11 bits de informação
8 bits de informação
S D
LSB MSB
D D D D D D D P T
Overhead de dados
Start bit
Bit de paridade
Bit de parada
Least Signi�cant Bit – Bit Menos Signi�cativo
Most Signi�cant Bit — Bit Mais Signi�cativo
Overhead geralmente se refere a qualquer processamento ou armazenamento exces-
sivo, que pode resultar em diminuição do desempenho da máquina.
3Serial
Comandos para leitura e escrita na serial
do Arduino
Segundo McRoberts (2011), todas as placas Arduino têm pelo menos uma
porta de comunicação serial ligada aos pinos digitais 0 (receptor, RX) e 1
(transmissor, TX). Esses são os mesmos pinos ligados ao microcontrolador AT-
mega16U2, responsável por gerenciar a comunicação USB entre o computador
e o Arduino, que permite a gravação do firmware na placa Arduino. Qualquer
placa Arduino possui pelo menos um periférico UART full-duplex, ou seja,
a comunicação é assíncrona e possui canais independentes para transmitir e
receber dados simultaneamente (MONK, 2014).
De acordo com Geddes (2017), as placas Arduino Uno, Nano, Mini, Leo-
nardo, Micro e Yún têm apenas um periférico de comunicação serial disponível
nos pinos digitais 0 (Rx) e 1 (Tx), e as placas Mega e Due têm quatro periféricos
de comunicação serial disponíveis nos pinos mostrados no Quadro 1.
Fonte: Adaptado de Arduino (2019).
Placa Serial padrão Serial 1 Serial 2 Serial 3
Uno, Nano, Mini 0 (RX), 1 (TX)
Mega
0 (RX), 1 (TX) 19 (RX),
18 (TX)
16 (RX),
17 (TX)
15 (RX),
14 (TX)
Leonardo,
Micro, Yún
0 (RX), 1 (TX)
Due
0 (RX), 1 (TX) 19 (RX),
18 (TX)
16 (RX),
17 (TX)
15 (RX),
14 (TX)
Quadro 1. Periféricos de comunicação serial nas principais placas Arduino
O Arduino possui uma biblioteca padrão que encapsula algumas funcio-
nalidades, facilitando o uso desse tipo de comunicação. Essa biblioteca tem
uma classe chamada Serial com métodos/funções disponíveis para configurar
e trabalhar com o periférico de comunicação serial UART. A seguir, você
vai ver exemplos de como realizar a leitura e a escrita de dados na serial
do Arduino, além de ver uma descrição das principaisfunções usadas na
programação da comunicação.
Serial4
Programação
O código do sketch para utilizar a comunicação serial no Arduino é mostrado
na Figura 3. O programa configura a comunicação serial definindo a taxa de
transmissão, o tamanho dos bits de dados, o bit de paridade e o bit de parada
na função setup. Na função loop, ele aguarda o recebimento de um caractere,
processa esse dado e envia uma resposta ao dispositivo com o qual o Arduino está
se comunicando, que pode ser um computador, módulo Bluetooth entre outros.
Figura 3. Código para utilizar a comunicação serial no Arduino.
5Serial
No código da Figura 3, o Arduino aguarda receber do computador a letra L,
seja maiúscula ou minúscula, para ligar o LED interno da placa conectado
no pino 13 (padrão de todas as placas do Arduino) ou a letra D, seja também
maiúscula ou minúscula, para desligar o LED interno da placa. Qualquer
outro valor enviado pelo dispositivo que estabeleceu a conexão será ignorado
e descartado.
Segundo Javed e Adas (2017), para realizar a comunicação serial entre o
Arduino e um computador geralmente é utilizado um software hyperterminal,
que permite trocar dados entre os dispositivos através da serial. A IDE (am-
biente de desenvolvimento) Arduino tem um monitor serial embutido para se
comunicar com as placas do Arduino. Para abrir o monitor serial, você deve
conectar a placa Arduino no seu computador e acessá-lo, o que pode ser feito
de três maneiras possíveis:
� clicar no menu Ferramentas > Monitor Serial;
� utilizar a sequência de teclas de atalho Ctrl+Shift+M;
� clicar no botão Monitor Serial
A Figura 4 exibe os campos disponíveis da janela Monitor Serial. Os
elementos que merecem ser destacados são:
� porta de comunicação do Arduino;
� taxa de transferência de bits;
� TextBox para enviar dados pela serial;
� botão Enviar;
� área onde é exibida toda mensagem recebida pela serial.
Entendendo o código
De acordo com Arduino (2019), o comando Serial.begin (9600, Serial_8N1)
define a taxa de transmissão em bit por segundo e os outros parâmetros (bits
de dados, bit de paridade e bits de parada) da comunicação serial. Os valores
de taxas disponíveis são 300, 600, 1.200, 2.400, 4.800, 9.600, 14.400, 19.200,
28.800, 38.400, 57.600 ou 11.520.
Serial6
Figura 4. Campos da janela Monitor Serial.
Porta serial do Arduino
TextBox para enviar dados pela serial
Botão para enviar os dados pela serial
Taxa de transferência de bits, por exemplo:
9600 bps (9600 bits por segundo)
A macro Serial8N1 configura a comunicação para funcionar com 8 bits de
dados, sem bit de paridade e um bit de parada. As outras macros disponíveis
para configurar a comunicação serial são: SERIAL_5N1, SERIAL_6N1,
SERIAL_7N1, SERIAL_8N1, SERIAL_5N2, SERIAL_6N2, SERIAL_7N2,
SERIAL_8N2, SERIAL_5E1, SERIAL_6E1, SERIAL_7E1, SERIAL_8E1,
SERIAL_5E2, SERIAL_6E2, SERIAL_7E2, SERIAL_8E2, SERIAL_5O1,
SERIAL_6O1, SERIAL_7O1, SERIAL_8O1, SERIAL_5O2,
SERIAL_6O2, SERIAL_7O2, SERIAL_8O2. Se você utilizar o comando
Serial.begin (9600), o Arduino assumirá a macro SERIAL_8N1 como padrão.
O comando Serial indica se a porta serial está pronta para comunicar. Ele
retorna True (comunicação disponível) ou False (comunicação indisponível).
O comando while(!Serial) trava o código enquanto uma conexão serial não
estiver disponível. Quando uma comunicação serial é aberta, por exemplo, o
monitor serial da IDE do Arduino, o código segue a execução normalmente
(MONK, 2017).
O comando available() retorna o número de bytes (caracteres) disponível
para ser lido pela porta serial; sintaxe: Serial.available().
O comando Serial.read() lê um dado serial (MONK, 2017). Sintaxe: Serial.
read(). Retorno: o primeiro byte no buffer da serial (formato int).
7Serial
O comando Serial.print() possui a seguinte sintaxe:
� Serial.print(valor)
� Serial.print(valor, formato)
Imprime um dado na serial, onde (MONK, 2017):
� valor: valor a ser impresso;
� qualquer dado: string, caractere, variável, etc.;
� formato: especifica a base numérica ou o número de casas decimais;
� base numérica: DEC (Decimal), BIN (Binário), OCT (Octal) e HEX
(Hexadecimal);
� 0, 1, 2…: zero casas decimais, uma casa decimal, duas casas decimais.
O comando Serial.println() possui a seguinte sintaxe:
� Serial.println(valor)
� Serial.println(valor, formato)
Ele imprime um dado na serial e quebra uma linha, onde valor e formato
têm as mesmas especificações do comando anterior, print (MONK, 2017).
Comunicação serial com periféricos
para Arduino
A comunicação serial é um recurso eficiente para realizar a troca de dados
entre dois sistemas computacionais e pode ser utilizada em diversos projetos
implementados com o Arduino. Ela é muito útil como debug do programa,
auxiliando o programador a encontrar erros ou trechos de código que não estão
funcionando da forma esperada. A serial também possibilita enviar dados
lidos de sensores ligados ao Arduino para o monitor serial do computador ou
um sistema supervisório.
Entre as diversas aplicações da comunicação serial no Arduino, pode-se
citar um sistema de GPS usando o Arduino para localização de um objeto
como, por exemplo, um veículo ou um robô móvel. Esse sistema utiliza o
módulo GPS GY-NEO6MV2, que se comunica com a placa Arduino utilizando
comunicação serial.
Serial8
O circuito da Figura 4 mostra como deve ser realizada a ligação do módulo
com o Arduino. Observe a necessidade do um divisor de tensão no pino de RX
do módulo GPS, que é necessário para evitar danificar o pino de recepção do
módulo. Lembre-se de que é necessário inverter os pinos de TX e RX, assim,
o pino transmissor (TX) do Arduino deve ser conectado ao pino receptor (RX)
do módulo GPS e o pino receptor (RX) do Arduino deve ser conectado ao
pino transmissor (TX) do módulo GPS (MONK, 2015).
Figura 5. Circuito do GPS GY-NEO6MV2.
Legenda dos �os:
GND: Preto
VCC: Vermelho
RX: Amarelo
TX: Verde
9Serial
Antes de iniciar a programação do Arduino, você precisa fazer o download da biblioteca
TinyGPS.h, que é necessária para a comunicação com o módulo GPS. A partir do link
a seguir, você pode fazer o download.
https://qrgo.page.link/HMKe
Após realizar o download da biblioteca, você terá que instalá-la na IDE do Arduino.
Caso nunca tenha feito isso, no link a seguir você encontra um tutorial bastante útil
para ajudar na instalação.
https://qrgo.page.link/9bXx
O código do sketch para programar o Arduino e ler dados do módulo
GPS através da comunicação serial é mostrado na Figura 6. Nesse programa
é necessário usar uma biblioteca extra, a SoftwareSerial.h, que é necessária
para emular via software outra porta de comunicação serial nos pinos 3 (RX)
e 4 (TX) e, desse modo, evitar conflito com a USB ligada ao computador, por
onde serão transmitidos os dados coletados do sensor GPS.
Você pode armazenar os dados coletados do GPS em um cartão de memória
e depois desenhar o caminho percorrido no Google Maps, por exemplo.
No link a seguir, você encontra um artigo que ensina, detalhadamente, como imple-
mentar o projeto que acabamos de descrever.
https://qrgo.page.link/1R6b
Serial10
Figura 6. Código do GPS GY-NEO6MV2.
11Serial
ARDUINO. [S. l.], 2019. Disponível em: https://www.arduino.cc. Acesso em: 06 abr. 2019.
AXELSON, J. Serial port complete: COM ports, USB virtual COM ports, and ports for
embedded systems (complete guides series). 2. ed. Chicago: Lakeview Research, 2007.
GEDDES, M. Manual de projetos do Arduino: 25 projetos práticos para começar. São
Paulo: Novatec, 2017.
JAVED, A.; ADAS, C. J. Criando projetos com Arduino para a internet das coisas: experi-
mentos com aplicações do mundo real: um guia para o entusiasta de Arduino ávido
por aprender. São Paulo: Novatec, 2017.
MCROBERTS, M. Arduino básico. São Paulo: Novatec, 2011.
MONK, S. 30 projetos com Arduino. 2. ed. Porto Alegre: Bookman, 2014. (Série Tekne).
MONK, S. Programação com Arduino: começando com sketches. 2. ed. PortoAlegre:
Bookman, 2017. (Série Tekne).
MONK, S. Programação com Arduino II: passos avançados com sketches. Porto Alegre:
Bookman, 2015. (Série Tekne).
NELSON, M. Serial communications: developer's guide. 2. ed. New York: Wiley, 1999.
Leituras recomendadas
ARDUINO. Serial. . [S. l.], 2019. Disponível em: https://www.arduino.cc/reference/en/
language/functions/communication/serial/. Acesso em: 06 abr. 2019.
ROBOCORE. Bluetooth HC-05 com Arduino: comunicando com PC. Brasil, 2016. Disponível
em: https://www.robocore.net/tutoriais/bluetooth-hc-05-com-arduino-comunicando-
-com-pc.html. Acesso em: 06 abr. 2019.
SPARKFUN. Serial communication. Colorado, [2019?]. Disponível em: https://learn.spa-
rkfun.com/tutorials/serial-communication/all. Acesso em: 06 abr. 2019.
Serial12
Robótica
Fernando Esquírio Torres
Arduino e Bluetooth
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
� Caracterizar a comunicação via Bluetooth.
� Reconhecer os componentes que possibilitam a comunicação do
Arduino via Bluetooth.
� Analisar as aplicações da Bluetooth com Arduino.
Introdução
O módulo Bluetooth ligado ao Arduino tem sido bastante utilizado em
projetos que têm a necessidade da troca de dados ou informações a
distância, sem precisar utilizar cabos ou fios para realizar essa conexão.
Conectar o Bluetooth na plataforma microcontrolada Arduino permite
controlar dispositivos a distância através de celulares, tablets ou notebooks.
Atualmente, utilizamos diversos aparelhos, portáteis ou não, que têm o
padrão de comunicação Bluetooth embarcado, o que torna interessante
você aprender a conectar o Bluetooth e o Arduino a esses aparelhos e
controlar os seus projetos remotamente.
Neste capítulo, você vai estudar as características da comunicação
Bluetooth, além de ver alguns componentes e dispositivos que propi-
ciam a comunicação do Arduino com outros dispositivos por meio do
Bluetooth. Por fim, vai ver alguns projetos que utilizam o Bluetooth e o
Arduino.
Comunicação via Bluetooth
O Bluetooth, segundo Harte (2009), é um padrão de comunicação sem fio
(wireless) desenvolvido para fornecer conexão entre dispositivos como tele-
fones celulares, tablets, notebooks, impressoras, câmeras digitais, consoles
de videogames, etc. O padrão, atualmente utilizado mundialmente, foi criado
no final dos anos 1990, pelo grupo Bluetooth SIG (Bluetooth Special Interest
Group) formado pelas empresas Ericson, Intel, IBM, Toshiba e Nokia. O
Bluetooth é uma especificação para personal area network (PAN), também
conhecido como IEEE 802.15.1 (HEYDON, 2012).
O Bluetooth foi desenvolvido para ser uma solução wireless de especifi-
cação aberta, capaz de transmitir voz e dados por pequenas distâncias (de 1 a
100 metros). Assim, ele elimina a necessidade de cabos e fios para conectar
os dispositivos fixos e/ou móveis, transmitindo as informações através de
redes ad hoc e fornecendo a sincronização automática entre os equipamentos
pareados (HARTE, 2009).
A conectividade dos equipamentos, que são embarcados com a tecnologia
Bluetooth, é possível por meio de um chip que funciona como um rádio trans-
ceptor operando na frequência de 2.4 GHz, que opera na faixa ISM (industrial,
scientific, medical) em sua camada física de rádio (HUANG, 2007). A classi-
ficação dos dispositivos Bluetooth é feita em classes, de acordo com o alcance
e a potência máxima permitida, conforme você pode visualizar no Quadro 1.
Fonte: Adaptado de HC… (2010).
Potência máxima permitida Alcance
Classe 1 100 mW (20 dBm) até 100 metros
Classe 2 2.5 mW (4 dBm) até 10 metros
Classe 3 1 mW (0 dBm) aprox. 1 metro
Quadro 1. Características das classes do padrão Bluetooth
Arduino e Bluetooth2
Há também outras classes, mas são muito raras, por isso não veremos
elas aqui.
Todas as especificações e características do padrão Bluetooth são regu-
lamentadas pelo grupo Bluetooth SIG, que, em 2018, contava com mais de
30.000 empresas associadas por todo o mundo. Uma especificação importante
regulada pelo grupo é o controle de versão/modelos do Bluetooth. Até 2019, há
11 versões disponíveis para o padrão Bluetooth (IEEE..., 2002). O Quadro 2
mostra algumas características das principais versões.
Versão Descrição
Bluetooth
1.0 e 1.0B
As primeiras versões oficiais apresentaram muitos problemas,
como velocidade baixa, pouca segurança, interoperabilidade
entre equipamentos de fabricantes diferentes e
impossibilidade de manter o anonimato nas transmissões.
Bluetooth 1.1 Lançada em 2002, esta versão apresentou a
correção de muitos problemas apresentados
na versão 1.0B. Incluiu suporte a canais não
encriptados e indicador de sinal recebido (RSSI).
Bluetooth 1.2 Nesta versão foram implementadas algumas melhorias,
entre elas busca e conexão mais rápida entre os
dispositivos, pulo de frequência adaptável, resistência
na frequência de rádio para evitar interferências,
transmissões de dados mais rápidas (até 1 Mbps) e
aumento da qualidade das conexões de voz e áudio.
Bluetooth
2.0 + EDR
Introduziu maior velocidade de transmissão
dos dados (até 3 Mbps), devido à inclusão da
característica enhanced data rate (EDR).
Bluetooth
2.1 + EDR
Adotada em 2007, trouxe melhorias no pareamento
dos dispositivos Bluetooth, no desempenho
(inclusão do e BER, bit error rate) e na segurança da
transmissão dos dados e no consumo de bateria.
Bluetooth
3.0 + HS
Adotada em 2009, teve como característica importante a
velocidade de transferência de dados em high speed (HS)
com taxas de até 24 Mbps, além de a transmissão de dados
ser realizada por meio do protocolo 802.11 da IEEE.
Quadro 2. Versões do padrão Bluetooth
(Continua)
3Arduino e Bluetooth
Fonte: Adaptado de IEEE... (2002).
Quadro 2. Versões do padrão Bluetooth
Versão Descrição
Bluetooth 4.0 Adotada em 2010, apresentou três protocolos: o
Bluetooth clássico, o Bluetooth de alta velocidade
e o Bluetooth de baixo consumo.
Bluetooth 4.1 Anunciada em 2013, trouxe uma atualização
de software que adicionou novos recursos
para melhorar a usabilidade do usuário.
Bluetooth 4.2 Lançado em 2014, introduziu características de Internet
das Coisas (IOT, Internet of Things), como baixo consumo de
energia, conexão segura, extensão do pacote de dados e
inclusão da versão 6 do Internet Protocol Support Profile (IPSP).
Bluetooth 5.0 Adotada em 2016, esta versão trouxe a inclusão de novas
características focadas na tecnologia emergente da IOT.
Bluetooth 5.1 Adotada em 2019, trouxe melhorias em diversas áreas, como
Ângulo de chegada (AoA) e Ângulo de partida (AoD), que são
usados para a localização e o rastreamento de dispositivos;
suporte a HCI para chaves de debug em conexões
seguras; hierarquia baseada em malha; entre outras.
(Continuação)
De acordo com Heydon (2012), a comunicação entre equipamentos Blue-
tooth é bidirecional, podendo ser ponto a ponto ou ponto a multiponto. No
primeiro tipo, a conexão é estabelecida entre dois dispositivos, enquanto, no
segundo, pode haver até 8 dispositivos. A comunicação é realizada por meio
do compartilhamento do canal físico, denominado piconet. Nesse canal, um
dispositivo tem o papel de mestre e os outros de escravos, conforme você pode
visualizar no esquema da Figura 1. Ainda segundo Heydon (2012), uma vez
que os dispositivos foram previamente pareados, eles podem se comunicar
sempre que um estiver ao alcance do outro, pois o sincronismo da reconexão
é realizado automaticamente.
Arduino e Bluetooth4
Figura 1. Piconet com um dispositivo mestre e quatro escravos.
Mestre
Escravo
A comunicação Bluetooth funciona com uma arquitetura de camadas
(Figura 2), que é dividida em enlace lógico e comunicação lógica. Ela também
tem vários protocolos, que permitem a transmissão e o controle do pacote
de dados (HUANG, 2007). Entre os protocolos, os mais importantes sãoos
seguintes.
� L2CAP: é responsável pelo fornecimento de serviços orientados e não
orientados à conexãopara as camadas superiores, além de permitir aos
protocolos de maior nível transmitir e receber pacotes de dados L2CAP
acima dos 64 KB Bluetooth.
� BNP: pacote baseado no EthernetII/DIX Bluetooth, que define um
formato de pacotes comum aos dispositivos.
5Arduino e Bluetooth
Figura 2. Estrutura de camadas da comunicação Bluetooth.
Aplicações da rede
TCP/UDP
IP
BNEP SDP
L2CAP
LMP
Banda Base Bluetooth
Bluetooth Radio
Componentes eletrônicos para a troca de dados
do Arduino via Bluetooth
O padrão Bluetooth é uma das comunicações sem fio mais utilizadas para a
transmissão e a recepção de dados com o Arduino (McROBERTS, 2011). Isso se
deve à simplicidade de configuração e programação e à facilidade de encontrar
módulos para comprar no mercado. Os módulos mais populares, atualmente,
são os da série HC, particularmente o HC-05 e o HC-06. A diferença mais
importante entre esses dois modelos é que o HC-05 pode exercer o papel de
mestre ou escravo em uma conexão, enquanto o HC-06, apenas o papel de
escravo. Por esse motivo, vamos estudar em mais detalhes o módulo HC-05.
Módulo Bluetooth HC-05
O Bluetooth HC-05 (Figura 3) utiliza o protocolo serial Bluetooth (Bluetooth
SPP, Serial Port Protocol), que é composto de uma interface serial e de um
adaptador Bluetooth em um único módulo (HC..., 2010). O HC-05 fornece
uma interface simples para a conexão com o microcontrolador e uma fácil
Arduino e Bluetooth6
configuração do dispositivo, além de ser uma solução barata para realizar a
troca de informações/dados sem fio com o microcontrolador no seu projeto.
Todo componente eletrônico tem especificações técnicas e elétricas pró-
prias, então, é importante conhecer essas características do dispositivo para
utilizá-lo de forma correta e obter funcionamento adequado do mesmo (HC...,
2010). O Quadro 3 mostra algumas dessas características técnicas e elétricas
do módulo Bluetooth HC-05.
Figura 3. Módulo HC-05.
Características Descrição
Protocolo Bluetooth 2.0 + EDR
Frequência 2,4 GHz Banda ISM
Modulação GFSK
Emissão de energiae HEX (Hexadecimal); 0, 1, 2…: zeros, casas
decimais, uma casa decimal, duas casas decimais (MARGOLIS, 2012; BANZI;
SHILOH, 2015).
O comando Serial.println( ) tem a seguinte sintaxe:
� Serial.println(valor);
� Serial.println(valor, formato).
Esse comando imprime um dado na serial e quebra uma linha, onde valor
e formato têm as mesmas especificações do comando anterior print (MAR-
GOLIS, 2012; BANZI; SHILOH, 2015).
Arduino e Bluetooth12
Conexão entre o Arduino e o celular
Para conectar o circuito Bluetooth ligado no Arduino ao seu celular/tablet
com sistema operacional Android (O sistema iOS possui algumas restrições
de conexão e troca de dados via Bluetooth, por será abordado apenas o sis-
tema Android nesse material), primeiramente você deverá parear o módulo
Bluetooth ao seu telefone (MONK, 2014). Para isso, siga os passos a seguir.
1. Ligue a placa Arduino no seu computador para energizá-la e ligar o
módulo Bluetooth.
2. Habilite a conexão Bluetooth do seu aparelho celular.
3. Aguarde o celular procurar por dispositivos Bluetooth disponíveis nas
proximidades. Caso o celular atualize a lista, faça a busca manualmente.
4. Procure o dispositivo com o nome HC-05 ou linvor (vai depender do
modelo que você tem) e escolha “conectar” para fazer o pareamento.
5. No campo senha digite 1234 (alguns podem vir de fábrica com o código
0000, mas é muito raro de acontecer).
6. Pronto, seu celular já está pareado com o circuito Bluetooth.
O sistema iOS tem algumas restrições de conexão e troca de dados via Bluetooth, por
isso é abordado apenas o sistema Android neste material.
É necessário fazer esse pareamento entre o celular/tablet e o módulo Blue-
tooth apenas uma vez, mas caso você remova o pareamento manualmente,
terá que refazer os passos novamente (MONK, 2014). Agora, para enviar e
receber dados do seu Celular para o Arduino e vice-versa, você precisará
seguir os passos a seguir.
1. Faça o download do aplicativo S2 Bluetooth Terminal Free na loja de
aplicativos da Google.
2. Clique no botão “conectar” e selecione o dispositivo Bluetooth que foi
pareado anteriormente (HC-05 ou linvor).
13Arduino e Bluetooth
3. Pronto, você já está pronto para receber e enviar mensagens para o
seu Arduino.
4. Teste enviar o valor L e depois D.
Aplicações da comunicação Bluetooth
com Arduino
A comunicação Bluetooth utilizando a plataforma microcontrolada Arduino
pode ser aplicada em diversos projetos que necessitam de uma comunicação
sem fio em distâncias pequenas. Na internet, você encontra diversos projetos
que utilizam a comunicação Bluetooth e o Arduino para fazer medições de
sensores, acionamento de atuadores, controle de dispositivos remotamente,
entre outros. Vamos analisar o projeto de Domótica que pode desenvolvido
utilizando essa tecnologia de comunicação wireless.
Automação residencial (domótica)
De acordo com Monk (2014), a automação residencial, conhecida também
como domótica, pode ser utilizada para controlar remotamente diversos
equipamentos na sua casa, como as tomadas para ligar e desligar aparelhos,
o sistema de climatização do ambiente e, até mesmo, a fechadura da sua porta
da frente ou do seu quarto.
As placas do Arduino podem fazer esse tipo de automação de uma resi-
dência, esteja conectado ou não a um computador. Às vezes, a presença de um
computador é necessária no caso de você querer implementar uma interface
gráfica mais elaborada para gerenciar os equipamentos automatizados, mas,
se quiser apenas controlar remotamente o acionamento dos dispositivos, um
aplicativo no celular ou tablet é mais do que suficiente (MONK, 2014).
Suponha que você queira acionar uma lâmpada na sua casa. Você precisará,
além da placa Arduino, alguns componentes eletrônicos como, por exemplo, o
módulo Bluetooth (para a conexão com o celular ou tablet) e um módulo relé
5V (para o acionamento da lâmpada ligada na energia elétrica da sua casa).
O circuito é mostrado na Figura 6.
O relé de 5V tem a função de deixar a energia da tomada fluir ou não,
ligando ou desligado a lâmpada. O código para o circuito da Figura 6 é o
mesmo mostrado na Figura 5.
Arduino e Bluetooth14
ROBÓTICA
Flávio Luiz Puhl Junior
Sensores para
projetos Arduino
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
� Caracterizar os sensores mais utilizados em projetos com Arduino.
� Selecionar os sensores segundo a aplicação.
� Integrar os principais sensores utilizados em projetos com Arduino.
Introdução
Existe uma área muito específica de atuação chamada de instrumentação.
Essa área trata de adaptar os fenômenos físicos presentes no meio ambiente
para os meios eletrônicos, de forma que esses fenômenos físicos possam
ser interpretados pelo microcontrolador em sua linguagem de máquina.
A instrumentação está intrinsicamente ligada aos sensores e esses, por
sua vez, têm como função fazer a adequação do sinal para ser utilizado
em projetos. Especificamente no Arduino, mas podendo ser estendido
para qualquer outro sistema eletrônico, existem os recursos chamados
de shields, cujo objetivo é adicionar funcionalidades à placa de desen-
volvimento de forma prática e rápida.
Neste capítulo, você vai aprender sobre os sensores mais comuns
para aplicações e ideias dos dia a dia. Vai identificar o tipo de sensor
adequado para cada necessidade e conhecer na prática a integração
de alguns sensores.
Dispositivos mais utilizados para medição
Os sensores, como o próprio nome sugere, são os recursos que permitem que
um dispositivo entenda o meio no qual está inserido e interaja adequadamente,
de acordo com o objetivo para o qual foi elaborado. Cada projeto e/ou objetivo
fará uso de uma gama de diferente de sensores.
Existem métodos de sensoriamento que se destacam dos demais por serem
de aplicação mais universal. A seguir, vamos ver alguns dos sensores mais
utilizados e suas características (SANTOS, R.; SANTOS, S., 2018).
Sensor de temperatura e umidade
Os sensores de temperatura e umidade DHT11 e DHT22 são comumente
utilizados devido à sua versatilidade e custo acessível. Esses sensores têm
um microcontrolador incorporado que faz a conversão analógico-digital dos
valores de temperatura e umidade e envia esses valores para o Arduino via
comunicação digital. Para utilizá-los basta incorporar ao seu código a biblioteca
DHT11 e seguir os exemplos de uso. A diferença entre os dois é que o DHT22
tem uma faixa de medição de umidade maior e melhor acuracidade.
Veja na Figura 1 os sensores DHT11 e DHT22 e um exemplo de ligação
do DHT11 ao Arduino.
Você pode conseguir a biblioteca DHT11 acessando o link a seguir.
https://qrgo.page.link/CntyS
Figura 1. (a) DHT11 e DHT22; (b) exemplo de ligação.
Fonte: Santos, R. e Santos, S. (2018).
(a) (b)
Sensores para projetos Arduino2
Sensor de temperatura DS18B20
Existem muitas maneiras de fazer a medição de temperatura, porém este é
um sensor muito utilizado devido à sua versatilidade. Ele tem dois formatos:
um é parecido com um transistor (TO-92) e outro é à prova d’água, como
mostra a Figura 2.
A maioria dos sensores de temperatura é analógica e fornece um valor
de tensão ou corrente que deve ser interpretado pelo microcontrolador. O
DS18B20, no entanto, já faz essa interpretação: ele lê a temperatura, inter-
preta a informação e envia o valor de temperatura em graus Celsius para o
microcontrolador, utilizando um barramento de um fio (um protocolo de
comunicação 1-wire).
Os sensores DS18B20 têm um endereço serial exclusivo de 64 bits. Isso
significa que é possível instalar vários sensores em um mesmo barramento,
ocupando só uma porta do microcontrolador, e obter os valores de temperatura
de cada sensor.
Figura 2. (a) DS18B20 em suas apresentações; (b) exemplo de ligação.
Fonte: Santos, R. e Santos, S. (2018).
(a) (b)
Sensor de distância por ultrassom HC-SR04
O HC-SR04 é utilizado para especificar a distância entre o sensor e um obs-
táculo. Para fazerisso, ele emite ondas sonoras de alta frequência (acima
de 40kHz) e aguarda o retorno, que ocorrerá quando a onda encontrar um
obstáculo. O tempo de envio e retorno da onda sonora é utilizado para calcular
a distância entre o sensor e o obstáculo — algo muito parecido com o sistema
de localização dos morcegos.
3Sensores para projetos Arduino
Os sensores ultrassônicos podem medir variáveis como enchimento e
altura sem ter que entrar em contato com os elementos do meio. Além disso,
sua operação não é prejudicada por transparência, poeira, sujeira ou vapores
e gases presentes no ambiente. Se o obstáculo é capaz de refletir as ondas
sonoras então é possível utilizar um sensor ultrassônico.
Veja na Figura 3 um HC-SR04 e um exemplo de ligação ao Arduino.
Figura 3. (a) HC-SR04; (b) exemplo de ligação.
Fonte: Santos, R. e Santos, S. (2018).
(a) (b)
Sensor de umidade do solo YL-69 ou HL-69
Os sensores de umidade do solo foram especialmente desenvolvidos para
o monitoramento de sistemas de irrigação ou plantações. Acompanhe um
exemplo desse tipo de sensor na Figura 4.
Esses sensores têm um potenciômetro embutido para ajuste de sensibilidade
da saída, um LED para indicação de energia e um LED que indica a saída
digital. A tensão da saída do sensor muda de acordo com a quantidade de
água no solo. Quando o solo está úmido, a tensão de saída diminui e, quando
está seco, a tensão de saída aumenta. Têm duas saídas: uma digital e outra
analógica. A saída digital apenas indica se o solo está úmido ou seco, enquanto
a saída analógica indica a quantidade de umidade do solo.
Sensores para projetos Arduino4
Figura 4. (a) Sensor de umidade; (b) exemplo de ligação.
Fonte: Santos, R. e Santos, S. (2018).
(a) (b)
Microfone
O sensor de microfone disponível para uso no Arduino apenas detecta a in-
tensidade sonora do ruído ao qual é exposto. Nesse tipo de aplicação o sensor
não consegue identificar palavras ou frequências específicas (por exemplo,
um apito ou uma música), devido às características de processamento do
Arduino e pelo próprio princípio de funcionamento do sensor. Ele tem uma
saída analógica, que indica o nível de pressão sonora, e um potenciômetro,
para ajuste da sensibilidade. Veja um exemplo de microfone, bem como de
ligação ao Arduino, na Figura 5.
Figura 5. (a) Microfone; (b) exemplo de ligação.
Fonte: Santos, R. e Santos, S. (2018).
(a) (b)
5Sensores para projetos Arduino
Estes são alguns dos sensores mais comuns utilizados no Arduino. Com eles
é possível implementar uma gama extensa de projetos para as mais diversas
finalidades. Mas eles não são os únicos disponíveis: ainda há muitos outros
tipos de sensores, como, por exemplo, sensor de luminosidade, de tensão,
de corrente elétrica, sensores de força e até mesmo sensores que indicam a
potência do sinal de ondas de rádio. Basta identificar a necessidade do seu
projeto e procurar o recurso que melhor atenda à sua necessidade.
Fenômenos físicos e seus sensores
Os sensores funcionam, basicamente, convertendo um fenômeno físico em um
sinal elétrico que possa ser interpretado pelo circuito eletrônico e/ou micro-
controlador. Para melhor entender essa relação, devemos primeiro conhecer
o Sistema Internacional de Unidades.
O Sistema Internacional de Unidades (SI) estabelece uma unidade para
cada grandeza, sendo o sistema de medição mais utilizado no mundo. Suas
padronizações são definidas por representantes do mundo inteiro em encontros
periódicos chamados de Conferência Geral de Pesos e Medidas (CGPM). Na
14ª CGPM, realizada em 1971, foram selecionadas as unidades básicas do SI
e as grandezas fundamentais a que correspondem (SILVA, [2019?]):
� metro — comprimento;
� quilograma — massa;
� segundo — tempo;
� ampere — intensidade de corrente elétrica;
� kelvin — temperatura;
� mol — quantidade de matéria;
� candela —intensidade luminosa.
Agora, imagine que você quer fazer a medição de um peso na balança que
tem em casa. Para o valor do peso ser indicado no pequeno display da balança,
existe uma sequência de transformações que devem ser realizadas, conforme
você pode ver na Figura 6.
Sensores para projetos Arduino6
Fi
gu
ra
6
. S
eq
uê
nc
ia
d
e
ev
en
to
s p
ar
a
a
m
ed
iç
ão
d
e
pe
so
.
O
p
es
o
é
co
lo
ca
do
so
br
e
a
ba
la
nç
a.
O
p
es
o
ge
ra
u
m
e
sf
or
ço
so
br
e
a
ba
se
m
et
ál
ic
a.
U
m
p
eq
ue
no
re
sis
to
r
su
pe
r�
ci
al
, c
ha
m
ad
o
de
st
ra
in
-g
au
ge
,
m
od
i�
ca
su
a
re
sis
tê
nc
ia
.
A
al
te
ra
çã
o
no
v
al
or
d
a
re
sis
tê
nc
ia
a
lte
ra
o
va
lo
r d
e
te
ns
ão
, q
ue
é
co
nv
er
tid
o
pe
lo
co
nv
er
so
r
an
al
óg
ic
o-
di
gi
ta
l d
o
m
ic
ro
co
nt
ro
la
do
r.
M
ic
ro
co
nt
ro
la
do
r r
ec
eb
e
a
in
fo
rm
aç
ão
d
e
te
ns
ão
ca
lc
ul
a
o
va
lo
r d
o
pe
so
d
e
ac
or
do
c
om
su
a
re
fe
rê
nc
ia
fí
sic
a
e
m
os
tr
a
no
d
isp
la
y.
7Sensores para projetos Arduino
Então, para obtermos o resultado do peso na balança, o processo começa
pela deformação mecânica de um elemento metálico que está instrumentado
com um medidor de deformação chamado de strain-gauge. Essa deformação
causa uma alteração na resistência do medidor, que, por sua vez, causa uma
variação proporcional de tensão na entrada analógica do microcontrolador. O
microcontrolador faz a aquisição desse valor e o multiplica por uma constante,
para adequar o valor à referência de peso. Depois, exibe o valor no display,
que visualizamos e interpretamos.
Esse mesmo processo pode ser utilizado para muitas outras medições,
como a medição de torque, a medição de temperatura pela deformação tér-
mica de algum material, a medição de volume, etc. Assim, se você entender
alguns processos físicos/mecânicos, será capaz de fazer a medição de qualquer
fenômeno físico.
Seleção do sensor conforme aplicação
Existem muitos tipos de sensores disponíveis que permitem a interação com
o nosso meio, e pode ser difícil decidir qual deles é melhor para usar em
determinado projeto. Reconhecer a real necessidade e a aplicação facilita na
decisão pelo método que tenha a implementação mais simples.
Botões e interruptores
A maneira mais fácil de proporcionar interação com um dispositivo eletrônico
é usando um botão ou um interruptor. Um interruptor geralmente possui
uma trava, que permite ao usuário clicar para frente e para trás e mantê-lo na
posição. Já um botão assume um estado quando pressionado e retorna ao seu
estado original quando a interação é interrompida.
Esse tipo de sensor faz uso das entradas digitais do microcontrolador. Ele
tem a vantagem de ser um tipo de sensor barato, confiável e de fácil imple-
mentação. Seu uso não se restringe a botões para interação com o usuário
— também pode ser usado para verificar portas abertas, limites de posição,
presença de objetos etc.
Para um projeto que requeira muitas entradas digitais, chaves e pinos podem
ser uma ótima solução. É relativamente fácil criar seus próprios botões com
material condutor, se você quiser personalizá-los em um dispositivo ou não
deseja que botões fiquem visíveis. Você pode ler os botões e/ou interruptores
nos pinos digitais no Arduino colocando os interruptores em paralelo.
Sensores para projetos Arduino8
A Figura 7 mostra alguns exemplos de botões e interruptores.
Figura 7. (a) Botões; (b) interruptores; (c) chaves fim de curso.
Fonte: JCL Garcia/Shutterstock.com; KevinLinXC/Shutterstock.com e Esham (2007).
(a)
(b)
(c)
Sensores infravermelhos
A radiação infravermelha é uma forma de luz com ondas mais longas e que
não são visíveis para o olho humano.
Os sensores infravermelhos detectam a radiação infravermelha de duas
maneiras: passivamente ou ativamente. Um sensor passivo consiste em apenas
um detector de infravermelho. Ele detecta a radiação emitida pelos objetos
e é útil para detectar a diferença entre objetos com diferentes temperaturas,como um humano entrando no quintal de alguém. Um sensor ativo consiste
em um emissor de infravermelho e em um detector de infravermelho. A radia-
ção emitida de um sensor ativo é refletida de qualquer objeto e, em seguida,
detectada pelo detector. Os sensores ativos são bons para verificar quando
um objeto passa entre o emissor e o receptor, identificando a presença de um
obstáculo, por exemplo.
9Sensores para projetos Arduino
Uma aplicação desse tipo de sensor muito utilizada com o Arduino é
em encoders de motores. Nesse caso, o motor possui um disco com várias
“janelas”; de um lado está o emissor e do outro está o receptor. Quando o
disco gira com o eixo do motor, existe a indicação de passagem da radiação
ou não. Com esse tipo de sinal podemos calcular precisamente a velocidade
de rotação do motor, estimar a posição relativa etc.
Acompanhe na Figura 8 dois exemplos de sensor infravermelho.
Figura 8. Sensores infravermelhos.
Fonte: Lexa Adams/Shutterstock.com.
(a) (b)
Fotorresistores ou Light Dependent Resistors (LDRs)
Fotodectores são sensores elétricos que medem as mudanças na luz. Portanto,
se uma pessoa altera a quantidade de luz que chega ao sensor, o sinal produzido
pelo fotodetector pode ser usado para controlar outro componente elétrico
ou, simplesmente, indicar a quantidade de incidência de luz em determinado
ambiente.
Fotorresistores, fotodiodos e fototransistores são exemplos de foto-
detectores. A grande diferença entre eles é que os fotorresistores têm um
tempo de resposta muito mais lento às mudanças de luz do que fotodiodos e
fotorresistores. A sensibilidade de cada um desses sensores pode ser ajustada
alterando os resistores no circuito. Por exemplo, se você colocar uma resistência
menor em paralelo com um fotorresistor, poderá medir mudanças de fontes
de luz muito brilhantes. Se usar um resistor maior, poderá medir as alterações
em situações de pouca luz. A Figura 9 mostra um exemplo de fotorresistor.
Para usar um fotorresistor, conecte-o em série a outro resistor. O sinal é lido
no nó entre esses componentes. Conecte um fio desse nó a um pino analógico.
Sensores para projetos Arduino10
Figura 9. Fotorresistor.
Fonte: Awe Inspiring Images/Shutterstock.com.
Sensor ultrassônico
Os sensores ultrassônicos são conceitualmente semelhantes aos sensores
infravermelhos, mas emitem e recebem ondas ultrassônicas. Um pino de
gatilho envia um sinal para produzir um pulso ultrassônico, e o pino de eco
gera um sinal, dependendo da onda ultrassônica que é detectada pelo receptor.
Se algo passa pelo sensor, as ondas ultrassônicas são refletidas pelo objeto e
detectadas pelo receptor ultrassônico.
O tempo transcorrido entre o momento em que o pulso ultrassônico é
produzido e o momento em que é detectado depende da distância que o objeto
está do sensor. Portanto, um dos principais benefícios dos sensores ultrassô-
nicos obter informações de distância sobre objetos próximos. Veja na Figura
10 uma ilustração de como isso ocorre.
Sensores ultrassônicos fornecem detecção sem contato para distâncias
que variam de 2 cm a 500 cm. Eles também têm um ângulo de feixe estreito
(em torno de 10° a 15°), para que sua detecção seja sensível a apenas uma
pequena área.
Para usar o sensor ultrassônico, os pinos de eco e gatilho são conectados
a dois pinos no Arduino. Em geral estes sensores exigem tempos de amos-
tragem longos e médias dos valores adquiridos, o que pode reduzir a taxa de
atualização do dispositivo. Além disso, a quantidade de tempo por leitura no
sensor depende do tempo de eco.
11Sensores para projetos Arduino
Figura 10. Sensor ultrassônico.
Fonte: Adaptada de Random Nerd Tutorials (2019).
Transmissor
Receptor
Onda re�etida (eco)
Distância
Onda original
Objeto
Acelerômetros
Os acelerômetros medem forças de aceleração. Essas forças podem ser es-
táticas, como a força de gravidade constante, ou dinâmicas, como aquelas
causadas pelo movimento do dispositivo.
Há mais de uma maneira de construir um acelerômetro, mas todas incluem
estruturas micromecânicas que se movem sob força e, assim, causam uma
alteração nas propriedades elétricas do dispositivo. Muitos acelerômetros vêm
com um minúsculo cristal piezoelétrico em seu interior, que, quando estressado
por movimentos súbitos, produzirá uma tensão mensurável. Outros vêm com
estruturas em miniatura que coletivamente carregam uma capacitância, que
muda conforme uma dessas estruturas se move em relação a outra.
Geralmente, a maioria dos acelerômetros mede forças ao longo de três eixos
(X, Y e Z) e pode variar em sensibilidade e oscilações máximas. A conexão
do acelerômetro pode ser feita nas entradas analógicas do Arduino; alguns
modelos fazem a transferência dos dados por meio de comunicação serial.
Sensores para projetos Arduino12
Esse tipo de sensor é capaz de informar a inclinação do equipamento e de
identificar se o direcionamos para cima, para baixo, para a esquerda ou direita,
podendo ser aplicado em controle de drones, robôs etc. Veja a Figura 11.
Figura 11. Acelerômetro.
Fonte: Souza (2015).
Fenômenos e meios de medição
Vejamos a seguir outros fenômenos físicos e seus princípios de medição
(MORRIS, 2001).
Temperatura
Instrumentos para medir a temperatura podem ser divididos em classes separa-
das de acordo com o princípio físico em que operam. Os principais princípios
utilizados são:
� efeito termoelétrico;
� mudança de resistência;
� sensibilidade do dispositivo semicondutor.
Os sensores de efeito termoelétrico partem do princípio físico de que,
quando dois metais estão ligados entre si, é gerada uma força eletromotriz,
uma tensão, em função da temperatura a qual o sensor está exposto.
13Sensores para projetos Arduino
Este tipo de sensor é conhecido como termopares. Os termopares são uma
classe muito importante de dispositivo, mais comumente usados para medir
temperaturas na indústria. Os termopares são padronizados por letras (K, J,
etc.) para identificar quais são os materiais envolvidos e assim permitir uma
adequada seleção para aplicação. Algumas combinações de materiais são
adequadas para baixas temperaturas, ou ambientes corrosivos, ou altíssimas
temperaturas, por exemplo, como você pode ver na Figura 12.
Figura 12. Tabela de força eletromotriz versus temperatura para vários tipos de
termopares.
Fonte: Temrmopares (2013).
Outra maneira de medir temperatura é por meio de termistores. Eles são
fabricados a partir de grânulos de material semicondutor, preparados a partir
de óxidos do grupo do ferro, de metais como cromo, cobalto, ferro, manga-
nês e níquel. Normalmente, termistores têm um coeficiente de temperatura
negativo, ou seja, a resistência diminui à medida que a temperatura aumenta,
porém de forma não linear.
Sensores para projetos Arduino14
Força
Na medição de força, a força é avaliada utilizando-se células de cargas, que
têm como princípio de funcionamento a deformação elástica de um material,
geralmente metálico, cuja deformação é linear e diretamente proporcional à
força aplicada. A deformação é regida pela lei de Hooke.
Para essa medição são utilizados strain-gauges, que, como vimos, são
resistências em formato de lâminas coladas na superfície do corpo metálico.
Conforme a força é aplicada ao corpo, ou célula de carga, a resistência sofre
variação, e essa variação é percebida pelo circuito eletrônico, que então é capaz
de informar para o microcontrolador a deformação, que calcula a força aplicada.
Da medição de força derivam muitas outras medições de grandezas fí-
sicas, como pressão, torque e até mesmo volume. Todos esses partem do
mesmo princípio de medição: uma força aplicada sobre um elemento metálico
causa deformação elástica, e essa deformação é medida e informada para o
microcontrolador.
A sensibilidade à deformação do strain-gauge é expressa quantitativamente
como fator de gauge (GF). GF é a relação entre a variação relativa de resistência
elétrica e a variação relativa em comprimento,ou deformação.
Para medir variações pequenas de resistência, as configurações de strain-
-gauge são baseadas no conceito de ponte de Wheatstone. Uma ponte Wheat-
stone genérica é uma rede formada por quatro braços resistivos e uma tensão
de excitação aplicada na ponte.
Figura 14. Ponte de Wheatstone.
Fonte: National Instruments (2019).
15Sensores para projetos Arduino
Tensão elétrica
Independentemente da grandeza física que vamos medir, sempre iremos nos
deparar com a medição da tensão elétrica. Isso porque as entradas analógicas do
Arduino funcionam com a leitura de tensão aplicada sobre os pinos analógicos.
A tensão elétrica, também chamada de força eletromotriz, é a diferença
de potencial elétrico entre dois pontos de um circuito elétrico ou eletrônico,
expressa em volts. É uma medida da energia potencial de um campo elétrico
que provoca uma corrente elétrica em um condutor elétrico.
A maior parte dos dispositivos de medição pode fazer medições de tensão.
As duas medições de tensão mais comuns são feitas em corrente contínua
(CC) e corrente alternada (CA). Apesar de as medições de tensão serem as
mais simples entre os diversos tipos de medições analógicas, elas apresentam
desafios únicos, relacionados ao ruído.
A tensão de referência do ADC interno do Arduino é de 5V (Vref = 5V).
Isso quer dizer que a tensão máxima que podemos medir sem usar um circuito
externo é de 5V. Sua resolução é de 10 bits, 210 = 1024 valores para escala de
0 a 5V. 0V corresponde a 0 leitura de ADC e 5V corresponde a 1024.
Para medir tensões mais altas do que 5V, precisamos de um divisor de tensão
externo para não exceder a tensão máxima nos pinos. O Arduino é capaz de
medir tensão somente em modo single ended, ou seja, com referência apenas
ao aterramento, não sendo possível medir a tensão diferencial entre dois pinos.
Corrente
Conforme Bolton (2004), corrente elétrica é o fluxo de carga elétrica e sua
unidade no SI é o ampere (A), que corresponde ao fluxo de 1 coulomb de
carga por segundo.
A corrente pode ser medida por diversos métodos, mas o mais comum
é a medição indireta. Ela mede a tensão entre os terminais de um resistor
de precisão e determina a corrente que passa por esse resistor com base na
principal teoria da eletricidade, a lei de Ohm. Outro método bastante usado
tem base eletromagnética e está associado a um dos primeiros medidores de
bobina móvel (d’Arsonval).
Sensores para projetos Arduino16
A lei de Ohm estabelece que, em um circuito elétrico, a corrente que passa por um
condutor colocado entre dois pontos é diretamente proporcional à diferença de
potencial observada entre esses dois pontos e inversamente proporcional à resistência
entre eles.
A maior parte dos amperímetros atuais se baseia na lei de Ohm. Os am-
perímetros modernos são, basicamente, voltímetros com um resistor de pre-
cisão. Usando a lei de Ohm, é possível fazer medições com exatidão e ótimo
custo-benefício.
Para medir correntes maiores, você pode incluir um resistor de precisão,
chamado de shunt, em paralelo com o medidor. A maior parte da corrente
flui pelo shunt e apenas uma fração flui pelo medidor. Esse recurso permite
que o medidor trabalhe com valores de corrente mais altos. Qualquer resistor
pode ser utilizado, desde que a corrente máxima esperada multiplicada pela
resistência não ultrapasse a faixa de entrada do amperímetro ou do dispositivo
de aquisição de dados.
Se medir a corrente dessa maneira, você precisará utilizar um resistor
de menor valor possível, para que ele crie interferência mínima no circuito
original. Resistências menores criam quedas de tensão menores, ou seja, é
preciso escolher entre ter resolução ou interferência no circuito.
Veja na Figura 15 a medição de corrente com o shunt.
Figura 15. Medição de corrente utilizando resistor shunt.
Fonte: National Instruments (2017).
17Sensores para projetos Arduino
Os métodos de medição de grandezas físicas apresentados estão entre
os mais utilizados. A área de instrumentação é muito abrangente e existem
muitas soluções de transformação para que a grandeza possa ser mensurada
e então interpretada pelo microcontrolador.
Integrando sensores com o Arduino
Um dos recursos do Arduino que o tornam tão versátil e popular são os shields.
Os shields são placas de circuito que podem ser conectadas ao Arduino para
expandir suas capacidades, possibilitando uma infinidade de aplicações de
maneira simples e rápida. Essas placas podem ter displays de LCD, sensores,
módulos de comunicação ou relés, por exemplo (LEMOS, 2013).
Shields normalmente precisam de bibliotecas específicas para funcionarem
corretamente. Algumas já vêm como bibliotecas padrão do Arduino, mas
muitas precisam ser baixadas do site do fabricante do shield e instaladas no
ambiente de desenvolvimento (IDE) do Arduino.
Vejamos um exemplo. Vamos dar ao Arduino a funcionalidade de data-
logger, que é um registrador de dados. Para isso vamos utilizar um Arduino
Uno, um módulo RTC DS3231 e um módulo cartão SD. Nosso projeto vai
registrar os dados de data, hora e temperatura a cada 1 minuto, gravando-os
em um arquivo de texto no cartão SD (THOMSEN, 2015).
O módulo RTC é um Real Time Clock, que é um circuito integrado que
faz a contagem do tempo, informando data e hora. Ele tem uma bateria para
manter seu relógio interno em funcionamento quando não estiver com ali-
mentação externa — assim, não é necessário corrigir a data cada vez que se
desliga o módulo. A comunicação do módulo é feita pela interface I2C, possui
alimentação de 3,3V a 5V e trabalha com nível de sinal de 5V, podendo ser
ligado diretamente ao microcontrolador.
O módulo cartão SD é uma memória externa tipo flash que funciona
como um pendrive. Com ele é possível guardar informações e fazer a leitura
dos dados posteriormente. Em nosso projeto, vamos utilizá-lo para guardar
os dados de data hora e temperatura coletados. Veja na Figura 16 como fica
a montagem do circuito do nosso datalogger.
Sensores para projetos Arduino18
Figura 16. Montagem do circuito do datalogger.
Fonte: Thomsen (2015).
Para este projeto, precisamos utilizar as bibliotecas SPI, Wire e SD, já
presentes na IDE do Arduino, e mais três bibliotecas que precisarão ser insta-
ladas: Time, DS3232RTC e Streaming. Baixe as três bibliotecas e coloque-as
dentro da pasta LIBRARIES da IDE do Arduino.
O código que captura a data e a hora do módulo é baseado no programa de
exemplo SetSerial, da própria biblioteca. Então adiciona-se no cartão SD a
função de gravar as informações de data, hora e temperatura a cada 1 minuto.
Outra solução que podemos criar utilizando sensores no Arduino é um
monitor residencial de consumo de energia elétrica. Esse tipo de projeto tem
um grande apelo ecológico, ambiental e econômico, uma vez que é possível
monitorar o consumo de uma residência em tempo real e identificar os eletrodo-
mésticos ou dispositivos que mais contribuem para o custo de energia elétrica.
Grande parte dos medidores inteligentes disponíveis no mercado são de-
rivados de um projeto open source chamado de Open Energy Monitor. Esse
projeto desenvolve dispositivos de código aberto para fazer o monitoramento
de energia e ajudar a sustentabilidade de forma global.
19Sensores para projetos Arduino
O sistema para monitoramento de consumo de energia elétrica é um disposi-
tivo portátil que deve ser acoplado à entrada de energia na caixa de disjuntores
da residência. O sensor de corrente funciona como um alicate amperímetro
(sendo não invasivo), e o sensor de tensão faz ligação em paralelo com a en-
trada de cada fase. O sistema é em tempo real, pois envia os dados para uma
nuvem na internet, por meio do Ethernet Shield, que podem ser acessados
pelo aplicativo Blynk (BRITO, 2016).
O sensor SCT 013-000 é um transformador de corrente ideal para leituras
não invasivas, apresentando um funcionamento similar a um alicate amperíme-
tro. Visualize o SCT 013-000 e o Arduino com o Ethernet Shield nalógicos dos
bits. É semelhante às memórias, só que, enquanto as memórias só armazenam
os bits, os registradores controlam algumas ações.
Em um microcontrolador, existe um número muito grande de registradores
e algumas partes são controladas por dezenas de registradores. Devido à grande
5Introdução aos microcontroladores
diversidade de registradores dentro do microcontrolador, eles são designados
por nomes. Por exemplo, o microcontrolador ATmega128 possui o registrador
UCSRnA (USART Control and Status Register A). Esse registrador pode ser
utilizado para ler os estados e configurar um módulo do microcontrolador
ATmega128 chamado de USART.
Registrador de função especial
Além dos registradores citados anteriormente, existem os registradores de
função especial, que possuem funções predeterminadas pelos fabricantes.
Eles são interligados aos outros circuitos internos (osciladores, portas seriais,
conversores A/D, temporizadores e outros) fi sicamente e determinam o com-
portamento do microcontrolador. Normalmente, possuem 8 bits, ou seja, um
byte, e funcionam como oito interruptores para os outros circuitos dentro do
microcontrolador.
Portas de entrada e saída
Os microcontroladores, para executarem suas funções, necessitam se ligar
ao mundo externo de alguma forma. Isso é feito por meio dos registradores
conectados aos pinos do chip, chamados de portas de entrada e saída. Como
os níveis dos registradores podem ser modifi cados por software, o projetista
pode adequar as saídas e as entradas, inclusive modifi cando valores durante
seu funcionamento.
Na especificação de um microcontrolador, um dos pontos mais importantes é a corrente
máxima que os pinos podem suportar. Cada pino normalmente suporta correntes na
faixa de 5 a 25 mA. Ao verificar a corrente máxima que um microcontrolador pode
suportar, em suas especificações técnicas, você precisa ter em mente que essa corrente
é compartilhada por todos os pinos. Assim, quanto mais pinos o controlador possui,
menor é a corrente máxima que cada pino suporta.
Os pinos das portas I/O são controlados por SFR. Seus níveis lógicos
normalmente possuem em torno de 0 V ou 5 V. Por exemplo, se um regis-
trador escrever o bit 1 no pino de uma porta de I/O, a tensão nesse pino irá
Introdução aos microcontroladores6
para 5 V e esse pino será configurado como uma entrada. Por outro lado, se
o registrador apresentar o bit 0 nesse pino da porta, a tensão irá para 0 V e
ele será configurado como uma saída.
Unidade de memória
O microcontrolador precisa de vários tipos de memória para armazenar dados.
Cada posição dessas memórias é acessada por um endereço de memória e seu
conteúdo pode ser lido ou escrito. Os diversos tipos de memórias são utilizados
pelos fabricantes de acordo com seu projeto. A seguir, você pode ver os tipos
de memórias mais comuns.
ROM (Read Only Memory): é utilizada para gravar programas que são
permanentes. Só permite a leitura.
OTP ROM (One Time Programmable ROM): é utilizada para gravar
um programa apenas uma vez. É a memória em que o projetista carrega
seu programa de controle para efetuar a tarefa que ele projetou. Só pode
ser gravada uma vez. Se o projetista precisar efetuar alterações, terá
de gravar outro chip.
UV EPROM (Ultra Violet Erasable Programmable ROM): é mais
flexível do que a anterior, já que os dados podem ser apagados com
luz ultravioleta e o chip pode ser reaproveitado.
FLASH: é muito flexível. Seu conteúdo pode ser escrito e apagado
eletricamente muitas vezes.
RAM (Random Access Memory): é utilizada em quase todos os pro-
cessos do microcontrolador como memória temporária. É uma memória
volátil, ou seja, quando a alimentação é desligada, seus dados são
apagados.
EEPROM (Electrically Erasable Programmable ROM): é mais uti-
lizada no armazenamento de valores criados durante a operação do
microcontrolador, já que os dados armazenados não são perdidos quando
se desliga a alimentação. Seu conteúdo pode ser apagado eletricamente.
Unidade central de processamento
É o cérebro do microcontrolador. É ela que controla e monitora todos os
processos internos. É composta, principalmente, de um decodifi cador de ins-
truções, de uma unidade lógica aritmética e de um acumulador. Dependendo
do fabricante, existem outras unidades específi cas.
7Introdução aos microcontroladores
O decodificador de instruções é a parte da CPU que lê as instruções do
programa, as interpreta e faz com que as outras partes do circuito executem
as ações. A unidade lógica e aritmética, por sua vez, é a parte da CPU que
executa todas as operações lógicas e matemáticas do microcontrolador.
O número de instruções de cada família de microcontrolador normalmente é diferente.
É esse número que define a potencialidade do microcontrolador.
O acumulador é um registrador de função especial utilizado em conjunto
com a ULA. É onde a ULA coloca os dados que serão manipulados nas diversas
operações e armazena seus resultados para utilização nos processamentos
seguintes.
O acumulador possui um SFR que é chamado de status. Esse SFR armazena todas as
informações sobre os dados armazenados no acumulador.
Barramento
Para que o microcontrolador acesse a memória e os dados trafeguem entre
as diversas unidades, existem os barramentos. Eles são trilhas ou linhas cujo
número depende do tamanho da palavra dos dados ou do número máximo
de endereços que se precisa acessar. São de dois tipos: o de endereçamento
e o de dados.
O barramento de endereçamento é por onde a CPU envia o endereço da
memória que deve ser lida ou escrita. O barramento de dados liga todos os
circuitos internos do microcontrolador e depende de quantos bits devem ser
acessados ou transmitidos de uma vez.
Introdução aos microcontroladores8
Interfaces seriais
O microcontrolador permite comunicações paralelas entre suas portas I/O e
periféricos. Entretanto, para grandes distâncias, a transmissão paralela é cara
e depende de vários parâmetros, principalmente de sincronismo. Atualmente,
a maior parte dos microcontroladores já traz embutidos, de fábrica, diversos
sistemas de comunicações seriais. A seguir, você pode ver os mais utilizados.
I2C (Inter-Integrated Circuit): utilizado para distâncias curtas onde,
normalmente, o microcontrolador e os periféricos estão na mesma
placa. A comunicação utiliza um par de condutores: um é utilizado
para transferir dados e o outro é utilizado para o sinal de relógio, ou
seja, a comunicação é síncrona.
SPI (Serial Peripheral Interface Bus): utiliza até quatro condutores para
uma ligação full-duplex, pois usa um condutor para enviar dados e um
para receber dados simultaneamente, um para o sinal de relógio e outro
para determinar com qual dispositivo a comunicação vai ser efetuada.
Por isso, possui velocidade de comunicação maior do que a do I2C.
UART (Universal Asychronous Receiver/Transmitter): existe apenas
um condutor e a comunicação é assíncrona.
Quando há comunicação full-duplex entre dois dispositivos, os dois podem transmitir
e receber dados simultaneamente.
Oscilador
O oscilador, que normalmente utiliza um cristal de quartzo, produz um sinal
de relógio estabilizado para que todos os circuitos do microcontrolador tra-
balhem de forma síncrona. Quando a aplicação não exige grande estabilidade
na geração do sinal do oscilador, pode-se utilizar um microcontrolador com
circuito RC (resistência e capacitor), que é mais barato.
Existem microcontroladores em que todas as instruções são executadas
no mesmo número de ciclos e existem outros em que o número de ciclos por
instrução pode ser variável.
9Introdução aos microcontroladores
Conversor análogico/digital
Os sinais externos com que o microcontrolador trabalha normalmente são
analógicos. Como ele só “compreende” sinais digitais, há necessidade de um
conversor do sinal analógico para o sinal digital. O conversor A/D recebe um
sinal de tensão em um dos pinos, o converte em um sinal digitalFigura 17.
Figura 17. (a) Sensor de corrente SCT 013-000; (b) Arduino com Ethernet Shield.
Fonte: Brito (2016).
(a) (b)
BOLTON, W. Instrumentation and Control Systems. EUA: Elsevier, 2004.
BRITO, J. L. G. Sistema para monitoramento de consumo de energia elétrica particu-
lar, em tempo real e não invasivo utilizando a tecnologia Arduino. 2016. Trabalho de
Conclusão de Curso (Graduação em Engenharia Elétrica) - Universidade Estadual de
Londrina, Londrina, 2016.
DALLY, J. W.; RILEY, W. F.; MCCONNELL, K. G. Instrumentation for engineering measure-
ments. 2. ed. EUA: John Wiley & Sons, 1993.
ESHAM, B. D. Interior de uma chave de fim de curso. Brasil, 2007. Disponível em: https://
pt.wikipedia.org/wiki/Chave_fim_de_curso#/media/File:Microswitch.jpg. Acesso em:
19 maio 2019.Leituras recomendadas
Sensores para projetos Arduino20
LEMOS, M. Conheça os shields e incremente seu Arduino com eles. Brasil, 2013. Dispo-
nível em: https://blog.fazedores.com/conheca-os-shields-e-incremente-seu-arduino-
-com-eles/. Acesso em: 19 maio 2019.
MORRIS, A. Measurement e instrumentation principles. 3. ed. Oxford: Butterworth-
-Heinemann, 2001.
NATIONAL INSTRUMENTS. Medições de corrente: guia prático. Brasil, 2017. Disponível
em: https://brasilescola.uol.com.br/fisica/sistema-internacional-unidades-si.htm. Acesso
em: 19 maio 2019.
NATIONAL INSTRUMENTS. Medições de deformação com Strain Gages. Brasil, 2019.
Disponível em: http://www.ni.com/pt-br/innovations/white-papers/07/measuring-
-strain-with-strain-gages.html. Acesso em: 19 maio 2019.
RANDOM NERD TUTORIALS. Complete guide for ultrasonic sensor HC-SR04 with Ar-
duino. EUA, 2019. Disponível em: https://randomnerdtutorials.com/complete-guide-
-for-ultrasonic-sensor-hc-sr04/. Acesso em: 19 maio 2019.
SANTOS, R.; SANTOS, S. Ultimate guide for Arduino sensors/modules. EUA: Random-
NerdTutorials, 2018.
SILVA, D. C. M. D. Sistema internacional de unidades. Brasil, [2019?]. Disponível em:
https://brasilescola.uol.com.br/fisica/sistema-internacional-unidades-si.htm. Acesso
em: 19 maio 2019.
SOUZA, F. Arduino: interface com acelerômetro e giroscópio. Brasil, 2015. Disponível
em: https://www.embarcados.com.br/arduino-acelerometro-giroscopio/. Acesso em:
19 maio 2019.
TERMOPARES. Curva de variação da F.E.M. dos termopares. São Paulo, 2013. Disponível
em: http://www.termopares.com.br/teoria_sensores_temperatura_termopares_cur-
vas_variacao_fem/. Acesso em: 19 maio 2019.
THOMSEN, A. Como fazer um Datalogger com Arduino. Brasil, 2015. Disponível em:
https://www.filipeflop.com/blog/datalogger-com-arduino-cartao-sd/. Acesso em:
19 maio 2019.
WEBSTER, J. The measurement instrumentation and sensors handbook. [S. l.]: CRC
Press, 1999.
Leituras recomendadas
ALVES, J. L. L. Instrumentação controle e automação de processos. São Paulo, LTC, 2005
BALBINOT, A.; BRUSAMARELLO, V. J. Instrumentação e fundamentos de medidas. São
Paulo: LTC, 2006. v. 1.
HELFRICK, A. D.; COOPER, W. D. Instrumentação eletrônica moderna e técnicas de medição.
Rio de Janeiro: Prentice-Hall, 1994.
21Sensores para projetos Arduino
ROBÓTICA
Fernando Esquírio Torres
Atuadores para
projetos Arduino
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
� Caracterizar o funcionamento dos motores DC.
� Identificar circuitos para acionamentos dos motores utilizados em
projetos com Arduino.
� Analisar as aplicações de motores DC utilizando Arduino.
Introdução
Os motores de corrente contínua (motor DC) são utilizados, geralmente,
em robôs móveis no seu sistema de locomoção, pois seu baixo custo e
grande versatilidade no controle de velocidade garantem sua navegação
dentro de um ambiente de trabalho (PETRUZELLA, 2013). Você pode
encontrar esse tipo de motor em diversos equipamentos, como, por
exemplo, dispositivos domésticos (leitor de DVD ou Blu-ray) e brinquedos.
Neste capítulo, você vai conhecer o princípio de funcionamento
geral dos motores DC. Você vai ver as principais características técnicas
desses motores e identificar os circuitos necessários para o acionamento e
interfaceamento desse tipo de motor com a plataforma microcontrolada
Arduino.
Funcionamento de um motor DC
De acordo com Petruzella (2013), os motores de corrente contínua, tam-
bém chamados de motores DC, são um tipo de motor energizado com uma
corrente contínua, que pode ser proveniente de pilhas/baterias ou de uma
fonte de alimentação CC (como, por exemplo, carregadores de celular, fonte
chaveada ou comutada). Esse tipo de motor é recomendado para aplicações
que exigem torque preciso e acionamento de velocidade, como guindastes,
correias transportadoras, elevadores, entre outras. Segundo Monk (2014), os
motores DC podem ser classificados quanto a sua comutação em escovados
ou brushless (sem escovas).
Segundo Petruzella (2013), o motor DC tem dois terminais que, ao serem
energizados por uma bateria ou uma fonte de alimentação, produzem um
campo magnético gerado pela corrente que percorre por esses terminais. Se
você ligar os terminais do motor nos polos da bateria, como mostrado na
Figura 1, o motor vai girar no sentido anti-horário (você se lembra da regra
da mão direita, que aprendeu nas aulas de Física?). Se você inverter a ligação
dos terminais do motor com os polos da bateria, o motor irá girar no sentido
contrário.
Figura 1. Terminais do motor DC energizados por uma bateria.
Fonte: Fouad A. Saad/Shutterstock.com.
Atuadores para projetos Arduino2
De acordo com o princípio de funcionamento dos motores DC, a rotação acontece por
causa do campo magnético criado pela corrente gerada pela ligação de uma bateria
ou de uma fonte de alimentação de corrente contínua (CC). O sentido de rotação vai
depender da polarização dos terminais, que provocam uma mudança no sentido do
campo magnético gerado. A velocidade dos motores DC é controlada variando a
tensão aplicada nos seus terminais.
Você pode saber mais sobre o funcionamento de motores DC no vídeo disponível
no link a seguir, do canal Learn Engineering, que é um projeto criado para melhorar a
qualidade da educação voltada para engenharia. Para entender a operação e construção
de motores comerciais, assista ao vídeo.
https://goo.gl/4YGjVc
Stevan Junior (2015) destaca a importância de identificar as especificações
técnicas/elétricas do motor DC que você está usando ao trabalhar com esse
dispositivo, pois essas características serão úteis para um melhor aprovei-
tamento e utilização do motor. As especificações técnicas importantes são:
� tensão de operação;
� velocidade de rotação;
� corrente do motor.
Um motor DC comumente utilizado por hobbista e estudantes em seus
projetos é o modelo RF-300ca-09550 (Figura 2). Esse motor é fácil de comprar
no mercado, pois é utilizando em DVD-Rom e/ou Play Station para rotacionar
o CD/DVD.
3Atuadores para projetos Arduino
Figura 2. Motor DC utilizado em DVD-Rom e
Play Station.
Fonte: Adaptada de Mabuchi Motor ([201-?]).
O Quadro 1 mostra as principais características do motor RF-300ca-09550.
Fonte: Adaptado de Mabuchi Motor ([201-?]).
Tensão Sem carga
Na máxima
eficiência
Travado
Faixa
de ope-
ração
Nomi-
nal
Veloci-
dade
Cor-
rente
Veloci-
dade
Cor-
rente
Corrente
rpm A rpm A A
1 – 6V 3V 2700 0.012 2100 0.042 0.15
Quadro 1. Especificações técnicas do motor RF-300ca-09550
Perceba, no Quadro 1, que a primeira especificação técnica é a faixa de
operação da tensão do motor, que, de acordo com Margolis (2012), representa
os valores mínimos e máximos que você pode alimentar o motor (nesse caso
de 1 a 6V). Já a tensão nominal (3V) é o valor que seu motor precisa para
funcionar corretamente.
Atuadores para projetos Arduino4
A segunda especificação técnica é a velocidade de rotação, que é medida
em rpm (rotações por minuto). Ela representa a quantidade de voltas que o motor
dá por unidade de tempo, neste caso por minuto. Assim você tem 2700 rpm,
quando o motor está sem carga, e 2100 rpm na máximaeficiência.
Por fim, a terceira especificação técnica é a corrente necessária para
rotacionar o motor. Neste caso, você tem 12 mA quando o motor está sem
carga, 42 mA na eficiência máxima e 150 mA com o motor travado. Existe
também a corrente de pico, que é a corrente necessária para iniciar o movi-
mento do motor, ou seja, tirar o motor da inércia. Ela normalmente tem um
valor próximo da corrente com o motor travado (+/- 150 mA).
Veja mais sobre as especificações técnicas desse motor e de outros motores semelhantes
no seu datasheet, que pode ser acessado no link a seguir.
https://goo.gl/9kigwA
Circuitos para acionamentos de motores DC
usando o Arduino
Segundo Culkin (2018), para controlar um motor DC é necessário correntes
mais altas do que as fornecidas pelos microcontroladores, pois microcontrola-
dores têm limitação de corrente nos pinos de saída. De acordo com McRoberts
(2011) e Banzi e Shiloh (2015), o Arduino fornece uma corrente de saída nos
seus pinos de 40 mA. Esse valor não é suficiente para rotacionar o motor DC
na sua máxima eficiência e muito menos para iniciar o movimento de rotação
(sair da inércia) do motor DC. Por isso, é necessário um circuito de acionamento
para fazer a interface entre o motor e o Arduino, permitindo movimentá-lo e
controlar sua velocidade.
Sendo assim, você precisa conhecer alguns dos circuitos existentes para o
acionamento de motores utilizando a plataforma microcontrolada Arduino. A
seguir, serão apresentados dois circuitos para fazer a interface entre motores
DC e o Arduino, de forma a acioná-los.
5Atuadores para projetos Arduino
Circuito de acionamento com transistor
Segundo Monk (2014), o circuito de acionamento de motores DC mais simples
para você montar, utilizando a plataforma Arduino, é composto de um tran-
sistor, um resistor e um diodo. Nesse circuito, que você pode ver na Figura 3,
o transistor funciona como uma chave de liga e desliga e permite controlar o
motor utilizando apenas um pino de saída digital do Arduino.
Figura 3. Circuito de acionamento do motor com transistor.
Fonte: Adaptada de Monk (2014, p. 137).
GND
D11 R1
D1 M
b
e
c
T1
12V CC
Fonte de
alimentação
GND
12V Vin Vin
270 V
Arduino
270 Ω
A fonte de alimentação pode ser pilhas/baterias ou uma fonte de corrente
contínua, desde que forneçam tensão e corrente suficientes para o funcio-
namento do circuito e controle do motor. De acordo com Culkin (2018), o
transistor do tipo NPN é utilizado como uma chave/interruptor de sinal elétrico
e seus três pinos são:
� emissor (e);
� base (b);
� coletor (c).
Atuadores para projetos Arduino6
O pino do emissor está ligado ao GND, a base está ligada ao pino 11 do
Arduino em série com um resistor e o pino coletor está ligado à alimentação
5V em série com o diodo e o motor.
Veja na Figura 4 o circuito montado no protoboard. Nele foi utilizado o
transistor BC639, um resistor de 270Ω, um diodo 1N4007, um motor DC,
um Arduino UNO e cabos para conexão. Se você for montar o seu circuito, é
importante prestar a atenção na posição do transistor: certifique-se de que a
parte reta fique virada para você.
Figura 4. Circuito de acionamento do motor com o transistor
NPN BC639, resistor de 270Ω e diodo 1N4007.
7Atuadores para projetos Arduino
Durante a montagem do circuito, certifique-se de que a alimentação está desligada,
pois, caso esteja ligada, isso pode causar danos ou até queimar os componentes
utilizados.
O código do sketch para o funcionamento do circuito é relativamente sim-
ples — veja um exemplo na Figura 5. Conforme descrito por Banzi e Shiloh
(2015), o passo necessário para construir o código para acionar o circuito
da Figura 3 é, basicamente, configurar o pino 11 como saída digital — isso
permite o firmware “escrever” níveis de tensão (Alto/High ou Baixo/Low) no
pino. Desse modo, para ligar o motor, basta você colocar um nível de tensão
alto (5V, HIGH no Arduino) no pino de saída e para desligar o motor um nível
de tensão baixo (0V, LOW no Arduino).
No código mostrado na Figura 5, a diretiva #define (#define MOTOR 11)
estipula um “apelido” para representar o pino 11 do Arduino. Essa é uma boa
técnica de programação que deixa mais claro, organiza e facilita a manutenção
do programa. De acordo com Evans, Noble e Hochenbaum (2013), o comando
#define cria uma macro (apelido) que está associada a um valor, uma sequência
de caracteres ou um comando.
Na função setup(), o comando pinMode(MOTOR, OUTPUT), na linha 13,
configura o pino 11 como saída digital. No loop principal, o comando
digitalWrite(MOTOR, HIGH) liga o motor DC na sua máxima eficiência,
pois esse comando coloca um nível de tensão alto (5V) no pino de saída digital,
e ele fica ligado por 2 segundos (2000 milissegundos) devido ao comando de
espera ocupada delay(2000). Por último, o comando digitalWrite(MOTOR,
LOW) desliga o motor, pois esse comando coloca um nível de tensão baixo
(0V) no pino e ele fica desligado por 500 milissegundos devido ao comando
delay(500). Essa lógica principal fica executando em loop até você desligar
o Arduino (McROBERTS, 2011).
Esse primeiro circuito de acionamento tem a desvantagem de fazer o motor
girar apenas em um sentido, que vai depender da conexão dos terminais no
protoboard e de como você alimenta os terminais do motor. Mesmo assim,
esse circuito é importante para entendermos o funcionamento e o controle de
um motor DC utilizando o Arduino, e pode ser aplicado em um projeto de um
robô móvel que anda somente para frente, por exemplo, assim o motor tem
que girar apenas em um sentido.
Atuadores para projetos Arduino8
Figura 5. Código para o acionamento do motor DC com transistor.
Circuito de acionamento com ponte H
Quando você quiser mudar o sentido de rotação, deverá utilizar uma ponte H
(Figura 6), que, segundo Monk (2014), é um circuito eletrônico que possibilita
controlar o sentido de rotação do motor DC, além de fornecer a tensão e a
corrente necessárias para o funcionamento do motor. Essencialmente, a ponte
H é um conjunto de 4 chaves (transistores) eletrônicas(os) operadas(os) aos
pares (Figura 7). Ligando-se S1 e S4 simultaneamente, a corrente circulará
em um sentido pelo motor. Por outro lado, com S2 e S3 ligadas, a corrente
circulará em sentido oposto, e o giro do motor será no sentido oposto.
9Atuadores para projetos Arduino
Figura 6. Circuito de acionamento ponte H.
Fonte: Adaptada de Monk (2014, p. 138).
+V
–V
S1
S2
S3
S4
A B
M
Figura 7. Circuito de acionamento do motor com a ponte H L298N.
+5Vcc
Arduino 9
8
+12V
+5Vcc
Ponte H
O
U
T
A
GND
IN1
IN2
OUT1
OUT2
M
Atuadores para projetos Arduino10
Margolis (2012) destaca que existem vários shields ou módulos de ponte
H para acionar um motor DC com o Arduino. Aqui, você verá a montagem do
circuito utilizando o módulo ponte H L298N. Esse módulo L298N é chamado
ponte H dupla, pois pode controlar até dois motores de forma independente.
O circuito esquemático para acionar um motor DC utilizando a ponte H e o
Arduino é mostrado na Figura 7. Nessa imagem esquemática, a ponte H é
alimentada com 5V e GND da placa Arduino; neste caso, serão necessários
dois pinos de saída digital para controlar o motor (pino 8 e pino 9), ligados
nos pinos IN1 e IN2 da ponte H, pois o motor DC está ligado nas saídas
OUT1 e OUT2.
O Quadro 2, a seguir, mostra as conexões do módulo da ponte H L298N
e algumas sugestões de onde liga-las no Arduino.
Nome da
porta
Estado Descrição
+12V
power
- Atenção: alimentação externa (5V a 35V).
Deve ser ligada ao pino de 5V do Arduino.
power
GND
- Conexão para o GND da fonte de alimentação externa.
Deve ser ligada ao pino GND do Arduino.
+5V
power
- Atenção: saída de 5V.
ENA Entrada Habilita (1) /Desabilita (0) motor A —
jumper disponível.
IN1 Entrada Controle de velocidade do motor A.
É um sinal PWM do Arduino.
IN2 Entrada Sentido de giro do motor. É um sinal lógico fornecido
pelo Arduino: HIGH = horário, LOW = anti-horário.ENB Entrada Habilita (1) /Desabilita (0) motor B —
jumper disponível.
IN3 Entrada Controle de velocidade do motor B.
É um sinal PWM do Arduino.
IN4 Entrada Sentido de giro do motor. É um sinal lógico fornecido
pelo Arduino: HIGH = horário, LOW = anti-horário.
Quadro 2. Especificações técnicas do módulo ponte H L298N
(Continua)
11Atuadores para projetos Arduino
Quadro 2. Especificações técnicas do módulo ponte H L298N
Nome da
porta
Estado Descrição
OUT A
(2 pinos)
Saída Ligação do motor A.
OUT A = {OUT1, OUT2}
OUT B
(2 pinos)
Saída Saída para o motor B.
OUT B = {OUT3, OUT4}
5V enable - Se o jumper estiver conectado no pino 5V_EN, o
LM7805 irá fornecer 5V para alimentar o CI L298N.
Caso o jumper seja desconectado do pino, será
necessário fornecer 5V para o chip L298N.
(Continuação)
Você pode visualizar na Figura 8 o código do Arduino para o acionamento
do motor DC utilizando o circuito de ponte H.
No código da Figura 8, as diretivas #define (#define IN1 9 e #define IN2 8)
estipulam “apelidos” para representar os pinos 9 e 8 do Arduino. Na função
setup() do código, os comandos pinMode(IN1, OUTPUT) e pinMode(IN2,
OUTPUT) configuram o pino 9 e 8 como saída digital. No loop principal, os
comandos digitalWrite(IN1,HIGH) e digitalWrite(IN2,LOW) controlam
a energização dos terminais do motor DC para girar em um sentido, e o
motor fica ligado por 5 segundos (5000 milissegundos) devido ao comando
de espera ocupada delay(5000). Em seguida, o motor é parado devido aos
comandos digitalWrite(IN1,HIGH) e digitalWrite(IN2,HIGH) por 2 se-
gundos (comando delay(2000)). Então, os comandos digitalWrite(IN1,
LOW) e digitalWrite(IN2, HIGH) invertem o sentido de rotação do motor
DC por 5 segundos (delay(5000)). Por fim, o motor para novamente por
2 segundos. O loop principal é repetido até que você desligue o Arduino
(McROBERTS, 2011).
Atuadores para projetos Arduino12
Figura 8. Código para o acionamento do motor DC com a ponte H.
Controle de velocidade de motores DC
utilizando o Arduino
Como você viu, a velocidade de um motor DC é controlada pelo valor de
tensão aplicada nos seus terminais. Segundo Monk (2014), quando você está
trabalhando com microcontroladores, inclusive com o Arduino, é possível variar
13Atuadores para projetos Arduino
a tensão de um pino de saída por meio do periférico interno responsável pela
Modulação por Largura de Pulso (PWM, Pulse Width Modulation).
Evans, Noble e Hochenbaum (2013) descreve o PWM como uma técnica
usada para obtermos variáveis analógicas por meio da duração de pulsos de
uma onda quadrada. Essa ideia está ilustrada na Figura 9, na qual é gerada uma
onda quadrada com frequência constante e a duração dos pulsos é controlada
pelo ciclo ativo de 0 a 100%.
Figura 9. Modulação por Largura de Pulso (PWM).
Nível de tensão alto 5V
Nível de tensão baixo 0V
Nível de tensão alto 5V
Nível de tensão baixo 0V
Nível de tensão alto 5V
Nível de tensão baixo 0V
Nível de tensão alto 5V
Nível de tensão baixo 0V
Nível de tensão alto 5V
Nível de tensão baixo 0V
Ciclo ativo 0%
Ciclo ativo 25%
Ciclo ativo 50%
Ciclo ativo 75%
Ciclo ativo 100%
Tensão média
0V
1,25V
2,5V
3,75V
5V
De acordo com McRoberts (2011), no Arduino, a frequência constante de
oscilação dos pulsos é, por padrão, de 490 Hz e o periférico PWM possui 8
bits. Desse modo, o controle do chamado ciclo ativo ou tempo de trabalho
(duty cycle) acontece discretamente em 256 níveis (28 bits = 256 níveis), sendo
o nível 0 igual ao ciclo ativo 0% e o nível 255 igual a 100%.
A função responsável por controlar os valores de PWM é a analogWrite(nível),
onde nível é o valor entre 0 e 255, correspondente ao ciclo ativo do pulso. O
Quadro 3 mostra alguns desses valores e seus respectivos percentuais. O
Arduino UNO tem 6 pinos de PWM, destacados com o símbolo “~” na placa
de circuito impresso (são eles: 3, 5, 6, 9, 10 e 11).
Atuadores para projetos Arduino14
O código de controle de velocidade do motor DC é mostrado na Figura 10,
a seguir. Nesse código, você pode ver o uso da função analogWrite com os
níveis de ciclos ativos mostrados no Quadro 3, mais adiante, para aumentar
e diminuir a velocidade do motor DC. O circuito utilizado para esse código
é o mostrado na Figura 3 (circuito simples com transistor).
Figura 10. Código para o controle de velocidade do motor DC.
15Atuadores para projetos Arduino
Ciclo ativo (%) analogWrite()
0 0
25 64
50 128
75 171
100 255
Quadro 3. Ciclo ativo versus valor da função analogWrite
No código mostrado na Figura 10, o comando analogWrite( ) confi-
gura a saída do sinal PWM no pino digital indicado. A sintaxe da função é:
analogWrite(PINO, VALOR_DA_ESCALA), onde o pino pode ser qualquer um
dos pinos de PWM disponíveis no Arduino e o valor de escala deve ser valores
entre 0 e 255 (McROBERTS, 2011). O código da Figura 10 faz o aumento da
velocidade do motor DC a cada 2 segundos na escala de incremento de 25%
e depois diminui a velocidade de motor na mesma escala.
BANZI, M.; SHILOH, M. Primeiros passos com o Arduino. 2. ed. São Paulo: Novatec, 2015.
CULKIN, J. Aprenda eletrônica com Arduino. São Paulo: Novatec, 2018.
EVANS, M.; NOBLE, J.; HOCHENBAUM, J. Arduino em ação. São Paulo: Novatec, 2013.
MABUCHI MOTOR. RF-300CA. [S. l.], [201-?]. Disponível em: http://www.edutek.ltd.uk/
Binaries/Datasheets/Misc/SolarMotor.pdf. Acesso em: 24 mar. 2019.
MARGOLIS, M. Make an Arduino-controlled robot: (make: projects). Sebastopol CA (EUA):
Maker Media, Inc, 2012.
McROBERTS, M. Arduino básico. São Paulo: Novatec, 2011.
MONK, S. 30 projetos com Arduino. Porto Alegre: Bookman, 2014. (Série Tekne).
PETRUZELLA, F. D. Motores elétricos e acionamentos. Porto Alegre: Bookman, 2013.
(Série Tekne).
Atuadores para projetos Arduino16
STEVAN JUNIOR, S. L. Automação e instrumentação industrial com Arduino: teoria e
projetos. São Paulo: Saraiva, 2015.
Leituras recomendadas
ARDUINO. AnalogWrite(). [S. l.], 2019b. Disponível em: https://www.arduino.cc/reference/
pt/language/functions/analog-io/analogwrite/. Acesso em: 24 mar. 2019.
ARDUINO. DigitalWrite(). [S. l.], 2019b. Disponível em: https https://www.arduino.cc/
reference/pt/language/functions/digital-io/digitalwrite/. Acesso em: 24 mar. 2019.
ARDUINO. PinMode(). [S. l.], 2019a. Disponível em: https://www.arduino.cc/reference/
pt/language/functions/digital-io/pinmode/. Acesso em: 24 mar. 2019.
17Atuadores para projetos Arduino
ROBÓTICA
Cleiton Silvano Goulart
Projeto integrado
de robótica
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
� Identificar as características da ferramenta Tinkercad.
� Definir as características dos projetos eletrônicos.
� Aplicar os conceitos de projetos eletrônicos utilizando a ferramenta
Tinkercad.
Introdução
Neste capítulo, você vai conhecer o Tinkercad, uma ferramenta gratuita,
simples e muito poderosa para criar e simular circuitos eletrônicos. A partir
dele é possível desenvolver uma versão inicial de um projeto e simular
seu funcionamento para verificar se está tudo certo antes de construir
um protótipo real. Além disso, você também vai conhecer quais são as
características básicas de um projeto eletrônico.
Tinkercad
O Tinkercad é uma plataforma on-line da Autodesk feita para projetar e fabricar
os mais variados projetos. Ele é composto por ferramentas que permitem o
projeto tridimensional de peças, o projeto e a simulação de circuitos eletrôni-
cos e a programação em códigos de forma estruturada, em blocos. Seu uso é
totalmente gratuito, e basta a criação de uma conta de usuário para acessá-lo
(O TINKERCAD..., [2019]).
O acesso ao Tinkercad está disponível no link a seguir.
https://qrgo.page.link/FGYW
Logo na página inicial do Tinkercad, é possível encontrar uma galeria com
vários projetos criados por outros usuários. Existe ainda um blog com vários
artigos para orientar e instruir os usuários sobre o próprio Tinkercad e sobre
tecnologiascorrelacionadas, como impressão 3D. Após o usuário acessar o
sistema do Tinkercad com uma conta de usuário, é possível encontrar ainda
alguns tutoriais.
O Tinkercad possui duas ferramentas fundamentais: Projetos 3D e Cir-
cuitos. A Figura 1 mostra como acessar cada uma delas. Com a ferramenta
Projetos 3D é possível construir qualquer peça de forma simples e intuitiva
pelo navegador de internet. Já com a ferramenta Circuitos é possível desenhar
circuitos eletrônicos e ainda realizar sua simulação. As simulações realizadas
por essa ferramenta suportam desde circuitos analógicos simples até projetos
envolvendo o Arduino.
O Arduino é uma plataforma eletrônica de código aberto que permite
usar circuitos eletrônicos programáveis por meio dos microcontroladores
(WHAT..., [2019]).
Figura 1. Interface padrão do Tinkercad.
Acesso à ferramenta Projeto 3D
Acesso à ferramenta Circuitos
Projeto integrado de robótica2
Características dos projetos eletrônicos
Nos projetos de robótica, muitas vezes é necessário o uso de circuitos eletrôni-
cos para controlar motores, monitorar sensores e outras aplicações específicas.
Todo projeto eletrônico é constituído de fonte de alimentação, condutores e os
componentes elétricos ou eletrônicos. Os componentes elétricos/eletrônicos
podem ser resistores, indutores, capacitores, diodos, transistores, circuitos
integrados, relês, motores elétricos, LEDs, sensores diversos, entre outros.
Vejamos os fundamentos de cada um desses componentes essenciais dos
projetos eletrônicos.
Fonte de alimentação
A fonte de alimentação é responsável por fornecer a energia elétrica para o
circuito. Ela pode ser produzida a partir de pilhas, baterias, transformadores
e fontes de alimentação externas. Uma fonte de alimentação externa consiste
em um circuito eletrônico que recebe a energia elétrica da concessionária por
meio da tomada elétrica e converte essa energia de forma apropriada. Existem
ainda as fontes de alimentação ajustáveis, geralmente encontradas em labora-
tórios de eletrônica. Essas fontes de alimentação são ligadas diretamente na
tomada e permitem que a tensão de saída e vários outros parâmetros sejam
alterados, de acordo com o modelo da fonte.
Para a correta seleção da fonte de alimentação para um projeto eletrônico,
alguns aspectos devem ser observados. Se o projeto necessita se mover, como,
por exemplo, um robô seguidor de trilhas, a fonte de alimentação não pode
depender da energia fornecida pela concessionária elétrica; podem ser usadas
pilhas ou baterias. Se o projeto for estacionário, isto é, se ele ficar instalado de
forma fixa em algum lugar, como uma impressora 3D, por exemplo, recomenda-
-se utilizar alguma fonte de alimentação externa.
Tanto as pilhas e baterias quanto as fontes de alimentação externas estão
disponíveis em várias combinações de tensão e capacidade de drenagem
de corrente elétrica. As pilhas e baterias geralmente estão disponíveis em
tensões inferiores a 24V, com capacidade de drenar correntes que vão de
alguns miliamperes-hora (mAh) até algumas dezenas de amperes-hora (Ah).
Já as fontes de alimentação externas possuem uma variedade muito grande
de tensões de saída e capacidade de drenar corrente elétrica. Existem ainda
empresas que desenvolvem fontes de alimentação sob demanda, para atender
de forma bem específica a um projeto eletrônico (GUSSOW, 2009).
3Projeto integrado de robótica
Existem vários tipos de pilhas e baterias. Os tipos mais utilizados de pilhas são a pilha
comum, a alcalina e a de lítio. Essas pilhas não são recarregáveis e, uma vez que a
reação química no interior do componente se esgote, a pilha deve ser descartada.
Já os principais tipos de baterias recarregáveis podem ser chumbo-ácida, chumbo-
-ácida selada (gel), níquel-cádmio (NiCd), níquel-hidreto metálico (NiMH), íon-lítio
(Li-Ion) e íon-polímero (Li-Po).
Condutores
Nos circuitos eletrônicos, a energia elétrica deve fluir por meio dos condutores.
Existem várias formas de se montar os componentes, e a grande variável entre
essas formas é a maneira pela qual os condutores elétricos são dispostos. Os
circuitos podem ser montados em placas de prototipagem, conhecidas como
protoboard; podem ser soldados em placas perfuradas padrão e ser interligados
aos componentes eletrônicos por fios. Também pode ser desenvolvida uma
placa de circuito impresso, na qual os componentes são efetivamente soldados
em uma placa especialmente fabricada para aquele circuito.
Figura 2. Tipos de montagens eletrônicas e seus condutores elétricos: (a) protoboard; (b)
placa perfurada padrão; (c) placa de circuito impresso.
Fonte: (a) lovecreativa/Shutterstock.com; (b) Joe White/Shutterstock.com; (c) Matee Nuserm/
Shutterstock.com.
(a) (b) (c)
Projeto integrado de robótica4
As placas de prototipagem rápida (protoboard) são placas em que é
possível montar circuitos eletrônicos de forma extremamente rápida sem a
necessidade de usar soldas. A Figura 2a mostra um exemplo desse tipo de
placa. Elas possuem uma série de conectores internos que fazem a interligação
elétrica dos componentes, conforme indicado na Figura 3.
Além desses conectores, podem ser usados fios elétricos para complementar
as ligações elétricas nessas placas. Elas estão disponíveis nos mais variados
tamanhos e são indicadas para a fase inicial do projeto, quando o circuito
eletrônico ainda está sendo desenvolvido. Apesar de simples e fáceis de usar,
essas placas podem apresentar mau contato nos conectores. Portanto, ao usá-
-las, deve-se observar se os terminais elétricos e os fios estão corretamente
inseridos nos orifícios.
Figura 3. Esquema de interligação elétrica da protoboard. Os
traços indicam quais furos estão eletricamente interligados.
Fonte: Adaptada de lovecreativa/Shutterstock.com.
5Projeto integrado de robótica
Para a montagem do circuito eletrônico podem ser usadas ainda as placas
perfuradas padrão, ilustradas na Figura 2b. Essas placas são compostas de
um substrato isolante, geralmente o fenolite ou a fibra de vidro, com uma
camada de cobre fixada em um ou nos dois lados da placa. Nessas placas existe
uma série de furos com ilhas ou trilhas de cobre, nas quais os componentes
podem ser soldados. Para complementar as ligações elétricas, deve ser usada
a própria solda eletrônica ou mesmo os fios condutores.
A Figura 4 ilustra um exemplo de montagem empregando esse método.
Embora essa abordagem seja um pouco mais difícil de ser usada, devido à
necessidade de soldar os componentes, ela não apresenta os eventuais mau
contatos que podem ocorrer nas protoboards. Como a montagem dos condu-
tores elétricos é feita de forma artesanal, essa abordagem não é recomendada
quando o projeto será fabricado em grande quantidade. Estas placas são ideais
para pequenos protótipos ou para a montagem de circuitos de forma mais
rápida do que se fossem feitas placas de circuito impresso.
Figura 4. Exemplo de montagem usando a placa perfurada padrão.
Fonte: Cabin (c2019, documento on-line).
Projeto integrado de robótica6
A solda de eletrônica é conhecida como solda de estanho e é composta por um fio
de chumbo-estanho na proporção 63/37, isto é, 63% de chumbo para 37% de estanho,
com fluxo de solda no interior desse fio. Existem outras proporções disponíveis.
Essa solda à base de chumbo atualmente deve ser evitada, devido à contaminação
causada pelo chumbo. Ele é nocivo para o ser humano e para o meio ambiente. Já estão
disponíveis no mercado as soldas sem chumbo (lead-free), às quais são recomendadas
por não terem chumbo na sua composição.
As placas de circuito impresso são a solução definitiva para a montagem
de circuitos eletrônicos. Elas são compostas por um substrato isolante, seme-
lhante às placas perfuradas padrão, porém o desenho das trilhas e a posição
de cada ilha está vinculado ao circuito eletrônico. Dessa forma, essa placa
possui um lugar para cada componente do circuito e não é necessário utilizar
qualquer fio elétrico paracompor o circuito eletrônico. O problema dessas
placas é que sua confecção demanda maior trabalho do que as outras formas
de montagem. Existem várias técnicas de fabricação dessas placas e todas
envolvem o desenho da placa propriamente dita para posterior confecção.
A Figura 2c mostra um exemplo de placa de circuito impresso. Elas podem
ter trilhas condutoras em uma única face, conhecidas como placas de face
simples, ou ter trilhas nas duas faces, conhecidas como placas dupla-face. Além
disto, é possível em projetos mais complexos incluir várias faces intermediárias,
dentro do substrato, nesta abordagem a placa é composta por várias camadas.
Embora elas são vastamente utilizadas na produção em larga escala do projeto,
elas também podem ser usadas para prototipagem de circuitos eletrônicos.
Componentes eletrônicos
Os componentes eletrônicos são responsáveis pelo funcionamento do circuito
propriamente dito. Existe uma gama muito grande de componentes eletrônicos
que podem ser usados. Na Figura 5 você pode ver alguns desses componentes.
Existem componentes mais simples, como os resistores, capacitores,
indutores, diodos retificadores, LEDs e transistores, mas também existem
componentes mais complexos, como os circuitos integrados e os micro-
controladores. Além disso, alguns componentes necessitam de montagens
com dissipadores de calor, como é o caso de alguns transistores e circuitos
7Projeto integrado de robótica
integrados de potência. A maioria desses componentes pode ser facilmente
montada de qualquer uma das formas descritas para os condutores. Entretanto,
alguns componentes mais complexos — por exemplo, circuitos integrados com
muitos terminais — só podem ser montados em placas de circuito impresso.
Figura 5. Exemplos de componentes eletrônicos.
Fonte: phanu suwannarat/Shutterstock.com.
Existem ainda componentes que geralmente são montados fora das placas
de circuito impresso ou mesmo das placas de prototipagem, como é o caso dos
motores e alguns sensores. Nesse caso é necessário utilizar cabos para conectar
esses elementos ao circuito. Por causa disso, temos ainda os conectores e os
terminais, que têm uma variedade muito grande.
Projetos eletrônicos no Tinkercad
Por meio do Tinkercad é possível desenvolver projetos eletrônicos em um
ambiente totalmente virtual de forma on-line. Um aspecto significativo dessa
abordagem é a segurança. Os projetos podem ser desenvolvidos sem o risco de
queimar componentes, de forma rápida e prática. Para uma simulação inicial
do projeto, o Tinkercad é uma ferramenta muito poderosa. Apesar de ser
limitado no sentido de componentes disponíveis para o projeto, o Tinkercad
consegue atender muitos projetos eletrônicos de robótica.
Projeto integrado de robótica8
Agora veremos três projetos simples que podem ser desenvolvidos e simu-
lados no Tinkercad. O primeiro projeto consiste em uma lâmpada controlada
por uma chave simples; apesar de muito simples, esse projeto permite um
conhecimento prévio do ambiente do Tinkercad. No segundo projeto, temos
uma variação do primeiro, em que será demonstrado como usar o Tinkercad
para fazer medidas elétricas a partir do módulo de simulação. Por fim, no
terceiro projeto, será montado um circuito em que o Arduino irá controlar
um motor de corrente contínua.
Acendendo um LED
Para ilustrar os fundamentos do Tinkercad, o primeiro circuito que será apre-
sentado consiste em uma chave para acender um LED. Na Figura 6, temos o
circuito elétrico em que, ao pressionarmos uma chave, um LED irá acender
a partir de uma pilha de 9V.
Figura 6. Circuito para acender um LED com uma pilha de 9V.
9V
LED1
R1 = 470Ω
Após acessar o Tinkercad, é possível arrastar e soltar os componentes
necessários. Existem várias formas de montar esse circuito no Tinkercad.
Na Figura 7, você pode ver duas formas diferentes de construir o circuito
representado na Figura 6. Para construir esse circuito foram necessários uma
9Projeto integrado de robótica
bateria de 9V, um LED, um botão e um resistor de 470Ω. Alguns componentes
do Tinkercad têm opções que podem ser alteradas quando eles são selecionados
com a simulação desligada. Por exemplo, para alterar o valor do resistor para
470Ω, basta selecioná-lo e, na caixa que abrir, fazer as devidas alterações. Da
mesma forma é possível alterar a cor do LED e as cores dos fios.
Após montar o circuito, vamos ligar o simulador do Tinkercad e pressionar
o botão. Se tudo foi montado corretamente, o LED deve acender. A Figura 7a
mostra o LED acesso, enquanto a Figura 7b mostra o LED apagado.
Figura 7. Exemplos de montagem do circuito no Tinkercad: (a) montagem usando apenas
fios; (b) montagem usando placa de prototipagem.
(a) (b)
Fazendo medições elétricas no circuito da lâmpada
O Tinkercad também permite fazer medições elétricas nos circuitos. Para
exemplificar essa abordagem, o mesmo circuito da Figura 6 foi adaptado
para incluir um voltímetro e um amperímetro, conforme ilustra a Figura 8.
No Tinkercad existe o componente multímetro, que pode ser configurado
como voltímetro, amperímetro ou ohmímetro. Para isso, basta você colocar
o componente multímetro no circuito e selecioná-lo. Na caixa de opções que
abrir, é só mudar o modo de medida desejada. Veja na Figura 9 um exemplo
de medição de tensão e de corrente com o multímetro.
Projeto integrado de robótica10
Figura 8. Circuito para acender um LED com uma pilha de 9V, com um voltímetro
e com um amperímetro.
9V
LED1
R1 = 470Ω
Figura 9. Montagem do circuito da Figura 8, no Thinkercad. Observe que o simulador está
ativado e o botão foi pressionado.
11Projeto integrado de robótica
Controlando um motor com o Arduino
Uma montagem um pouco mais complexa pode ser feita na interface do Tinker-
cad. Agora vamos controlar um motor de corrente contínua pelo Arduino, de
acordo com a montagem que você vê na Figura 11, mais adiante. Esse circuito
foi adaptado do projeto 24 de Monk (2014).
Para esse circuito é necessário um Arduino Uno, uma placa de prototipagem,
um motor de corrente contínua, um capacitor de 100μF × 16V, um circuito
integrado L293D e fios para ligação elétrica. O Arduino será responsável por
controlar o motor. Por meio dele o motor poderá rodar no sentido horário ou
anti-horário; além disso, é possível ajustar a velocidade do motor.
Um motor de corrente contínua precisa de uma corrente elétrica que o
Arduino não consegue fornecer. Por isso, foi usado o circuito integrado L293D.
Esse componente recebe os comandos do Arduino e controla o motor. Inter-
namente ele possui um circuito chamado ponte H.
Para uma explicação mais detalhada do projeto de controle do motor, do funciona-
mento do circuito integrado L293D e do código necessário para o controle, acesse o
link a seguir e consulte o projeto 24 do livro 30 projetos com Arduino, de Simon Monk.
Após montar todo o circuito, vamos digitar na aba Código o código da
Figura 10.
Projeto integrado de robótica12
Figura 10. Código para controlar o motor.
13Projeto integrado de robótica
Figura 11. Circuito montado no Tinkercad para controle de um motor de corrente contínua
com o uso do Arduino Uno.
Fonte: Adaptada de Monk (2014).
Ao executarmos a simulação do Tinkercad, o motor irá girar e aparecerá
uma indicação sobre a velocidade do motor. Altere o valor de 220 para a
variável velocidade no código-fonte — repare que a velocidade do motor
irá mudar. Experimente valores de −255 a 255. Repare que valores negativos
fazem o motor rodar em um sentido, enquanto valores positivos o fazem rodar
em outro sentido.
CABIN, J. Circuit board. c2019. Disponível em: http://johnscabin.com/Basic_speaker/
circuitboard00a.jpg. Acesso em: 9 maio 2019.
GUSSOW, M. Eletricidade básica. 2. ed. Porto Alegre: Bookman, 2009.
MONK, S. 30 projetos com Arduino. 2. ed. Porto Alegre: Bookman, 2014.
O TINKERCAD é. Autodesk Tinkercad, [s. l.], [2019]. Disponível em: https://www.tinkercad.
com. Acesso em: 8 mai. 2019.
WHAT is Arduino.Arduino, [s. l.], [2019]. Disponível em: https://www.arduino.cc. Acesso
em: 9 mai. 2019.
Projeto integrado de robótica14
Leituras recomendadas
GEDDES, M. Manual de projetos do Arduino: 25 projetos práticos para começar. 1. ed.
São Paulo: Novatec, 2017.
MONK, S. Programação com Arduino: começando com sketches. Porto Alegre: Bookman,
2013. (Série Tekne).
MONK, S. Programação com Arduino II: passos avançados com sketches. Porto Alegre:
Bookman, 2014.
SCHULER, C. Eletrônica I. 7. ed. Porto Alegre: Bookman, 2013. (Série Tekne).
15Projeto integrado de robóticae encaminha
os bits à CPU para processamento.
Arquitetura interna
Atualmente, existem dois tipos de arquitetura interna mais utilizados pelos
microcontroladores: a arquitetura Harvard e a arquitetura von Neumann. Na
Figura 3, você pode ver, de forma esquemática, as duas arquiteturas.
Figura 3. Arquiteturas von Neumann e Harvard, respectivamente.
Na arquitetura von Neumann, as instruções dos programas são armazenadas
no mesmo espaço em que os dados são armazenados. Só existe um barramento
para que a CPU possa ler uma instrução, ou ler ou escrever dados da memória.
Como esses processamentos não podem ser executados ao mesmo tempo, o
barramento fica sobrecarregado e a comunicação se torna lenta.
Na arquitetura Harvard, existem dois barramentos com funções específicas
e duas memórias, uma para instruções dos programas e outra para dados.
Um barramento permite a leitura das instruções de uma das memórias para
a CPU, e o outro barramento permite a leitura ou escrita de dados em outra
memória. Assim, a leitura de uma instrução pode ser feita ao mesmo tempo
em que a CPU acessa a memória dos dados. Os dois barramentos podem ter,
inclusive, números de linhas diferentes.
Introdução aos microcontroladores10
Aplicações básicas dos microcontroladores
Hoje, é difícil encontrar produtos industriais com certa complexidade em que
a eletrônica não esteja envolvida. A eletrônica integra tanto veículos aéreos,
terrestres e marítimos quanto eletrodomésticos, por exemplo.
No início deste capítulo, você viu que os microcontroladores são soluções
ideais quando é necessária uma solução computacional completa que tenha
dimensões reduzidas, seja barata e possua a flexibilidade de ser programável.
Contudo, antes de optar pelos microcontroladores, você deve considerar alguns
fatores, tais como: o número de saídas e entradas necessárias, a necessidade
de comunicação serial, a necessidade de conversores A/D, a estabilidade e a
velocidade, entre outros.
À medida que os requisitos técnicos do projeto são definidos, a escolha do
microcontrolador certo, dentro da grande gama de ofertas, também é definida.
Naturalmente, você deve levar em consideração, na escolha, o preço de cada
microcontrolador e o número de unidades necessárias.
De acordo com uma pesquisa efetuada pela EDN Networks (EVANCZUK,
2013), as seguintes famílias de microcontroladores são as mais populares: Atmel
8-bit AVR, Cypress Semiconductor PSoC 1 Programmable System-on-Chip,
Freescale Semiconductor Motorola MC6800, Infineon Technologies TriCore
(TCxxxx) MCU, Microchip Technology PIC16 MCU, Silicon Laboratories
C8051F33x, STMicroelectronics STM32 e Texas Instruments MSP430.
Na Figura 4, a seguir, você pode ver um microcontrolador PIC da Motorola
em dois tipos de encapsulamento.
Figura 4. Microcontrolador PIC em dois tipos de encapsulamento.
Fonte: Adaptada de Microchip (2018).
11Introdução aos microcontroladores
Os microcontroladores são utilizados em milhares de produtos. Eles estão
presentes, por exemplo:
na eletrônica dos aviões;
na eletrônica embarcada dos veículos (freios, direção, carburação, con-
trole de estabilidade, amortecedores, multimídia e controle de diversos
dispositivos);
no controle de processos na indústria (medidores de fluxo, medidores
elétricos, sensores, motores, robôs, termostatos, painéis de acesso);
na avicultura e na suinocultura;
nos diversos dispositivos de entretenimento (brinquedos, videogames,
consoles e música);
nas telecomunicações (roteadores, switches, celulares, tablets, relógios,
GPS, bluetooth, wi-fi e outros);
na saúde e na estética (medidores de pressão, marcapassos e diversos
equipamentos médicos);
na domótica (automação residencial); e
nos eletrodomésticos.
Existem diversas aplicações práticas dos controladores. Você pode explorá-las por
meio das leituras recomendadas deste capítulo.
1. O elemento central em um
microcontrolador é a(o):
a) unidade lógica aritmética.
b) decodificador de instruções.
c) unidade central de
processamento.
d) acumulador.
e) microprocessador.
2. O circuito integrado que contém as
funções de CPU, memória, entrada e
saída de dados e funções especiais
tais como PWM e conversão A/D
em um único chip é chamado de:
a) CI programável.
b) arduino.
c) FPGA.
d) microprocessador.
e) microcontrolador.
3. Um sistema computacional é
composto por três componentes
Introdução aos microcontroladores12
EVANCZUK, S. MCU popularity perceptions. 2013. Disponível em: . Acesso em: 6 ago. 2018.
MICROCHIP: dsPIC33CH128MP202. 2018. Disponível em: . Acesso em: 6 ago. 2018.
SENA, A. S. Microcontroladores PIC. Rio de Janeiro: [s.n.], 2017. Disponível em: . Acesso em: 6 ago. 2018.
Leituras recomendadas
GIMENEZ, S. P. Microcontroladores 8051. São Paulo: Pearson, 2005.
GIMENEZ, S. P.; DANTAS, L. P. Microcontroladores PIC18: conceitos, operação, fluxograma
e programação. São Paulo: Érica, 2015.
HAUPT, A. W. Eletrônica digital. São Paulo: Blucher, 2016.
TANENBAUM, A. S.; AUSTIN, T. Organização estruturada de computadores. 6. ed. Porto
Alegre: Prentice Hall, 2013.
TOCCI, R. J.; WIDMER, N. S.; MOSS, G. L. Sistemas digitais: princípios e aplicações. 11. ed.
São Paulo: Pearson Prentice Hall, 2011.
TOKHEIM, R. Fundamentos de eletrônica digital: sistemas sequenciais. Porto Alegre:
AMGH, 2013. v. 2.
VAHID, F. Sistemas digitais. Porto Alegre: Bookman, 2008.
genéricos. Nos microcontroladores,
o componente que leva e
traz informação para o meio
externo chama-se:
a) CPU.
b) portas de entrada e saída.
c) acumulador.
d) barramento.
e) registrador de funções especiais.
4. No microcontrolador, o dispositivo
eletrônico que armazena os
níveis lógicos dos bits e controla
algumas ações é chamado de:
a) registrador.
b) memória.
c) decodificador.
d) barramento.
e) ULA.
5. As interfaces seriais mais utilizadas
nos microcontroladores são:
a) I2C, SCSI e UART.
b) USB, SPI e SCSI.
c) USB, SCSI e UART.
d) I2C, SPI e UART.
e) I2C, SPI e USB.
13Introdução aos microcontroladores
https://www.edn.com/
https://www.microchip.com/
http://livrosebookfree.blogspot.com/2017/09/pic-apostila.html
Encerra aqui o trecho do livro disponibilizado para
esta Unidade de Aprendizagem. Na Biblioteca Virtual
da Instituição, você encontra a obra na íntegra.
C08_Sistemas_Digitais.indd 18 23/08/2018 15:31:18
Conteúdo:
ROBÓTICA
Cleiton Silvano Goulart
Família ATMega
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
� Caracterizar os microcontroladores ATMega.
� Diferenciar os microcontroladores ATMega dos principais concorrentes.
� Analisar as aplicações dos microcontroladores ATMega.
Introdução
Neste capítulo, você vai conhecer a família de microcontroladores
ATMega, fabricada pela Atmel. Também irá ver quais são os recursos que
os diferenciam dos demais microcontroladores AVR (também fabricados
pela Atmel) e de outros microcontroladores, concorrentes dele.
Os microcontroladores ATMega são extremamente versáteis e apre-
sentam uma excelente relação custo-benefício, o que possibilita seu
uso em diversas aplicações de sistemas embarcados, como portões
eletrônicos, centrais de alarmes simples, sistemas robóticos de pequeno
e médio porte, entre várias outras aplicações.
Microcontroladores ATMega
A família ATMega é uma linha de microcontroladores com arquitetura
RISC 8-bits de grande sucesso, produzida pela Atmel. Ela é vastamente
utilizada nos mais variados projetos, devido à sua grande versatilidade e
excelente custo benefício. Uma característica marcante dessa família de
microcontroladores é o elevado número de recursos incluídos em um único
circuito integrado, em especial memórias para programa e variáveis– daí
a expressão MEGA.
A Atmel, fabricante inicial da família ATMega, foi adquirida pela Microchip, sua principal
concorrente, em 2016. Com isso, vários integrantes dessa família foram descontinuados.
O elevado número de canais de entrada e saída, além da memória interna
para o programa e para variáveis (memória RAM), possibilita desenvolver
aplicações e programas mais robustos e mais complexos, quando comparados
com outros microcontroladores.
No Quadro 1 você encontra alguns dos principais integrantes dessa família
e suas principais especificações. Para efeito comparativo, o microcontrolador
ATtiny2313A, que não faz parte dessa família, tem 20 pinos de entrada/saída,
2KB de memória flash e 0,128KB de memória SRAM.
Designação
Quantidade
de entradas e
saídas (pinos)
Memória
flash (para o
programa)
(KB)
Memória SRAM
(memória
dinâmica para
as variáveis)
(KB)
ATmega 8A 28-44 8 1
ATmega 16A 28-44 16 1
ATmega 32A 28-44 32 2
ATmega 328PB 32 32 2
ATmega 2560 64-100 256 8
Quadro 1. Alguns integrantes da família ATMega com especificação básica de hardware
Observe que a quantidade de pinos de entrada e saída é variável conforme
o encapsulamento do circuito integrado. O encapsulamento nada mais é do
que a carcaça (geralmente plástico epóxi) na qual o microcontrolador é dispo-
nibilizado. Para ilustrar, considere como exemplo o ATMega 328P; de acordo
com sua ficha de dados (datasheet), disponibilizada por Microchip (2019), os
Família ATMega2
encapsulamentos disponíveis para ele são DIP-28 e TQFP-32. Veja na Figura 1
como se parecem esses encapsulamentos.
Figura 1. (a) DIP-28 e (b) TQFP-32: diferentes tipos de encapsulamentos disponíveis para
o microcontrolador ATMega 328P. Observe que alguns encapsulamentos têm mais canais
de entrada/saída do que outros, porém, internamente, eles são funcionalmente iguais.
Fonte: (a) ATmega328P-PU (2009); (b) ATmega328P (2014).
(a) (b)
No link ou código a seguir, você poderá encontrar uma
relação completa de todos os microcontroladores da família
ATMega que estão em produção, além de informações
técnicas, inclusive de modelos que não são fabricados mais.
https://goo.gl/V5xwmA
Família ATxMega
Existem ainda os microcontroladores ATxMega, que pertencem a uma subfa-
mília, que conta com as vantagens da família ATMega e mais alguns recursos
de hardware, como conversores digital-analógico — DAC; blocos de proces-
samento de criptografia em nível de hardware; e maior número de canais para
os diversos protocolos de comunicação (I2C, SPI, USB, UART, USART, etc.).
Essa família também é recomendada para aplicações de tempo real.
3Família ATMega
Uma aplicação de tempo real é definida quando o fator tempo deve ser determinístico,
isto é, quando a noção de tempo deve ser bem definida. Observe que isto não significa
dizer que ele é mais rápido.
Arquitetura RISC
A arquitetura interna do processador desses microcontroladores é baseada
na estrutura RISC (Reduced Instruction Set Computer ou computador com
conjunto de instruções reduzidas). A principal consequência do uso dessa
arquitetura, de acordo com Brito (2014), é uma unidade de processamento mais
simples, mais rápida e mais eficiente, ao preço de um menor limite teórico de
endereçamento de memória.
Mesmo com os limites impostos pela arquitetura, o seu excelente desempe-
nho para aplicações de pequeno porte fez com que os microcontroladores da
família AVR e ATMega fossem adotados de forma bastante vasta pelo meio
industrial, em aplicações de eletrônica embarcada. Vários concorrentes diretos
da família AVR usam uma arquitetura similar, CISC (Complex Instruction Set
Computer ou computador com conjunto de instruções complexas), a qual tem
um desempenho ligeiramente menor do que a arquitetura RISC.
Principais características da família ATMega
Os microcontroladores da família ATMega são marcantes por sua memória de
grande capacidade para programas que demandam muitas linhas de código;
porém, além dessa memória, alguns recursos de hardware são disponibilizados
de forma mais extensiva e com mais opções, como, por exemplo, protocolos
de comunicação. Vamos ver a seguir uma breve descrição da função dos
principais recursos presentes nesses microcontroladores, com comentários
acerca de sua presença na família ATMega.
Família ATMega4
ADC
O ADC (Analog-to-Digital Converter ou CAD, conversor analógico-digital)
é um bloco geralmente presente nos microcontroladores, que permite fazer a
conversão de um nível de tensão analógica para digital (MONK, 2017). Prati-
camente todos os microcontroladores têm conversores desse tipo já incluídos,
porém, na família ATMega, é possível encontrar de 8 a 16 canais ADC com
resolução de até 12 bits, enquanto que, em outros microcontroladores con-
vencionais, você encontra até 10 canais, geralmente com resolução de 10 bits.
Quando um microcontrolador tem muitos canais ADC, ele pode fazer várias leituras
analógicas simultaneamente. Já o número de bits está relacionado com a precisão de
leitura que o ADC consegue realizar.
DAC
O DAC (Digital-to-Analog Converter ou CDA, conversor digital-analógico)
é um conversor que permite que o microcontrolador gere um sinal analógico
com base no controle desejado. Este recurso só é possível de se encontrar na
família ATxMega, com resolução de 12 bits.
Canais PWM
PWM — (Pulse Width Modulation ou modulação por largura de pulso) é
uma forma simples de gerar um sinal pseudoanalógico sem a necessidade
de usar um conversor DAC. Apesar de ser possível fazer essa modulação via
programa, muitos microcontroladores disponibilizam um recurso de hardware
para fazer tal modulação. Quando ela é feita por hardware, o programa fica
livre para fazer outras tarefas.
Os microcontroladores da família ATMega têm pelo menos 2 canais PWM
como um bloco de acessório interno do microcontrolador, sendo possível
encontrar modelos como o ATMega 2560 com 4 canais PWM de 8 bits e até
6 canais de 16 bits. Nos modelos da família ATxMega, esses recursos também
estão presentes em maior número.
5Família ATMega
Apesar de ser possível gerar um sinal pseudoanalógico a partir de um canal PWM, é
errado dizer que o PWM é uma saída analógica. Na verdade, ela é uma saída digital
pulsante em que o intervalo de tempo entre os pulsos é variado de forma que o valor
médio seja alterado conforme a necessidade. Caso seja necessário um sinal analógico
contínuo, é necessário o uso de um conversor DAC (digital para analógico).
MULT
Os modelos mais recentes da família ATMega e ATxMega também têm o
MULT, um recurso nativo de hardware que permite fazer operações de multi-
plicação de dois números de 8 bits, resultando em um número de 16 bits. Esse
recurso permite que o programa faça cálculos matemáticos avançados, com
uma performance muito superior quando comparado com os modelos que não
possuem esse recurso. Observe que uma operação com ponto flutuante (com
casas decimais) muitas vezes necessita desse recurso para obter um nível de
desempenho aceitável conforme a aplicação desejada do microcontrolador,
de acordo com Microchip (2019).
UART/USART
Os protocolos universal de comunicação serial assíncrona (UART) e uni-
versal de comunicação serial síncrona-assíncrona (USART) geralmente
são disponibilizados como um recurso adicional de hardware nos microcon-
troladores, apesar de ser possível implementá-los via programa. Entretanto,
na família ATMega, esses protocolos estão disponíveis em maior número do
que o convencional, sendo possível encontrar, por exemplo, o ATMega 2560
com até quatro canais destes. Exemplos de comunicações que necessitam desse
protocolo são o protocolo USB, o protocolo RS-232 e o RS-485, entre outros.
Família ATMega6
Os protocolos RS-232 e RS-485 são exemplos de comunicação vastamente empregada
em dispositivos e equipamentos de porte industrial.
I2C e SPI
Os protocolos I2C e SPI são protocolos de comunicação de uso geral com
dois fios (I2C) e quatro fios (SPI), que permitemque o microcontrolador se
comunique de forma eficiente com outros dispositivos de hardware em baixo
nível, como, por exemplo, conversores analógico-digital e digital-analógico em
circuitos integrados dedicados; relógios de tempo real (RTC); potenciômetros
digitais, e até mesmo outros microcontroladores. Todos os integrantes da
família ATMega possuem suporte nativo desses protocolos, com geralmente
um canal de cada protocolo. É possível colocar vários dispositivos em paralelo
em um mesmo canal, o que reduz a necessidade de mais de um canal desses
protocolos.
Aplicações práticas da família ATMega
A família ATMega, por apresentar uma excelente relação custo-benefício,
permite a construção de vários dispositivos e equipamentos. Entre as várias
aplicações, podemos citar aparelhos de medição de pressão arterial, módulos
de monitoramento de gases, impressoras 3D, robôs de pequeno porte, servo-
motores, eletrodomésticos inteligentes como panelas de pressão eletrônicas,
por exemplo. Um caso de grande sucesso dos microcontroladores da família
ATMega é a plataforma Arduino.
Plataforma Arduino
Um exemplo muito presente nos dias atuais é o Arduino. De acordo com
Monk (2017), o Arduino consiste em uma plataforma de hardware e software
de baixo custo e com estrutura de código aberto a qual facilita o processo de
prototipagem e uso de microcontroladores.
7Família ATMega
O primeiro microcontrolador usado no Arduino foi o ATMega 8, inte-
grante hoje considerado obsoleto e já fora de produção. Atualmente, existem
muitas variantes da plataforma original do Arduino, algumas utilizando mi-
crocontroladores mais simples e outras mais complexos. O Arduino Uno, hoje
considerado a versão mais acessível disponível, emprega o microcontrolador
ATMega 328. Existe ainda o Arduino MEGA, que usa o ATMega 2560, além
de muitas outras versões — algumas com processadores de outras famílias.
A diferença marcante essas versões são os recursos que o microcontrolador
disponibiliza para o usuário final: maior número de entradas e saídas digitais e
analógicas, maior espaço de memória para o programa, maior memória RAM
disponível para as variáveis, entre vários outros recursos específicos que estão
presentes nesses microcontroladores.
O Arduino emprega ainda outra vantagem presente nos microcontroladores
da família ATMega, que é a sua facilidade de programação. Enquanto que
alguns microcontroladores de outras famílias concorrentes exigem níveis de
tensões específicos e alguns exigem até mesmo sistema com luz ultravioleta,
para permitir a gravação do programa do usuário, a família ATMega facilita
esse processo de forma a não necessitar de ferramentas específicas para a
gravação.
Assim, podemos dizer que o Arduino consiste em um microcontrolador
ATMega, com a sua infraestrutura básica de operação, acrescido de um sistema
de conversão USB para SPI — que é o canal usado para a programação dos
microcontroladores ATMega.
ATMEGA328P. In: WIKIMEDIA. Brasil, 2014. Disponível em: https://en.wikipedia.org/
wiki/ATmega328#/media/File:ICIC-TQ32-X-K328-01_(16421989932).jpg. Acesso em:
21 mar. 2019.
ATMEGA328P-PU. In: WIKIMEDIA. Brasil, 2009. Disponível em: https://pt.wikipedia.org/
wiki/Ficheiro:ATMEGA328P-PU.jpg. Acesso em: 21 mar. 2019.
BRITO, A. Introdução a arquitetura de computadores. João Pessoa: Editora da UFPB, 2014.
MONK, S. Programação com Arduino: começando com sketches. 2. ed. Porto Alegre:
Bookman, 2017. (Série Tekne).
Família ATMega8
Leituras recomendadas
ARDUINO. [S. l.], 2019. Disponível em: https://www.arduino.cc. Acesso em: 21 mar. 2019.
BALBINOT, A.; BRUSAMARELLO, V. J. Instrumentação e fundamentos de medidas. 2. ed.
LTC, 2010. v. 1.
GEDDES, M. Manual de projetos do Arduino: 25 projetos práticos para começar. São
Paulo: Novatec, 2017.
MICROCHIP. AVR MCUs. [S. l.], 2019. Disponível em: https://www.microchip.com/design-
-centers/8-bit/avr-mcus/. Acesso em: 10 fev. 2019.
MICROCHIP. Datasheet do ATMega 328P. [S. l.], 2018. Disponível em: http://ww1.micro-
chip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-
DS40002061A.pdf. Acesso em: 10 fev. 2019.
MONK, S. 30 projetos com Arduino. 2. ed. Porto Alegre: Bookman, 2014. (Série Tekne).
MONK, S. Programação com Arduino II: passos avançados com sketches. Porto Alegre:
Bookman, 2015. (Série Tekne).
MONK, S. Projetos com Arduino e Android: use seu smartphone ou tablet para controlar
o Arduino. Porto Alegre: Bookman, 2014. (Série Tekne).
9Família ATMega
ROBÓTICA
Flávio Luiz Puhl Junior
História do Arduino
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
� Apresentar breve histórico da plataforma Arduino.
� Diferenciar os componentes utilizados nas placas Arduino.
� Analisar a aplicação das diferentes placas Arduino.
Introdução
O Arduino é uma plataforma aberta de prototipação eletrônica. Por ser
uma plataforma, ele não é simplesmente um hardware — é composto
por hardware (placa controladora) e software (ambiente de desenvolvi-
mento), ambos muito flexíveis e fáceis de usar. Ele é uma das principais
realizações de um movimento que só cresce no mundo: o movimento
makers, composto por representantes de uma cultura que uniu o “faça
você mesmo” à tecnologia para criar projetos em diversas áreas.
O projeto original italiano do Arduino foi refinado por pesquisadores
para se tornar mais leve, acessível e barato. Hoje, a plataforma está bas-
tante evoluída e pode ser executada em todos os sistemas operacionais
sob licença Creative Commons para hardware e licenças GPL/LGPL para
software. Isso significa que, a partir de uma placa padrão de Arduino, é
possível criar outros controladores. O mesmo vale para o software, ou
seja, qualquer pessoa pode utilizar a plataforma para criar o que quiser.
Neste capítulo, você vai conhecer a história por trás da plataforma
Arduino e suas motivações para que o projeto fosse tão aceito pela co-
munidade. Também vai conhecer os componentes que fazem parte da
placa de desenvolvimento e analisar algumas aplicações interessantes.
O que é o projeto Arduino?
O Arduino faz parte do conceito de hardware e software livre e está aberto
para uso e contribuição de toda a sociedade. O conceito do Arduino surgiu
na Itália, em 2005, com o objetivo de criar um dispositivo que pudesse ser
utilizado em projetos ou protótipos construídos de forma menos dispendiosa
do que outros sistemas disponíveis no mercado.
O Arduino foi projetado com a finalidade de ser de fácil entendimento
e programação, além de ser multiplataforma, podendo ser configurado em
ambientes Linux, Mac OS e Windows. Outro grande diferencial desse recurso
é ser mantido por uma comunidade que trabalha na filosofia open source,
desenvolvendo e divulgando gratuitamente seus projetos sob licenças Creative
Commons.
Creative Commons, ou apenas CC, é uma organização sem fins lucrativos que permite
o compartilhamento e o uso de conhecimento por meio de instrumentos jurídicos
gratuitos. Com uma rede de funcionários, um conselho e uma rede global de colabo-
radores, o CC oferece licenças de direitos autorais gratuitas e fáceis de usar para criar
uma maneira simples e padronizada de dar ao público a permissão de compartilhar e
usar seu trabalho criativo. O CC protege as pessoas que utilizam o trabalho de terceiros,
para que não tenham que se preocupar com violação de direitos autorais — desde
que respeitem as condições especificadas pelo dono do trabalho.
O equipamento do Arduino é uma plataforma de computação física: trata-
-se de um conjunto de sistemas digitais ligados a sensores e atuadores, que
permitem construir sistemas que percebam a realidade e respondam com
reações. Ele é baseado em uma placa com microcontrolador, com acessos
de Entrada/Saída (I/O), sobre a qual foram desenvolvidas bibliotecas com
funções que simplificam a sua programação, com sintaxe similar à utilizada
nas linguagens C e C++.
História do Arduino2
O Arduino é umaplataforma de hardware programável e flexível projetada
para artistas, designers, makers e inventores de coisas. Em muito pouco tempo,
a pequena placa azul do Arduino motivou uma nova geração de makers de
todas as idades, possibilitando a realização de projetos desde no ambiente
universitário até em festivais de arte. Os projetos baseados em Arduino cos-
tumam exigir pouca ou nenhuma habilidade de programação ou conhecimento
de teoria eletrônica — esse conhecimento geralmente é obtido ao longo do
caminho (EVANS, 2011).
Capitaneado por Massimo Banzi como uma modesta ferramenta para
seus estudantes no Interaction Design Institute Ivrea (IDII), o Arduino gerou
uma revolução internacional do tipo “faça você mesmo” (ou DIY, da sigla em
inglês para do it yourself ) na eletrônica. Você pode adquirir uma placa por
um valor muito baixo (a ideia é que custe o equivalente a jantar uma pizza em
um restaurante) ou construir o seu próprio a partir do zero: todos os esquemas
de hardware e código-fonte estão disponíveis gratuitamente sob licenças
públicas. Como resultado, o Arduino tornou-se o recurso open source mais
influente do seu tempo.
O projeto tinha um desafio: como ensinar eletrônica aos alunos rapidamente.
Era 2002 e Banzi havia sido contratado pelo IDII como professor associado
para promover novas formas de fazer design interativo — um campo nascente,
às vezes conhecido como physical computing. Com um orçamento cada vez
menor e tempo de aula limitado, suas opções de ferramentas eram poucas.
Como muitos de seus colegas, no início Banzi contou com o microcontro-
lador BASIC Stamp, criado pela empresa californiana Parallax e utilizado por
muitos engenheiros havia cerca de uma década. Codificado com a linguagem
de programação BASIC, o Stamp era uma pequena placa de circuito — essen-
cialmente, uma fonte de alimentação, um microcontrolador, memória e portas
de Entrada/Saída para conectar hardware. Mas o BASIC Stamp tinha dois
problemas: não tinha poder de computação suficiente para alguns dos projetos
que os alunos tinham em mente e também era caro demais (KUSHNER, 2011).
3História do Arduino
Figura 1. Primeiro protótipo do Arduino, quando o projeto ainda não tinha
esse nome.
Fonte: Kushner (2011).
A proposta era que o Arduino consistisse em peças baratas que poderiam
ser facilmente encontradas se os usuários quisessem construir suas próprias
placas. Um ponto fundamental da proposta era garantir que o equipamento seria
plug-and-play: algo que alguém poderia tirar de uma caixa, conectar em um
computador e usar imediatamente. Placas como o BASIC Stamp exigiam que
os usuários utilizassem outros hardwares periféricos, que adicionavam custo.
Com o desenvolver do projeto, foram produzidas, em caráter experimental,
algumas dezenas de placas Arduino, já com um design muito próximo do que
temos hoje no mercado. Essas placas foram distribuídas aos alunos da IIDI e a
aceitação foi muito boa, diminuindo a curva de aprendizagem e possibilitando
a aplicação quase que imediata de eletrônica — um assunto que antes exigia
conhecimento prévio.
História do Arduino4
Hoje o Arduino conta com dezenas de versões para as mais diversas apli-
cações, sejam elas industriais, sejam comerciais, para hobistas, weareables,
Internet das Coisas, etc. Essa democratização da eletrônica microcontrolada
foi uma revolução, pois tornou acessível a todos o uso do estado da arte da
tecnologia disponível atualmente.
O nome Arduino veio do nome de um pub italiano frequentado pelos criadores da
plataforma, chamado Bar di Re Arduino, ou Bar do Rei Arduino.
A placa de desenvolvimento Arduino
e seus recursos
O Arduino é composto de duas partes principais: placa Arduino, que é o
hardware que trabalhamos quando construímos os objetos, e o Arduino IDE,
o software que executamos no computador. Utilizamos o IDE para criar um
sketch (um pequeno programa de computador) e fazemos upload para a placa
Arduino. O sketch é o programa que controlará o Arduino (MASSIMO, 2011).
Existem inúmeras variações do Arduino, para diferentes aplicações, porém a
mais utilizada é a versão Uno, que está em sua terceira revisão. Vamos ver agora
as principais características do hardware do Arduino Uno (SOUZA, 2013).
A placa pode ser alimentada pela conexão USB ou por uma fonte de ali-
mentação externa. A alimentação externa é feita através do conector Jack,
com positivo no centro, ou através do pino VIN, em que o valor de tensão deve
estar entre os limites de 7V a 12V, para que tenha comportamento estável e
não aqueça demais.
Note que o diodo D1 tem a função de proteger a placa de uma ocasional
inversão de polaridade, quando utilizando a fonte externa.
5História do Arduino
Figura 2. Arduino Uno e esquema da fonte de alimentação.
Fonte: Adaptada de Arduindo ([201-?]).
USB
Fonte externa
6VDC a 12VDC
Regulador de tensão 5V
Diodo de proteção de
inversão de polaridade
LED indicador de
placa alimentada
O Arduino ainda tem um fusível de proteção resetável de 500mA, que
protege a porta USB do computador em caso de sobrecorrente. Também conta
com um circuito para comutar a alimentação automaticamente entre a tensão
da USB e a tensão da fonte externa. Caso haja uma tensão no conector da fonte
de alimentação externa (conector Jack ou VIN) e a USB esteja conectada, a
tensão de 5V será proveniente da fonte externa e a USB servirá apenas para
comunicação com o PC.
Ao utilizar a fonte externa, você deverá escolher entre utilizar o conector Jack ou o VIN.
Não utilize os dois ao mesmo tempo, pois podem ocorrer danos à fonte.
Existe na placa um regulador de 3,3VDC. Esse componente é responsável
por fornecer uma tensão contínua de 3,3V para a alimentação de circuitos ou
shields que necessitem desse valor de tensão. Deve-se ficar atento ao limite
máximo do valor da corrente que esse regulador pode fornecer, que, neste
caso, é de 50mA.
História do Arduino6
O componente principal da placa Arduino Uno é o microcontrolador Atmel
ATmega328, um dispositivo de 8 bits da família AVR com arquitetura RISC
que pode contar também com encapsulamento DIP28 ou SMD. Ele tem 32kB
de memória flash (mas 512 bytes são utilizados pelo bootloader), 2kB de
memória RAM e 1kB de memória EEPROM. A placa Arduino Uno opera
em 16MHz, valor do cristal externo que está conectado aos pinos 9 e 10 do
microcontrolador.
O Arduino Uno tem 14 pinos de entrada e saída digitais e 6 pinos de entrada
analógica. Esses Pinos operam em 5VDC, em que cada pino pode fornecer
ou receber uma corrente máxima de 40mA. Cada pino possui um resistor de
pull-up interno, que pode ser habilitado por software. A seguir são apresentadas
as funções principais de alguns desses pinos (ARDUINO, [201-?]).
� PWM: os pinos 3, 5, 6, 9, 10 e 11 podem ser utilizados como saídas
PWM de 8 bits por meio da função analogWrite().
� Comunicação serial: os pinos 0 e 1 podem ser utilizados para comuni-
cação serial. Esses pinos são ligados ao microcontrolador responsável
pela comunicação USB com o PC.
� Interrupção externa: os pinos 2 e 3 podem ser configurados para
gerar uma interrupção externa por meio da função attachInterrupt().
� SPI: os pinos 10 (SS), 11 (MOSI), 12 (MISO) e 13 (SCK) suportam
comunicação SPI com o uso da biblioteca SPI.
� LED: no pino 13 existe um LED built-in. Quando o valor do pino é
HIGH, o LED está ligado, e quando o valor é LOW, o LED está desligado.
� I2C: A4 ou pino SDA e A5 ou pino SCL. Suporta comunicação I2C
utilizando a biblioteca Wire.
Para fazer a interface com o mundo analógico, a placa Arduino Uno possui
6 entradas com resolução de 10 bits. Por padrão, a referência do conversor
AD (analógico-digital) está ligada internamente a 5VDC, ou seja, quando
a entrada estiver com 5V, o valor da conversão analógica-digital será 1023.
7História do Arduino
Figura 3. Arduino Uno e sua estrutura.
Fonte: Adaptada de Souza (2013).
Conector para gravação do ATmega328
Caso utilize estes sinais no projeto,
tome cuidado,pois estão conectados
ao outro microcontrolador para gravação
Os sinais em amarelo e vermelho
indicam dois pinos que estão em curto
LEDs de status da comunicação
serial entra placa e computador
LED conectado ao pino 13
do Arduino
Conector para gravação ICSP
do ATmega16U2
Conjunto microcontrolador e
cristal que faz a interface USB
com o computador
Conjunto microcontrolador e
cristal responsável pelo controle e
a leitura de todos os pinos da placa
Conector USB tipo B
Conector DC
Regula a
tensão DC
para 5V
Impede que a USB do computador
seja dani�cada em caso de
sobrecorrente (acima de 500mA)
Veri�ca se a tensão DC está presente.
Se não estiver, deixa que a tensão
da USB alimente o circuito Regula a
tensão DC
para 3,3V.
Botão de
reset
Sendo um projeto open source, todo o material sobre o Arduino pode ser encontrado
na página do projeto. Esse material inclui esquema elétrico, lista de componentes,
layout de placa, etc. Se quiser ver todo o material disponível, acesse o link a seguir e
clique na aba DOCUMENTATION.
https://goo.gl/sLwqQg
Projetos baseados no Arduino
Apesar de ter modelos e versões amplamente divulgados, existem iniciativas
baseadas no Arduino que, graças ao seu apelo de livre uso e criação, foram
desenvolvidas em paralelo e servem de fomento a novas comunidades. Vejamos
duas dessas iniciativas.
História do Arduino8
Franzininho
A Franzininho foi desenvolvida para as atividades dentro do FAB LAB Livre
SP durante o Arduino Day, São Paulo, 2017. Na época, chegou-se à conclusão
de que seria melhor fazer placas compatíveis com Arduino para as pessoas
montarem e terem experiência com solda. O desenvolvimento foi baseado no
hardware das placas Arduino Gemma e Digispark (placas open hardware), e
a nova placa foi batizada dando sequência à placa antecessora, Franzino, que
também é open hardware e com a iniciativa DIY (SOUZA, [2018]).
Figura 4. Primeiro protótipo do Franzininho.
Fonte: Santos ([2018]).
Após o Arduino Day de 2017, o layout da PCB (placa de circuito impresso)
foi melhorado e foi incluída a bandeira do Brasil. Após um período trabalhando
com a Franzininho V0RV1, foi desenvolvida uma nova versão com conector
USB. Essa nova versão resolveu dois problemas: facilitou a fabricação e a
orientação da placa ao conectá-la no computador.
9História do Arduino
Figura 5. Franzininho V2.
Fonte: Souza (2018).
O hardware Franzininho foi publicado com a licença CC-SA-4.0. Seu
projeto é open hardware e permite que qualquer pessoa possa construir com
ele, estudá-lo, modificá-lo, distribui-lo ou vendê-lo. A proposta é que todos
os interessados possam montar o seu Arduino compatível, entender como
funciona o circuito, fazer projetos e contribuir para o desenvolvimento de
um projeto open source.
ArduSat
Abreviação de “Arduino Satellite”, o ArduSat é um nanossatélite open source,
baseado no padrão CubeSat. A extensa gama de sensores Arduino a bordo
provê aos alunos a oportunidade de criar seus próprios experimentos de satélite
e coletar dados espaciais do mundo real usando a plataforma de prototipagem
Arduino (GEEROMS et al., 2015).
Quatro estudantes de pós-graduação da International Space University,
com campus central localizado em Estrasburgo, França, fundaram em 2012
a empresa NanoSatisfi Inc. O lançamento bem-sucedido da campanha de
crowdfunding ArduSat no KickStarter resultou em um primeiro projeto do
protótipo da carga útil ArduSat em agosto de 2012 e um primeiro teste de alta
altitude em outubro daquele mesmo ano.
Em 3 de agosto de 2013, o veículo japonês de transferência de carga HTV-4
foi lançado ao espaço pelo Centro Espacial Tanegashima, no Japão, para a
Estação Espacial Internacional (ISS), carregando dois ArduSats entre as 3,6
toneladas de experimentos científicos.
História do Arduino10
ArduSat-X e ArduSat-1 foram lançados ao espaço junto com o satélite
vietnamita PicoDragon CubeSat em 19 de novembro de 2013, do módulo
japonês Kibo, na Estação Espacial Internacional.
ArduSat-X e ArduSat-1 são duas unidades de CubeSats, com lados de
10 cm e uma massa total de aproximadamente 1 quilograma. A minúscula
espaçonave e os subsistemas de estrutura e potência baseiam-se no padrão
CubeSat, uma especificação de código aberto criada em 1999, que define
uma plataforma padrão de baixo custo para a pesquisa espacial. Ambos os
satélites transportam cerca de 20 sensores, incluindo um espectrômetro óptico
e uma câmera.
O cérebro do ArduSat-1 é o ArduSat Payload Processor Module (ASPPM).
Ele possui um processador supervisor que consiste em um ATmega2561
(semelhante a um Arduino Mega) mais 16 nós de processamento, cada um
rodando um ATmega328P, como o Arduino Uno.
Figura 6. ArduSat.
Fonte: Adaptada de Rodgers (2012).
Antena dipolo cruzado
Painel solar
Placa de carga útil do
ArduSat (ASPPM):
Arduinos + conjunto de
sensor com câmeras
Sistema de alimentação elétrica
Estrutura CubeSat 1U
Computador de controle de voo
Transceptor UHF
11História do Arduino
ARDUINO. Arduino uno rev3. [S. l.], [201-?]. Disponível em: https://store.arduino.cc/usa/
arduino-uno-rev3. Acesso em: 4 abr. 2019.
EVANS, B. Beginning arduino programming. EUA: Apress, 2011.
GEEROMS, D. et al. Ardusat, an arduino-based cubesat providing students with the
opportunity to create their own satellite experiment and collect real-world space
data. ESA SYMPOSIUM ON EUROPEAN ROCKET AND BALLOON PROGRAMMES AND
RELATED RESEARCH, 22., 2015. Proceedings… Disponível em: https://pdfs.semantics-
cholar.org/5ab3/ad770bf2a97d944bc064f6fbcc8dac11756e.pdf. Acesso em: 4 abr. 2019.
KUSHNER, D. The making of Arduino. US, 2011. Disponível em: https://spectrum.ieee.org/
geek-life/hands-on/the-making-of-arduino. Acesso em: 4 abr. 2019.
MASSIMO, B. Getting started with Arduino. 2. ed. [S. l.]: O’Reilly, 2011.
RODGERS, E. ArduSat Kickstarter project puts an Arduino-based satellite up for rent. [S. l.],
2012. Disponível em: https://www.theverge.com/2012/6/21/3108858/ardusat-kickstarter-
-arduino-satellite-cubesat. Acesso em: 4 abr. 2019.
SOUZA, F. Arduino UNO. Brasil, 2013. Disponível em: https://www.embarcados.com.br/
arduino-uno/. Acesso em: 4 abr. 2019.
SOUZA, F. Sobre o projeto franzininho. Brasil, [2018]. Disponível em: https://franzininho.
gitbook.io/franzininho-docs/sobre-o-projeto-franzininho. Acesso em: 4 abr. 2019.
SOUZA, F. Conheça a Franzininho e monte seu próprio Arduino. Brasil, 2018. Disponível
em: https://www.filipeflop.com/blog/conheca-a-franzininho-e-monte-seu-proprio-
-arduino/. Acesso em: 4 abr. 2019.
Leitura recomendada
EQUIPE BAÚ DA ELETRÔNICA. Placas Arduino: modelos de entrada, diferenças e apli-
cações. Rio de Janeiro, 2018. Disponível em: http://blog.baudaeletronica.com.br/
placas-arduino/. Acesso em: 4 abr. 2019.
História do Arduino12
ROBÓTICA
Flávio Luiz Puhl Junior
Estrutura do Arduino
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
� Reconhecer os comandos em linguagem C para programar o Arduino.
� Aplicar a estrutura do código em C utilizando sketches.
� Analisar o uso das bibliotecas no auxílio da programação do Arduino.
Introdução
Quando falamos de Arduino, geralmente a primeira imagem que vem
à nossa cabeça é a famosa placa azul do Arduino Uno, talvez devido à
facilidade em fazer propaganda com elementos físicos e visuais. Mas não
devemos esquecer que o hardware é apenas metade do nosso recurso.
A outra metade, e não menos importante, é o software. Por meio do sof-
tware daremos inteligência e utilidade para as placas de desenvolvimento,
programando-as com comandos específicos.
Neste capítulo, você vai aprender a utilizar a IDE (Integrated Develop-
ment Environment) do Arduino e suas sketches. Também irá aprender a
utilizar os comandos mais usuais e a estruturar o código da programação,
além de ver como as bibliotecas podem contribuir para o seu código.
Ambiente de programação e comandos
O ambiente de desenvolvimento integrado (IDE, IntegratedDevelopment
Environment) do Arduino é um aplicativo disponível para Windows, MacOS
e Linux, desenvolvido em linguagem de programação Java. Ele é usado para
escrever e carregar programas em placas compatíveis com Arduino e outras
placas de desenvolvimento.
O Arduino IDE é um ambiente simples e funcional para desenvolvimento
do código a ser carregado no Arduino. Existem outros ambientes disponíveis
para utilização, como a programação visual utilizando XOD ou a ferramenta
da Microsoft Visual Studio, mas focaremos no uso do Arduino IDE.
Arduino IDE
Conforme você pode ver na Figura 1, a IDE tem uma interface simples e
funcional com os recursos necessários para programar o Arduino.
Figura 1. Arduino IDE versão 1.8.5
Menu
Veri�ca
o código
Veri�ca o código,
compila e faz
upload para
o hardware
Mensagem
para o
usuário
Hardware
conectado e
porta serial
Escreva aqui
seu código
Gerenciamento
de abas
Monitor
serial
Novo código Abre Salva
Entre as mais diversas características da IDE, as que se destacam por sua
utilidade são as seguintes.
� Monitor serial: permite enviar dados da execução do código pela
porta serial e acompanhar a execução do código, servindo, inclusive,
para depuração de rotinas, verificação de funcionamento, entrada de
dados pelo usuário, etc. No menu é possível encontrar outra ferramenta
semelhante, que foi adicionada nas últimas versões do programa: Plotter
Serial. Nela é possível colocar os dados numéricos em forma de gráfico
temporal e acompanhar as variações de modo mais visual.
� Gerenciamento de abas: um recurso pouco difundido, mas muito útil
conforme o código vai aumentando em complexidade, é a utilização de
abas. Com elas é possível segmentar o código, colocando uma porção
Estrutura do Arduino2
em cada aba e assim manter uma melhor organização. Você pode, por
exemplo, manter o código principal em uma aba, cálculos em outra,
atualização do display em outra etc.
� Exemplos: uma das grandes vantagens da utilização deste ambiente
é que ele acompanha uma série de exemplos de utilização dos mais
diferentes recursos. Então, se houver alguma dúvida, basta abrir o
exemplo e fazer o upload no seu Arduino para verificar o funcionamento.
As outras funções disponíveis são semelhantes às nativas de sistemas
baseados em Windows, e, portanto, de uso intuitivo, não sendo detalhadas
neste material.
Linguagem de programação do Arduino
A linguagem de programação utilizada no Arduino é baseada na linguagem C,
desenvolvida nos anos 1970 pela Bell Laboratories e que é muito tradicional
e conhecida, porém com alguns facilitadores para interpretação humana.
A facilidade de programação do Arduino é que o código que você irá
escrever, incluindo as sintaxes, estruturas, operadores, etc., são, fundamen-
talmente, idênticas às utilizadas em C, mas o Arduino possui, nativamente,
algumas funções que descomplicam a criação do código, como pinMode(),
digitalWrite() e delay() (EVANS, 2011). Observe a Figura 2.
Figura 2. (a) Código-fonte em C; (b) código-fonte utilizando a sintaxe do
Arduino.
Fonte: (Evans, 2011).
(a) (b)
3Estrutura do Arduino
Os dois códigos apresentados possuem exatamente a mesma funcionalidade,
que é piscar o LED conectado ao pino 13 da placa Arduino, e os dois podem
ser compilados e gravados em um Arduino utilizando a IDE. A diferença
é que o código escrito em linguagem C é razoavelmente mais complexo de
interpretar do que o outro código.
A lista completa de funções disponíveis para programação do Arduino encontra-se
no link a seguir.
https://qrgo.page.link/KBjk
O código é composto por uma sequência de comandos. Alguns desses
comandos são os seguintes (MONK, 2017).
Variáveis: representam uma região da memória usada para armazenar deter-
minada informação. Essa informação pode ser, por exemplo, um número, um
caractere ou uma sequência de texto. Para podermos usar uma variável em
um programa Arduino, precisamos fazer uma declaração de variável, como
int led;. Neste caso está sendo declarada uma variável tipo int chamada led.
� Tipo de dados: o tipo de dado de uma variável significa a natureza
da informação que se pode armazenar naquela variável. Em C, assim
como em muitas linguagens de programação, é obrigatório definir o
tipo de dado no momento da declaração da variável, como o exemplo
anterior. Veja a seguir alguns tipos de dados.
■ boolean: valor verdadeiro ou falso.
■ char: um caractere.
■ int: número inteiro de 16 bits com sinal (−32768 a 32767).
■ long: número inteiro de 32 bits com sinal (−2147483648 a 2147483647).
■ float: número real de precisão simples (ponto flutuante).
■ double: número real de precisão dupla (ponto flutuante).
■ string: sequência de caracteres.
Estrutura do Arduino4
Atribuição: atribuir um valor a uma variável significa armazenar o valor
nela para posterior uso. O comando de atribuição em C é =. Para atribuirmos
o valor 13 à variável led, devemos fazer assim: led = 13;. Os valores fixos
usados no programa, como o valor 13, são chamados de constantes, pois o
seu valor não muda.
Operadores: é um conjunto de um ou mais caracteres que serve para operar
sobre uma ou mais variáveis ou constantes. Alguns dos operadores mais
utilizados, mas não somente, são os seguintes.
� Aritméticos
■ + : adição
■ − : subtração
■ * : multiplicação
■ / : divisão
� Lógicos
■ && : operador e
■ || : operador ou
■ == : igualdade
■ != : diferente
■ > ou >= : maior ou maior e igual
■ .
A segunda parte, 2, é onde geralmente se declara as variáveis do código.
Na verdade, as variáveis podem ser declaradasem qualquer ponto do código,
inclusive dentro da rotina principal, mas a boa prática recomenda declará-las
neste trecho, inclusive incluindo comentários pertinentes à funcionalidade de
cada variável em caráter de documentação.
A terceira parte do código, 3, refere-se à configuração preliminar. Essa
função é executada somente uma vez na inicialização do código. Aqui é
recomendado declarar a funcionalidade dos pinos, configurações iniciais etc.
7Estrutura do Arduino
A quarta parte, 4, é onde consta a rotina principal, que será executada
infinitamente enquanto o sistema estiver energizado. É aqui que seu código
deve ser inserido por meio do uso de comandos e estruturas.
Somente utilizando comandos de controle é impossível criar um código
completamente funcional — precisamos também de rotinas e decisões, pois, a
partir delas, o código poderá tomar decisões baseadas em informações obtidas
durante a execução do programa. Para a implementação de rotinas e decisões,
utilizamos as estruturas de controle.
Estruturas de controle são blocos de instruções que alteram o fluxo de
execução do código de um programa. Com elas é possível executar comandos
diferentes de acordo com uma condição ou repetir uma série de comandos
várias vezes, por exemplo (EVANS, 2011).
As estruturas de controle mais utilizadas são as seguintes.
while: é um controle que executa um conjunto de comandos repetidas vezes
enquanto determinada condição for verdadeira; while em inglês significa
“enquanto”. Ele segue o formato da Figura 5.
Figura 5. Estrutura de controle while.
if: é uma das estruturas mais básicas de programação em geral. If significa
“se” em inglês. Ele verifica uma expressão e, apenas se ela for verdadeira,
executa um conjunto de comandos. Seu formato é apresentado na Figura 6.
Figura 6. Estrutura de controle if.
Estrutura do Arduino8
if-else: o if-else pode ser visto como uma extensão do comando if. Else em
inglês significa “caso contrário”, e o comando faz isto: “se isso for verdadeiro,
então faça aquilo; caso contrário, faça outra coisa”. Veja a Figura 7.
Figura 7. Estrutura de controle if-else.
for: o comando for nada mais é do que um while acrescido de parâmetros de
inicialização e finalização. É necessário definir o seguinte.
� Condição: é uma expressão verificada repetidamente; enquanto ela for
verdadeira, os comandos entre {} continuam sendo executados.
� Inicialização: executado apenas uma vez no início, este comando
define a condição inicial.
� Finalização: é um comando executado repetidas vezes ao final de cada
repetição dos comandos entre {}.
Na Figura 8, o comando inicia a vaiável i em 0 (i=0), executa o código entre
{} enquanto i for menor ou igual a 5 (i. Isto irá fazer com que o compilador acrescente esta biblioteca nos dados
enviados para o Arduino.
Pode parecer que essas funções são simples comandos para acionar uma
saída digital, por exemplo, mas, na verdade, são várias linhas de código que,
quando executadas, acionam a saída digital, porém tudo isso está condensado
em uma única função.
As bibliotecas padrão do Arduino, que não precisam ser declaradas desse
modo porque são automaticamente incluídas, são as seguintes (ARDUINO,
2019):
� EEPROM: usada para ler e gravar dados em uma memória EEPROM
no Arduino. No Uno, a EEPROM tem o tamanho de 1024 bytes e, no
Mega, de 4096 bytes.
� Ethernet: permite conectar o Arduino à internet ou à rede local usando
um Ethernet Shield.
� Firmata: permite a comunicação entre o Arduino e aplicações em um
computador via protocolo de comunicação serial.
� GSM: conecta a uma rede GSM/GPRS usando um shield GSM.
� LiquidCrystal: com esta biblioteca podemos controlar displays de
cristal líquido (LCD).
� SD: biblioteca muito importante, usada para que seja possível escrever
e ler dados em cartões de memória SD/SDHC.
� Servo: controla motores servo.
� SPI: comunicação com dispositivos usando o barramento SPI (Serial
Peripheral Interface).
� SoftwareSerial: permite a comunicação serial usando os pinos digitais
da placa.
� Stepper: controla motores de passo.
� TFT: permite desenhar imagens e formas e escrever texto em uma
tela TFT.
� WiFi: permite conexão à rede local e à internet por meio de um shield
WiFi.
11Estrutura do Arduino
� Wire: permite enviar e receber dados por meio de uma interface TWI/
I2C (interface a dois fios) em uma rede de dispositivos ou sensores.
Embora faça parte do grupo de bibliotecas que é instalada com o Arduino
IDE, a biblioteca LiquidCrystal não está adicionada ao compilador, então
é necessário incluí-la no código com a linha #include.
Com isso podemos utilizar a série de comandos que esta biblioteca disponi-
biliza para configurar e utilizar os displays no nosso projeto. Veja a Figura 10.
Figura 10. Comandos de configuração de um display LCD.
Outras bibliotecas que não são distribuídas por padrão com o Arduino
IDE podem ser adicionadas conforme explicado anteriormente. Elas oferecem
funções adicionais a bibliotecas existentes ou novas funcionalidades não
presentes em bibliotecas padrão, permitindo estender o uso do Arduino de
forma praticamente ilimitada.
O Arduino tem muitas ferramentas de simulação, tanto on-line como off-line. Essas
ferramentas são muito úteis, pois possibilitam testar seu código sem a necessidade de
ter fisicamente o hardware (placa Arduino, displays, servomotores etc.) e assim avaliar
com muita precisão o resultado antes de investir financeiramente no projeto, além
de auxiliar com a documentação.
Estrutura do Arduino12
Uma ferramenta online de simulação que está sendo muito utilizada atualmente
é a Tinkercad, fornecida gratuitamente pela Autodesk. Essa ferramenta tem muitos
recursos de simulação de hardware, além de compilar e mostrar em tempo real a
execução do código.
Ela tem um recurso muito útil na depuração de códigos (e que não existe na Arduino
IDE), que são os breakpoints. Os breakpoints permitem interromper a execução do
código em determinada linha de código para você poder observar as condições e
variáveis e assim corrigir falhas na programação.
ARDUINO. Libraries. [S. l.], 2019. Disponível em: https://www.arduino.cc/en/reference/
libraries. Acesso em: 19 maio 2019.
EVANS, B. Beginning Arduino Programming. EUA: Apress, 2011.
MONK, S. Programação com Arduino: começando com sketches. Porto Alegre: Bookman,
2017. (Série Tekne).
POSH, M. Hands-on embedded programming with C++17. Birmingham: Packt Publishing,
2019.