Buscar

Curso de Arduino Completo

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

http://www.kemper.com.br
Mini Curso de
Arduino
Helmut Kemper
1
http://www.kemper.com.br
Agradecimentos
•Prof. Anderson Luiz
•Prof. Lelino Pontes
•Ednarde Bezerra
•Gabriel Liberal
2
http://www.kemper.com.br
Agradecimentos
•A todos os meus alunos 
•A todos os meus professores
•Ao pessoal do IFPE
3
http://www.kemper.com.br
Lei de Ohm
4
http://www.kemper.com.br
Lei de Ohm
+
5
http://www.kemper.com.br
Lei de Ohm
+ Bateria
Resistor
Corrente
6
http://www.kemper.com.br
Lei de Ohm
+ Volts ( V )
Ohm ( Ω )
Ampere ( A )
7
http://www.kemper.com.br
Lei de Ohm
+ U
R
I
U = R x I
8
http://www.kemper.com.br
Lei de Ohm
U = R x I
U
R I
9
http://www.kemper.com.br
Associação de 
Resistores
10
http://www.kemper.com.br
Associação de 
Resistores
Paralelo
11
http://www.kemper.com.br
Associação de 
Resistores
Paralelo
12
http://www.kemper.com.br
Associação de 
Resistores
Paralelo
1_Re= 1_R1 1_R2 1_R3 1_R4
1_Rn+ + + +
13
http://www.kemper.com.br
Associação de 
Resistores
Paralelo
Se: R1=R2=R3=R4=Rn
14
http://www.kemper.com.br
Associação de 
Resistores
Paralelo
Re = _Rn
15
http://www.kemper.com.br
Associação de 
Resistores
Paralelo
R1 x R2
R1 + R2_______Re =
16
http://www.kemper.com.br
Associação de 
Resistores
Paralelo
•A corrente varia para cada 
resistor 
•A tensão é a mesma em todos os 
resistores
17
http://www.kemper.com.br
Associação de 
Resistores
Série
18
http://www.kemper.com.br
Associação de 
Resistores
Série
19
http://www.kemper.com.br
Associação de 
Resistores
Série
Re = R1 + R2 + R3
20
http://www.kemper.com.br
Associação de 
Resistores
Série
•A corrente é a mesma para todos 
os resistores
•A tensão varia para cada resistor
21
http://www.kemper.com.br
Associação de 
Resistores
Divisor de tensão
22
http://www.kemper.com.br
Associação de 
Resistores
Divisor de tensão
+
23
http://www.kemper.com.br
Associação de 
Resistores
Divisor de tensão
+ U1
U2
24
http://www.kemper.com.br
Associação de 
Resistores
Divisor de tensão
+
R1
R2
25
http://www.kemper.com.br
Associação de 
Resistores
Divisor de tensão
+
R1
R2
U1
U2
= U1 x R2_______R1 + R2
26
http://www.kemper.com.br
Lei de Potência
27
http://www.kemper.com.br
Lei de Potência
+ U
R
I
28
http://www.kemper.com.br
Lei de Potência
+ U
R
I
P = U * I
29
http://www.kemper.com.br
Lei de Potência
+
P = U * I
P (( ))
Potência em Watts
Desperdício na
forma de calor
30
http://www.kemper.com.br
Lei de Potência
•Calor é igual a desperdício;
•Excesso de temperatura pode 
causar uma falha catastrófica no 
Arduino.
31
http://www.kemper.com.br
Lei de Ohm e 
Potência
32
http://www.kemper.com.br
Diodo
33
http://www.kemper.com.br
Diodo
•Semicondutor
•É um componente ativo 
•Tem poder sobre a corrente
34
http://www.kemper.com.br
Diodo
+
Corrente
Polarização Direta
35
http://www.kemper.com.br
Diodo
+
Corrente
Polarização Reversa
36
http://www.kemper.com.br
Diodo
•Serve para controlar o sentido 
da corrente;
•Tem tensão de manutenção;
•Tem corrente de fuga.
37
http://www.kemper.com.br
Diodo
•A corrente só consegue passar se 
estiver no sentido ânodo 
cátodo.
38
http://www.kemper.com.br
Diodo
•Tensão de manutenção é uma 
característica de todo 
semicondutor e reduz a tensão 
entregue ao resto do circuito
39
http://www.kemper.com.br
Diodo
•A tensão de manutenção do 
diodo de silício gira em torno 
de 0,7V
40
http://www.kemper.com.br
Diodo
+ U U
U-0,7
41
http://www.kemper.com.br
Diodo
•Corrente de fuga existe quando 
o diodo é polarizado 
inversamente e é proporcional a 
temperatura.
42
http://www.kemper.com.br
LED
43
http://www.kemper.com.br
LED
•Diodo Emissor de Luz
•Só acende se for ligado no 
sentido correto
•A tensão de manutenção varia 
de acordo com o modelo
44
http://www.kemper.com.br
LED
+ U R
LED
45
http://www.kemper.com.br
LED
+ U R
LED
Lei de Ohm:
U = R x I
46
http://www.kemper.com.br
LED
+ U R
LED
Lei de Ohm:
U - ULED = R x 0,020
47
http://www.kemper.com.br
LED
+ U R
LED
U = 5V
ULED = 1.8V
ILED = 20mA
48
http://www.kemper.com.br
LED
U = 5V
ULED = 1.8V
ILED = 20mA
U - ULED = R x 0.02
5 - 1.8 = R x 0.02
3.2 = R x 0.02
R = 3.2 / 0.02
R = 160Ω
49
http://www.kemper.com.br
Arduino
50
http://www.kemper.com.br
Arduino
51
http://www.kemper.com.br
Arduino
•Projeto Italiano de baixo custo
•Arquitetura de 8-bits
•Portas analógicas e digitais
•Serial emulada por USB
52
http://www.kemper.com.br
Arduino
•Compilador gratuito
•Framework Wiring
•Programação C / C++
53
http://www.kemper.com.br
Arduino
Digital
54
http://www.kemper.com.br
Arduino
Alimentação
55
http://www.kemper.com.br
Arduino
Analógico
56
http://www.kemper.com.br
Arduino
USB
57
http://www.kemper.com.br
Arduino
Alimentação
58
http://www.kemper.com.br
Programação
59
http://www.kemper.com.br
Programação
•Estrutura básica baseada no 
framework Wiring
•setup ()
• loop ()
60
http://www.kemper.com.br
setup ()
•É a primeira função a ser 
chamada
•Recebe as configurações iniciais
•Roda apenas uma única vez
•Função obrigatória
61
http://www.kemper.com.br
loop ()
•Recebe o código fonte
•É um laço infinito
•Função obrigatória
62
http://www.kemper.com.br
Exemplo
void setup ()
{
 //Recebe as configurações iniciais
}
void loop ()
{
 //Recebe o código fonte
}
63
http://www.kemper.com.br
Pinos Digitais
•Podem ser configurados como 
entrada ou saída
•Podem ler e escrever apenas 
valores digitais
•Podem drenar mais corrente do 
que fornecer
64
http://www.kemper.com.br
Pinos Digitais
•Funções digitais:
•pinMode ( n°, INPUT / OUTPUT);
•digitalWrite ( n°, HIGH / LOW );
•digitalRead ( n° );
65
http://www.kemper.com.br
Exemplo
void setup ()
{
 pinMode ( 3, INPUT );
}
( Continua )
66
http://www.kemper.com.br
Exemplo
void loop ()
{
 digitalWrite ( 3, HIGH );
 delay ( 300 );
 digitalWrite ( 3, LOW);
 delay ( 300 );
}
67
http://www.kemper.com.br
Dica para Iniciante
68
http://www.kemper.com.br
Dica para Iniciante
•Primeiro use a função pinMode() 
dentro da função setup() como 
no exemplo anterior;
69
http://www.kemper.com.br
Dica para Iniciante
•pinMode() recebe uma das duas 
constantes, INPUT ou OUTPUT, 
para entrada ou saída 
respectivamente.
70
http://www.kemper.com.br
Dica para Iniciante
•digitalWrite() aceita duas 
constantes, HIGH ou LOW, para 
ligar ou desligar um pino 
digital;
71
http://www.kemper.com.br
Dica para Iniciante
•digitalWrite ( 13, HIGH ) faz o 
pino 13 da placa Arduino 
apresentar 5V na saída e 
acender o LED da própria placa.
72
http://www.kemper.com.br
Dica para Iniciante
•digitalWrite ( 13, LOW ) faz o 
pino 13 da placa Arduino 
apresentar 0V na saída e apagar 
o LED da própria placa.
73
http://www.kemper.com.br
Dica para Iniciante
•variavel_qualquer = digitalRead 
( 13 ) faz a variável conter a 
constate true se o pino 13 
estiver alimentado com 5V, ou 
false se o pino
13 estiver 
alimentado com 0V.
74
http://www.kemper.com.br
Resistor de pull-up
75
http://www.kemper.com.br
Resistor de pull-up
Chave 
simples
Erro - O valor lido 
é indeterminado
pino Arduino
76
http://www.kemper.com.br
Resistor de pull-up
Resistor de 
pull-up
Chave 
simples pino Arduino
Correto!
77
http://www.kemper.com.br
Resistor de pull-up
•Entradas digitais ligadas a 
chaves mecânicas requerem um 
resistor para garantir o valor 
lido;
•Entradas ligadas a circuitos 
digitais não requerem resistor 
de pull-up.
78
http://www.kemper.com.br
Resistor de pull-up
•Use digitalWrite ( n°, HIGH ) em 
um pino configurado como 
entrada para habilitar o resistor 
de pull-up.
79
http://www.kemper.com.br
Resistor de pull-up
•Use digitalWrite ( n°, LOW ) em 
um pino configurado como 
entrada para desabilitar o 
resistor de pull-up.
80
http://www.kemper.com.br
Resistor de pull-up
•O valor do resistor de pull-up 
gira em torno de 20kΩ;
•Resistor de pull-up só se aplica 
a entradas flutuantes ( sem 
ligação ).
81
http://www.kemper.com.br
Resistor de pull-up
void setup ()
{
 pinMode ( 3, INPUT );
 //Ligar pull-up
 digitalWrite ( 3, HIGH );
}
82
http://www.kemper.com.br
Resistor de pull-up
void setup ()
{
 pinMode ( 3, INPUT );
 //Desligar pull-up
 digitalWrite ( 3, LOW );
}
83
http://www.kemper.com.br
Pisca LED forte
const unsigned char pino_led = 
13;
void setup ()
{
 pinMode ( pino_led, OUTPUT )
}
84
http://www.kemper.com.br
Pisca LED forte
void loop ()
{
 digitalWrite ( pino_led, HIGH );
 delay ( 300 );
 digitalWrite ( pino_led, LOW);
 delay ( 300 );
}
85
http://www.kemper.com.br
Pisca LED fraco
const unsigned char pino_led = 
13;
void setup ()
{
 pinMode ( pino_led, INPUT )
}
_____
86
http://www.kemper.com.br
Pisca LED fraco
void loop ()
{
 digitalWrite ( pino_led, HIGH );
 delay ( 300 );
 digitalWrite ( pino_led, LOW);
 delay ( 300 );
}
87
http://www.kemper.com.br
Memória
88
http://www.kemper.com.br
Memória
 Código Dados
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
89
http://www.kemper.com.br
Memória
•Dividida em blocos de 8-bits 
chamados de bytes;
•Arquiva apenas dados binários;
•Números binários são apenas 
uma convenção para representar 
números ou letras.
90
http://www.kemper.com.br
Memória
•É dividida em dois blocos
•Dados
•Código
91
http://www.kemper.com.br
Memória de Dados
•Pouco espaço, 128 ou 256 bytes 
dependendo do modelo do 
Arduino;
•Volátil - Perde os dados quando 
o circuito é desligado;
•Serve para arquivar variáveis.
92
http://www.kemper.com.br
Memória de Código
•Arquiva o programa;
•Grande quantidade de espaço 
quando comparada à memória 
de dados;
•Não perde os dados quando o 
circuito é desligado.
93
http://www.kemper.com.br
Memória de Código
•Os dados não podem ser 
alterados pelo código fonte do 
usuário;
•Serve para arquivar as 
constantes do programa.
94
http://www.kemper.com.br
Tipos de Dados e 
Memória
95
http://www.kemper.com.br
Tipos de Dados e 
Memória
•A escolha correta do tipo de 
dado economiza memória e 
deixa o programa mais rápido;
•Escolha sempre o tipo de dado 
que ocupe o mínimo de espaço 
possível.
96
http://www.kemper.com.br
Tipos com sinal e 
sem sinal
97
http://www.kemper.com.br
Tipos com sinal e 
sem sinal
•Dados podem ter sinal ou não;
•Quanto o tipo tiver sinal, o bit 
mais significativo será usado 
como sinal;
98
http://www.kemper.com.br
Tipos com sinal e 
sem sinal
•O tipo inteiro ocupa 16 bits;
•Valores entre 0 e 65,535, ou 
2¹⁶-1;
99
http://www.kemper.com.br
Tipos com sinal e 
sem sinal
•Porém, como o bit mais 
significativo é usado como sinal, 
o tipo inteiro passa a ter 15 bits, 
ou 2¹⁵-1;
•Valores entre 0 e 32,768;
100
http://www.kemper.com.br
Tipos com sinal e 
sem sinal
Decimal S. Sinal C. Sinal
-7 - 1001
-5 - 1011
-1 - 1111
0 0000 0000
1 0001 0001
5 0101 0101
7 0111 0111
101
http://www.kemper.com.br
Tipo Inteiro com 
Sinal
• int - Inteiro:
•Ocupa dois bytes;
•Pode arquivar números entre 
-32,768 e 32,767;
102
http://www.kemper.com.br
Tipo Inteiro sem 
Sinal
•unsigned int - Inteiro Sem Sinal
•Ocupa dois bytes
•Pode arquivar números entre 0 e 
65,535
103
http://www.kemper.com.br
Exemplo
int pino_led = 13;
void setup ()
{
 pinMode ( pino_led, OUTPUT );
}
104
http://www.kemper.com.br
Exemplo
•Qual o erro conceitual do 
exemplo anterior?
105
http://www.kemper.com.br
Exemplo
int pino_led = 13;
void setup ()
{
 pinMode ( pino_led, OUTPUT );
}
106
http://www.kemper.com.br
Exemplo
int pino_led = 13;
• O tipo inteiro ocupa dois bytes 
sem necessidade;
107
http://www.kemper.com.br
Exemplo
int pino_led = 13;
• Está sendo reservado um espaço 
da memória de código para 
arquivar um dado que não vai 
mudar durante a execução do 
código.
108
http://www.kemper.com.br
_____
• O correto seria:
Exemplo
const byte pino_led = 13;
109
http://www.kemper.com.br
_____
• const - Permite arquivar um dado 
na memória de código.
Exemplo
const byte pino_led = 13;
110
http://www.kemper.com.br
_____
• byte - Como o próprio nome diz, 
ocupa apenas 1 byte em vez de 2 
bytes.
Exemplo
const byte pino_led = 13;
111
http://www.kemper.com.br
Exemplo
const byte pino_led = 13;
void setup ()
{
 pinMode ( pino_led, OUTPUT );
}
_____
112
http://www.kemper.com.br
Tipos de dados mais 
comuns
Tipo S/ S. C/ S. Espaço
byte byte - 1 byte
bollean bollean - 1 byte
char unsigned char char 1 byte
int unsigned int int 2 bytes
113
http://www.kemper.com.br
Tipos de dados mais 
comuns
Tipo S/ S. C/ S. Espaço
word word - 2 bytes
long unsigned long long 4 bytes
float - float 4 bytes
double - double 4 bytes
114
http://www.kemper.com.br
Tipos de dados mais 
comuns
•void
•void não é um tipo, porém, é 
usado para indicar que uma 
função não retornará nada.
115
http://www.kemper.com.br
Tipos de dados mais 
comuns
•Array
•Array não é exatamente um 
tipo, é uma forma de se 
agrupar dados de um 
determinado tipo.
116
http://www.kemper.com.br
Tipos de dados mais 
comuns
Exemplo de array:
int inteiros[6];
int pinos[] = {2, 4, 8, 3, 6};
int dados[6] = {2, 4, -8, 3, 2};
char mensagem[9] = "Olá mundo";
117
http://www.kemper.com.br
Exemplos
•unsigned char letra = ‘a’;
Reserva um espaço de 1 byte para 
arquivar uma variável tipo letra e 
atribui o valor equivalente a letra 
‘a’.
118
http://www.kemper.com.br
Exemplos
•unsigned int contador = 0;
Reserva 2 bytes na memória de 
dados para receber valores entre 
0 e 65,535 e atribui o valor 0.
119
http://www.kemper.com.br
Exemplos
•const unsigned int = 0;
•Reserva 2 bytes na memória de 
código e atribui o valor 0.
120
http://www.kemper.com.br
Dica para Iniciante
•O símbolo de igualdade ( = ) é 
usado para atribuição, onde o 
valor a direita da expressão é 
atribuído a esquerda da 
expressão;
121
http://www.kemper.com.br
Dica para Iniciante
•unsigned char letra = ‘a’;
Cria uma variável de rótulo 
‘letra’ e atribui o valor 
equivalente a
letra ‘a’;
122
http://www.kemper.com.br
Dica para Iniciante
•Todas as variáveis devem ser 
criadas nas primeiras linhas do 
código, antes das funções 
setup() e loop();
123
http://www.kemper.com.br
Variáveis Locais e 
Globais
124
http://www.kemper.com.br
Variáveis Locais e 
Globais
•Todas as variáveis criadas antes 
de setup() e loop() são globais, 
ou seja, elas existem em todo o 
programa;
125
http://www.kemper.com.br
Variáveis Locais e 
Globais
•Variáveis criadas dentro de uma 
função só existe dentro da 
função e não podem ser vistas 
do lado de fora;
•Elas são locais.
126
http://www.kemper.com.br
Exemplos
unsigned int contador;
void setup ()
{
 //contador é uma variável
 //global e existe em todo o código
 contador = 0;
}
127
http://www.kemper.com.br
Exemplos
void setup ()
{
 unsigned int contador;
}
void loop ()
{
 //contador só existe dentro de setup()
 contador = 0;
} ( Erro! )
128
http://www.kemper.com.br
Exemplos
void setup ()
{
 //contador é destruído quando setup() acabar
 unsigned int contador;
}
void loop ()
{
//contador será destruído e criado a cada interação de loop()
 unsigned int contador;
} ( Correto! )
129
http://www.kemper.com.br
Operações de 
Comparação
130
http://www.kemper.com.br
Operações de 
Comparação
•Compara dois valores e retorna 
as constantes true ou false, caso 
a comparação seja verdadeira 
ou falsa;
131
http://www.kemper.com.br
Operações de 
Comparação
•Os valores comparados não são 
alterados;
•O lado esquerdo ( E ) é sempre 
comparado ao lado direito 
( D );
132
http://www.kemper.com.br
Operações de 
Comparação
Operação Símbolo Descrição Exemplo
igualdade == compara se E é igual a D ( E == D )
maior que >
compara se E 
é maior do 
que D
( E > D )
menor que <
compara se E 
é menor que 
D
( E < D )
133
http://www.kemper.com.br
Operações de 
Comparação
Operação Símbolo Descrição Exemplo
maior igual 
que >=
compara se E 
é maior 
igual a D
( E >= D )
menor igual 
que <=
compara se E 
é menor 
igual a D
( E <= D )
diferença !=
compara se E 
é diferente 
de D
( E != D )
134
http://www.kemper.com.br
Operações Lógicas
135
http://www.kemper.com.br
Operações Lógicas
•É uma operação entre dois ou 
mais valores lógicos, true ou 
false, com resultado lógico 
predefinido.
136
http://www.kemper.com.br
Operações Lógicas
•Elas servem de complemento 
para as operações de 
comparação;
•Os valores usados na operação 
não são alterados.
137
http://www.kemper.com.br
Operações Lógicas
Operação Símbolo Exemplo
AND && ( A >= B ) && ( C == B )
OR || ( A >= B ) || ( C == B )
NOT ! ! (( A == B ) || ( C == D ))
138
http://www.kemper.com.br
Lógica AND
Direita Esquerda Saída
false false false
false true false
true false false
true true true
139
http://www.kemper.com.br
Lógica OR
Direita Esquerda Saída
false false false
false true true
true false true
true true true
140
http://www.kemper.com.br
Lógica NOT
Entrada Saída
false true
true true
141
http://www.kemper.com.br
Operações 
Aritméticas
Nome Símbolo Exemplo
Atribuição = A = 9;
Soma + A = A + 1;
Subtração - B = A - 1;
Multiplicação * A = 3 * 2;
Divisão / A = A / 2;
Módulo % A = 9 % 2;
142
http://www.kemper.com.br
Operações 
Aritméticas
Nome Símbolo Exemplo
Soma += A += 1;
Soma ++ A ++;
Subtração -= B -= 5;
Subtração -- B --;
Multiplicação *= A *= 3;
Divisão /= A /= 2;
143
http://www.kemper.com.br
Controle de Fluxo
144
http://www.kemper.com.br
Controle de Fluxo
•Permite dividir o código em 
blocos de execução;
•Os comandos dos blocos devem 
ficar contidos entre chaves ( ‘{’ 
e ‘}’ );
145
http://www.kemper.com.br
Controle de Fluxo
•Os blocos podem ter sua 
execução controlada por 
operações lógicas ou de 
comparação;
146
http://www.kemper.com.br
Controle de Fluxo 
Condicional
Operação Símbolo Exemplo
Se if if ( A >= B ) { ... }
Se ... Então if ... else if ( A >= B ) { ... }else { ... }
Caso ... então switch switch ( A ) { case 1: ... case 2: ... case 3: ... }
147
http://www.kemper.com.br
Controle de Fluxo
if ( condição )
if ( A == B )
{
 digitalWrite ( pino_led, HIGH );
}
148
http://www.kemper.com.br
Controle de Fluxo
if ( condição )
if ( A == B )
{
 digitalWrite ( pino_led, HIGH );
}
else [ Opcional ]
{
 digitalWrite ( pino_led, LOW );
}
149
http://www.kemper.com.br
Controle de Fluxo
if ( condição )
if ( A == B )
{
 digitalWrite ( pino_led, HIGH );
}
else if ( A < B )
{
 digitalWrite ( pino_led, LOW );
}
150
http://www.kemper.com.br
Controle de Fluxo
if ( condição )
if ( A == B )
{
 digitalWrite ( pino_led, HIGH );
}
else if ( A < B )
{
 digitalWrite ( pino_led, LOW );
}
else
{
 ...
}
151
http://www.kemper.com.br
Controle de Fluxo
switch ( condição )
switch ( variavel_qualquer )
{
 case 0:
 ...
 break;
 case 1:
 ...
 break;
 case 100
 ...
 break;
}
152
http://www.kemper.com.br
Controle de Fluxo
switch ( condição )
•Todas as comparações são do 
tipo igualdade;
•O código começa após ‘case’ e 
só para quando encontra 
‘break’;
• ‘break’ é opcional;
153
http://www.kemper.com.br
Controle de Fluxo
switch ( condição )
Veja a estrutura abaixo:
switch ( A )
{
 case 1:
 case 2:
 case 33:
 ...
 break;
}
154
http://www.kemper.com.br
Controle de Fluxo
switch ( condição )
Ela é equivalente a:
if ( (A == 1) || (A == 2) || (A == 33) )
{
 ...
}
155
http://www.kemper.com.br
Controle de Fluxo
switch ( condição )
Veja a estrutura abaixo:
switch ( A )
{
 case 1:
 case 2:
 ...
 break;
 default:
 ...
}
156
http://www.kemper.com.br
Controle de Fluxo
switch ( condição )
Ela é equivalente a:
if ( (A == 1) || (A == 2) )
{
 ...
}
else
{
 ...
}
157
http://www.kemper.com.br
• ‘default’ - É executado se o 
valor contido na variável não 
tiver correspondência dentro da 
estrutura ‘case’
Controle de Fluxo
switch ( condição )
158
http://www.kemper.com.br
Controle de Fluxo
Laço
Operação Símbolo Exemplo
contagem for () for (A = 0; A != 10; A ++)
laço com teste 
prévio while () while ( A != 10 )
laço com teste 
posterior
do { ... } 
while () do { ... } while ( A != 10 )
159
http://www.kemper.com.br
Laço - for ()
•Recebe três parâmetros 
separados por ponto e vírgula;
•1° p. Valor inicial;
•2° p. Condição ( enquanto 
‘true’ );
•3° p. Valor por interação
160
http://www.kemper.com.br
•Os parâmetros são opcionais e se 
não forem usados devem haver 
obrigatoriamente ponto e 
vírgula;
•A condição deve ser verdadeira 
para a primeira interação;
Laço - for ()
161
http://www.kemper.com.br
for ( a = 0; a != 10; a ++ )
{
 . . .
}
Exemplo
162
http://www.kemper.com.br
Exemplo
for ( a=1, b=2; a==10||b==5; )
{
 . . .
}
163
http://www.kemper.com.br
Exemplo
for ( ; true ; )
{
 . . .
}
164
http://www.kemper.com.br
Laço - while ()
•Aceita apenas um parâmetro ou 
condição;
•A condição tem que ser 
verdadeira para que a primeira 
interação possa ocorrer;
165
http://www.kemper.com.br
Exemplo
while ( a != 10 )
{
 . . .
}
166
http://www.kemper.com.br
Laço - do {}while()
•Aceita apenas um parâmetro ou 
condição;
•A condição é checada após a 
interação;
•A condição deve ser verdadeira 
para que possam haver mais 
interações;
167
http://www.kemper.com.br
Exemplo
do
{
 . . .
} while ( a != 10 );
168
http://www.kemper.com.br
Sensores
169
http://www.kemper.com.br
Sensores
•Ultrasom
170
http://www.kemper.com.br
Sensores
• HC-SR04 - Sensor ultrasom de 
baixo custo - $9.90;
http://iteadstudio.com/
171
http://www.kemper.com.br
Sensores
•HC-SR04:
Tem quatro pinos, Vcc, Trigger, 
Echo e Gnd;
Alimentação de 5V;
172
http://www.kemper.com.br
Sensores
•HC-SR04:
A documentação e bibliotecas 
podem ser encontradas no site da 
loja;
173
http://www.kemper.com.br
Exemplo
Ultrasonic nome_construtor ( n° pino ping, n° pino echo );
void setup ()
{
 pinMode ( n° pino ping, OUTPUT );
 pinMode ( n° pino echo, OUTPUT );
}
void loop ()
{
 distancia = nome_Construtor.Ranging ( CM );
}
174
http://www.kemper.com.br
Sensores
• SEN136B5B - Sensor ultrasom de 
baixo custo - $15.00;
http://www.seeedstudio.com
175
http://www.kemper.com.br
Sensores
• SEN136B5B - Tem apenas três 
pinos, economizando espaço;
• Alimentação de 5V;
• Distância de 3cm a 4m.
176
http://www.kemper.com.br
Sensores
• SEN136B5B - O exemplo de uso 
pode ser encontrado no fórum 
da loja e não requer instalação 
de biblioteca.
177
http://www.kemper.com.br
Motores & PWM
178
http://www.kemper.com.br
Motores & PWM
•Sempre use PWM para ligar 
motores comuns;
179
http://www.kemper.com.br
Motores & PWM
•PWM é uma técnica onde a 
potência total do circuito é 
entregue a carga, porém, o 
tempo ligado/desligado varia.
180
http://www.kemper.com.br
Exemplo
181
http://www.kemper.com.br
Exemplo
•O gráfico representa um sinal 
digital, ligado / desligado, onde 
a relação entre os tempos é 
usada para controlar a potência 
final entregue ao motor.
182
http://www.kemper.com.br
Exemplo
20% 80%
•Como o tempo do circuito ligado 
representa apenas 20% do total, o 
motor tem menos velocidade.
183
http://www.kemper.com.br
Motores & PWM
50% 50%
• Quando a relação entre os tempos 
ligado e desligado varia, a 
velocidade do motor varia também;
184
http://www.kemper.com.br
Motores & PWM
20% 80%
50% 50%
185
http://www.kemper.com.br
Motores & PWM
•PWM dissipa menos calor do que 
circuitos analógicos;
186
http://www.kemper.com.br
Exemplo
187
http://www.kemper.com.br
Exemplo
•O próximo exemplo usa um 
motor comum e um resistor de 
6Ω ligado em série para 
diminuir a potência do motor.
188
http://www.kemper.com.br
Exemplo
•Temos um motor imaginário de 
24V consumindo 2A quando 
trabalha sem carga aplicada ao 
eixo.
189
http://www.kemper.com.br
Exemplo
•A lei de potência diz que: 
•P = U * I
•P = 24V * 2A
•P = 48W
190
http://www.kemper.com.br
Exemplo
•A lei de Ohm diz que:
•U = R * I
•24V = R * 2A
•R = 12Ω 
191
http://www.kemper.com.br
Exemplo
•A resistência interna do motor é 
de 12Ω e a potência nominal é 
de 48W;
192
http://www.kemper.com.br
Exemplo
•Agora imagine ligar um resistor 
de 6Ω em série com o nosso 
motor imaginário;
193
http://www.kemper.com.br
Exemplo
•A lei de Ohm diz que:
•U = R * I
•U = (Rmotor + Rsérie) * I
•24V = ( 12Ω + 6Ω ) * I
•I = 1,33A
194
http://www.kemper.com.br
Exemplo
•Aplicando-se a lei de Ohm para 
medir a tensão em cima do 
novo resistor temos:
195
http://www.kemper.com.br
Exemplo
•U = R * I
•U = 6Ω * 1,33A
•UResistor = 8V
196
http://www.kemper.com.br
Exemplo
•Aplicando-se a lei de potência 
em cima do resistor temos:
197
http://www.kemper.com.br
Exemplo
•P = U * I
•P = 8V * 1,33
•P = 10,66W
198
http://www.kemper.com.br
Exemplo 
•O circuito consome ~32W de 
potência total;
•O resistor desperdiça 10,66W na 
forma de calor;
•1/3 da energia aplicada ao 
circuito é jogada fora na forma 
de calor!
199
http://www.kemper.com.br
Conclusão
200
http://www.kemper.com.br
Conclusão
•Controlar a potência entregue a 
uma carga qualquer de forma 
analógica desperdiça energia e 
gera muito calor.
201
http://www.kemper.com.br
Motores & PWM
•PWM, ou Modulação por Largura 
de Pulso, pode ser usado para 
diversas finalidades, como 
motores, LEDs, e circuitos de 
potência em geral;
202
http://www.kemper.com.br
Motores & PWM
•O Arduino não pode ligar 
motores diretamente;
•Deve haver um driver de 
corrente específico para 
motores;
203
http://www.kemper.com.br
Motores & PWM
•O Arduino tem várias saídas 
PWM misturadas com os pinos 
digitais;
•Os pinos D5 e D6 têm os timers 
usados para outras funções e o 
valor gerado contêm erro;
204
http://www.kemper.com.br
Motores & PWM
•Use o comando analogWrite ( n°, 
valor ) para gerar o PWM;
•n° representa o pino digital 
específico do PWM;
205
http://www.kemper.com.br
Motores & PWM
•O valor deve ficar entre 0 e 255, 
onde 0 representa 0% e 255 
representa 100%;
206
http://www.kemper.com.br
L293D
207
http://www.kemper.com.br
L293D
•O L293D contêm 4 drivers na 
forma de meia ponte ‘H’;
208
http://www.kemper.com.br
L293D
•Ponte ‘H’ é uma forma de ligar 
motor, onde 4 transistores na 
forma de um ‘H’ com o motor no 
centro pode controlar o sentido 
do motor;
209
http://www.kemper.com.br
L293D
210
http://www.kemper.com.br
L293D
Vcc1 - Alimentação do 
integrado 4,5V a 7V
Vcc2 - Alimentação do motor Vcc1 a 36V
VOH - Tensão de manutenção 
por driver do motor Vcc2 - 1,4V
Dissipação de calor 2075mW - 71.4mW por °C acima de 25°C
Temperatura máxima 150°C
211
http://www.kemper.com.br
L293D
212
http://www.kemper.com.br
L293D
Pinos 1,2EN e 3,4EN - 
Habilita a saída do motor
0 - Desliga o motor
1 - permite ligar o motor
Pinos 1A, 2A, 3A e 4A Entradas digitais para ligar/desligar o motor ( Vcc1 )
Pinos 1Y, 2Y, 3Y e 4Y Saídas para o motor ( Vcc2 )
213
http://www.kemper.com.br
L293D
•Ligue o grupo 1Y, 2Y e o grupo 
3Y, 4Y aos terminais dos 
motores A e B respectivamente;
•Ligue 1,2EN e 3,4EN a Vcc1 ou a 
dois pinos digitais do Arduino;
214
http://www.kemper.com.br
L293D
•Veja na próxima tabela o 
funcionamento do motor:
215
http://www.kemper.com.br
L293D
1A 2A 1,2EN Motor A 3A 4A 3,4EN Motor B
0 0 1 Parado 0 0 1 Parado
0 1 1 Frente 0 1 1 Frente
1 0 1 Ré 1 0 1 Ré
1 1 1 Parado 1 1 1 Parado
0 0 0 Parado 0 0 0 Parado
0 1 0 Parado 0 1 0 Parado
1 0 0 Parado 1 0 0 Parado
1 1 0 Parado 1 1 0 Parado
216
http://www.kemper.com.br
L293D
•Exemplo de cálculo para 
dissipação de calor no integrado 
com Vcc2 igual a 6V e dois 
motores consumindo 500mA 
cada um:
217
http://www.kemper.com.br
•O fabricante afirma que VHO é 
igual a Vcc2 - 1,4V, ou seja, por 
driver usado no motor, será 
subtraído 1,4V de Vcc2, ou:
6V - ( 1,4 * 2 ) = 3,2V entregue 
ao motor.
L293D
218
http://www.kemper.com.br
L293D
•VHO é uma queda de tensão 
característica das junções PN de 
todo semicondutor e não pode 
ser evitada;
219
http://www.kemper.com.br
L293D
•No nosso caro, isto quer dizer 
que para Vcc2 igual a 6V, o 
motor irá receber 3,2V, pois, são 
dois drivers por motor;
220
http://www.kemper.com.br
L293D
•Aplicando-se a lei de potência 
temos:
•P = U * I
•P = 2,8V * ( 500mA * 2 motores )
•P = 2,8W dissipados no circuito 
integrado.
221
http://www.kemper.com.br
L293D
•Perceba que
2,8W é a potência 
total para um sinal de 100% do 
tempo em estado alto, porém, se 
o duty cycle for de 50% a 
potência dissipada no circuito 
integrado cai para a metade.
222
http://www.kemper.com.br
L293D
• Sempre ligue um capacitor de 
100nF entre os dois terminais 
do motor;
•Motor induz corrente no sentido 
oposto da alimentação e isto 
pode queimar o circuito, por isto, 
coloque diodos de proteção;
223
http://www.kemper.com.br
L293D
•O integrado L293 tem duas 
versões, a sem ‘D’ não contêm os 
diodos de proteção, a versão 
com ‘D’ contêm os diodos.
224
http://www.kemper.com.br
Sevo de
Aeromodelo
225
http://www.kemper.com.br
Sevo de
Aeromodelo
•Servo de aeromodelo é um 
pequeno motor comum 
controlado por um 
potenciômetro ligado a um 
circuito digital com redução de 
velocidade para dar força;
226
http://www.kemper.com.br
Sevo de
Aeromodelo
227
http://www.kemper.com.br
•Eles geralmente não são feitos 
para girar 360°, sendo o ângulo 
máximo determinado pelo 
modelo;
Sevo de
Aeromodelo
228
http://www.kemper.com.br
•As suas principais características 
são a força e a precisão no 
ângulo do eixo central, 
permanecendo no ângulo 
correto enquanto houver sinal 
de controle e alimentação;
Sevo de
Aeromodelo
229
http://www.kemper.com.br
• Eles costumam ter três pinos, 
sendo dois de alimentação e um 
de controle;
• A alimentação geralmente fica 
entre 5V e 6V;
• O pulso de controle tem que ter 5V, 
mesmo se Vcc do motor for maior.
Sevo de
Aeromodelo
230
http://www.kemper.com.br
•O controle do ângulo é feito 
pela duração do pulso de 
controle, onde um pulso de 
1.5mS de duração faz o motor 
centralizar o eixo;
Sevo de
Aeromodelo
231
http://www.kemper.com.br
Sevo de
Aeromodelo
232
http://www.kemper.com.br
•O servo não tem um circuito de 
controle inteligente, por isto, 
tome cuidado para que o 
conjunto mecânico possa atingir 
o ângulo determinado, ou, ele 
ficará forçando toda a 
mecânica até conseguir.
Sevo de
Aeromodelo
233
http://www.kemper.com.br
• Quando um servo é impedido de 
atingir o ângulo determinado, ele 
pode quebrar o conjunto 
mecânico;
• Ele pode se comportar como um 
curto-circuito e pode queimar a 
eletrônica interna do próprio 
servo.
Sevo de
Aeromodelo
234
http://www.kemper.com.br
•O Arduino só consegue controlar 
servo pelos pinos digitais 9 e 10 
da placa;
Sevo de
Aeromodelo
235
http://www.kemper.com.br
Exemplo
236
http://www.kemper.com.br
Exemplo
• #include <Servo.h>
• Servo nome_servo;
• void setup ()
• {
• // Liga o pulso de controle do servo
• nome_servo.attach( 9 );
• }
• ( continua )
237
http://www.kemper.com.br
Exemplo
• ( continuação )
• void loop ()
• {
• nome_servo.write( 90 );
• delay ( 2000 );
• nome_servo.write( 80 );
• delay ( 2000 );
• nome_servo.write( 70 );
• //Desliga o pulso de controle do servo
• nome_servo.detach ();
• }
238
http://www.kemper.com.br
•#include <Servo.h>
•Servo.h chama uma classe 
padrão do compilador e deve 
ficar nas primeiras linhas do 
código.
Sevo de
Aeromodelo
239
http://www.kemper.com.br
•Servo nome_servo;
•É a chamada do construtor da 
classe e deve ficar fora das 
funções setup () e loop ();
•nome_servo é o rótulo pelo qual 
a classe será chamada.
Sevo de
Aeromodelo
240
http://www.kemper.com.br
• nome_servo.attach( 9|10, min, max );
• Ativa o pulso de controle do servo;
• Recebe os pinos 9 ou 10;
•min - é o tempo em µS mínimo da 
parte alta pulso de controle; 
•max - é o tempo em µS máximo da 
parte alta do pulso de controle;
Sevo de
Aeromodelo
241
http://www.kemper.com.br
•nome_servo.write( ângulo );
•Determina o ângulo para o qual 
o eixo do servo deve girar;
Sevo de
Aeromodelo
242
http://www.kemper.com.br
•nome_servo.writeMicroseconds( 
µS );
•Passa o tempo da parte alta do 
pulso de controle, onde, 1.5mS 
representa o ângulo de 90°;
Sevo de
Aeromodelo
243
http://www.kemper.com.br
•nome_servo.detach();
•Desliga o pulso de controle do 
servo;
Sevo de
Aeromodelo
244
http://www.kemper.com.br
Obrigado!
Caso você tenha alguma dúvida, 
não deixe de entrar em contato 
pelo site http://www.kemper.com.br 
ou pelo e-mail 
Helmut.kemper@gmail.com
245

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando