Buscar

Introdução a sistemas embarcados com arduino IF ES

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 256 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 256 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 256 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

v. 2 - 2014
Introdução a
Sistemas Embarcados
com Arduino
Felipe Nascimento Martins
O trabalho Introdução ao Arduino de Felipe Nascimento Martins foi
licenciado com uma Licença
Creative Commons - Atribuição-CompartilhaIgual 3.0 Não Adaptada.
Introdução a
Sistemas Embarcados
com Arduino
Felipe Nascimento Martins
Contato:
Twitter: @f_n_martins
http://www.facebook.com/felipenm
felipe.n.martins@gmail.com
Conteúdo
• Sistemas embarcados;
• Arduino: características de hardware;
• Arduino: características de software;
• Microcontrolador;
• Eletrônica: conceitos básicos;
• Planejamento de programas;
• Sensores e atuadores;
• Práticas (montagem e programação);
• Avançando com o Arduino: shields, comunicação 
sem fio, aplicações em robótica...
Felipe Nascimento Martins
Felipe Nascimento Martins
Sistemas Embarcados
Sistema Embarcado
• Sistema baseado em microcontroladores em 
que o computador é encapsulado e dedicado 
ao dispositivo ou sistema que ele controla;
• Realiza um conjunto de tarefas pré-definidas, 
com requisitos específicos;
• Além do computador dedicado, em geral 
possui sensores, atuadores e uma interface 
com o usuário.
Felipe Nascimento Martins
Sistema de Controle Embarcado
Felipe Nascimento Martins
Exemplos de Sistemas Embarcados
• MP3 player, relógio digital, calculadora, 
controlador de veículo elétrico, navegador 
com GPS, leitora para pagamento com 
cartões de crédito, robô, semáforo, roteador, 
console de vídeo game, lavadora de roupas, 
marca-passo, quadricóptero, forno de micro-
ondas, tablet, medidor de pressão arterial, 
televisão etc.
Felipe Nascimento Martins
Exemplos de Aplicação
Felipe Nascimento Martins
O que é Arduino?
• Arduino é uma plataforma de prototipagem
eletrônica open-source, baseada nos princípios 
de flexibilidade e facilidade de uso para hardware
e software.
• Consiste de uma placa com microcontrolador 
programável preparada para receber sinais de 
sensores e acionar atuadores.
• Sua linguagem de programação é baseada em 
Wiring (baseado em C/C++).
• A placa pode funcionar em conjunto ou de forma 
independente do computador.
Felipe Nascimento Martins
Arduino – hardware
Felipe Nascimento Martins
Arduino – hardware
Felipe Nascimento Martins
Arduino – hardware
Felipe Nascimento Martins
Arduino – software
Arduino é Open Source
• Desenvolvido por: Massimo Banzi, David 
Cuartielles, Tom Igoe, Gianluca Martino e David 
Mellis, na Itália, em 2005;
• Todo o projeto é aberto: open source hardware 
and software;
• 200 placas vendidas em 2005, 5.000 em 2006, 
30.000 em 2007 e mais de 300.000 em 2011 e 
cerca de 1 milhão até setembro de 2013!
• Site oficial: www.arduino.cc
Felipe Nascimento Martins
Arduino é Open Source!
Felipe Nascimento Martins
Arduino é Open Source!
Felipe Nascimento Martins
Arduino é Open Source!
• Todo o hardware é aberto e os projetos estão 
disponíveis.
• Quem quiser, pode comprar os componentes e montar a 
sua placa!
• O software de programação também é livre e está 
disponível para download gratuitamente.
Felipe Nascimento Martins
Arduino é Open Source!
• Todo o hardware é aberto e os projetos estão 
disponíveis.
• Quem quiser, pode comprar os componentes e montar a 
sua placa!
• O software de programação também é livre e está 
disponível para download gratuitamente.
• Mas...
Felipe Nascimento Martins
Arduino é Open Source!
• Todo o hardware é aberto e os projetos estão 
disponíveis.
• Quem quiser, pode comprar os componentes e montar a 
sua placa!
• O software de programação também é livre e está 
disponível para download gratuitamente.
• Mas...
• O nome Arduino é marca registrada!
Felipe Nascimento Martins
Clones do Arduino
• Freeduino
Felipe Nascimento Martins
Clones do Arduino
• Seeduino
Felipe Nascimento Martins
Clones do Arduino
• Brasuíno
Felipe Nascimento Martins
Clones do Arduino
• Severino
Felipe Nascimento Martins
Similares ao Arduino
• chipKIT Uno32 - PIC32MX320F128 (32 bits, 
80MHz, 128kB Flash, 16kB SRAM)
Felipe Nascimento Martins
Similares ao Arduino
• Olimexino – STM32F103RBT6 (núcleo ARM Cortex 
M3, 32 bits, 128kB, 72MHz)
Felipe Nascimento Martins
Similares ao Arduino
• Adafruit Trinket – ATtiny85
Felipe Nascimento Martins
Similares ao Arduino
• TI LaunchPad:
MSP430
Felipe Nascimento Martins
Similares ao Arduino
• LaunchPad:
ARM Cortex M4
Felipe Nascimento Martins
Compatível com Arduino
Felipe Nascimento Martins
Felipe Nascimento Martins
Características de Hardware
Arduino Uno
• Microcontrolador: ATmega328;
• Tensão de operação: 5V;
• Tensão de entrada (recomendada): 7-12V;
• Pinos digitais de E/S:14 (6 podem ter sinal PWM);
• Pinos com entrada analógica: 6;
• Corrente máxima por pino de E/S: 40 mA;
• Hardware para comunicação: 1 porta serial (UART TTL), 
I2C (TWI), SPI;
• Memória Flash (de programa): 32 kB, dos quais 0,5 kB
são usados pelo bootloader;
• Memória SRAM: 2 kB; EEPROM: 1 kB;
• Frequência de clock: 16 MHz.
Felipe Nascimento Martins
Felipe Nascimento Martins
Arduino Leonardo
• Microcontrolador: ATmega32u4;
• Tensão de operação: 5V;
• Tensão de entrada (recomendada): 7-12V;
• Pinos digitais de E/S: 20 (7 podem ter sinal PWM);
• Pinos com entrada analógica: 12;
• Corrente máxima por pino de E/S: 40 mA;
• Hardware para comunicação: 1 porta serial (UART TTL), 
I2C (TWI), SPI, USB 2.0 (emula teclado ou mouse);
• Memória Flash (de programa): 32 kB, dos quais 4 kB são 
usados pelo bootloader;
• Memória SRAM: 2,5 kB; EEPROM: 1 kB;
• Frequência de clock: 16 MHz.
Felipe Nascimento Martins
Felipe Nascimento Martins
Arduino Mega 2560
• Microcontrolador: ATmega2560;
• Tensão de operação: 5V;
• Tensão de entrada (recomendada): 7-12V;
• Pinos digitais de E/S: 54 (15 podem ter sinal PWM);
• Pinos com entrada analógica: 16;
• Corrente máxima por pino de E/S: 40 mA;
• Hardware para comunicação: 4 portas seriais (UART 
TTL), I2C (TWI), SPI, USB 2.0 (emula teclado ou mouse);
• Memória Flash (de programa): 256 kB, dos quais 8 kB
são usados pelo bootloader;
• Memória SRAM: 8 kB; EEPROM: 4 kB;
• Frequência de clock: 16 MHz.
Felipe Nascimento Martins
Felipe Nascimento Martins
Arduino Mega 2560
Felipe Nascimento Martins
Microcontrolador
O que é um Microcontrolador?
– Chip;
– CPU de pequeno porte, capaz de executar 
um conjunto de instruções;
– Ou seja, possui um microprocessador!
– Instruções simples e rápidas;
– Possui memória(s);
– Possui periféricos;
– Pode se comunicar com outros periféricos; 
etc.
Felipe Nascimento Martins
Componentes de um Microcontrolador
Conversor
D/A
Conversor
A/D
PWM
CPU
EEPROM
RAM
Porta
Serial
Porta
Paralela
Temporizadores
Microcontrolador
Felipe Nascimento Martins
Diagrama de blocos da arquitetura
Felipe Nascimento Martins
Exemplos de Microcontroladores
• Família 8051 (Intel ou ATMEL)
• 80C196KB (Intel)
• 68HC11 (Motorola / Freescale) 
• MSP430 (Texas Instruments)
• ATmega328 (ATMEL)
• PIC16F628A (Microchip)
• dsPIC30F6014 (Microchip)
• Cortex M3 (ARM)
Felipe Nascimento Martins
Exemplos de Microcontroladores
• Família 8051 (Intel ou ATMEL)
• 80C196KB (Intel)
• 68HC11 (Motorola / Freescale) 
• MSP430 (Texas Instruments)
• ATmega328 (ATMEL)
• PIC16F628A (Microchip)
• dsPIC30F6014 (Microchip)
• Cortex M3 (ARM)
Cadê o 
Arduino??
Felipe Nascimento MartinsExemplos de Microcontroladores
• Família 8051 (Intel ou ATMEL)
• 80C196KB (Intel)
• 68HC11 (Motorola / Freescale) 
• MSP430 (Texas Instruments)
• ATmega328 (ATMEL)
• PIC16F628A (Microchip)
• dsPIC30F6014 (Microchip)
• Cortex M3 (ARM)
Felipe Nascimento Martins
• ATMEL
• ATmega168: Diecimila, Duemilanove, Nano, 
LilyPad;
• ATmega328P: Duemilanove, Nano, Fio, LilyPad, 
Uno;
• ATmega1280: Mega;
• ATmega2560: Mega2560;
• ATmega32u4: Leonardo, Esplora, LilyPad USB, 
Yún, Robot;
• AT91SAM3X8E: Due.
Microcontroladores do Arduino
Felipe Nascimento Martins
Arduino Processador
Flash
kB
EEPROM
kB
SRAM
kB
Dig. 
I/O
Pinos 
A/D
Clock 
(MHz)
Pinos 
PWM
Duemilanove ATmega168/328P 16/32 0,5/1 0,5 14 6 16 6
Uno ATmega328P 32 1 2 14 6 16 6
Mega ATmega1280 128 4 8 54 16 16 15
Mega2560 ATmega2560 256 4 8 54 16 16 15
Nano
ATmega168 ou 
ATmega328
16/32 0,5/1 0,5 14 8 16 6
LilyPad
ATmega168V ou 
ATmega328V
16/32 0,5 1 14 6 16 6
Leonardo ATmega32u4 32 1 2,5 20 12 16 7
Due AT91SAM3X8E 512 -- 96 54 12 84 12
Esplora ATmega32u4 32 1 2,5 20 12 16 7
Arduino
Felipe Nascimento Martins
Arduino - Microcontrolador
Felipe Nascimento Martins
Arduino - Microcontrolador
• ATmega328 (Arduino Uno):
• Núcleo AVR RISC de 8 bits;
• 32kB Flash, 2kB RAM, 1kB EEPROM;
• 23 pinos de E/S;
• 3 temporizadores/contadores;
• USART, I2C, interface a 2 fios SPI;
• 6 canais de conversor A/D de 10 bits;
• WDT com oscilador interno;
• Clock máximo de 20MHz;
• Opera de 1,8V a 5,5V.
Felipe Nascimento Martins
Arduino - Microcontrolador
• ATmega32u4 (Arduino Leonardo):
• Núcleo AVR RISC de 8 bits;
• 32kB Flash, 2kB RAM, 1kB EEPROM;
• 26 pinos de E/S;
• 3 temporizadores/contadores;
• USART, USB transceiver, I2C, 2 interfaces a 2 fios SPI;
• 12 canais de conversor A/D de 10 bits;
• WDT com oscilador interno;
• Clock máximo de 16MHz;
• Opera de 2,7V a 5,5V.
Felipe Nascimento Martins
Felipe Nascimento Martins
Características de Software
Arduino – Programação
Felipe Nascimento Martins
Arduino – Programação
Programa.HEXCompilador
P
ro
g
ra
m
a
d
o
r
IDE
Felipe Nascimento Martins
Arduino – Programa básico
Felipe Nascimento Martins
Arduino – Programa básico
Felipe Nascimento Martins
Arduino – Programa básico
Felipe Nascimento Martins
Arduino – Programa básico
Felipe Nascimento Martins
Arduino – Programa básico
Felipe Nascimento Martins
Arduino – Programa básico
Felipe Nascimento Martins
No Arduino Uno:
pinos digitais 0 a 13 (0 a 13);
pinos analógicos 0 a 5 (14 a 19).
Prática 1: Pisca-LED
• Montagem:
Felipe Nascimento Martins
Matriz de contatos (Breadboard ou Protoboard)
Felipe Nascimento Martins
Felipe Nascimento Martins
http://123d.circuits.io/circuits/155964-pratica-1-pisca-led/embed
Prática 1: Pisca-LED
Felipe Nascimento Martins
Eletrônica: 
Conceitos Básicos
Um pouco de eletrônica
• Ok. Entendi o programa. 
• Mas o que acontece nos 
pinos do Arduino?
Felipe Nascimento Martins
Um pouco de eletrônica
• Ok. Entendi o programa. 
• Mas o que acontece nos 
pinos do Arduino?
• A função
digitalWrite(12,HIGH); 
faz com que o pino 12 vá 
para “nível alto”, ou seja, 
ele fica com 5V.
Felipe Nascimento Martins
Um pouco de eletrônica
• Ok. Entendi o programa. 
• Mas o que acontece nos 
pinos do Arduino?
• A função
digitalWrite(12,HIGH); 
faz com que o pino 12 vá 
para “nível alto”, ou seja, 
ele fica com 5V.
• Este pino está ligado ao 
RESISTOR+LED, e ao pino 
GND (0V). 
Felipe Nascimento Martins
Um pouco de eletrônica
• Ok. Entendi o programa. 
• Mas o que acontece nos 
pinos do Arduino?
• A função
digitalWrite(12,HIGH); 
faz com que o pino 12 vá 
para “nível alto”, ou seja, 
ele fica com 5V.
• Este pino está ligado ao 
RESISTOR+LED, e ao pino 
GND (0V). 
• É um circuito série, por 
onde circula corrente!
Felipe Nascimento Martins
+5V
0V
Um pouco de eletrônica
• Em resumo:
• É a circulação de corrente
elétrica (elétrons) que faz 
acender o LED;
• Experimente retirar o fio 
que liga o LED ao GND, 
mantendo o pino 12 em 5V.
• O LED apaga pois a 
corrente precisa circular 
num circuito fechado! 
Felipe Nascimento Martins
+5V
0V
Um pouco de eletrônica
• Em resumo:
• É a circulação de corrente
elétrica (elétrons) que faz 
acender o LED;
• A corrente só existirá se 
houver diferença de 
potencial elétrico
(diferença de tensão) entre 
pontos do circuito: 5V – 0 = 
5V;
• Tensão: volt [V];
• Corrente: ampère [A].
Felipe Nascimento Martins
+5V
0V
Um pouco de eletrônica
• A função
digitalWrite(12,LOW); 
faz com que o pino 12 vá 
para “nível baixo”, ou seja, 
ele fica com 0V.
• Logo, como não há 
diferença de tensão entre 
os pinos 12 e GND, a 
corrente é zero => LED 
apaga.
Felipe Nascimento Martins
0V
0V
Um pouco de eletrônica
• Beleza. Mas, e o resistor? 
Serve para quê?
Felipe Nascimento Martins
Um pouco de eletrônica
• Beleza. Mas, e o resistor? 
Serve para quê?
• O elemento resistor serve 
para dificultar a circulação 
de corrente elétrica;
• Ele é colocado no circuito 
para evitar que a corrente 
cresça muito, o que pode 
provocar problemas;
• No nosso circuito, o 
resistor serve para evitar 
que o LED queime devido 
a uma corrente muito alta.
Felipe Nascimento Martins
Um pouco de eletrônica
• Quanto maior for o valor 
da resistência do resistor, 
menor será a corrente
(para uma mesma 
diferença de tensão).
• O brilho do LED varia com 
a corrente.
Felipe Nascimento Martins
Um pouco de eletrônica
• Cálculo da corrente:
• Lei de Ohm: V = R * I
• V = 5V, R = 220Ω.
• I = 5 / 220 
• I = 0,0227 A = 22,7 mA
Felipe Nascimento Martins
Um pouco de eletrônica
• Cálculo da corrente:
• Lei de Ohm: V = R * I
• V = 5V, R = 220Ω + 220Ω.
• I = 5 / 440 
• I = 0,0114 A = 11,4 mA
• Podemos calcular a queda de 
tensão em cada resistor:
• VR = R * I, R = 220Ω, I = 11,4 mA.
• VR = 220 * 0,0114 = 2,5 V.
Felipe Nascimento Martins
Um pouco de eletrônica
• Cálculo da corrente:
• O LED tem queda de 
tensão fixa = ~1,73V. Logo:
• V = 5 – 1,73 = 3,27V.
• V = R * I => I = V / R.
• I = 3,27 / 220 = 0,0149 A
• I = 14,9mA.
Felipe Nascimento Martins
+5V
0V
Um pouco de eletrônica
• Note que se a tensão do 
pino 12 pudesse ser 
alterada, a corrente no 
circuito seria diferente.
• Ou seja, poderíamos 
controlar o brilho do LED!
Felipe Nascimento Martins
+5V
0V
Prática 2: Código Morse
• Modifique o programa 
Pisca-LED de forma que o 
LED sinalize 
indefinidamente o código 
Morse que representa 
S.O.S.: 
...---...
OBS.: “ponto” é uma piscada 
rápida do LED (pouco 
tempo aceso), enquanto o 
“traço” é uma piscada mais 
lenta (mais tempo aceso).
Felipe Nascimento Martins
Diodo
• Dispositivo semicondutor que permite a circulação de 
corrente apenas em um sentido;
• A tensão em seus terminais deve ter polaridade correta: 
mais positiva no terminal A (anodo) e mais negativa no 
terminal K (catodo);
• Apresenta queda de tensão aproximadamente fixa 
(~0,7V) quando a corrente circula;
• Usado em circuitos retificadores: transforma corrente 
alternada para contínua.
Felipe Nascimento Martins
Diodo
• Retificador de onda completa:
Felipe Nascimento Martins
Diodo - exemplos
Felipe Nascimento Martins
Prática 3:Não pisca-LED
• LED é um diodo especial 
que brilha quando a 
corrente circula por ele. 
• Experimente inverter a 
ligação dos pinos do LED 
em nosso circuito e 
verifique que ele não vai 
mais piscar, mesmo 
quando houver diferença 
de potencial nos pinos!
Felipe Nascimento Martins
Capacitor
• Elemento que armazena energia na forma de campo 
elétrico;
• Existem vários tipos: alguns têm polaridade (como os 
eletrolíticos), outros não (como os cerâmicos);
• A tensão em seus terminais depende da carga 
acumulada, e não varia instantaneamente;
• Em corrente contínua, são usados como filtros ou 
“suavizadores” de tensão.
Felipe Nascimento Martins
Capacitor - exemplos
Felipe Nascimento Martins
Capacitor – exemplo de aplicação
• Retificador de onda completa com capacitor:
Felipe Nascimento Martins
Felipe Nascimento Martins
Sensores Digitais
Sensores com Sinais Digitais
• Diversos sensores proveem informação através 
de sinais digitais:
• Botão;
• Porta aberta/fechada;
• Andar de elevador;
• Fim-de-curso em máquinas industriais;
• Equipamento ligado/desligado;
• Nível de reservatório;
• Presença;
• Toque;
• Etc.
Felipe Nascimento Martins
Sensores com Sinais Digitais
• Do ponto de vista elétrico, comportam-se como se 
fossem uma chave liga/desliga;
• Nesses casos, podemos fazer a ligação de modo 
que o sinal do sensor seja 0V ou 5V;
• No Arduino, a função utilizada para leitura de sinais 
digitais é digitalRead(pino); onde pino é o 
número do pino em que o sensor está ligado;
• Para Vs = 5V, retorna 0 (Vpino < 2V) ou 1 (Vpino > 3V).
Prática 4: Leitura de Sinal Digital
Felipe Nascimento Martins
• Monte o circuito ao 
lado.
• Altere o programa 
da prática 1 para 
que o LED acenda 
com o botão for 
pressionado, e 
apague quando o 
botão for liberado.
Felipe Nascimento Martins
http://123d.circuits.io/circuits/155968-pratica-4-leitura-de-sinal-digital/embed
Prática 4: Leitura de Sinal Digital
Felipe Nascimento Martins
Programas mais complexos
Funções do Arduino
• Já vimos:
void setup(){
...
}
void loop(){
...
}
Felipe Nascimento Martins
Funções do Arduino
• Já vimos:
pinMode(pino, OUTPUT ou INPUT);
digitalWrite(pino, LOW ou HIGH); 
delay(número inteiro);
digitalRead(pino);
Felipe Nascimento Martins
Funções do Arduino
• Outras funções:
delayMicroseconds(número inteiro);
Pausa o programa pela quantidade definida de 
microssegundos. 
millis();
Retorna o número de milissegundos que se passou 
desde que o microcontrolador foi ligado.
analogRead(pino);
Obtém valor entre 0 e 1023 proporcional à tensão no 
pino (entre 0 e 5V). Tempo de conversão = 100μs.
Felipe Nascimento Martins
Funções do Arduino
• Outras funções:
delayMicroseconds(número inteiro);
Pausa o programa pela quantidade definida de 
microssegundos. 
millis();
Retorna o número de milissegundos que se passou 
desde que o microcontrolador foi ligado.
analogRead(pino);
Obtém valor entre 0 e 1023 proporcional à tensão no 
pino (entre 0 e 5V). Tempo de conversão = 100μs.
Felipe Nascimento Martins
Funções do Arduino
• Outras funções:
delayMicroseconds(número inteiro);
Pausa o programa pela quantidade definida de 
microssegundos. 
millis();
Retorna o número de milissegundos que se passou 
desde que o microcontrolador foi ligado.
analogRead(pino);
Obtém valor entre 0 e 1023 proporcional à tensão no 
pino (entre 0 e 5V). Tempo de conversão = 100μs.
Felipe Nascimento Martins
Funções do Arduino
• Exemplos:
while(analogRead(A2) < 950){
... // bloco de código
}
Executa o bloco de código até que o valor de retorno 
da função analogRead seja maior que 950.
for(int conta = 0; conta < 6; conta++){
... // bloco de código
}
Executa o bloco de código até que conta >= 6.
Felipe Nascimento Martins
Funções do Arduino
• Exemplos:
while(analogRead(A2) < 950){
... // bloco de código
}
Executa o bloco de código até que o valor de retorno 
da função analogRead seja maior que 950.
for(int conta = 0; conta < 6; conta++){
... // bloco de código
}
Executa o bloco de código até que conta >= 6.
Felipe Nascimento Martins
Funções do Arduino
• Exemplos:
if (brilho == 0 || brilho == 255) {
... // bloco de código 1
}
else {
... // bloco de código 2
}
Executa o bloco de código 1 se a condição de teste 
for verdadeira. Caso contrário, executa o bloco de 
código 2.
Felipe Nascimento Martins
Criando Funções no Arduino
int led = 13;
void setup(){
pinMode(led, OUTPUT);
}
void inverteLED(){
if (digitalRead(led)==0)
digitalWrite(led, HIGH);
else
digitalWrite(led, LOW);
}
void loop(){
inverteLED();
delay(500);
}
Felipe Nascimento Martins
Tipos de Dados no Arduino
Felipe Nascimento Martins
boolean (8 bits) – true/false;
byte (8 bits) – número entre 0 e 255;
char (8 bits) – caractere (número entre -128 e 127);
unsigned char (8 bits) – mesmo tipo que ‘byte’; 
word (16 bits) – número entre 0 e 65.535;
unsigned int (16 bits) – mesmo tipo que ‘word’;
int (16 bits) – número entre -32.768 e 32.767;
unsigned long (32 bits) – número entre 0 e 
4.294.967.295;
long (32 bits) – número entre -2.147.483.648 e 
2.147.483.647;
float (32 bits) – entre -3,4028235E38 to 3,4028235E38.
Linguagem do Arduino
Felipe Nascimento Martins
Linguagem do Arduino
Felipe Nascimento Martins
Linguagem do Arduino
Felipe Nascimento Martins
Planejamento de um Programa
• Fluxogramas
Felipe Nascimento Martins
Planejamento de um Programa
Felipe Nascimento Martins
Exercício: Desenhe o Fluxograma
const int ledPin = 13; // pino do LED
int ledState = LOW; // estado do LED
long previousMillis = 0; // última atualização do LED
long interval = 500; // interval para piscar LED
void setup() {
pinMode(ledPin, OUTPUT); 
}
void loop(){
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState);
}
} Felipe Nascimento Martins
Prática 5: Leitura de Sinal Digital
Felipe Nascimento Martins
• Monte o circuito ao 
lado.
• Altere o programa 
da prática 4 para 
que o LED troque 
de estado a cada 
pressionar de 
botão: se estiver 
apagado, acende; e 
vice-versa.
Prática 5: Leitura de Sinal Digital
Felipe Nascimento Martins
• Monte o circuito ao 
lado.
• Altere o programa 
da prática 4 para 
que o LED troque 
de estado a cada 
pressionar de 
botão: se estiver 
apagado, acende; e 
vice-versa.
• Funcionou como 
esperado?
Leitura de Sinal Digital
Felipe Nascimento Martins
Bounce (oscilação de contato)
Felipe Nascimento Martins
Técnica para fazer debounce do sinal
Felipe Nascimento Martins
Felipe Nascimento Martins
int led_pin = 13;
int led_state = LOW;
int button_pin = 0;
int button_state;
// the setup routine runs once when you press reset:
void setup() { 
pinMode(led_pin, OUTPUT); 
pinMode(button_pin, INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// Enquanto o botão não for pressionado, não faz nada.
while (digitalRead(button_pin)!=0){
}
// Depois que o botão é pressionado, aguarda ser solto
while (digitalRead(button_pin)==0){
}
// Atraso para aguardar oscilação de contato terminar
delay(50);
// Inverte o estado da variável led_state
led_state = !led_state;// Copia variável led_state para o pino do LED
digitalWrite(led_pin, led_state);
}
Felipe Nascimento Martins
Sensores Analógicos
Sensores com Sinais Analógicos
• Diversos sensores proveem informação através 
de sinais analógicos:
• Intensidade luminosa (LDR);
• Deslocamento (angular ou linear);
• Força/Torque (SFR, strain gage);
• Proximidade;
• Aceleração;
• Inclinação;
• Temperatura;
• Etc.
Felipe Nascimento Martins
Intensidade Luminosa: LDR
• Resistor cuja resistência varia conforme a 
intensidade da luz incidente. 
• Vários modelos com diferentes sensibilidades.
• Datasheet: http://www.biltek.tubitak.gov.tr/gelisim/elektronik/dosyalar/40/LDR_NSL19_M51.pdf
Felipe Nascimento Martins
Intensidade Luminosa: LDR
Felipe Nascimento Martins
Prática 6: Usando o sensor de luz
• Monte o circuito com LDR – Light Dependent
Resistor (sensor de luz).
• Escreva um programa que acenda o LED do pino 
13 quando houver pouca luz e apague o mesmo 
LED quando houver muita luz.
void setup() {
...
}
void loop() {
...
}
Felipe Nascimento Martins
Deslocamento
• Deslocamento linear ou angular pode ser medido 
com potenciômetros;
• Com alimentação de 5V, o sinal varia de 0 a 5V 
(mínimo a máximo deslocamento);
• Há potenciômetros angulares multivoltas e 
potenciômetros lineares de longo alcance.
Felipe Nascimento Martins
Deslocamento
Felipe Nascimento Martins
Força e Torque
• FSR (Force Sensing Resistor) e Strain Gage 
(extensômetro): resistência varia com a 
deformação.
• Usados para medir força e torque.
• Datasheets: 
FSR - http://www.trossenrobotics.com/productdocs/2010-10-26-DataSheet-FSR402-Layout2.pdf
Célula de carga - http://www.alfainstrumentos.com.br/manuais/celulas/catalogo_celulas_0302cp.pdf
Felipe Nascimento Martins
Strain Gage
Felipe Nascimento Martins
Proximidade por infravermelho
• Sharp GP2Y0A21YK0F
• Tensão de alimentação: 5V;
• Pode medir distâncias de 10 a 80 cm;
• Sinal: tensão entre 1,65V e 2,15V.
• Há outros modelos com outras faixas de medição.
Datasheet: https://www.sparkfun.com/datasheets/Components/GP2Y0A21YK.pdf
Felipe Nascimento Martins
Proximidade por infravermelho
Felipe Nascimento Martins
Aceleração/Inclinação
• ADXL335
• Tensão de alimentação: 3,3 V;
• Mede aceleração nos 3 eixos do espaço;
• Mede aceleração de até 3g;
• Mede aceleração da gravidade (estática), 
podendo ser usado para medir inclinação.
• Datasheet: https://www.sparkfun.com/datasheets/Components/SMD/adxl335.pdf
Felipe Nascimento Martins
Temperatura: RTDs
• RTD = Resistance Temperature Detectors
• Normalmente confeccionados com um fio (ou 
enrolamento) de alta pureza de cobre, níquel ou 
platina (estes são os melhores).
• RTDs comuns podem medir com erros da ordem de 
±0,1ºC. Os de platina (PRT – Platinum Resistance
Thermometer) podem chegar a ±0,0001ºC.
• São estáveis e lineares, com ótima repetitividade.
• Aplicações incluem refrigeração de alimentos e 
compostos químicos, fornos de fusão (produção de 
metais e ligas), destilação fracionada (produção de 
bebidas e derivados de petróleo), usinas nucleares e 
aquecedores e refrigeradores domésticos.
Felipe Nascimento Martins
Temperatura: Termistores NTC/PTC
• São semicondutores cerâmicos que têm sua 
resistência alterada com a variação de temperatura.
• Geralmente seu coeficiente de variação é maior que o 
dos RTDs, mas a variação de resistência é menos 
linear.
• Podem ser de dois tipos: NTC ou PTC (Negative ou 
Positive Temperature Coefficient).
• Faixa típica de operação: de -100ºC a 300ºC.
• Resistência a 25ºC: de 0,5Ω a 100MΩ.
• Aplicações: circuitos simples de medição de 
temperatura; para reduzir corrente de carga de 
capacitores em fontes chaveadas (NTCs) etc.
Felipe Nascimento Martins
Temperatura: RTD x NTC
Temperatura: RTD ou NTC
Felipe Nascimento Martins
Temperatura: TMP35/36/37
• Tensão de alimentação: 2,7 V a 5,5 V;
• Fator de escala: 10 mV/°C;
• Precisão: ±2°C;
• Linearidade: ±0,5°C;
• Faixa de operação: −40°C a +125°C.
• Datasheet: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Temp/TMP35_36_37.pdf
Felipe Nascimento Martins
Temperatura: TMP35/36/37
Felipe Nascimento Martins
Felipe Nascimento Martins
Comunicação Serial
Comunicação serial
• Bit: menor unidade de informação -> 0 ou 1;
• Informação é enviada bit a bit, em sequência;
• Síncrona: uma linha de dados e outra de clock:
Felipe Nascimento Martins
Comunicação serial
• Bit: menor unidade de informação -> 0 ou 1;
• Informação é enviada bit a bit, em sequência;
• Assíncrona: apenas uma linha de dados. A 
velocidade deve ser definida:
Felipe Nascimento Martins
Comunicação serial
• OK. 
• Mas como posso transmitir outras informações 
além de “zeros” e “uns”?
Felipe Nascimento Martins
Comunicação serial
• OK. 
• Mas como posso transmitir outras informações 
além de “zeros” e “uns”?
• Existe uma tabela que relaciona caracteres a 
sequências de zeros e uns:
• ASCII (American Standard Code for 
Information Interchange).
• Esta tabela criou um padrão para troca de 
informações em sistemas binários.
Felipe Nascimento Martins
Felipe Nascimento Martins
Comunicação Serial no Arduino
• Microcontrolador possui hardware para 
comunicação serial:
• Pino digital 0 (RX): recepção de dados;
• Pino digital 1 (TX): transmissão de dados;
• Bit 1 = 5V; Bit 0 = 0V;
• A maioria das placas Arduino possui hardware
que converte sinais do padrão serial assíncrono 
para USB;
Felipe Nascimento Martins
Prática 7: Medindo Temperatura
• Monte o circuito com o sensor de temperatura. 
• Escreva um programa que mostre o valor da 
temperatura na tela do computador a cada 0,5s.
Felipe Nascimento Martins
Prática 7: Medindo Temperatura
• Exemplo de programa:
void setup() {
Serial.begin(9600);
}
void loop() {
int sensor = analogRead(A0);
Serial.println(sensor);
delay(500);
}
Felipe Nascimento Martins
Arduino
• A.
Prática 7: Medindo Temperatura
http://123d.circuits.io/circuits/155990-pratica-7-medindo-temperatura-sinal-analogico/embed
Felipe Nascimento Martins
Comunicação Serial no Arduino
• Serial.println(analogValue, DEC); // 
envia analogValue (int) codificada em 
ASCII no formato decimal
• Serial.println(analogValue, HEX); // 
envia ASCII no formato hexadecimal
• Serial.println(analogValue, OCT); // 
envia ASCII no formato octal
• Serial.println(analogValue, BIN); // 
envia ASCII no formato binário
Felipe Nascimento Martins
Comunicação Serial no Arduino
• Serial.available(); // retorna 1 se 
houver caracter disponível no buffer de 
recepção. Caso contrário, retorna 0.
• Serial.read(); // lê um byte recebido 
pela Serial (int)
• Exemplo: 
int incomingByte;
if (Serial.available() > 0) {
incomingByte = Serial.read();
}
Felipe Nascimento Martins
Prática 8: Comunicação bidirecional
• Outro exemplo de comunicação serial: desta vez 
o Arduino vai receber um dado do computador, 
processá-lo e retornar o resultado pela porta 
serial. 
• Vamos analisar o programa:
int i, numero;
void setup() {
Serial.begin(9600); 
}
void loop() {
while (true) {
Serial.print("Entre com um numero: "); 
while (Serial.available()==0); 
numero = Serial.read(); 
Felipe Nascimento Martins
if (numero>='0' && numero<='9')
Serial.println(numero-’0’); 
else {
Serial.println("O valor deve ser numerico!"); 
continue; 
}
numero-='0'; 
for (i = 0; i <= 10; i++) {Serial.print(numero);
Serial.print(" x ");
Serial.print(i);
Serial.print(" = ");
Serial.println(numero*i);
}
Serial.println(""); 
}
}
Felipe Nascimento Martins
Prática 8: Comunicação bidirecional
Felipe Nascimento Martins
http://123d.circuits.io/circuits/155997-pratica-8-comunicacao-bidirecional-tabuada/embed
Felipe Nascimento Martins
Mais um pouco 
de Eletrônica
Shift Registers
• Shift registers (ou Registradores de 
Deslocamento) são memórias que recebem 
uma sequência de bits enviados serialmente e 
disponibilizam seus valores de forma 
simultânea;
• Muito utilizados em sistemas embarcados 
para economizar pinos de E/S dos 
microcontroladores;
• CI 74HC595 é um shift register de 8 bits.
• Datasheet: http://arduino.cc/en/uploads/Tutorial/595datasheet.pdf
Felipe Nascimento Martins
Shift Registers
74HC595
Felipe Nascimento Martins
Shift Registers
74HC595
Felipe Nascimento Martins
Prática 9: Usando shift register
• Monte o circuito abaixo. 
Felipe Nascimento Martins
Prática 9: Usando shift register
int latchPin = 8; //Pin connected to ST_CP of 74HC595
int clockPin = 12; //Pin connected to SH_CP of 74HC595
int dataPin = 11; //Pin connected to DS of 74HC595
void setup() {
//set pins to output so you can control the shift 
register
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
Felipe Nascimento Martins
Prática 9: Usando shift register
void loop() {
// count from 0 to 255 and display the number
for (int numberToDisplay = 0; numberToDisplay < 256; 
numberToDisplay++) {
// take the latchPin low: LEDs don't change
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 
numberToDisplay); 
digitalWrite(latchPin, HIGH); // turn LEDs on
delay(500);
}
}
Felipe Nascimento Martins
Felipe Nascimento Martins
Controle de cargas analógicas
“Simulando” uma tensão analógica
• PWM = Pulse Width Modulation;
• Razão cíclica (duty cycle): define a tensão 
média aplicada:
T(PWM) T(PWM) T(PWM)
A1 A2 A3
Felipe Nascimento Martins
Tensão média de um sinal PWM
Felipe Nascimento Martins
Sinal PWM versus sinal analógico
Felipe Nascimento Martins
Controle de potência por PWM
 P = V2 / R
analogWrite(11, 200);
 cria no pino 11 um sinal 
PWM com razão cíclica 
igual a 200;
 f = 490Hz;
 apenas alguns pinos 
possuem saída PWM.
Felipe Nascimento Martins
Prática 10: Controle de brilho
int brilho = 0; // brilho do LED
int sensor; // valor do LDR
void setup() {
pinMode(A2, INPUT); // pino do LDR: entrada A2
pinMode(13, OUTPUT); // pino do LED: saida 13
Serial.begin(9600);
}
void loop() {
sensor = analogRead(A2); // le valor do LDR
brilho = map(sensor, 0, 1023, 0, 255);
Serial.println(brilho); // envia ao PC
analogWrite(13, brilho); // aciona LED
delay(100);
}
Felipe Nascimento Martins
Prática 11: Pisca-pisca suave
int brilho = 0; // brilho do LED
int variacao = 5; // quanto varia o brilho
void setup() { 
pinMode(13, OUTPUT);
} 
void loop() { 
analogWrite(13, brilho); 
brilho = brilho + variacao;
if (brilho == 0 || brilho == 255) {
variacao = -variacao; 
} 
delay(30); 
}
Felipe Nascimento Martins
Felipe Nascimento Martins
Módulo LCD
LCD – Liquid Cristal Display
• Opção prática de apresentar uma grande 
quantidade de dados de forma relativamente 
simples e barata;
• O módulo é constituído de um display de 
cristal líquido (LCD) e de um controlador de 
display;
• Existem dois tipos de módulo LCD: caractere 
e gráfico.
Felipe Nascimento Martins
• Os displays de caracteres são mais baratos e 
capazes de apresentar caracteres como 
letras, números e símbolos;
• Sua tela é dividida em linhas e colunas, e 
cada posição armazena um caractere;
• Não funcionam adequadamente para a 
apresentação de gráficos.
LCD – Liquid Cristal Display
Felipe Nascimento Martins
• Os displays gráficos são mais caros e 
complexos de programar;
• Podem apresentar basicamente qualquer tipo de 
informação na tela, inclusive gráficos, fotos etc.
100 x 64 pixels 128 x 64 pixels
LCD – Liquid Cristal Display
Felipe Nascimento Martins
• Serão abordados neste curso os módulos de 
caractere baseados no chip controlador 
Hitachi HD 44780;
• É um chip que é praticamente padrão no 
segmento de módulos de display LCD;
• Permite um interface simples com 
microcontroladores.
LCD – Liquid Cristal Display
• Tem largura de barramento de dados 
selecionável para 4 ou 8 bits;
• São necessárias três linhas de controle 
adicionais: ENABLE, RS e R/W;
• A comunicação no modo de 4 bits é realizada 
utilizando apenas as quatro linhas mais 
significativas (D7 a D4). O byte é dividido em 
dois nibbles onde o mais significativo é enviado 
primeiro.
LCD – Liquid Cristal Display
Felipe Nascimento Martins
Bit 1 de dados do LCDD18
Bit 0 de dados do LCDD07
EnableE6
Read/WriteR/W5
Register SelectRS4
ContrasteVo3
Positivo (5V)Vdd2
TerraVss1
FunçãoNomePino
LCD – Liquid Cristal Display
Felipe Nascimento Martins
Catodo do back-light (se existir)K16
Anodo do back-light (se existir)A15
Bit 7 de dados do LCDD714
Bit 6 de dados do LCDD613
Bit 5 de dados do LCDD512
Bit 4 de dados do LCDD411
Bit 3 de dados do LCDD310
Bit 2 de dados do LCDD29
FunçãoNomePino
LCD – Liquid Cristal Display
Felipe Nascimento Martins
• O HD 44780 possui as seguintes memórias:
– 80 bytes de memória RAM (DDRAM – Data 
Display RAM);
– 64 bytes de RAM para o gerador de 
caracteres (CGRAM – Caracter Generator
RAM);
– 9920 bits de memória ROM (CGROM): 208 
caracteres 5x8 ou 32 caracteres 5x10.
LCD – Liquid Cristal Display
Felipe Nascimento Martins
• O Arduino possui uma biblioteca para 
utilização de LCDs de caractere;
• Após incluir a biblioteca, é necessário 
declarar o display informando a que pinos do 
Arduino o LCD está conectado;
• Em seguida, deve ser chamada a função de 
inicialização, passando como parâmetros o 
número de caracteres e de linhas que o LCD 
possui.
LCD – Liquid Cristal Display
Felipe Nascimento Martins
Prática 12: Dados no LCD
#include <LiquidCrystal.h>
// inicializa bib. informando os pinos conectados:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2); // inicializa o LCD
lcd.print("hello, world!"); // mostra mensagem
}
void loop() {
// coloca cursor na coluna 0, linha 1:
lcd.setCursor(0, 1);
// mostra numero de segundos desde o reset:
lcd.print(millis()/1000);
delay(100);
}
Felipe Nascimento Martins
Prática 12: Dados no LCD
Felipe Nascimento Martins
Prática 12: Dados no LCD
Felipe Nascimento Martins
• Outras funções interessantes:
lcd.home(); // retorna cursor ao início
lcd.write(char); // imprime um caracter
lcd.blink(); // aciona cursor piscante
lcd.noBlink(); // desliga cursor piscante
lcd.autoscroll(); // ativa deslocamento a esquerda
lcd.noAutoscroll(); // desliga deslocamento
lcd.noDisplay(); // apaga tela (texto na memória)
lcd.display(); // liga tela (exibe caracteres)
lcd.rightToLeft(); // próxima letra à esquerda
lcd.leftToRight(); // próxima letra à direita
lcd.clear(); // limpa a tela
LCD – Liquid Cristal Display
Felipe Nascimento Martins
Prática 13: Valor do sensor no LCD
• Modifique o programa anterior para fazer com que a 
primeira linha do LCD mostre o valor de temperatura 
e a segunda linha mostre um relógio tipo HH:MM:SS.
Felipe Nascimento MartinsLCD gráfico 128 x 64 pixels
Detalhes: http://nossosrobos.blogspot.com.br/2012/01/lcd-para-seu-robo-com-arduino.html
Felipe Nascimento Martins
Felipe Nascimento Martins
Avançando com Arduino e 
Sistemas Embarcados
Felipe Nascimento Martins
Motores Elétricos
Motor de Corrente Contínua (CC)
Felipe Nascimento Martins
• Alimentado em corrente contínua;
• Possui ímã e bobinas internamente;
• Velocidade é ajustada pela tensão de 
alimentação (pode ser por PWM!);
• Sentido de giro é alterado pela polaridade.
Motor de Passo
Felipe Nascimento Martins
• Alimentado com sinais 
digitais;
• Alimentação das 
bobinas deve ser 
sequencial;
• Permite controle preciso 
de posição;
• Torque cai muito com o 
aumento da velocidade.
Medição de deslocamento (encoder)
• Permite medir a velocidade e posição angular 
dos motores;
• Precisão: número de pulsos por volta.
Felipe Nascimento Martins
Medição de deslocamento (encoder)
Felipe Nascimento Martins
Medição de deslocamento (encoder)
Felipe Nascimento Martins
Servomotor
Felipe Nascimento Martins
• É um motor CC que possui um sistema de 
interno de medição e de controle:
• angular – controla a posição (giro) do eixo;
• contínuo – controla a velocidade do eixo;
Servomotor
Felipe Nascimento Martins
Servomotor
Felipe Nascimento Martins
• Normalmente é feito com um motor de 
corrente contínua, um circuito eletrônico e 
engrenagens para aumentar o torque;
Servomotor
Felipe Nascimento Martins
• Três fios: 2 de alimentação e um de controle;
• O sinal de referência (de posição ou 
velocidade) é do tipo PWM.
Servomotor
Felipe Nascimento Martins
• Três fios: 2 de alimentação e um de controle;
• O sinal de referência (de posição ou 
velocidade) é do tipo PWM.
Exemplo: Controle de Servomotores
Felipe Nascimento Martins
Felipe Nascimento Martins
Exemplo: Controle de Servomotores
#include <Servo.h> 
Servo myservo; // create servo object
Servo myservo2;
int potpin = 0; // used to connect the potentiometer
int val; // value from the analog pin 
void setup() { 
myservo.attach(9); // attaches the servo on pin
myservo2.attach(10);
} 
void loop() { 
val = analogRead(potpin); // entre 0 e 1023
val = map(val, 0, 1023, 0, 179); // escalona
myservo.write(val); 
myservo2.write(179-val);
delay(15);
} Felipe Nascimento Martins
Exemplo: Controle de Servomotores
Outros motores com Arduino
• Cada pino do Arduino pode fornecer, no máximo, 
40mA de corrente -> pode não ser suficiente para 
acionar um motor!
• Solução: usar transistores.
Felipe Nascimento Martins
Transistor
• Um transistor pode ser entendido 
como uma “válvula” eletrônica: é 
capaz de acionar cargas de alta 
corrente a partir de um sinal de 
controle de baixa corrente.
• Quanto maior for a corrente no pino 
de “base” (B), maior será a corrente 
entre os pinos “coletor” (C) e “emissor” 
(E).
• Por exemplo, se a corrente na base 
variar de 0 a 0,01 A, a corrente de 
coletor pode variar de 0 a 1A!
Felipe Nascimento Martins
Exemplo: Motor CC com transistor
Felipe Nascimento Martins
Exemplo: Motor CC com transistor
Felipe Nascimento Martins
• Com um transistor é possível ligar e desligar um 
motor, além de controlar sua velocidade (PWM);
• Mas, para inverter o sentido de giro de um motor 
CC é necessário inverter o sentido de circulação 
da corrente no motor;
• Com um transistor, a corrente circula apenas num 
sentido;
• Solução: usar quatro transistores conectados em 
forma de ponte: Ponte H.
Ponte H
Felipe Nascimento Martins
Ponte H
Felipe Nascimento Martins
Ponte H – exemplo 
Felipe Nascimento Martins
Motor Shield oficial
Felipe Nascimento Martins
• Shield oficial para controle de motores: circuito 
integrado com ponte H.
Motor Shield
• Pode acionar dois motores CC ou um motor de 
passo: até 36V, 600mA, 5kHz.
Felipe Nascimento Martins
Motor Shield
• Exemplo: controle de velocidade dos motores 
com o Shield Motor Control:
Felipe Nascimento Martins
• Pode acionar quatro 
motores CC (46V, 4A) e 
uma carga resistiva de até 
30A.
Motor Shield 4 Power
Felipe Nascimento Martins
Felipe Nascimento Martins
Conectando Dispositivos
Comunicação Serial no Arduino
• A maioria das placas Arduino possui hardware
para implementação de comunicação serial em 
diferentes padrões:
• SPI – Serial Peripheral Interface;
• TWI – Two Wire serial Interface (I2C);
• USART – Universal Synchronous and
Asynchronous serial Receiver and
Transmitter (estilo RS-232) – Já vimos este 
tipo;
Felipe Nascimento Martins
SPI – Serial Peripheral Interface
Felipe Nascimento Martins
SPI
• SPI – Serial Peripheral Interface – é uma 
interface de comunicação serial síncrona 
utilizada para comunicação a curta distância:
• CIs conversores A/D e D/A;
• Memórias Flash e EEPROM;
• Relógios de tempo real;
• Sensores;
• Potenciômetros digitais;
• Telas de LCD; etc.
Felipe Nascimento Martins
SPI
• Na comunicação SPI sempre existe um 
dispositivo mestre (em geral é o próprio 
microcontrolador) que controla os periféricos;
• Três linhas são comuns a todos os dispositivos:
– MISO (Master In Slave Out) – linha pela qual o 
escravo envia dados ao mestre;
– MOSI (Master Out Slave In) – linha pela qual o 
mestre envia dados aos escravos;
– SCK (Serial Clock) – clock gerado pelo mestre 
para sincronizar a comunicação.
Felipe Nascimento Martins
SPI
• Além das linhas MISO, MOSI e SCK, cada 
dispositivo está conectado a uma linha SS:
• SS (Slave Select) – cada escravo possui uma 
entrada desta linha, que é controlada pelo 
mestre para habilitar ou desabilitar os 
dispositivos individualmente:
• Em nível baixo: comunicação habilitada;
• Em nível alto: escravo ignora o mestre.
Felipe Nascimento Martins
SPI
Felipe Nascimento Martins
SPI com vários escravos
Felipe Nascimento Martins
SPI com vários escravos
Felipe Nascimento Martins
SPI com Arduino
• A biblioteca do Arduino faz a placa operar em 
modo mestre;
• Ordem de transmissão dos dados (primeiro pelo 
MSB ou pelo LSB): SPI.setBitOrder() 
• Linha de clock fica em nível alto ou baixo 
quando inativa e modo de amostragem de 
dados: SPI.setDataMode() 
• Velocidade de comunicação: 
SPI.setClockDivider() 
Felipe Nascimento Martins
Cartão de Memória SD
Felipe Nascimento Martins
Cartão de Memória SD
• A biblioteca “SD.h” provê meios de 
utilização de cartões de memória SD com o 
Arduino.
• Esse tipo de memória se comunica com o 
microcontrolador por SPI.
Felipe Nascimento Martins
Cartão de Memória SD
Felipe Nascimento Martins
Cartão de Memória SD
Alimentação: 3,3V  uso de resistores em 5V!
Felipe Nascimento Martins
Exemplo: data logger
#include <SD.h>
const int chipSelect = 4;
void setup()
{
Serial.begin(9600);
Serial.print("Initializing SD card...");
pinMode(10, OUTPUT); // chip select
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
return;
}
Serial.println("card initialized.");
}
Felipe Nascimento Martins
Exemplo: data logger
void loop()
{
// make a string for assembling the data to log:
String dataString = "";
// read three sensors and append to the string:
for (int analogPin = 0; analogPin < 3; 
analogPin++) {
int sensor = analogRead(analogPin);
dataString += String(sensor);
if (analogPin < 2) {
dataString += ","; 
}
}
Felipe Nascimento Martins
Exemplo: data logger// open the file. only one file can be open at a 
time,
File dataFile = SD.open("datalog.txt", FILE_WRITE);
// if the file is available, write to it:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
// print to the serial port too:
Serial.println(dataString);
} 
// if the file isn't open, pop up an error:
else {
Serial.println("error opening datalog.txt");
} 
}
Felipe Nascimento Martins
TWI – Two Wire serial Interface 
(I2C)
Felipe Nascimento Martins
I2C
• I2C (Inter-Integrated Circuit) foi desenvolvido 
pela PHILIPS no início da década de 1980 para 
transferência de dados entre 
microcontroladores e equipamentos;
• Barramento de comunicação serial de dados 
entre dispositivos onde a conexão é feita 
através de 2 fios;
• É half-duplex, ou seja, em determinado 
instante, apenas recebe ou envia informação;
Felipe Nascimento Martins
I2C
• Taxa de transferência: até 100kbits/s;
• Operação em modo mestre/escravo: um 
dispositivo ou processo (mestre) tem controle 
unidirecional sobre um ou mais outros 
dispositivos (escravos);
• Pode possuir mais de um mestre, mas só um 
controla o barramento de cada vez.
Felipe Nascimento Martins
I2C
Felipe Nascimento Martins
I2C
Felipe Nascimento Martins
I2C
• Um fio transporta o sinal do clock (SCL – Serial 
Clock Line) e o outro, os dados (DAS - Serial 
Data Line);
• A comunicação é síncrona. Primeiro é enviado o 
endereço do dispositivo destinatário. Em 
seguida, o dado é enviado ao barramento. 
I2C
Felipe Nascimento Martins
TWI (I2C)
• No Arduino a biblioteca Wire possui as funções 
para implementação da comunicação I2C;
• Esta biblioteca implementa apenas 
endereçamento de 7 bits;
• Caso use dispositivos que exijam 8 bits de 
endereçamento, deve-se configurar seu 
endereço para a faixa 0-127.
Felipe Nascimento Martins
TWI (I2C)
Felipe Nascimento Martins
Exemplo: Potenciômetro Digital
#include <Wire.h>
void setup() {
Wire.begin(); // join i2c (address optional for master)
}
byte val = 0;
void loop() {
Wire.beginTransmission(44); // transmit to device #44
// device address is specified in datasheet
Wire.write(byte(0x00)); // sends instruction byte 
Wire.write(val); // sends potentiometer value byte 
Wire.endTransmission(); // stop transmitting
val++; // increment value
if(val == 64) { // if reached 64th position (max)
val = 0; // start over from lowest value
}
delay(500);
}
Felipe Nascimento Martins
Arduino e NXT via RS-485 e I2C
Felipe Nascimento Martins
Arduino Nano
Arduino e NXT via RS-485 e I2C
Detalhes: http://nossosrobos.blogspot.com.br/2011/08/arduino-conversando-com-nxt-via-rs-485.html
http://nossosrobos.blogspot.com.br/2013/03/comunicacao-ic-entre-lego-nxt-e-arduino.html
Felipe Nascimento Martins
Comunicação Serial USART:
Meios de Utilização
Felipe Nascimento Martins
Comunicação sem-fio
• Wixel shield for Arduino, com dois módulos Wixel;
• Rádio de 2,4GHz para até 30 metros, 350kbps;
• Possui microcontrolador programável por interface 
amigável; 
• Tem 15 pinos de I/O, com 6 entradas analógicas, que 
podem ser programados de forma independente da 
comunicação;
• Permite a criação de uma rede com até 128 módulos de 
comunicação;
• A comunicação é feita como se fosse comunicação 
serial padrão;
• Permite gravar programas no Arduino sem ligar o cabo 
USB à placa! 
Felipe Nascimento Martins
Comunicação sem-fio
http://nossosrobos.blogspot.com.br/2011/12/arduino-wireless.html
Felipe Nascimento Martins
Conexão Bluetooth
• Modelo JY-BT03 - Shenzhen Jiayuan Electronic Co. Ltd.;
• Conexão com pinos RX-TX do microcontrolador;
• Comunicação Bluetooth 2.0;
• Baud rate: 2.400 a 1.382.400 bps;
• Tensão de alimentação: 5,0 V (3,6V a 6,0V);
• Corrente: 35mA quando realiza "pareamento"; 8mA 
quando conectado;
• Antena impressa na própria placa;
• Possui LED que indica o estado da conexão Bluetooth;
• Senha padrão: 1234.
Felipe Nascimento Martins
Detalhes: http://nossosrobos.blogspot.com.br/2012/05/arduino-wireless-parte-ii-via-bluetooth.html
Felipe Nascimento Martins
Conexão Bluetooth
Conexão Bluetooth
Detalhes: http://nossosrobos.blogspot.com.br/2012/05/arduino-wireless-parte-ii-via-bluetooth.html
Felipe Nascimento Martins
Conexão Bluetooth
Detalhes: http://nossosrobos.blogspot.com.br/2012/05/arduino-wireless-parte-ii-via-bluetooth.html
Felipe Nascimento Martins
Conexão em rede ZigBee
• ZigBee designa um conjunto de especificações 
para a comunicação sem-fio entre dispositivos 
eletrônicos, com ênfase na baixa potência de 
operação, na baixa taxa de transmissão de 
dados e no baixo custo de implantação;
• Pode-se formar uma rede com vários módulos, 
de maneira que a informação seja transmitida 
de um ao seguinte (Mesh) para aumentar o 
alcance total.
Felipe Nascimento Martins
Módulo XBee – ZigBee
• Módulo Digi XBee ZB - Antena Wire - Low Power 
• Frequência de Transm.: 2,4 GHz 
• Potência de Transm.: 1,25 mW 
• Alcance Máximo estimado: até 120m (+1 dBm) 
• Topologias de rede: P-to-P, P-to-M, ZigBee/Mesh
• Sleep Mode < 1µA
• RF Data Rate 250 kbps
• Segurança: 128-bit AES 
• (10) GPIO, (4) ADC e 3V3 CMOS UART
Felipe Nascimento Martins
Módulo XBee – ZigBee
• XBee e XBee-PRO ZB 
• Frequência de Transm.: 2,4 GHz 
• Potência de transm.: 63 mW (+18 dBm) / Int'l
10 mW (+10 dBm)
• Alcance Máximo estimado: 3200 m
• RF Data Rate: RF 250 kbps, Serial até 1 Mbps
• Segurança: 128-bit AES 
• Antena PCB - Ref: PIT
Felipe Nascimento Martins
Ethernet Shield
Felipe Nascimento Martins
Arduino com MATLAB
Detalhes: http://nossosrobos.blogspot.com.br/2011/10/arduino-com-matlab.html
Felipe Nascimento Martins
Arduino com LabVIEW
Detalhes: http://sine.ni.com/nips/cds/view/p/lang/pt/nid/209835
Felipe Nascimento Martins
http://www.blendedtechnologies.com/realtime-plot-of-arduino-serial-data-using-python/231
Aquisição de dados com Arduino
Felipe Nascimento Martins
Aquisição de dados com Arduino
Felipe Nascimento Martins
Controle de um Robô
Detalhes: http://nossosrobos.blogspot.com.br/2012/09/monte-seu-robo-com-arduino.html
Felipe Nascimento Martins
Robôs baseados em Arduino
• DFRobotShop Rover - Arduino 
Compatible Tracked Robot 
Felipe Nascimento Martins
Robôs baseados em Arduino
• DFRobotShop Rover 2.0 – Arduino 
Compatible Mecanum 
Felipe Nascimento Martins
Robô Arduino oficial
• Arduino Robot 
Felipe Nascimento Martins
Detalhes: http://nossosrobos.blogspot.com.br/2013/07/arduino-robot-o-primeiro-robo-arduino.html
Softwares gratuitos
Felipe Nascimento Martins
• IDE de programação do Arduino: 
www.arduino.cc
• Fritzing - para fazer esquemas elétricos, de 
proto-board e placas de circuito impresso: 
www.fritzing.org
• 123D Circuits.io - para simulação de circuitos 
com ou sem Arduino e projeto de placas de 
circuito impresso (roda no navegador):
http://123d.circuits.io
Referências
Felipe Nascimento Martins
• ARDUINO. Language Reference. Disponível em: 
<http://arduino.cc/en/Reference/HomePage>. MAR/2014.
• ERIKSSON, Fredrik. Industrial Circuits Application Note - Stepper
Motor Basics.
• FONSECA, Érika e BEPPU, Mathyan. Apostila Arduino. CT/UFF, 2010.
• JUSTEN, Álvaro. Curso de Arduino (apostila), 2011.
• LIMA, Charles B. de; VILLAÇA, Marco V. M. AVR e Arduino – Técnicas 
de Projeto. 2ª ed. 2012.
• MARTINS, Felipe N. Introdução à Eletrônica com Arduino. Disponível 
em: <http://www.slideshare.net/felipenm/oficina-de-introduo-a-eletrnica-com-arduino>. 
• Nossos Robôs: www.nossosrobos.blogspot.com
• POMÍLIO, J.A. Eletrônica de Potência. UNICAMP (apostila para o 
curso de graduação). Acesso em AGO/2010.
• http://www.labdegaragem.com.br/wiki
• http://www.learningaboutelectronics.com/
• VALPEREIRO, Filipe. Workshop Arduino, 2008.
Obrigado!
Felipe N. Martins
@f_n_martins
www.facebook.com/felipenm

Outros materiais