Você está na página 1de 245

Mini Curso de

Arduino
Helmut Kemper

http://www.kemper.com.br
1

Agradecimentos
Prof. Anderson Luiz
Prof. Lelino Pontes
Ednarde Bezerra
Gabriel Liberal
http://www.kemper.com.br
2

Agradecimentos

A todos os meus alunos


A todos os meus professores
Ao pessoal do IFPE

http://www.kemper.com.br
3

Lei de Ohm

http://www.kemper.com.br
4

Lei de Ohm

http://www.kemper.com.br
5

Lei de Ohm

Corrente
Bateria

Resistor

http://www.kemper.com.br
6

Lei de Ohm

Ampere ( A )
Volts ( V )
Ohm ( )

http://www.kemper.com.br
7

Lei de Ohm

I
U
R
U = R x I

http://www.kemper.com.br
8

Lei de Ohm
U
R

U = R x I

http://www.kemper.com.br
9

Associao de
Resistores

http://www.kemper.com.br
10

Associao de
Resistores
Paralelo

http://www.kemper.com.br
11

Associao de
Resistores
Paralelo

http://www.kemper.com.br
12

Associao de
Resistores
Paralelo
1
1 +_
1 + _
1 + _
1+ _
_
1 = _
Re R1 R2 R3 R4 Rn

http://www.kemper.com.br
13

Associao de
Resistores
Paralelo
Se: R1=R2=R3=R4=Rn

http://www.kemper.com.br
14

Associao de
Resistores
Paralelo
R
_
Re = n

http://www.kemper.com.br
15

Associao de
Resistores
Paralelo
R1
x
R2
_______
Re =
R1 + R2

http://www.kemper.com.br
16

Associao de
Resistores
Paralelo

A corrente varia para cada


resistor

A tenso a mesma em todos os


resistores

http://www.kemper.com.br
17

Associao de
Resistores

Srie

http://www.kemper.com.br
18

Associao de
Resistores
Srie

http://www.kemper.com.br
19

Associao de
Resistores
Srie
Re = R1 + R2 + R3

http://www.kemper.com.br
20

Associao de
Resistores
Srie

A corrente a mesma para todos


os resistores

A tenso varia para cada resistor

http://www.kemper.com.br
21

Associao de
Resistores
Divisor de tenso

http://www.kemper.com.br
22

Associao de
Resistores

Divisor de tenso

http://www.kemper.com.br
23

Associao de
Resistores

Divisor de tenso

U1

U2
http://www.kemper.com.br
24

Associao de
Resistores
Divisor de tenso

R1
R2

http://www.kemper.com.br
25

Associao de
Resistores
Divisor de tenso

R1
U1
R2
U2

U1
x
R2
_______
=
R1 + R2
http://www.kemper.com.br
26

Lei de Potncia

http://www.kemper.com.br
27

Lei de Potncia

I
U
R

http://www.kemper.com.br
28

Lei de Potncia

I
U
R
P = U * I

http://www.kemper.com.br
29

Lei de Potncia

Desperdcio na
forma de calor
P ((

))

P = U * I
Potncia em Watts
http://www.kemper.com.br
30

Lei de Potncia
Calor igual a desperdcio;
Excesso de temperatura pode

causar uma falha catastrfica no


Arduino.

http://www.kemper.com.br
31

Lei de Ohm e
Potncia

http://www.kemper.com.br
32

Diodo

http://www.kemper.com.br
33

Diodo

Semicondutor
um componente ativo
Tem poder sobre a corrente

http://www.kemper.com.br
34

Diodo

Corrente

Polarizao Direta
http://www.kemper.com.br
35

Diodo

Corrente

Polarizao Reversa
http://www.kemper.com.br
36

Diodo
Serve para controlar o sentido
da corrente;

Tem tenso de manuteno;


Tem corrente de fuga.
http://www.kemper.com.br
37

Diodo

A corrente s consegue passar se


estiver no sentido nodo
ctodo.

http://www.kemper.com.br
38

Diodo

Tenso de manuteno uma

caracterstica de todo
semicondutor e reduz a tenso
entregue ao resto do circuito

http://www.kemper.com.br
39

Diodo

A tenso de manuteno do

diodo de silcio gira em torno


de 0,7V

http://www.kemper.com.br
40

Diodo

U
U-0,7

http://www.kemper.com.br
41

Diodo

Corrente de fuga existe quando

o diodo polarizado
inversamente e proporcional a
temperatura.

http://www.kemper.com.br
42

LED

http://www.kemper.com.br
43

LED
Diodo Emissor de Luz
S acende se for ligado no
sentido correto

A tenso de manuteno varia


de acordo com o modelo

http://www.kemper.com.br
44

LED

R
LED

http://www.kemper.com.br
45

LED

Lei de Ohm:
U = R x I

R
LED
http://www.kemper.com.br
46

LED
Lei de Ohm:
U - U = R x 0,020

LED

R
LED
http://www.kemper.com.br
47

LED

U = 5V
U = 1.8V
I = 20mA
LED

LED

LED

http://www.kemper.com.br
48

LED
U = 5V
U = 1.8V
I = 20mA
LED

LED

U - U = R x 0.02
5 - 1.8 = R x 0.02
3.2 = R x 0.02
R = 3.2 / 0.02
R = 160
LED

http://www.kemper.com.br
49

Arduino

http://www.kemper.com.br
50

Arduino

http://www.kemper.com.br
51

Arduino
Projeto Italiano de baixo custo
Arquitetura de 8-bits
Portas analgicas e digitais
Serial emulada por USB
http://www.kemper.com.br
52

Arduino

Compilador gratuito
Framework Wiring
Programao C / C++

http://www.kemper.com.br
53

Arduino
Digital

http://www.kemper.com.br
54

Arduino

Alimentao
http://www.kemper.com.br
55

Arduino

Analgico
http://www.kemper.com.br
56

Arduino

USB

http://www.kemper.com.br
57

Arduino

Alimentao

http://www.kemper.com.br
58

Programao

http://www.kemper.com.br
59

Programao
Estrutura bsica baseada no
framework Wiring

setup ()
loop ()
http://www.kemper.com.br
60

setup ()
a primeira funo a ser
chamada

Recebe as configuraes iniciais


Roda apenas uma nica vez
Funo obrigatria
http://www.kemper.com.br
61

loop ()

Recebe o cdigo fonte


um lao infinito
Funo obrigatria

http://www.kemper.com.br
62

Exemplo
void setup ()
{
//Recebe as configuraes iniciais
}
void loop ()
{
//Recebe o cdigo fonte
}

http://www.kemper.com.br
63

Pinos Digitais
Podem ser configurados como
entrada ou sada

Podem ler e escrever apenas


valores digitais

Podem drenar mais corrente do


que fornecer

http://www.kemper.com.br
64

Pinos Digitais
Funes digitais:
pinMode ( n, INPUT / OUTPUT);
digitalWrite ( n, HIGH / LOW );
digitalRead ( n );
http://www.kemper.com.br
65

Exemplo
void setup ()
{
pinMode ( 3, INPUT );
}
( Continua )

http://www.kemper.com.br
66

Exemplo
void loop ()
{
digitalWrite ( 3, HIGH );
delay ( 300 );
digitalWrite ( 3, LOW);
delay ( 300 );
}

http://www.kemper.com.br
67

Dica para Iniciante

http://www.kemper.com.br
68

Dica para Iniciante

Primeiro use a funo pinMode()


dentro da funo setup() como
no exemplo anterior;

http://www.kemper.com.br
69

Dica para Iniciante

pinMode() recebe uma das duas


constantes, INPUT ou OUTPUT,
para entrada ou sada
respectivamente.

http://www.kemper.com.br
70

Dica para Iniciante

digitalWrite() aceita duas

constantes, HIGH ou LOW, para


ligar ou desligar um pino
digital;

http://www.kemper.com.br
71

Dica para Iniciante

digitalWrite ( 13, HIGH ) faz o

pino 13 da placa Arduino


apresentar 5V na sada e
acender o LED da prpria placa.

http://www.kemper.com.br
72

Dica para Iniciante

digitalWrite ( 13, LOW ) faz o

pino 13 da placa Arduino


apresentar 0V na sada e apagar
o LED da prpria placa.

http://www.kemper.com.br
73

Dica para Iniciante


variavel_qualquer = digitalRead
( 13 ) faz a varivel conter a
constate true se o pino 13
estiver alimentado com 5V, ou
false se o pino 13 estiver
alimentado com 0V.

http://www.kemper.com.br
74

Resistor de pull-up

http://www.kemper.com.br
75

Resistor de pull-up

Chave
simples

pino Arduino

Erro - O valor lido


indeterminado
http://www.kemper.com.br
76

Resistor de pull-up
Resistor de
pull-up
Chave
simples

pino Arduino
Correto!
http://www.kemper.com.br
77

Resistor de pull-up
Entradas digitais ligadas a

chaves mecnicas requerem um


resistor para garantir o valor
lido;

Entradas ligadas a circuitos

digitais no requerem resistor


de pull-up.
http://www.kemper.com.br
78

Resistor de pull-up

Use digitalWrite ( n, HIGH ) em

um pino configurado como


entrada para habilitar o resistor
de pull-up.

http://www.kemper.com.br
79

Resistor de pull-up

Use digitalWrite ( n, LOW ) em


um pino configurado como
entrada para desabilitar o
resistor de pull-up.

http://www.kemper.com.br
80

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
ligao ).

http://www.kemper.com.br
81

Resistor de pull-up
void setup ()
{
pinMode ( 3, INPUT );
//Ligar pull-up
digitalWrite ( 3, HIGH );
}
http://www.kemper.com.br
82

Resistor de pull-up
void setup ()
{
pinMode ( 3, INPUT );
//Desligar pull-up
digitalWrite ( 3, LOW );
}
http://www.kemper.com.br
83

Pisca LED forte


const unsigned char pino_led =
13;
void setup ()
{
pinMode ( pino_led, OUTPUT )
}
http://www.kemper.com.br
84

Pisca LED forte


void loop ()
{
digitalWrite ( pino_led, HIGH );
delay ( 300 );
digitalWrite ( pino_led, LOW);
delay ( 300 );
}

http://www.kemper.com.br
85

Pisca LED fraco


const unsigned char pino_led =
13;
void setup ()
{
pinMode ( pino_led, INPUT
_____ )
}
http://www.kemper.com.br
86

Pisca LED fraco


void loop ()
{
digitalWrite ( pino_led, HIGH );
delay ( 300 );
digitalWrite ( pino_led, LOW);
delay ( 300 );
}

http://www.kemper.com.br
87

Memria

http://www.kemper.com.br
88

Memria
Cdigo

Dados

________

________

________

________

________

________

________
________
________
________
________
________
________
________
________
http://www.kemper.com.br
89

Memria
Dividida em blocos de 8-bits
chamados de bytes;

Arquiva apenas dados binrios;


Nmeros binrios so apenas

uma conveno para representar


nmeros ou letras.

http://www.kemper.com.br
90

Memria

dividida em dois blocos


Dados
Cdigo

http://www.kemper.com.br
91

Memria de Dados
Pouco espao, 128 ou 256 bytes
dependendo do modelo do
Arduino;

Voltil - Perde os dados quando


o circuito desligado;

Serve para arquivar variveis.


http://www.kemper.com.br
92

Memria de Cdigo
Arquiva o programa;
Grande quantidade de espao

quando comparada memria


de dados;

No perde os dados quando o


circuito desligado.

http://www.kemper.com.br
93

Memria de Cdigo
Os dados no podem ser

alterados pelo cdigo fonte do


usurio;

Serve para arquivar as

constantes do programa.

http://www.kemper.com.br
94

Tipos de Dados e
Memria

http://www.kemper.com.br
95

Tipos de Dados e
Memria
A escolha correta do tipo de

dado economiza memria e


deixa o programa mais rpido;

Escolha sempre o tipo de dado


que ocupe o mnimo de espao
possvel.

http://www.kemper.com.br
96

Tipos com sinal e


sem sinal

http://www.kemper.com.br
97

Tipos com sinal e


sem sinal
Dados podem ter sinal ou no;
Quanto o tipo tiver sinal, o bit
mais significativo ser usado
como sinal;

http://www.kemper.com.br
98

Tipos com sinal e


sem sinal
O tipo inteiro ocupa 16 bits;
Valores entre 0 e 65,535, ou
2-1;

http://www.kemper.com.br
99

Tipos com sinal e


sem sinal
Porm, 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;


http://www.kemper.com.br
100

Tipos com sinal e


sem sinal
Decimal

S. Sinal

C. Sinal

-7

1001

-5

1011

-1

1111

0000

0000

0001

0001

0101

0101

0111

0111
http://www.kemper.com.br
101

Tipo Inteiro com


Sinal
int - Inteiro:
Ocupa dois bytes;
Pode arquivar nmeros entre
-32,768 e 32,767;

http://www.kemper.com.br
102

Tipo Inteiro sem


Sinal
unsigned int - Inteiro Sem Sinal
Ocupa dois bytes
Pode arquivar nmeros entre 0 e
65,535

http://www.kemper.com.br
103

Exemplo
int pino_led = 13;
void setup ()
{
pinMode ( pino_led, OUTPUT );
}

http://www.kemper.com.br
104

Exemplo

Qual o erro conceitual do


exemplo anterior?

http://www.kemper.com.br
105

Exemplo
int pino_led = 13;
void setup ()
{
pinMode ( pino_led, OUTPUT );
}

http://www.kemper.com.br
106

Exemplo
int pino_led = 13;

O tipo inteiro ocupa dois bytes


sem necessidade;

http://www.kemper.com.br
107

Exemplo
int pino_led = 13;

Est sendo reservado um espao


da memria de cdigo para
arquivar um dado que no vai
mudar durante a execuo do
cdigo.
http://www.kemper.com.br
108

Exemplo

O correto seria:
const byte pino_led = 13;
_____

http://www.kemper.com.br
109

Exemplo
const byte pino_led = 13;
_____

const - Permite arquivar um dado


na memria de cdigo.

http://www.kemper.com.br
110

Exemplo
const byte pino_led = 13;
_____

byte - Como o prprio nome diz,


ocupa apenas 1 byte em vez de 2
bytes.

http://www.kemper.com.br
111

Exemplo
const byte pino_led = 13;
_____
void setup ()
{
pinMode ( pino_led, OUTPUT );
}

http://www.kemper.com.br
112

Tipos de dados mais


comuns
Tipo

S/ S.

C/ S.

Espao

byte

byte

1 byte

bollean

bollean

1 byte

char

1 byte

int

2 bytes

char

int

unsigned
char
unsigned
int

http://www.kemper.com.br
113

Tipos de dados mais


comuns
Tipo

S/ S.

C/ S.

Espao

word

word

2 bytes

long

4 bytes

long

unsigned
long

float

float

4 bytes

double

double

4 bytes
http://www.kemper.com.br
114

Tipos de dados mais


comuns
void
void no um tipo, porm,
usado para indicar que uma
funo no retornar nada.

http://www.kemper.com.br
115

Tipos de dados mais


comuns
Array
Array no exatamente um
tipo, uma forma de se
agrupar dados de um
determinado tipo.

http://www.kemper.com.br
116

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";

http://www.kemper.com.br
117

Exemplos
unsigned char letra = a;
Reserva um espao de 1 byte para
arquivar uma varivel tipo letra e
atribui o valor equivalente a letra
a.

http://www.kemper.com.br
118

Exemplos
unsigned int contador = 0;
Reserva 2 bytes na memria de
dados para receber valores entre
0 e 65,535 e atribui o valor 0.

http://www.kemper.com.br
119

Exemplos

const unsigned int = 0;


Reserva 2 bytes na memria de
cdigo e atribui o valor 0.

http://www.kemper.com.br
120

Dica para Iniciante


O smbolo de igualdade ( = )
usado para atribuio, onde o
valor a direita da expresso
atribudo a esquerda da
expresso;

http://www.kemper.com.br
121

Dica para Iniciante


unsigned char letra = a;
Cria uma varivel de rtulo
letra e atribui o valor
equivalente a letra a;

http://www.kemper.com.br
122

Dica para Iniciante

Todas as variveis devem ser

criadas nas primeiras linhas do


cdigo, antes das funes
setup() e loop();

http://www.kemper.com.br
123

Variveis Locais e
Globais

http://www.kemper.com.br
124

Variveis Locais e
Globais
Todas as variveis criadas antes
de setup() e loop() so globais,
ou seja, elas existem em todo o
programa;

http://www.kemper.com.br
125

Variveis Locais e
Globais
Variveis criadas dentro de uma
funo s existe dentro da
funo e no podem ser vistas
do lado de fora;

Elas so locais.
http://www.kemper.com.br
126

Exemplos
unsigned int contador;
void setup ()
{
//contador uma varivel
//global e existe em todo o cdigo
contador = 0;
}

http://www.kemper.com.br
127

Exemplos
void setup ()
{
unsigned int contador;
}
void loop ()
{
//contador s existe dentro de setup()
contador = 0;
}

( Erro! )

http://www.kemper.com.br
128

Exemplos
void setup ()
{
//contador destrudo quando setup() acabar
unsigned int contador;
}
void loop ()
{
//contador ser destrudo e criado a cada interao de loop()
unsigned int contador;
}

( Correto! )

http://www.kemper.com.br
129

Operaes de
Comparao

http://www.kemper.com.br
130

Operaes de
Comparao
Compara dois valores e retorna

as constantes true ou false, caso


a comparao seja verdadeira
ou falsa;

http://www.kemper.com.br
131

Operaes de
Comparao
Os valores comparados no so
alterados;

O lado esquerdo ( E ) sempre


comparado ao lado direito
( D );

http://www.kemper.com.br
132

Operaes de
Comparao
Operao

igualdade

Smbolo

==

Descrio

compara se E
igual a D

Exemplo

( E == D )

compara se E
maior que

>

maior do

( E > D )

que D
compara se E
menor que

<

menor que

( E < D )

D
http://www.kemper.com.br
133

Operaes de
Comparao
Operao

maior igual
que

menor igual
que

Smbolo

Descrio

Exemplo

compara se E
>=

maior

( E >= D )

igual a D
compara se E
<=

menor

( E <= D )

igual a D
compara se E

diferena

!=

diferente

( E != D )

de D
http://www.kemper.com.br
134

Operaes Lgicas

http://www.kemper.com.br
135

Operaes Lgicas

uma operao entre dois ou


mais valores lgicos, true ou
false, com resultado lgico
predefinido.

http://www.kemper.com.br
136

Operaes Lgicas
Elas servem de complemento
para as operaes de
comparao;

Os valores usados na operao


no so alterados.

http://www.kemper.com.br
137

Operaes Lgicas
Operao

Smbolo

Exemplo

AND

&&

( A >= B ) && ( C == B )

OR

||

( A >= B ) || ( C == B )

NOT

! (( A == B ) || ( C == D ))

http://www.kemper.com.br
138

Lgica AND
Direita

Esquerda

Sada

false

false

false

false

true

false

true

false

false

true

true

true
http://www.kemper.com.br
139

Lgica OR
Direita

Esquerda

Sada

false

false

false

false

true

true

true

false

true

true

true

true
http://www.kemper.com.br
140

Lgica NOT
Entrada

Sada

false

true

true

true

http://www.kemper.com.br
141

Operaes
Aritmticas
Nome

Smbolo

Exemplo

Atribuio

A = 9;

Soma

A = A + 1;

Subtrao

B = A - 1;

Multiplicao

A = 3 * 2;

Diviso

A = A / 2;

Mdulo

A = 9 % 2;
http://www.kemper.com.br
142

Operaes
Aritmticas
Nome

Smbolo

Exemplo

Soma

+=

A += 1;

Soma

++

A ++;

Subtrao

-=

B -= 5;

Subtrao

--

B --;

Multiplicao

*=

A *= 3;

Diviso

/=

A /= 2;
http://www.kemper.com.br
143

Controle de Fluxo

http://www.kemper.com.br
144

Controle de Fluxo
Permite dividir o cdigo em
blocos de execuo;

Os comandos dos blocos devem


ficar contidos entre chaves ( {
e } );

http://www.kemper.com.br
145

Controle de Fluxo

Os blocos podem ter sua

execuo controlada por


operaes lgicas ou de
comparao;

http://www.kemper.com.br
146

Controle de Fluxo
Condicional
Operao

Smbolo

Exemplo

Se

if

if ( A >= B ) { ... }

Se ... Ento

Caso ... ento

if ... else

switch

if ( A >= B ) { ... }
else { ... }

switch ( A ) { case 1: ...


case 2: ... case 3: ... }
http://www.kemper.com.br
147

Controle de Fluxo
if ( condio )
if ( A == B )
{
digitalWrite ( pino_led, HIGH );
}

http://www.kemper.com.br
148

Controle de Fluxo
if ( condio )
if ( A == B )
{
digitalWrite ( pino_led, HIGH );
}
else [ Opcional ]
{
digitalWrite ( pino_led, LOW );
}

http://www.kemper.com.br
149

Controle de Fluxo
if ( condio )
if ( A == B )
{
digitalWrite ( pino_led, HIGH );
}
else if ( A < B )
{
digitalWrite ( pino_led, LOW );
}

http://www.kemper.com.br
150

Controle de Fluxo
if ( condio )
if ( A == B )
{
digitalWrite ( pino_led, HIGH );
}
else if ( A < B )
{
digitalWrite ( pino_led, LOW );
}
else
{
...
}

http://www.kemper.com.br
151

Controle de Fluxo
switch ( condio )
switch ( variavel_qualquer )
{
case 0:
...
break;
case 1:
...
break;
case 100
...
break;
}

http://www.kemper.com.br
152

Controle de Fluxo
switch ( condio )
Todas as comparaes so do
tipo igualdade;

O cdigo comea aps case e


s para quando encontra
break;

break opcional;
http://www.kemper.com.br
153

Controle de Fluxo
switch ( condio )
Veja a estrutura abaixo:
switch ( A )
{
case 1:
case 2:
case 33:
...
break;
}

http://www.kemper.com.br
154

Controle de Fluxo
switch ( condio )
Ela equivalente a:
if ( (A == 1) || (A == 2) || (A == 33) )
{
...
}

http://www.kemper.com.br
155

Controle de Fluxo
switch ( condio )
Veja a estrutura abaixo:
switch ( A )
{
case 1:
case 2:
...
break;
default:
...
}

http://www.kemper.com.br
156

Controle de Fluxo
switch ( condio )
Ela equivalente a:
if ( (A == 1) || (A == 2) )
{
...
}
else
{
...
}

http://www.kemper.com.br
157

Controle de Fluxo
switch ( condio )
default - executado se o

valor contido na varivel no


tiver correspondncia dentro da
estrutura case

http://www.kemper.com.br
158

Controle de Fluxo
Lao
Operao

Smbolo

Exemplo

contagem

for ()

for (A = 0; A != 10; A ++)

while ()

while ( A != 10 )

lao com teste


prvio

lao com teste

do { ... }

posterior

while ()

do { ... } while ( A != 10 )

http://www.kemper.com.br
159

Lao - for ()
Recebe trs parmetros

separados por ponto e vrgula;

1 p. Valor inicial;
2 p. Condio ( enquanto
true );

3 p. Valor por interao


http://www.kemper.com.br
160

Lao - for ()
Os parmetros so opcionais e se
no forem usados devem haver
obrigatoriamente ponto e
vrgula;

A condio deve ser verdadeira


para a primeira interao;

http://www.kemper.com.br
161

Exemplo
for ( a = 0; a != 10; a ++ )
{
. . .
}

http://www.kemper.com.br
162

Exemplo
for ( a=1, b=2; a==10||b==5; )
{
. . .
}

http://www.kemper.com.br
163

Exemplo
for ( ; true ; )
{
. . .
}

http://www.kemper.com.br
164

Lao - while ()
Aceita apenas um parmetro ou
condio;

A condio tem que ser

verdadeira para que a primeira


interao possa ocorrer;

http://www.kemper.com.br
165

Exemplo
while ( a != 10 )
{
. . .
}

http://www.kemper.com.br
166

Lao - do {}while()
Aceita apenas um parmetro ou
condio;

A condio checada aps a


interao;

A condio deve ser verdadeira


para que possam haver mais
interaes;

http://www.kemper.com.br
167

Exemplo
do
{
. . .
} while ( a != 10 );

http://www.kemper.com.br
168

Sensores

http://www.kemper.com.br
169

Sensores

Ultrasom

http://www.kemper.com.br
170

Sensores

HC-SR04 - Sensor ultrasom de


baixo custo - $9.90;
http://iteadstudio.com/

http://www.kemper.com.br
171

Sensores
HC-SR04:
Tem quatro pinos, Vcc, Trigger,
Echo e Gnd;
Alimentao de 5V;

http://www.kemper.com.br
172

Sensores
HC-SR04:
A documentao e bibliotecas
podem ser encontradas no site da
loja;

http://www.kemper.com.br
173

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 );
}

http://www.kemper.com.br
174

Sensores

SEN136B5B - Sensor ultrasom de


baixo custo - $15.00;
http://www.seeedstudio.com

http://www.kemper.com.br
175

Sensores

SEN136B5B - Tem apenas trs


pinos, economizando espao;

Alimentao de 5V;

Distncia de 3cm a 4m.

http://www.kemper.com.br
176

Sensores

SEN136B5B - O exemplo de uso


pode ser encontrado no frum
da loja e no requer instalao
de biblioteca.

http://www.kemper.com.br
177

Motores & PWM

http://www.kemper.com.br
178

Motores & PWM

Sempre use PWM para ligar


motores comuns;

http://www.kemper.com.br
179

Motores & PWM

PWM uma tcnica onde a

potncia total do circuito


entregue a carga, porm, o
tempo ligado/desligado varia.

http://www.kemper.com.br
180

Exemplo

http://www.kemper.com.br
181

Exemplo

O grfico representa um sinal

digital, ligado / desligado, onde


a relao entre os tempos
usada para controlar a potncia
final entregue ao motor.
http://www.kemper.com.br
182

Exemplo

20% 80%

Como o tempo do circuito ligado


representa apenas 20% do total, o
motor tem menos velocidade.

http://www.kemper.com.br
183

Motores & PWM

50% 50%

Quando a relao entre os tempos


ligado e desligado varia, a

velocidade do motor varia tambm;

http://www.kemper.com.br
184

Motores & PWM

20% 80%

50% 50%
http://www.kemper.com.br
185

Motores & PWM

PWM dissipa menos calor do que


circuitos analgicos;

http://www.kemper.com.br
186

Exemplo

http://www.kemper.com.br
187

Exemplo

O prximo exemplo usa um

motor comum e um resistor de


6 ligado em srie para
diminuir a potncia do motor.

http://www.kemper.com.br
188

Exemplo

Temos um motor imaginrio de

24V consumindo 2A quando


trabalha sem carga aplicada ao
eixo.

http://www.kemper.com.br
189

Exemplo
A lei de potncia diz que:
P = U * I
P = 24V * 2A
P = 48W
http://www.kemper.com.br
190

Exemplo
A lei de Ohm diz que:
U = R * I
24V = R * 2A
R = 12
http://www.kemper.com.br
191

Exemplo

A resistncia interna do motor


de 12 e a potncia nominal
de 48W;

http://www.kemper.com.br
192

Exemplo

Agora imagine ligar um resistor


de 6 em srie com o nosso
motor imaginrio;

http://www.kemper.com.br
193

Exemplo
A lei de Ohm diz que:
U = R * I
U = (R + R ) * I
24V = ( 12 + 6 ) * I
I = 1,33A
motor

srie

http://www.kemper.com.br
194

Exemplo

Aplicando-se a lei de Ohm para


medir a tenso em cima do
novo resistor temos:

http://www.kemper.com.br
195

Exemplo

U = R * I
U = 6 * 1,33A
= 8V
U
Resistor

http://www.kemper.com.br
196

Exemplo

Aplicando-se a lei de potncia


em cima do resistor temos:

http://www.kemper.com.br
197

Exemplo

P = U * I
P = 8V * 1,33
P = 10,66W

http://www.kemper.com.br
198

Exemplo
O circuito consome ~32W de
potncia total;

O resistor desperdia 10,66W na


forma de calor;

1/3 da energia aplicada ao

circuito jogada fora na forma


de calor!
http://www.kemper.com.br
199

Concluso

http://www.kemper.com.br
200

Concluso

Controlar a potncia entregue a


uma carga qualquer de forma
analgica desperdia energia e
gera muito calor.

http://www.kemper.com.br
201

Motores & PWM


PWM, ou Modulao por Largura
de Pulso, pode ser usado para
diversas finalidades, como
motores, LEDs, e circuitos de
potncia em geral;

http://www.kemper.com.br
202

Motores & PWM


O Arduino no pode ligar
motores diretamente;

Deve haver um driver de


corrente especfico para
motores;

http://www.kemper.com.br
203

Motores & PWM


O Arduino tem vrias sadas

PWM misturadas com os pinos


digitais;

Os pinos D5 e D6 tm os timers

usados para outras funes e o


valor gerado contm erro;

http://www.kemper.com.br
204

Motores & PWM


Use o comando analogWrite ( n,
valor ) para gerar o PWM;

n representa o pino digital


especfico do PWM;

http://www.kemper.com.br
205

Motores & PWM

O valor deve ficar entre 0 e 255,


onde 0 representa 0% e 255
representa 100%;

http://www.kemper.com.br
206

L293D

http://www.kemper.com.br
207

L293D

O L293D contm 4 drivers na


forma de meia ponte H;

http://www.kemper.com.br
208

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;

http://www.kemper.com.br
209

L293D

http://www.kemper.com.br
210

L293D
Vcc1 - Alimentao do
integrado
Vcc2 - Alimentao do motor
VOH - Tenso de manuteno
por driver do motor
Dissipao de calor

Temperatura mxima

4,5V a 7V

Vcc1 a 36V

Vcc2 - 1,4V
2075mW - 71.4mW por C
acima de 25C
150C

http://www.kemper.com.br
211

L293D

http://www.kemper.com.br
212

L293D
Pinos 1,2EN e 3,4EN -

0 - Desliga o motor

Habilita a sada do motor

1 - permite ligar o motor

Pinos 1A, 2A, 3A e 4A

Pinos 1Y, 2Y, 3Y e 4Y

Entradas digitais para ligar/


desligar o motor ( Vcc1 )

Sadas para o motor ( Vcc2 )

http://www.kemper.com.br
213

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;

http://www.kemper.com.br
214

L293D

Veja na prxima tabela o

funcionamento do motor:

http://www.kemper.com.br
215

L293D
1A

2A

1,2EN

Motor A

3A

4A

3,4EN

Motor B

Parado

Parado

Frente

Frente

Parado

Parado

Parado

Parado

Parado

Parado

Parado

Parado

Parado

Parado

http://www.kemper.com.br
216

L293D
Exemplo de clculo para

dissipao de calor no integrado


com Vcc2 igual a 6V e dois
motores consumindo 500mA
cada um:

http://www.kemper.com.br
217

L293D
O fabricante afirma que V

igual a Vcc2 - 1,4V, ou seja, por


driver usado no motor, ser
subtrado 1,4V de Vcc2, ou:
HO

6V - ( 1,4 * 2 ) = 3,2V entregue


ao motor.

http://www.kemper.com.br
218

L293D

uma queda de tenso


caracterstica das junes PN de
todo semicondutor e no pode
ser evitada;
HO

http://www.kemper.com.br
219

L293D

No nosso caro, isto quer dizer

que para Vcc2 igual a 6V, o


motor ir receber 3,2V, pois, so
dois drivers por motor;

http://www.kemper.com.br
220

L293D
Aplicando-se a lei de potncia
temos:

P = U * I
P = 2,8V * ( 500mA * 2 motores )
P = 2,8W dissipados no circuito
integrado.

http://www.kemper.com.br
221

L293D
Perceba que 2,8W a potncia

total para um sinal de 100% do


tempo em estado alto, porm, se
o duty cycle for de 50% a
potncia dissipada no circuito
integrado cai para a metade.

http://www.kemper.com.br
222

L293D
Sempre ligue um capacitor de

100nF entre os dois terminais


do motor;

Motor induz corrente no sentido


oposto da alimentao e isto

pode queimar o circuito, por isto,


coloque diodos de proteo;
http://www.kemper.com.br
223

L293D

O integrado L293 tem duas

verses, a sem D no contm os


diodos de proteo, a verso
com D contm os diodos.

http://www.kemper.com.br
224

Sevo de
Aeromodelo

http://www.kemper.com.br
225

Sevo de
Aeromodelo
Servo de aeromodelo um

pequeno motor comum


controlado por um
potencimetro ligado a um
circuito digital com reduo de
velocidade para dar fora;

http://www.kemper.com.br
226

Sevo de
Aeromodelo

http://www.kemper.com.br
227

Sevo de
Aeromodelo
Eles geralmente no so feitos

para girar 360, sendo o ngulo


mximo determinado pelo
modelo;

http://www.kemper.com.br
228

Sevo de
Aeromodelo
As suas principais caractersticas
so a fora e a preciso no
ngulo do eixo central,
permanecendo no ngulo
correto enquanto houver sinal
de controle e alimentao;

http://www.kemper.com.br
229

Sevo de
Aeromodelo
Eles costumam ter trs pinos,

sendo dois de alimentao e um


de controle;

A alimentao geralmente fica


entre 5V e 6V;

O pulso de controle tem que ter 5V,


mesmo se Vcc do motor for maior.

http://www.kemper.com.br
230

Sevo de
Aeromodelo
O controle do ngulo feito

pela durao do pulso de


controle, onde um pulso de
1.5mS de durao faz o motor
centralizar o eixo;

http://www.kemper.com.br
231

Sevo de
Aeromodelo

http://www.kemper.com.br
232

Sevo de
Aeromodelo
O servo no tem um circuito de

controle inteligente, por isto,


tome cuidado para que o
conjunto mecnico possa atingir
o ngulo determinado, ou, ele
ficar forando toda a
mecnica at conseguir.

http://www.kemper.com.br
233

Sevo de
Aeromodelo
Quando um servo impedido de

atingir o ngulo determinado, ele


pode quebrar o conjunto
mecnico;

Ele pode se comportar como um


curto-circuito e pode queimar a
eletrnica interna do prprio
servo.
http://www.kemper.com.br
234

Sevo de
Aeromodelo
O Arduino s consegue controlar
servo pelos pinos digitais 9 e 10
da placa;

http://www.kemper.com.br
235

Exemplo

http://www.kemper.com.br
236

Exemplo

#include <Servo.h>
Servo nome_servo;
void setup ()
{
// Liga o pulso de controle do servo
nome_servo.attach( 9 );
}
( continua )

http://www.kemper.com.br
237

Exemplo

( continuao )
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 ();
}

http://www.kemper.com.br
238

Sevo de
Aeromodelo
#include <Servo.h>
Servo.h chama uma classe

padro do compilador e deve


ficar nas primeiras linhas do
cdigo.

http://www.kemper.com.br
239

Sevo de
Aeromodelo
Servo nome_servo;
a chamada do construtor da
classe e deve ficar fora das
funes setup () e loop ();

nome_servo o rtulo pelo qual


a classe ser chamada.

http://www.kemper.com.br
240

Sevo de
Aeromodelo
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 mnimo da
parte alta pulso de controle;

max - o tempo em S mximo da


parte alta do pulso de controle;

http://www.kemper.com.br
241

Sevo de
Aeromodelo
nome_servo.write( ngulo );
Determina o ngulo para o qual
o eixo do servo deve girar;

http://www.kemper.com.br
242

Sevo de
Aeromodelo
nome_servo.writeMicroseconds(
S );

Passa o tempo da parte alta do


pulso de controle, onde, 1.5mS
representa o ngulo de 90;

http://www.kemper.com.br
243

Sevo de
Aeromodelo
nome_servo.detach();
Desliga o pulso de controle do
servo;

http://www.kemper.com.br
244

Obrigado!
Caso voc tenha alguma dvida,
no deixe de entrar em contato
pelo site http://www.kemper.com.br
ou pelo e-mail
Helmut.kemper@gmail.com

http://www.kemper.com.br
245