You are on page 1of 217

T OS

OJE O
UPR IN
0
3 RD
CO
M
A 2 ED I O
O N K
SIM MON
O autor
Simon Monk bacharel em ciberntica e cincia da computao e doutor em engenharia de soft-
ware. Ele um aficionado em eletrnica desde os seus tempos de escola. Ocasionalmente, publica
artigos em revistas dedicadas eletrnica. Tambm autor de Programao com Arduino: come-
ando com sketches e de Projetos com Arduino e Android: use seu smartphone ou tablet para controlar
o Arduino (publicados pela Bookman Editora).

M745t Monk, Simon.


30 projetos com Arduino [recurso eletrnico] / Simon
Monk ; traduo: Anatlio Laschuk. 2. ed. Dados
eletrnicos. Porto Alegre : Bookman, 2014.

Editado tambm como livro impresso em 2014.


ISBN 978-85-8260-163-1

1. Programas de computadores. 2. Arduino. I. Ttulo.

CDU 004.42

Catalogao na publicao: Ana Paula M. Magnus CRB 10/2052

Monk_Iniciais_2ed_eletronica.indd ii 08/01/14 14:30


Traduo
Anatlio Laschuk
Mestre em Cincia da Computao pela UFRGS
Professor aposentado pelo Departamento de Engenharia Eltrica da UFRGS

Verso impressa
desta obra: 2014

2014

Monk_Iniciais_2ed_eletronica.indd iii 08/01/14 14:30


Obra originalmente publicada sob o ttulo 30 Arduino Projects for the Evil Genius, 2nd Edition
ISBN 0071817727 / 9780071817721

Original edition copyright 2013, The McGraw-Hill Global Education Holdings, LLC., New York, New
York 10020. All rights reserved.

Portuguese language translation copyright 2014, Bookman Companhia Editora Ltda., a Grupo A
Educao S.A. company. All rights reserved.

Gerente editorial: Arysinha Jacques Aonso

Colaboraram nesta edio:

Editora: Maria Eduarda Fett Tabajara

Capa e projeto grfico: Paola Manica

Leitura final: Susana de Azeredo Gonalves

Editorao: Techbooks

Reservados todos os direitos de publicao, em lngua portuguesa,


BOOKMAN EDITORA LTDA., uma empresa do GRUPO A EDUCAO S.A.
A srie TEKNE engloba publicaes voltadas educao profissional e tecnolgica.

Av. Jernimo de Ornelas, 670 Santana


90040-340 Porto Alegre RS
Fone: (51) 3027-7000 Fax: (51) 3027-7070

proibida a duplicao ou reproduo deste volume, no todo ou em parte, sob quaisquer


formas ou por quaisquer meios (eletrnico, mecnico, gravao, fotocpia, distribuio na Web
e outros), sem permisso expressa da Editora.

Unidade So Paulo
Av. Embaixador Macedo Soares, 10.735 Pavilho 5 Cond. Espace Center
Vila Anastcio 05095-035 So Paulo SP
Fone: (11) 3665-1100 Fax: (11) 3667-1333

SAC 0800 703-3444 www.grupoa.com.br

IMPRESSO NO BRASIL
PRINTED IN BRAZIL

Monk_Iniciais.indd iv 06/12/13 17:59


Ao meu falecido pai, de quem eu herdei a paixo pela eletrnica.
Ele teria se divertido muito com tudo o que est neste livro.

Monk_Iniciais.indd v 06/12/13 17:59


Agradecimentos

Eu gostaria de agradecer a meus filhos, Stephen e Finalmente, eu gostaria de agradecer a Roger


Matthew Monk, pelo interesse e estmulo demons- Stewart e a todos da McGraw-Hill pelo grande en-
trados durante a escrita deste livro, pelas sugestes tusiasmo e apoio. Foi uma satisfao ter trabalhado
teis e pelos testes que realizaram com os projetos. com eles.
Alm disso, eu no poderia ter escrito este livro
sem a pacincia e o apoio de Linda.

Monk_Iniciais.indd vii 06/12/13 17:59


Sumrio

Introduo .................................................. 1 Aritmtica .......................................................... 29


Afinal, o que o Arduino? ......................................1 Strings ................................................................. 30
O Arduino ...................................................................1 Comandos condicionais ................................. 31
Os projetos .................................................................3 Resumo .................................................................... 31
Mos obra ................................................................3
captulo 3
captulo 1 Projetos com LED ...................................... 33
Por onde comeo? ....................................... 5 Projeto 2 Sinalizador de SOS em
Alimentao eltrica ................................................6 cdigo Morse .......................................................... 34
Como instalar o software ........................................6 Hardware............................................................ 34
Instalao no Windows ......................................7 Software ............................................................. 34
Instalao no Mac OS X................................... 10 Juntando tudo .................................................. 36
Instalao no Linux .......................................... 10 Loops ........................................................................ 36
Configurando o ambiente do seu Arduino...... 10 Arrays ........................................................................ 37
Como baixar o software para os projetos ........ 10 Projeto 3 Tradutor de cdigo Morse .............. 37
Projeto 1 LED piscante....................................... 12 Hardware............................................................ 38
Software ............................................................. 12 Software ............................................................. 38
Hardware............................................................ 14 Juntando tudo .................................................. 41
Protoboard .............................................................. 16 Projeto 4 Tradutor de cdigo Morse de alto
Resumo .................................................................... 17 brilho ........................................................................ 42
Hardware............................................................ 42
captulo 2 Software ............................................................. 45
Um passeio pelo Arduino.......................... 19 Juntando tudo .................................................. 45
Microcontroladores ............................................... 20 Como construir um shield.............................. 45
Quais so os componentes de uma placa de Resumo .................................................................... 48
Arduino? .................................................................. 20
Fonte de alimentao ..................................... 20 captulo 4
Conexes de alimentao eltrica ............... 21 Mais projetos com LED.............................. 49
Entradas analgicas......................................... 23 Entradas e sadas digitais ..................................... 50
Conexes digitais ............................................. 23 Projeto 5 Modelo de sinalizao para
Microcontrolador ............................................. 24 semforo .................................................................. 50
Outros componentes ...................................... 25 Hardware............................................................ 50
A famlia Arduino ................................................... 26 Software ............................................................. 51
A linguagem C ........................................................ 26 Juntando tudo .................................................. 51
Um exemplo ...................................................... 27 Projeto 6 Luz estroboscpica........................... 53
Variveis e tipos de dados .............................. 29 Hardware............................................................ 53

Monk_Iniciais.indd ix 06/12/13 17:59


Software ............................................................. 55 captulo 6
Juntando tudo .................................................. 56 Projetos com LEDs multicores .................. 95
Construindo um shield.............................. 56 Projeto 14 Display luminoso multicor ........... 96
Projeto 7 Luz para desordem Hardware............................................................ 96
afetiva sazonal (SAD) ............................................ 57 Software ............................................................. 96
Hardware............................................................ 57 Juntando tudo ................................................100
Software ............................................................. 60 LEDs de sete segmentos ....................................100
Juntando tudo .................................................. 61 Projeto 15 Dados duplos com LEDs de sete
Projeto 8 Luz estroboscpica de segmentos .............................................................102
alta potncia ........................................................... 62 Hardware..........................................................102
Hardware............................................................ 62 Software ...........................................................103
Software ............................................................. 62 Juntando tudo ................................................105
Juntando tudo .................................................. 64 Projeto 16 Array de LEDs ................................105
Gerao de nmeros aleatrios ......................... 64 Hardware..........................................................106
Projeto 9 Dado com LEDs ................................. 64 Software ...........................................................106
Hardware............................................................ 65 Displays LCD ....................................................108
Software ............................................................. 66 Projeto 17 Painel de mensagens USB ..........109
Juntando tudo .................................................. 68 Hardware..........................................................109
Resumo .................................................................... 68 Software ...........................................................110
Juntando tudo ................................................112
captulo 5 Resumo ..................................................................112
Projetos com sensores .............................. 69
Projeto 10 Cdigo secreto com captulo 7
teclado numrico................................................... 70 Projetos com som.................................... 113
Hardware............................................................ 70 Projeto 18 Osciloscpio ..................................114
Software ............................................................. 72 Hardware..........................................................114
Juntando tudo .................................................. 75 Software ...........................................................116
Encoders rotativos ................................................. 76 Juntando tudo ................................................117
Projeto 11 Modelo de sinalizao para Gerao de udio.................................................117
semforo com encoder ........................................ 76 Projeto 19 Tocador de msica .......................119
Hardware............................................................ 76 Hardware..........................................................120
Software ............................................................. 77 Software ...........................................................120
Juntando tudo .................................................. 81 Juntando tudo ................................................123
Sensor luminoso .................................................... 81 Projeto 20 Harpa luminosa ............................123
Projeto 12 Monitor de pulsao arterial ....... 81 Hardware..........................................................123
Hardware............................................................ 82 Software ...........................................................123
Software ............................................................. 83 Juntando tudo ................................................126
Juntando tudo .................................................. 86 Projeto 21 Medidor VU ....................................126
Medio de temperatura ..................................... 86 Hardware..........................................................127
Projeto 13 Registrador de Software ...........................................................129
temperatura USB ................................................... 86 Juntando tudo ................................................129
Hardware............................................................ 87 Resumo ..................................................................129
Software ............................................................. 87
Juntando tudo .................................................. 92 captulo 8
Sumrio

Resumo .................................................................... 94 Projetos de potncia ............................... 131


Projeto 22 Termostato com LCD ...................132
Hardware..........................................................132

Monk_Iniciais.indd x 06/12/13 17:59


Software ...........................................................133 captulo 10
Juntando tudo ................................................138 Projetos USB com o Leonardo ................ 179
Projeto 23 Ventilador controlado por Projeto 31 O truque do teclado ....................180
computador ..........................................................138 Hardware..........................................................180
Hardware..........................................................139 Software ...........................................................180
Software ...........................................................139 Juntando tudo ................................................181
Juntando tudo ................................................141 Projeto 32 Digitador automtico
Controladores com ponte H ..............................141 de senha.................................................................181
Projeto 24 Hipnotizador .................................142 Hardware..........................................................182
Hardware..........................................................142 Software ...........................................................183
Software ...........................................................143 Juntando tudo ................................................184
Juntando tudo ................................................144 Projeto 33 Mouse com acelermetro...... 184
Servomotores..................................................146 Hardware..........................................................185
Projeto 25 Laser controlado por Software ...........................................................186
servomotores........................................................146 Juntando tudo ................................................186
Hardware..........................................................147 Resumo ..................................................................187
Software ...........................................................148
Juntando tudo ................................................150 captulo 11
Resumo ..................................................................151 Seus projetos .......................................... 189
Circuitos .................................................................190
captulo 9 Diagramas esquemticos .............................190
Outros projetos ....................................... 153 Smbolos de componentes ..........................190
Projeto 26 Detector de mentira ....................154 Componentes .......................................................192
Hardware..........................................................154 Folhas de dados de especificao ..............192
Software ...........................................................155 Resistores .........................................................193
Juntando tudo ................................................157 Transistores......................................................194
Projeto 27 Fechadura magntica Outros semicondutores ................................195
para porta ..............................................................157 Mdulos e shields ..........................................195
Hardware..........................................................158 Comprando componentes...........................196
Software ...........................................................160 Ferramentas ..........................................................196
Juntando tudo ................................................161 Caixa de componentes .................................197
Projeto 28 Controle remoto com Alicates de corte e de bico ...........................197
infravermelho .......................................................162 Soldagem .........................................................198
Hardware..........................................................163 Multmetros .....................................................198
Software ...........................................................164 Osciloscpio ....................................................200
Juntando tudo ................................................168 Ideias para projetos .......................................200
Projeto 29 Relgio com Lilypad ....................168
Hardware..........................................................169 apndice
Software ...........................................................169 Componentes e fornecedores................. 203
Juntando tudo ................................................173 Fornecedores ........................................................204
Projeto 30 Contador regressivo de tempo ...173 Fornecedores de componentes .......................204
Hardware..........................................................174 Resistores .........................................................205
Software ...........................................................174 Semicondutores .............................................206
Juntando tudo ................................................178 Hardware e componentes diversos ...........209
Sumrio

Resumo ..................................................................178
ndice....................................................... 211

xi

Monk_Iniciais.indd xi 06/12/13 17:59


Introduo

As placas de interface de Arduino propiciam uma trnicos externos, como motores, rels, sensores
tecnologia de baixo custo e fcil utilizao, permi- luminosos, diodos laser, alto-falantes, microfones,
tindo o desenvolvimento de projetos. Agora, toda etc. Os Arduinos podem ser energizados atravs de
uma nova linhagem de projetos pode ser cons- um conector USB a partir de um computador ou de
truda e controlada por computador. Em breve, o uma bateria de 9V. Eles podem ser controlados di-
laser controlado por computador e acionado por retamente por um computador, ou podem primeiro
servomotores estar completo, e o mundo estar ser programados pelo computador e, a seguir, des-
em suas mos. conectados para trabalharem de forma autnoma.

Este livro mostra como conectar uma placa de Ar- Neste livro, o foco estar nos tipos mais populares
duino a um computador, permitindo program-la. de placas de Arduino: Uno e Leonardo.
Alm disso, ensina como incluir todo tipo de ele-
trnica para desenvolver projetos, como um laser A esta altura, o leitor pode estar se perguntando
controlado por computador e acionado por ser- como adquirir um Arduino. Na realidade, muito
vomotor, um ventilador controlado por USB, uma simples. O leitor precisa apenas visitar o seu site
harpa luminosa, um registrador de temperatura preferido de leilo ou de busca. Como o Arduino
USB, um osciloscpio para udio e muito mais. um projeto de hardware aberto (open-source),
qualquer pessoa pode pegar os projetos e criar os
Os diagramas esquemticos e todos os detalhes seus prprios clones de Arduino para vend-los.
da construo dos projetos sero fornecidos. A Isso torna a comercializao dessas placas bastan-
maioria dos projetos pode ser construda sem ne- te competitiva. Um Arduino oficial custa em torno
cessidade de soldas ou ferramentas especiais. En- de 30 dlares, e um clone pode ser adquirido por
tretanto, se desejar, o leitor mais ambicioso poder menos de 20 dlares.
transferir os projetos de uma placa de protoboard
para algo mais permanente. As instrues de como O software de programao do Arduino de fcil
fazer isso tambm sero fornecidas. utilizao e est disponvel gratuitamente para
computadores Windows, Mac e Linux.

Afinal, o que o Arduino?


O Arduino
Bem, o Arduino uma pequena placa de micro-
controlador que contm um conector USB que Na realidade, embora o Arduino seja o projeto
permite lig-la a um computador, alm de diversos aberto de uma placa de interface baseada em
pinos que permitem a conexo com circuitos ele- microcontrolador, ele muito mais do que isso

Monk_Iniciais.indd 1 06/12/13 17:59


porque, alm da prpria placa, inclui tambm as na por meio de um adaptador de tenso contnua
ferramentas de desenvolvimento de software ne- (CC). A tenso da fonte de alimentao pode ter
cessrias para programar as placas de Arduino. H qualquer valor entre 7 e 12 volts. Dessa forma, em
uma ampla comunidade envolvida com a constru- aplicaes portteis, uma pequena bateria de 9V
o, a programao e a eletrnica e h tambm funcionar muito bem. Normalmente, por conve-
entusiastas de arte desejosos de compartilhar suas nincia, enquanto voc estiver desenvolvendo o
habilidades e experincias. seu projeto, provavelmente ir energiz-lo com a
conexo USB e, depois, quando voc estiver pronto
Para comear a utilizar um Arduino, primeiro aces- para cortar o cordo umbilical (desconectar o cabo
se o site do Arduino (www.arduino.cc) e baixe o USB), alimentar a placa com uma fonte autno-
software para Mac, PC ou Linux. O Captulo 1 for- ma. Para isso, voc pode usar um adaptador de
nece instrues passo a passo de como instalar o tenso externo ou simplesmente uma bateria co-
software nessas trs plataformas. nectada a um plugue que encaixado no soquete
Na realidade, h diversas placas de Arduino que de alimentao.
so destinadas a muitos tipos de aplicao. To- H duas filas de pinos de conexo nas bordas da
das podem ser programadas utilizando o mesmo placa. Na borda superior, os pinos de conexo so
software de desenvolvimento de Arduino e, em principalmente digitais (ligado/desligado), embo-
geral, os programas que funcionam em uma placa ra alguns deles possam ser usados como sadas
tambm funcionam em todas as demais. analgicas. Na borda inferior, h pinos teis para
Neste livro, utilizaremos as placas de Arduino Uno alimentao eltrica esquerda e entradas anal-
e Leonardo, exceto em um projeto, que usa o Ar- gicas direita.
duino Lilypad. Quase todos os projetos funciona- Essa disposio dos conectores permite que placas,
ro com Arduino Uno e Arduino Leonardo, e mui- denominadas shields, possam ser encaixadas por
tos tambm funcionaro com placas de Arduino cima da placa principal. possvel comprar shields
mais antigas, como a Duemilanove. j montados para serem utilizados com os mais di-
Quando voc estiver construindo um projeto com ferentes propsitos, incluindo:
Arduino, dever utilizar um cabo USB entre seu Conexo com redes Ethernet
computador e o Arduino para baixar os programas
Displays LCD e telas de toque
para a placa. Essa uma das coisas mais conve-
nientes da utilizao de um Arduino. Para instalar WiFi
os programas no microcontrolador, muitas placas udio
de microcontrolador usam um hardware de pro- Controle de motor
gramao separado. No Arduino, tudo est contido
Rastreio por GPS
na prpria placa. Isso tambm vantajoso porque
voc pode utilizar a conexo USB para transferir E muito mais
dados nos dois sentidos entre uma placa de Ardui- Voc tambm pode utilizar placas de shield para criar
no e seu computador. Por exemplo, voc pode co- os seus prprios prottipos. Utilizaremos esses pro-
nectar um sensor de temperatura a seu Arduino e toshields em um de nossos projetos. Os shields cos-
faz-lo enviar os valores de temperatura de forma tumam ter pinos de conexo, de modo que diversos
contnua. shields podem ser empilhados entre si. Assim, em
Introduo

Voc pode deixar o computador alimentar a placa um projeto, poderia haver trs camadas: uma placa
de Arduino com energia eltrica por meio do cabo de Arduino na parte debaixo, um shield GPS por cima
USB ou, ento, pode utilizar energia eltrica exter- e, bem no topo, um shield de display LCD.

Monk_Iniciais.indd 2 06/12/13 17:59


A maioria dos projetos deste livro pode ser cons-
Os projetos truda sem necessidade de soldagem. Em vez
Os projetos deste livro so bem variados. Comeare- disso, utilizaremos uma placa protoboard (matriz
mos com alguns exemplos simples utilizando LEDs de contatos) ou, como tambm denominada,
comuns e LEDs Luxeon de alto brilho. breadboard. Uma placa protoboard um bloco de
plstico com orifcios, abaixo dos quais h cone-
No Captulo 5, veremos diversos projetos com sen- xes de metal fixadas por mola. Os componentes
sores para registrar temperatura e medir lumino- eletrnicos so inseridos nas aberturas superiores
sidade e presso. A conexo USB do Arduino pos- dos orifcios. Eles no so caros, e uma placa pro-
sibilita a entrada das leituras j feitas pelo sensor, toboard adequada est indicada no Apndice. En-
permitindo a sua transferncia ao computador, tretanto, se voc desejar construir seus projetos de
onde podem ser importadas por uma planilha e forma mais permanente, o livro tambm mostrar
exibidas na forma de grficos. como fazer isso com o uso de placas adequadas
A seguir, examinaremos projetos que utilizam di- para prottipos.
versas tecnologias de display, incluindo um painel Fornecedores de todos os componentes esto
de mensagens alfanumricas com LCD (usando listados no Apndice. Alm desses componentes,
novamente a conexo USB para obter mensagens as nicas coisas de que voc necessitar sero
de seu computador) e tambm LEDs de sete seg- uma placa de Arduino, um computador, alguns
mentos e multicores. fios e uma placa protoboard. O software de todos
O Captulo 7 apresenta quatro projetos que uti- os projetos est disponvel em www.arduinoevil-
lizam o som, incluindo um osciloscpio simplifi- genius.com.
cado. Temos um projeto simples para tocar peas
musicais em um alto-falante, seguido de outro pro-
jeto de expanso que o transforma em uma harpa Mos obra
luminosa. Nessa harpa, a altura e a intensidade do
Voc deve estar ansioso para comear. Por isso, no
som so alteradas com o movimento das mos por
Captulo 1, mostraremos como comear a utilizar
cima de sensores luminosos. Isso produz um efeito
o Arduino o mais rapidamente possvel. O captulo
similar ao do famoso sintetizador Theremin. O pro-
contm todas as instrues para instalar o software
jeto final desse captulo usa o sinal de udio pro-
e para programar a sua placa de Arduino, mostran-
duzido por um microfone. um medidor VU que
do como baixar o software para os projetos. Ento,
exibe a intensidade do som em um display.
antes de construir seus projetos, leia esse captulo.
No Captulo 10, em alguns projetos interessantes,
No Captulo 2, examinaremos alguns dos funda-
utilizaremos um recurso para teclado e mouse USB
mentos tericos que o ajudaro a construir os pro-
que exclusivo do Arduino Leonardo.
jetos descritos neste livro e tambm os seus pr-
Os captulos finais contm uma miscelnea de pro- prios projetos. A maior parte da teoria est contida
jetos. Entre eles, h um relgio binrio indecifrvel neste captulo. Se voc for o tipo de projetista que
que usa uma placa Arduino Lilypad para mostrar as prefere primeiro construir os projetos para depois
horas de forma enigmtica e que s pode ser lido descobrir como funcionam, ento voc talvez pre-
por voc. H tambm um detector de mentira, um fira escolher um projeto e comear a constru-lo
imediatamente aps a leitura do Captulo 1. Se no
Introduo

disco girante hipnotizador controlado por motor e,


naturalmente, o laser controlado por computador conseguir avanar, voc poder consultar o ndice
e guiado por servomotores. e ler alguns dos captulos anteriores.

Monk_Iniciais.indd 3 06/12/13 17:59


captulo 1

Por onde comeo?


Este captulo para o leitor que est ansioso para comear. A sua placa nova de
Arduino chegou e voc quer que ela faa alguma coisa. Portanto, mos obra.

Objetivos deste captulo


Explicar como energizar o Arduino.

Demonstrar a instalao do ambiente de desenvolvimento do


Arduino no Windows 7, no Mac OS X e no Linux.

Aplicar a configurao do ambiente do Arduino.

Demonstrar como modificar o Sketch Blink.

Ensinar a utilizar um resistor e um LED externo de maior potncia.

Auxiliar no reconhecimento um protoboard.

Monk_01.indd 5 18/12/13 17:03


possvel que surjam algumas mensagens do seu sis-
Alimentao eltrica tema operacional a respeito de novos dispositivos
Quando voc compra uma placa de Arduino Uno ou hardware encontrados. Por enquanto, ignore-os.
ou Leonardo, ela costuma vir com um programa
Blink (Piscar) pr-instalado que far piscar o pe- Se tudo estiver funcionando corretamente, o LED de-
queno LED existente na placa. A Figura 1-1 mostra ver piscar (blink) uma vez a cada dois segundos. Nas
duas placas Arduino. placas novas de Arduino, esse sketch (Blink), que faz
o LED piscar, j vem instalado e utilizado para ve-
O diodo emissor de luz (LED), assinalado com a rificar se a placa est funcionando. Se voc clicar no
letra L na placa, est ligado a um dos pinos de co- boto de Reset, o LED dever piscar momentanea-
nexo de entrada e sada digitais da placa. Ele est mente. Se esse for o caso e o LED no piscar, ento
conectado ao pino digital 13. Isso limita o uso do provavelmente a placa no veio programada com o
pino 13 a ser uma sada. No entanto, o LED conso- sketch Blink (piscar). No se desespere pois, depois
me apenas uma pequena quantidade de corrente, de tudo instalado, faremos modificaes e instalare-
de modo que voc ainda pode conectar outras coi- mos esse sketch como nosso primeiro projeto.
sas a esse pino de conexo.

Tudo que voc precisa para colocar o seu Arduino


em funcionamento aliment-lo com energia el-
trica. A maneira mais fcil de fazer isso conect-lo
Como instalar o software
a uma porta USB (Universal Serial Bus) do seu com- Agora que o Arduino est funcionando, vamos ins-
putador. Para um Arduino Uno, voc precisar de talar o software de modo que possamos modificar
um cabo USB do tipo A-B. Esse o mesmo tipo de o programa Blink (piscar) e envi-lo placa. O pro-
cabo que normalmente usado para conectar um cedimento exato depende do sistema operacional
computador a uma impressora. Para um Leonardo, que voc est utilizando no seu computador. No
voc precisar de um conector USB do tipo micro. entanto, o princpio bsico o mesmo para todos.
30 projetos com Arduino

Figura 1-1 Arduinos Uno e Leonardo.


Fonte: do autor.

Monk_01.indd 6 06/12/13 15:48


Instale o ambiente de desenvolvimento do Ardui- O software de Arduino no faz distino entre as
no. Esse o programa que voc executa no seu diversas verses de Windows. O arquivo baixado
computador permitindo que voc escreva sketches deve funcionar com todas as verses, de Windows
e transfira-os para a placa do Arduino. XP em diante. As instrues seguintes so para o
Windows 7.
Instale o driver USB que permite a comunicao do
computador com a porta USB do Arduino. Isso Selecione a opo Salvar na caixa de dilogo e
usado para a programao e o envio de mensagens. salve o arquivo Zip no seu Desktop. A pasta con-
tida no arquivo Zip se tornar a pasta principal de
O site do Arduino (www.arduino.cc) contm a l- Arduino. Agora descompacte o arquivo (unzip) no
tima verso do software. Neste livro, usaremos a seu Desktop. Mais tarde, se desejar, voc poder
verso Arduino 1.0.2. mov-lo para algum outro local.

No Windows, voc pode fazer isso clicando no ar-


Instalao no Windows quivo Zip com o boto direito. Ento aparecer o
As instrues seguintes so para a instalao no menu da Figura 1-3. Em seguida selecione a opo
Windows 7. O processo quase o mesmo para o Extrair Tudo (Extract All) para abrir o assistente de
Windows Vista e XP. A nica parte que pode ser um extrair pastas, mostrado na Figura 1-4.
pouco trabalhosa a instalao dos drivers.
Extraia os arquivos transferindo-os para o seu
Siga as instrues de como baixar o arqui- Desktop.
vo para Windows na pgina inicial do Arduino
(www.arduino.cc). Com isso, voc baixar o arquivo
com extenso Zip contendo o software de Arduino,
como est mostrado na Figura 1-2. possvel que
a verso baixada do software seja mais recente do
que a verso 1.0.2 mostrada (a equipe de desenvol-
vimento do Arduino ainda no atualizou o nome
do arquivo Zip).

Por onde comeo?


captulo 1

Figura 1-2 Baixando o software de Arduino para Figura 1-3 A opo Extrair Tudo (Extract All) do
Windows. menu no Windows.
Fonte: do autor. Fonte: do autor.

Monk_01.indd 7 06/12/13 15:48


software que voc gostaria de utilizar, no essen-
cial manter-se atualizado com a ltima verso.

Agora que voc instalou a pasta de Arduino no lu-


gar correto, precisamos instalar os drivers USB. Se
voc ainda no o fez, conecte o seu Leonardo ou
Uno no seu computador. Dependendo da verso
do seu Windows, podero ocorrer algumas tentati-
vas no muito bem-sucedidas por parte do seu sis-
tema operacional para instalar os drivers. Simples-
mente cancele essas tentativas na primeira vez que
Figura 1-4 Extrao do arquivo Arduino no Windows. surgirem porque provavelmente no funcionaro.
Fonte: do autor. Em vez disso, abra o Gerenciador de Dispositivos.
Ele pode ser acessado de diversas maneiras, de-
Isso criar uma nova pasta para essa verso de Ar- pendendo da sua verso de Windows. No Windows
duino (no caso, 1.0.2) no seu Desktop. Se desejar, 7, primeiro voc precisa abrir o Painel de Controle.
voc poder ter diversas verses de Arduino insta- A seguir, selecione a opo para ver cones e o Ge-
ladas ao mesmo tempo, cada uma na sua prpria renciador de Dispositivos dever aparecer na lista.
pasta. Atualizaes do Arduino no so muito
frequentes e historicamente tm sempre mantido Na seo Outros Dispositivos, voc dever ver um
uma boa compatibilidade com verses anteriores cone em Dispositivo Desconhecido com um pe-
do software. Portanto, a menos que voc esteja queno tringulo amarelo de alerta. Esse cone do
tendo problemas ou que haja um novo recurso de seu Arduino (Figura 1-5).
30 projetos com Arduino

Figura 1-5 O Gerenciador de Dispositivos do Windows.


Fonte: do autor.

Monk_01.indd 8 06/12/13 15:48


Clique com o boto direito em Dispositivo Des-
conhecido e selecione a opo Atualizar Driver.
Ento, voc dever escolher entre Pesquisar au-
tomaticamente software de driver atualizado ou
Procurar software de driver no computador. Se-
lecione a segunda opo e navegue at arduino-
-1.0.2-windows\arduino1.0.2\drivers (Figura 1-6).
Modifique os nmeros da verso se voc estiver
usando uma verso diferente de Arduino.

Clique em Avanar. Poder surgir um alerta de


Figura 1-6 Buscando os drivers USB.
segurana. Se isso ocorrer, permita a instalao do Fonte: do autor.
software. Depois da instalao do software, apare-
cer uma mensagem de confirmao como a mos-
trada na Figura 1-7. Para um Leonardo, a mensa-
gem ser diferente, mas o procedimento idntico.

Agora, o Gerenciador de Dispositivos deve mostrar


o nome correto para o Arduino (Figura 1-8).

Esse processo realizado uma nica vez. De agora


em diante, sempre que voc conectar a sua placa
de Arduino, os seus drivers USB sero carregados
automaticamente e o Arduino estar pronto para
funcionar.
Figura 1-7 A instalao bem-sucedida do driver USB.
Fonte: do autor.

Por onde comeo?


captulo 1

Figura 1-8 O Gerenciador de Dispositivos mostrando o Arduino.


Fonte: do autor.

Monk_01.indd 9 06/12/13 15:48


A seguir, execute o software de Arduino. No Win-
Instalao no Mac OS X dows, isso significa abrir a pasta Arduino e clicar
no cone Arduino (selecionado na Figura 1-9). Se
O processo de instalao do software de Arduino
voc preferir, pode colocar um atalho na sua rea
no Mac bem mais fcil do que no PC.
de Trabalho.
Como antes, o primeiro passo baixar o arquivo. No
A porta serial configurada no menu Ferramentas,
caso do Mac, um arquivo Zip. Depois disso, clique
como mostrado na Figura 1-10 no Mac e na Figura
duas vezes no arquivo Zip, do qual ser extrado um
1-11 no Windows 7 a lista de portas no Linux
arquivo simples denominado Arduino.app. Esse
similar do Mac.
arquivo contm o aplicativo Arduino completo.
Basta arrast-lo sua pasta de aplicativos. Se voc estiver utilizando muitos dispositivos USBs
ou Bluetooth no seu Mac, provvel que, na lista de
Agora, voc pode localizar e executar o software
portas, haja poucas opes disponveis. Selecione
do Arduino que est na pasta de aplicativos.
o item da lista que comea por dev/tty.usbserial.
Como voc ir us-lo frequentemente, talvez
queira clicar com o boto direto no cone do Ar- No Windows, a porta serial pode ser configurada
duino que est no Dock e ativar Keep in Dock comumente para COM3 ou COM4, dependendo do
(mantenha no dock). que aparecer.

No menu Ferramentas, agora podemos escolher


Instalao no Linux a placa que ser utilizada, como mostrado na Fi-
gura 1-12.
H muitas distribuies diferentes de Linux, e as
instrues para cada distribuio so ligeiramente
diferentes. A comunidade de Arduino tem feito um
grande trabalho ao reunir conjuntos de instrues
para cada distribuio. Dessa forma, sugerimos Como baixar o software
que voc acesse, por exemplo, o site http://play- para os projetos
ground.arduino.cc/learning/linux e siga as orienta-
Os sketches (como so denominados os progra-
es para a distribuio que voc usa.
mas no mundo do Arduino) usados neste livro
esto disponveis para download na forma de um
arquivo simples Zip com menos de um megabyte.
Configurando o ambiente Portanto, voc pode baixar o software para todos
os projetos, mesmo que voc pretenda usar ape-
do seu Arduino nas alguns deles. Para baix-los, acesse o site www.
Independentemente do tipo de computador que simonmonk.org/ e siga os links de download para
voc est usando, agora o software de Arduino a segunda edio* deste livro.
j deve estar instalado, sendo necessrio fazer
Com qualquer plataforma, o software do Arduino
30 projetos com Arduino

alguns ajustes. Voc precisa especificar a porta


serial que est conectada placa de Arduino e espera encontrar todos os sketches na pasta Meus
tambm o tipo de placa de Arduino que voc est Documentos, dentro de um diretrio denominado
utilizando. Mas, primeiro, voc precisa conectar Arduino, que foi criado pelo software do Arduino
o seu Arduino ao computador por meio do cabo
USB. Se no fizer isso, no ser possvel selecionar * N. de T.: o livro no qual a expresso Second edition,
a porta serial. quase ilegvel, est acima de 30 Arduino.

10

Monk_01.indd 10 06/12/13 15:48


Figura 1-9 Iniciando a execuo do Arduino no Windows.
Fonte: do autor.

Por onde comeo?


captulo 1

Figura 1-10 Configurando a porta serial no Mac.


Fonte: do autor.

11

Monk_01.indd 11 06/12/13 15:48


Projeto 1
LED piscante
Supondo que voc j tenha instalado com sucesso
o software, agora podemos iniciar o nosso primei-
ro projeto emocionante. Na verdade, ele no to
emocionante, mas precisamos iniciar com alguma
coisa e, dessa forma, poderemos verificar se confi-
guramos tudo corretamente e se estamos prontos
para utilizar o nosso Arduino.

Modificaremos o sketch Blink (piscar) de exemplo


que acompanha o Arduino. Para isso, aumenta-
remos a frequncia do pisca-pisca e, em seguida,
instalaremos o sketch modificado na placa do Ar-
duino. Em vez de piscar lentamente, a nossa placa
far o LED piscar (flash) rapidamente. Em seguida,
levaremos o projeto um passo mais adiante: utili-
Figura 1-11 Configurando a porta serial no zaremos um resistor e um LED externo de maior
Windows. potncia no lugar do pequeno LED que vem junto
Fonte: do autor.
na placa do Arduino.

COMPONENTES E EQUIPAMENTO
Descrio Apndice
Arduino Uno ou Leonardo m1/m2
D1 LED vermelho de 5 mm s1
R1 Resistor de 270 V e 1/4 W r3
Protoboard h1
Fios de conexo (jumpers) h2

Na realidade, praticamente qualquer LED e re-


sistor de 270 ohms comuns sero adequados.
O nmero na coluna Apndice refere-se lis-
ta de componentes disponvel no Apndice,
na qual esto os respectivos cdigos adota-
dos por diversos fornecedores.

Figura 1-12 Configurando a placa.


Fonte: do autor.
30 projetos com Arduino

Software
na primeira vez em que foi executado. Portanto,
Primeiro, precisamos carregar o sketch Blink no
coloque os contedos do arquivo Zip dentro dessa
software do Arduino. Esse sketch vem como exem-
pasta, supondo que voc j tenha instalado o soft-
plo quando voc instala o ambiente Arduino. Por-
ware do Arduino.
tanto, podemos carreg-lo utilizando o menu File
Observe que os sketches so numerados por proje- (arquivo), como mostrado na Figura 1-13.
to e vm em suas prprias pastas.

12

Monk_01.indd 12 06/12/13 15:48


O sketch ser aberto em uma janela separada (Fi- no fazem parte do programa, mas explicam o que
gura 1-14). Agora, se desejar, voc poder fechar ocorre durante a execuo do programa para qual-
a janela vazia que foi aberta quando o software do quer pessoa que estiver lendo o sketch.
Arduino comeou a ser executado.
Os comentrios podem ter uma nica linha, come-
A maior parte do texto desse sketch est na forma ando com // e estendendo-se at o final da mesma
de comentrios. Na realidade, esses comentrios linha, ou podem ocupar diversas linhas, comeando
com /* e terminando com */ algumas linhas depois.

Se todos os comentrios de um sketch fossem re-


tirados, o sketch ainda continuaria funcionando
exatamente da mesma maneira. Ns inclumos
os comentrios porque so teis a qualquer pes-
soa que estiver lendo o sketch tentando entender
como ele funciona.

Antes de comear, necessrio uma pequena ex-


plicao. A comunidade Arduino utiliza a palavra
sketch no lugar de programa. Por essa razo, de
agora em diante, irei me referir aos nossos progra-
mas de Arduino como sketches. Ocasionalmente,
poderei me referir a cdigo. Cdigo um termo
usado pelos programadores para fazer referncia a
uma seo de um programa ou, genericamente, ao
Figura 1-13 Carregando o sketch Blink.
que escrito quando um programa criado. Desse
Fonte: do autor. modo, algum poderia dizer Eu escrevi um pro-
grama que faz aquilo, ou poderia dizer Eu escrevi
um cdigo que faz aquilo.

Para alterar a frequncia com que o LED pisca, pre-


cisamos modificar o valor do retardo (delay). Para
isso, nos dois lugares do sketch em que temos

delay(1000);

devemos trocar o valor dentro dos parnteses por


200, de modo que teremos
Por onde comeo?

delay(200);

Isso alterar o retardo (delay) entre o ligar e o des-


ligar do LED. Esse tempo passar de 1.000 milisse-
gundos (1 segundo) para 200 milissegundos (um
quinto de segundo). No Captulo 3, exploraremos
captulo 1

com mais profundidade esse sketch. Por enquanto,


Figura 1-14 O sketch Blink. vamos simplesmente alterar o retardo e transferir
Fonte: do autor. (upload) o sketch para a placa de Arduino.

13

Monk_01.indd 13 06/12/13 15:48


Com a placa conectada ao computador, clique no No podemos simplesmente aplicar uma tenso
boto Upload do software do Arduino. Isso est diretamente aos LEDs. Eles devem ser conectados
mostrado na Figura 1-15. Se tudo estiver funcio- a um resistor limitador de corrente. O LED e o re-
nando corretamente, haver uma pequena pausa sistor podem ser encomendados de qualquer for-
e, em seguida, os dois LEDs vermelhos da placa necedor de material eletrnico. Os cdigos desses
piscaro de forma intermitente enquanto o sketch componentes para diversos fornecedores esto
estiver sendo transferido (uploading) para a placa. detalhados no Apndice.
Isso dever levar uns 5 a 10 segundos.
Os pinos de conexo da placa do Arduino so
Se isso no ocorrer, verifique a porta serial e as projetados para ser acoplados a placas auxilia-
configuraes do tipo de placa de Arduino que res denominadas shields. Entretanto, quando o
est sendo utilizado, como foi descrito nas sees objetivo experimental, possvel inserir fios ou
anteriores. terminais (pernas) de cada componente direta-
mente neles.
Quando o sketch completo estiver instalado, a placa
ser inicializada (reset) automaticamente e, se tudo A Figura 1-16 mostra o diagrama esquemtico da
estiver certo, voc ver o LED da porta digital 13 co- conexo do LED externo.
mear a piscar mais rapidamente do que antes.
Esse tipo de diagrama esquemtico usa smbolos
especiais para representar os componentes eletr-
Hardware nicos. O LED aparece representado como uma seta
At agora, parece que ainda no trabalhamos com grande, indicando que um diodo emissor de luz,
eletrnica de verdade, porque o hardware estava como qualquer outro diodo, permite a circulao de
todo contido na placa do Arduino. Nesta seo, corrente apenas em um sentido. As setas pequenas
acrescentaremos um LED externo placa. junto ao smbolo do LED indicam que ele emite luz.
30 projetos com Arduino

Figura 1-15 Transferindo o sketch para a placa do Arduino.


Fonte: do autor.

14

Monk_01.indd 14 06/12/13 15:48


Pino digital 12

LED
Vermelho

R1
Arduino

270 V
Figura 1-17 Um LED conectado em srie com um
resistor.
GND Fonte: do autor.

Figura 1-16 Diagrama esquemtico de um LED A seguir, encaixe o terminal longo do LED no pino
conectado placa do Arduino. digital 12 e o terminal livre do resistor em um dos
Fonte: do autor. dois pinos GND de conexo. A Figura 1-18 mostra
como fazer isso. Algumas vezes, pode ser til do-
O resistor est representado simplesmente como um brar ligeiramente a ponta do terminal para que se
retngulo. Frequentemente os resistores so mos- encaixe mais firmemente no pino de conexo.
trados na forma de uma linha em zigue-zague. As
demais linhas do diagrama representam conexes Agora podemos modificar o sketch para usarmos o
eltricas entre os componentes. Essas conexes po- LED externo que acabamos de conectar. Tudo que
dem ser feitas por fios ou pelas trilhas de uma placa precisamos fazer alterar o sketch de modo que o
de circuito impresso. Nesse projeto, essas conexes pino digital 12 seja utilizado no lugar do 13 para
sero os prprios terminais dos componentes. controlar o LED. Para isso, modificaremos a linha

Podemos conectar os componentes diretamente int ledPin = 13;


aos pinos de conexo do Arduino, inserindo-os // LED conectado ao pino digital 13
entre o pino digital 12 e o pino GND (terra), mas
primeiro precisamos fazer uma conexo entre um
terminal do LED e um do resistor.

Para fazer a conexo com o LED, poderemos usar


qualquer um dos terminais do resistor. Entretanto,
h um modo correto de ligar o LED. No LED, um ter-
Por onde comeo?

minal um pouco menor do que o outro. O termi-


nal mais longo deve ser conectado ao pino digital
12, e o mais curto deve ser conectado ao resistor.
Nos LEDs e em alguns outros componentes, vale a
conveno do terminal positivo ser mais longo do
que o negativo.

Para ligar o resistor ao terminal curto do LED, afaste


captulo 1

cuidadosamente os terminais do LED e enrosque


um terminal do resistor em torno do terminal curto Figura 1-18 Um LED conectado placa de Arduino.
do LED, como est mostrado na Figura 1-17. Fonte: do autor.

15

Monk_01.indd 15 06/12/13 15:48


para constituindo fileiras de contatos. As fileiras apre-
sentam um intervalo entre elas, de modo que cir-
int ledPin = 12; cuitos integrados do tipo DIL (dual-in-line) podem
// LED conectado ao pino digital 12
ser inseridos sem que os terminais de uma mesma
fila sejam colocados em curto-circuito.
Agora, clicando no boto Upload to IO Board,
transfira o sketch do mesmo modo que voc fez Podemos construir esse projeto em um protobo-
quando aumentou a frequncia do pisca-pisca. ard em vez de enroscar pernas de componentes. A
Figura 1-19 mostra uma fotografia de como fazer
isso. A Figura 1-20 mostra com mais clareza como
os componentes so posicionados e conectados.
Protoboard
Enroscar fios para fazer conexes s prtico em Voc observar que, nas bordas do protoboard (em
casos simples, como conectar um LED e um resis- cima e embaixo), h duas faixas horizontais compri-
tor. Um protoboard (ou matriz de contato) permite das com fileiras de orifcios. Por baixo, h trilhas me-
a construo de circuitos complexos sem necessi- tlicas de conexo entre os orifcios, estando dis-
dade de soldagem. De fato, uma boa ideia pri- postas perpendicularmente s fileiras normais de
meiro construir o circuito em um protoboard at conexo. Essas fileiras compridas so usadas para
que funcione corretamente para, ento, realizar as energizar os componentes do protoboard. Normal-
soldagens. mente, uma para o terra (0V ou GND) e uma para
a tenso de alimentao positiva (usualmente 5V).
Um protoboard constitui-se de um bloco de plsti-
co com orifcios e com conexes fixadas por molas Alm do protoboard, voc precisar de alguns pe-
metlicas. Os componentes eletrnicos so inseri- daos de fios (jumpers) para fazer conexes (veja
dos nesses orifcios, tambm denominados conta- o Apndice). Costumam ser pedaos curtos de di-
tos, pela parte superior. versas cores e com alguns centmetros de compri-
mento. So usados para realizar as conexes entre
Abaixo dos orifcios do protoboard, h trilhas me- o Arduino e o protoboard. Se quiser, voc poder
tlicas que conectam entre si diversos orifcios, usar fio rgido e um descascador de fio ou alicate
30 projetos com Arduino

Figura 1-19 Projeto 1 montado no protoboard.


Fonte: do autor.

16

Monk_01.indd 16 06/12/13 15:48


Figura 1- 20 A disposio dos componentes do Projeto 1.
Fonte: do autor.

para descascar as pontas dos fios. bom dispor de ter 30 fileiras de contatos, sendo conhecido como
ao menos trs cores diferentes: vermelho para as meio protoboard. Cada fileira tem cinco contatos,
conexes com o lado positivo da alimentao el- um intervalo e mais cinco contatos. Neste livro,
trica, preto para o lado negativo e algumas outras usaremos seguidamente esse protoboard. Se voc
cores (amarelo ou laranja) para as demais cone- conseguir algo similar, facilitar muito. A placa
xes. Isso facilita muito o entendimento do circui- usada foi fornecida pela empresa AdaFruit (veja o
to. Voc tambm poder comprar fios rgidos de Apndice). O seu tamanho e disposio de conta-
conexo j preparados em diversas cores. Observe tos so muito comuns.
que no aconselhvel usar fios flexveis porque
tendem a se dobrar quando so inseridos nos orif-
cios do protoboard.

Podemos desenroscar os terminais do LED e do


Resumo
resistor, deixando-os retos para, em seguida, in- Criamos o nosso primeiro projeto, ainda que bem
seri-los em um protoboard. O protoboard mais co- simples. No Captulo 2, iremos nos aprofundar
mum venda tem 60 fileiras de contatos. Em nos- mais um pouco no Arduino antes de passarmos
sos projetos, o protoboard usado frequentemente para projetos mais interessantes.
Por onde comeo?
captulo 1

17

Monk_01.indd 17 06/12/13 15:48


captulo 2

Um passeio pelo Arduino


Neste captulo, examinaremos o hardware de uma placa de Arduino e tambm o
microcontrolador, que o seu corao. A placa serve simplesmente de suporte ao
microcontrolador e estende os seus pinos at os conectores, de modo que voc
possa incluir circuitos eletrnicos e dispor de uma conexo USB para fazer a
transferncia de sketches, etc. Tambm aprenderemos um pouco a respeito da
linguagem C, que utilizada para programar o Arduino programar o Arduino
algo que faremos nos captulos seguintes, quando comearmos os trabalhos
prticos de projeto. Embora esse captulo seja bem terico em alguns
momentos, ele lhe ajudar a compreender como funcionam os projetos.

Objetivos deste captulo


Auxiliar na identificao dos componentes de uma placa de
Arduino.

Examinar as diferentes placas de Arduino.

Estudar um pouco da linguagem C.

Monk_02.indd 19 06/12/13 16:22


ativado ou desativado (0 volts ou 5 volts), per-
Microcontroladores mitindo que diodos emissores de luz (LEDs) se-
O corao do nosso Arduino um microcontrola- jam ligados ou desligados diretamente, ou voc
dor. Praticamente todos os demais componentes pode usar a sada para controlar dispositivos com
da placa destinam-se ao fornecimento de energia potncias mais elevadas, como um motor. Es-
eltrica e comunicao com o seu computador. ses pinos tambm podem fornecer uma tenso
de sada analgica, isto , voc pode fazer que
Sendo assim, o que obtemos exatamente quando a sada de um pino apresente uma dada tenso
compramos um desses pequenos computadores em particular, permitindo que voc, por exemplo,
para usar em nossos projetos? ajuste a velocidade de um motor ou o brilho de
A resposta que, na realidade, temos um peque- uma lmpada, em vez de simplesmente lig-los
no computador em um chip. Ele tem tudo que os ou deslig-los.
primeiros computadores pessoais continham, alm
de outras coisas mais. Ele contm um processador,
2 ou 2,5 quilobytes de memria de acesso aleatrio
(RAM) para guardar dados, 1 quilobyte de memria
Quais so os componentes
programvel apagvel somente de leitura (EPROM) de uma placa de Arduino?
e quilobytes de memria flash para armazenar os A Figura 2-1 mostra nossa placa de Arduino neste
nossos programas. importante perceber que se caso, um Arduino Uno. Vamos dar um rpido pas-
trata de quilobytes (milhares de bytes) e no de me- seio pelos vrios componentes da placa.
gabytes (milhes de bytes) ou gigabytes (bilhes
de bytes). A maioria dos smartphones alcana at Comeando na parte superior esquerda, prximo
1 gigabyte de memria. Isso meio milho de vezes do soquete USB, est o boto de Reset (inicializa-
mais memria RAM do que h em um Arduino. Na o). Ao clicar neste boto, um pulso lgico en-
verdade, um Arduino um dispositivo muito sim- viado ao pino Reset do microcontrolador, obrigan-
ples quando comparado com o hardware mais atual do o microcontrolador a comear a execuo do
existente. Entretanto, o objetivo do Arduino no programa desde o incio e a limpar a sua memria.
ser um hardware de ponta. O Arduino no precisa Observe que qualquer programa armazenado no
controlar uma tela de alta resoluo ou uma rede dispositivo ser mantido porque ele est arma-
complexa. O seu objetivo controlar e executar ta- zenado em uma memria flash no voltil, isto ,
refas muito mais simples. uma memria que preserva seu contedo mesmo
quando ela no est energizada.
H algo que o Arduino tem e que voc no encon-
trar em um smartphone: pinos de entrada e sada.
Esses pinos estabelecem a conexo entre o micro- Fonte de alimentao
controlador e o resto da nossa eletrnica. dessa
forma que o Arduino controla coisas. O Arduino pode ser energizado por meio do conec-
tor USB que fica direita, em cima, ou do soquete
30 projetos com Arduino

As entradas podem ler dados tanto digitais (A cha- (jack) CC que fica mais abaixo. Quando a alimen-
ve est ligada ou desligada?) quanto analgicos tao feita com um adaptador CC de tenso ou
(Qual a tenso em um pino?). Isso nos possibilita com baterias, um valor entre 7,5V e 12V CC deve
conectar muitos tipos diferentes de sensores de ser fornecido atravs do jack.
luz, temperatura, som e outros.
Quando o Arduino est ligado, o LED indicador
As sadas tambm podem ser analgicas ou digi- direita no Uno (ou esquerda no Leonardo) estar
tais. Assim, voc pode fazer que um pino esteja aceso.

20

Monk_02.indd 20 06/12/13 16:22


Conector
ICSP 2 LED "L"
Pinos de entrada e sada digitais
Chave Reset

LED de
potncia
Conector
USB

Conector
ICSP 1

ATmega328
Jack CC

Conectores de alimentao eltrica Entradas analgicas

Figura 2-1 Componentes de um Arduino Uno.


Fonte: do autor.

pino GND, ou terra (ground), significa simplesmen-


Conexes de alimentao te 0V. a tenso de referncia qual todas as de-
eltrica mais tenses da placa so referidas.

A seguir, vamos examinar os pinos fmeas de co- Neste ponto, talvez seja oportuno relembrar o
nexo (soquetes) na parte de baixo da Figura 2-1. leitor da diferena entre tenso e corrente. No
Fora o primeiro pino, voc poder ler os nomes das h analogia perfeita para o comportamento dos
conexes prximo aos pinos. eltrons em um fio, mas uma analogia com a gua
que circula em um encanamento pode ser til,
O primeiro pino sem nome est reservado para uso
particularmente em termos de tenso, corrente e
futuro. O prximo pino, IOREF, usado para indi-
resistncia. A relao entre essas trs coisas de-
car a tenso em que o Arduino trabalha. O Uno e
nominada lei de Ohm.
o Leonardo trabalham com 5V. Portanto, esse pino
sempre estar em 5V, e ns no o usaremos. O seu A Figura 2-2 resume a relao entre tenso, cor-
objetivo permitir que shields acoplados a Ardui- rente e resistncia. O lado esquerdo do diagrama
nos de 3V, como o Arduino Due, detectem a tenso mostra um circuito de encanamento em que a
Um passeio pelo Arduino

na qual o Arduino opera. parte superior do diagrama est mais elevada (em
altura) do que a parte inferior. Nesse caso, a ten-
O prximo pino o Reset. Ele tem a mesma funo do
dncia natural a gua escoar de cima para baixo
boto Reset (inicializar) do Arduino. Da mesma forma
no diagrama. Dois fatores determinam o volume
que reinicializamos um computador PC, inicializamos
de gua que est passando por um ponto qualquer
o microcontrolador. Essa inicializao obriga o micro-
do circuito durante um dado intervalo (corrente):
controlador a comear a execuo de seu programa
desde o incio. O pino Reset permite que voc iniciali- A altura da gua (ou, se preferir, a presso pro-
ze o microcontrolador aplicando momentaneamente duzida pela bomba). Em eletrnica, isso equi-
uma tenso de nvel lgico alto (+5V) a esse pino.
captulo 2

vale tenso.
Os demais pinos dessa seo fornecem diferentes A resistncia oferecida ao fluxo em razo do es-
tenses (3,3V, 5V, GND e 9V), como indicado. O treitamento do encanamento.

21

Monk_02.indd 21 06/12/13 16:22


Corrente 5 metros 5V

Corrente (I)

Bomba Resistncia Resistncia (R)


ao fluxo

0V
0 metros

Figura 2-2 A lei de Ohm.


Fonte: do autor.

Quanto mais potente a bomba, maior ser a altu- so muito tolerantes a algum excesso acidental
ra alcanada pelo bombeamento da gua e maior que venha a ocorrer.
ser a corrente que fluir no sistema. Por outro
lado, quanto maior a resistncia oferecida pelo en- Retornando aos pinos de potncia do nosso Ardui-
canamento, maior ser a corrente. no, podemos ver que a placa de Arduino fornece
tenses teis de 3,3V e 5V. Se o Arduino for alimen-
No lado direito da Figura 2-2, podemos ver o cir- tado com uma tenso mais elevada atravs do jack
cuito eltrico equivalente ao nosso encanamento. de alimentao eltrica, ento essa tenso tam-
Nesse caso, a corrente , na realidade, uma medida bm estar disponvel no pino Vin (tenso de en-
de quantos eltrons esto passando por um ponto trada). Podemos usar qualquer uma dessas fontes
durante um segundo. E, realmente, a resistncia para produzir uma corrente, desde que tomemos o
a resistncia ao fluxo de eltrons. cuidado de no fazer um curto-circuito (resistncia
nula ao fluxo). Se isso ocorresse, uma corrente po-
Em vez de altura ou presso, temos o conceito de
tencialmente elevada poderia surgir e causar da-
tenso. A parte de baixo do diagrama est em 0V,
nos. Em outras palavras, necessrio ter certeza de
ou terra, e a parte de cima do diagrama mostra o
que a resistncia de qualquer coisa ligada fonte
valor de 5V. Desse modo, a corrente (I) que circula
de alimentao eltrica tem resistncia suficiente
a diferena de tenso (5) dividida pela resistn-
para impedir que circule uma corrente demasia-
cia (R).
damente elevada. Assim como devemos aplicar
A lei de Ohm costuma ser escrita como V = IR. Nor- corretamente as tenses, cada um desses pinos de
malmente, conhecemos V e queremos calcular tenso admitir um valor mximo de corrente. Para
30 projetos com Arduino

R ou I. Para isso, alteramos a equao e obtemos o pino de 3,3V, essa corrente 50 mA (milsimos
I = V/R ou R = V/I. de ampere) e, apesar de no estar declarado na es-
pecificao do Arduino, esse valor provavelmente
Quando conectamos coisas ao Arduino, muito fica em torno de 300 mA para o pino de 5V.
importante fazer alguns clculos usando a lei de
Ohm. Sem esses clculos, o Arduino poder ser As duas conexes GND so idnticas. bom dispor
danificado se voc exigir uma corrente elevada de- de diversos GNDs para ligar coisas. De fato, h ou-
mais. No entanto, geralmente as placas de Arduino tro pino de conexo na parte de cima da placa.

22

Monk_02.indd 22 06/12/13 16:22


Essas conexes podem fornecer 40 mA com 5V.
Entradas analgicas Isso mais do que suficiente para acender um LED
comum, mas insuficiente para acionar direta-
O prximo conjunto de pinos de conexo deno-
mente um motor eltrico.
minado Analog In 0 to 5 (Entradas analgicas 1 a
5). Esses seis pinos podem ser usados para medir a Como exemplo, vamos ver como conectar um LED
tenso aplicada em cada um deles, permitindo que a um desses pinos digitais. Para isso, vamos voltar
esses valores possam ser usados em um sketch. ao Projeto 1 do Captulo 1.
Observe que mediremos uma tenso e no uma
corrente. Como essas entradas tm uma resistn- Para lembrar, a Figura 2-3 mostra o diagrama es-
cia interna muito elevada, a corrente que entra e quemtico do acionamento do LED que usamos no
vai para a terra muito pequena. Captulo 1. Se o LED no fosse usado com o resistor
mas fosse ligado diretamente entre o pino 12 e o
Mesmo que sejam entradas analgicas, esses pinos pino GND, ento, quando voc ligasse (5V) o pino
tambm podem ser usados como entradas ou sa- digital 12, voc queimaria o LED, destruindo-o.
das digitais, mas, por default,* essas entradas so
analgicas. Isso ocorre porque os LEDs tm uma resistncia
muito baixa. Isso causar uma corrente muito ele-
Diferente do Uno, o Leonardo tambm pode usar vada, a no ser que sejam protegidos por meio de
os pinos digitais 4, 6, 8, 9, 10 e 12 como entradas um resistor para limitar a corrente.
analgicas.
Um LED precisa em torno de 10 mA para brilhar de
forma razovel. O Arduino pode fornecer 40 mA, de
modo que no haver problema desde que esco-
Conexes digitais lhamos um valor adequado de resistor.
Agora passaremos para a barra de conexo da par-
te de cima, comeando pelo lado direito (Figura Independentemente de quanta corrente circula
2-1). Aqui encontramos pinos denominados Digi- em um LED, ele apresenta a propriedade interes-
tal 0 to 13 (Digital 0 a 13). Eles podem ser usados sante de sempre haver em torno de 2V entre seus
como entradas ou como sadas. Quando usados terminais. Podemos usar esse fato e a lei de Ohm
como sadas, eles se comportam como as tenses
de alimentao eltrica, discutidas anteriormente, Pino digital 12
exceto que agora todas so de 5V e podem ser liga-
das ou desligadas a partir de um sketch. Assim, se
Um passeio pelo Arduino

voc lig-las em seu sketch, elas ficaro com 5V. Se


LED
voc deslig-las, elas ficaro com 0V. Como no caso Vermelho
das conexes de alimentao eltrica, voc deve
R1
tomar cuidado para no ultrapassar as correntes Arduino
mximas permitidas.
270 V

* N. de T.: Por default uma expresso utilizada para indicar


captulo 2

uma situao que ser subentendida e adotada se nada hou-


GND
ver em contrrio. No caso, os pinos sero automaticamente
considerados analgicos porque nada foi declarado em con- Figura 2-3 LED e resistor em srie.
trrio, dizendo que os pinos so digitais. Fonte: do autor.

23

Monk_02.indd 23 06/12/13 16:22


para calcular o valor correto do resistor que dever O pino digital 13 tambm est ligado a um LED co-
ser usado. nhecido como LED L.

Sabemos que (pelo menos quando est ligado) o


pino de sada fornece 5V. Acabamos de dizer que, Microcontrolador
no LED, a queda de tenso ser 2V, sobrando 3V
Continuando o nosso passeio pela placa do Ar-
(5 2) para o resistor limitador de corrente. Que-
duino, o microcontrolador o dispositivo retan-
remos que a corrente no circuito seja 10 mA. Desse
gular preto com 28 pinos. Ele encaixado em um
modo, o valor do resistor dever ser
soquete do tipo DIL (dual-in-line), podendo ser
R = V/I substitudo facilmente. O microcontrolador de 28
R = 3V/10 mA pinos usado em um Arduino Uno o ATmega328.
A maior diferena entre o Uno e o Leonardo (Figura
R = 3V/0,01 A
2-4) que o Leonardo tem um microcontrolador
R = 300 ohms soldado de forma permanente na superfcie da
placa. Isso dificulta muito a substituio do micro-
Os resistores esto disponveis em valores padro-
controlador quando deixa de funcionar.
nizados. O valor mais prximo de 300 ohms 270
ohms. Isso significa que, em vez de 10 mA, a cor- O Leonardo funciona com uma verso diferente de
rente ser, na realidade, microcontrolador. No Leonardo, o circuito de inter-
face USB faz parte do microcontrolador, ao passo
I = V/R
que, no Uno, esse circuito externo.
I = 3/270
I = 11,111 mA Assim, a placa do Leonardo tem menos compo-
nentes e, por essa razo, custa menos. A Figura 2-5
Esses valores no so cruciais e, provavelmente, o mostra um diagrama de blocos com as caractersti-
LED estaria igualmente bem com qualquer valor cas do microcontrolador ATmega328.
entre 5 e 30 mA. Assim, 270 ohms funcionariam
to bem quanto 220 ou 330 ohms. O corao, ou talvez mais adequadamente o cre-
bro, do dispositivo a unidade central de proces-
Podemos tambm configurar um desses pinos samento (UCP). Ela controla tudo que acontece
digitais como entrada. Nesse caso, ele funcio- dentro do dispositivo. A UCP busca as instrues
nar de forma similar a uma entrada analgica, de programa armazenadas na memria flash e as
embora indique apenas se a tenso no pino est executa. Isso pode significar buscar dados na me-
acima de um determinado limiar (cerca de 2,5V) mria de trabalho (RAM), modific-los e depois
ou no. armazen-los de volta. Pode tambm significar al-
terar as sadas digitais de 0V para 5V.
Alguns dos pinos digitais (3, 5, 6, 9, 10 e 11) so
acompanhados pelas letras PWM. Eles podem ser A memria programvel apenas de leitura eletri-
usados para fornecer uma sada varivel em vez de camente apagvel (EEPROM*) similar memria
30 projetos com Arduino

simplesmente 5V ou nada. flash por no ser voltil. Isso significa que voc pode
desligar e ligar o dispositivo sem que ele esquea o
Na Figura 2-1, no lado esquerdo da barra de pinos que est armazenado na EEPROM. Se o objetivo da
superior, h outro pino de conexo GND e um pino
denominado AREF, que pode ser usado para ajus-
tar a faixa de leitura das entradas analgicas. Neste * N. de T.: A sigla EEPROM vem da expresso Electrically era-
livro, ele no ser usado. sable programmable read only memory.

24

Monk_02.indd 24 06/12/13 16:22


Figura 2-4 O Arduino Leonardo.
Fonte: do autor.

memria flash armazenar instrues de programa


UART (interface serial de dados) (dos sketches), o da EEPROM armazenar dados
que voc no quer perder no caso de ocorrer uma
RAM inicializao (Reset) ou falta de energia eltrica.
2 Kbytes Memria
(memria de Flash 32 Kbytes O microcontrolador do Leonardo similar, ex-
Um passeio pelo Arduino

trabalho) ceto que sua RAM tem 2,5 quilobytes em vez de


2 quilobytes.

EEPROM
1 Kbytes
(memria
UCP Outros componentes
no voltil) esquerda e um pouco acima do microcontrola-
dor h um componente retangular prateado. um
Portas entrada/sada
oscilador de cristal de quartzo. Ele oscila 16 mi-
lhes de vezes por segundo e, em cada uma dessas
captulo 2

Figura 2-5 O diagrama de blocos do ATmega328. oscilaes, o microcontrolador pode executar uma
Fonte: do autor. operao como soma, subtrao, etc.

25

Monk_02.indd 25 06/12/13 16:22


direita e um pouco acima do microcontrolador est seu visual excepcionalmente bonito. Inspirados
o conector de programao serial (conector ICSP). Ele em sua aparncia de relgio, ns o usaremos no
oferece um outro meio de programar o Arduino sem Projeto 29 (Relgio com Lilypad).
usar a porta USB. Entretanto, como j dispomos de
uma conexo USB e software para us-la de forma No outro extremo do espectro est o Arduino
conveniente, ns no faremos uso do conector ICSP. Mega. Essa placa tem um processador mais rpido,
com mais memria e com um nmero maior de pi-
esquerda na parte de cima da placa, prximo do nos de entrada e sada.
conector USB, est o circuito integrado de interface
USB. Ele converte os nveis dos sinais USB padroni- De forma engenhosa, o Arduino Mega tambm
zados em nveis que podem ser usados diretamen- pode usar shields construdos para o Uno e o Leo-
te pela placa do Arduino. nardo, os quais so encaixados na frente do Mega
de modo tal que permite acesso sua barra dupla
adicional de pinos de conexo. Somente os proje-
tos mais exigentes realmente necessitam de um
A famlia Arduino Arduino Mega.
til conhecer um pouco as diversas placas de Ar-
Prosseguindo, temos o Arduino Due. Essa placa de
duino. Usaremos o Uno ou Leonardo na maioria de
Arduino tem o mesmo tamanho da placa do Ardui-
nossos projetos. Entretanto, tambm trabalhare-
no Mega, mas tem um processador muito mais po-
mos um pouco com o Arduino Lilypad, uma placa
tente, com 96 quilobytes de RAM e com 512 mega-
bem interessante.
bytes de memria flash. Seu relgio funciona em
O Lilypad (Figura 2-6) uma placa de Arduino de 84 MHz em vez de em 16 MHz como no Uno.
pouca espessura que pode ser costurada nas ves-
timentas para ser usada em aplicaes conhecidas
como computao vestvel (wearable computing). A linguagem C
Como ele no tem uma conexo USB, e voc deve
usar um adaptador separado para program-lo. O Muitas linguagens so usadas para programar os
microcontroladores, desde a linguagem Assembly,
voltada ao hardware, at as linguagens grficas de
programao, como Flowcode. O Arduino localiza-se
em algum lugar entre esses dois extremos e usa a lin-
guagem de programao C. Entretanto, ele faz uma
simplificao na linguagem C, ocultando parte de
sua complexidade. Isso facilita comear a programar.

A linguagem C, em termos de computao, uma


antiga e venervel linguagem. Ela bem adequa-
da programao de microcontrolador porque foi
30 projetos com Arduino

inventada em uma poca em que um computador


tpico, comparado com os monstros atuais, tinha
muito poucos recursos.

fcil aprender a linguagem C. Os programas cria-


dos com ela podem ser compilados, obtendo-se um
Figura 2-6 O Arduino Lilypad. cdigo de mquina eficiente que ocupa um espao
Fonte: do autor. pequeno na memria limitada do nosso Arduino.

26

Monk_02.indd 26 06/12/13 16:22


tem um pequeno LED j soldado e conectado ao
Um exemplo pino 13. Para fazer o LED piscar, ficaremos trocando
a tenso desse pino entre os valores 0V e 5V.
Agora vamos examinar o sketch do Projeto 1 mais
detalhadamente. A listagem desse sketch para fa- Daremos um nome para o pino de modo que seja
zer piscar um LED mostrada a seguir. Voc pode fcil mud-lo e renome-lo. Voc pode ver no ske-
ignorar todas as linhas que comeam com // ou tch que ns nos referimos ao pino ledPin. poss-
blocos de linhas que comeam com /* e terminam vel que voc tenha preferido usar o pino 12 e o LED
com */, porque so linhas de comentrio que no externo que foram utilizados com seu protoboard
tm efeito algum sobre o programa e esto no ske- no Captulo 1. Mas, por enquanto, assumiremos
tch simplesmente para fornecer informaes sobre que voc est utilizando o LED da placa conectado
o programa. ao pino 13.

int ledPin = 13; Voc pode notar que ns no escrevemos simples-


// LED conectado ao pino digital 13
mente (com letras minsculas)
void setup()
{
pinMode(ledPin, OUTPUT); led pin = 13;
}
Isso assim porque os compiladores so muito
void loop()
{
exigentes e precisos sobre a forma como os pro-
digitalWrite(ledPin, HIGH); gramas so escritos. Qualquer nome usado em um
// ligar o LED programa no pode conter espaos em branco.
delay(1000); Por essa razo, seguimos uma conveno em que
// esperar um segundo
digitalWrite(ledPin, LOW);
todas as palavras iniciam com letra maiscula (me-
// desligar o LED nos a primeira palavra) e sem espao entre elas.
delay(1000); Isso nos d
// esperar um segundo
} ledPin = 13;

Tambm uma boa ideia incluir comentrios para Agora, a palavra ledPin o que se denomina uma
descrever um trecho complicado de cdigo ou varivel. Quando voc usa uma varivel pela primei-
qualquer coisa que exija alguma explicao. ra vez em um sketch, voc deve informar ao compu-
tador qual o tipo dessa varivel. Pode ser int, como
O ambiente de desenvolvimento do Arduino utiliza
aqui, ou float, ou algum outro tipo entre diversos
algo denominado compilador, que converte o pro-
Um passeio pelo Arduino

que sero descritos mais adiante neste captulo.


grama escrito em C para o cdigo de mquina que
ser executado no microcontrolador. Uma varivel int do tipo integer isto , um n-
mero inteiro , que exatamente o que precisa-
Na primeira linha de cdigo, temos
mos quando nos referimos a um pino em particular
int ledPin = 13; do Arduino. Afinal, no h pino 12,5. Por essa razo,
no seria adequado usar um nmero de ponto flu-
Essa linha de cdigo d um nome ao pino de sada tuante (float).
digital que usaremos para conectar o LED. Se voc A sintaxe de uma declarao de varivel
captulo 2

examinar com cuidado a placa do Arduino, ver o


pino de conexo 13 entre GND e o pino 12 na barra type variableName = value;
superior de pinos de conexo. A placa do Arduino

27

Monk_02.indd 27 06/12/13 16:22


Temos primeiro o tipo (int), em seguida, um espa- sketch deve conter uma funo setup. As linhas
o em branco e um nome de varivel (ledPin), que de cdigo dentro da funo que esto dentro de
segue a conveno explicada antes. Depois temos chaves sero executadas na ordem em que esto
um sinal de igual, seguido de um valor e, finalmen- escritas. Nesse caso, h apenas a linha que comea
te, um ponto e vrgula para indicar o final da linha: com pinMode.

int ledPin = 13; Um bom ponto de partida para um projeto novo


copiar esse exemplo e, ento, modific-lo de acor-
Como foi mencionado, o compilador rigoroso do com suas necessidades.
com o modo de escrever um sketch. Por isso, se
Neste momento, no nos preocuparemos muito
voc esquecer o ponto e vrgula, aparecer uma
com funes. preciso saber apenas que a funo
mensagem de erro durante a compilao do
setup executada sempre que o Arduino for ini-
sketch. Tente remover o ponto e vrgula e clique
cializado (reset), incluindo quando a alimentao
no boto Play. Voc dever ver uma mensagem
eltrica for ligada na primeira vez. Tambm ser
como esta:
executada sempre que um novo sketch for transfe-
error: expected unqualified-id before rido para o Arduino.
numeric constant
Nesse caso, a nica linha de cdigo da funo
setup
Isso no exatamente uma mensagem clara do
tipo voc esqueceu o ponto e vrgula. As men- pinMode(ledPin, OUTPUT);
sagens de erro costumam ser to confusas como // configurar o pino digital como sendo de
essa. sada

O compilador muito mais tolerante em relao a


Essa linha deve ser entendida como um coman-
caracteres do tipo espaos em branco, isto , es-
do para o Arduino usar o pino ledPin como uma
pao, tabulao e caractere de retorno. Assim, se
sada digital. Se tivssemos uma chave conectada
voc omitir o espao antes ou depois do sinal =,
a ledPin, poderamos configurar o pino como en-
a compilao ainda ser bem-sucedida. O uso de
trada usando
espaos e tabulaes (tabs) facilita a leitura do c-
digo e, se voc adotar uma conveno e sempre pinMode(ledPin, INPUT);
formatar o seu cdigo da mesma forma padroni-
zada, voc facilitar muito o entendimento do seu Entretanto, poderamos denominar a varivel com
cdigo por outras pessoas. algo mais elucidativo, como switchPin (chavePino).
As linhas seguintes do sketch so As palavras INPUT e OUTPUT (entrada e sada) so
o que denominamos constantes. Na realidade,
void setup()
// executado uma vez, quando o sketch dentro da linguagem C, elas so definidas como
iniciado nmeros. INPUT pode ser definida como 0 e OU-
30 projetos com Arduino

{ TPUT, como 1, mas voc nunca precisa saber qual


pinMode(ledPin, OUTPUT);
nmero usado, porque voc sempre se refere a
// configurar o pino digital como sendo de
sada elas como INPUT e OUTPUT. Mais adiante neste ca-
} ptulo, veremos mais duas constantes, HIGH e LOW
(alto e baixo), que so usadas quando atribumos
Isso o que se denomina uma funo. Nesse caso, nveis alto (+5V) ou baixo (0V) a um pino digital,
a funo denominada setup (inicializao). Todo respectivamente.

28

Monk_02.indd 28 06/12/13 16:22


A prxima seo de cdigo outra funo que
todo sketch de Arduino deve ter, sendo denomi- Variveis e tipos de dados
nada loop:
J encontramos a varivel ledPin e a declaramos
void loop()
como sendo do tipo int. A maioria das variveis
{ que voc usar em seus sketches ser provavel-
digitalWrite(ledPin, HIGH); mente do tipo int. Uma varivel int armazena
// ligar o LED um nmero dentro do intervalo de 32.768 a
delay(1000);
// esperar um segundo +32.767. Cada nmero armazenado com esse
digitalWrite(ledPin, LOW); tipo utiliza apenas 2 bytes dos 1024 disponveis
// desligar o LED para armazenamento em um Arduino. Se esse
delay(1000); intervalo no for suficiente, voc poder usar
// esperar um segundo
} uma varivel do tipo long (longa), que utiliza 4
bytes para cada nmero. Uma varivel long per-
mite um intervalo de valores de 2.147.483.648
A funo loop (lao de repetio) ser executada
a +2.147.483.647.
repetidas vezes indefinidamente at que o Ardui-
no seja desligado. Em outras palavras, to logo Na maioria das vezes, uma varivel int estabelece
termine a execuo de seus comandos, ela volta a um bom equilbrio entre preciso e uso de memria.
repeti-los. Lembre-se de que uma placa de Ardui-
no pode executar 16 milhes de comandos por Se voc iniciante em programao, sugirimos
segundo. Dessa forma, as coisas dentro do lao que voc use int em quase tudo e que, gradativa-
ficaro se repetindo indefinidamente se voc as- mente, amplie o seu repertrio de tipos de dados
sim o permitir. medida que sua experincia crescer.

Neste caso, o que queremos que o Arduino faa Outros tipos de dados disponveis para voc esto
continuamente ligar o LED, esperar um segundo, resumidos na Tabela 2-1.
desligar o LED e, ento, esperar mais um segundo.
Algo a ser considerado que, se os tipos de dados
Quando terminar de fazer isso, a funo repetir
ultrapassarem as suas faixas de valores vlidos, coi-
tudo de novo, comeando por ligar o LED. Dessa
sas estranhas acontecero. Assim, se voc tiver uma
forma, o lao se repetir para sempre.
varivel do tipo byte com o valor 255 e adicionar 1,
Agora a sintaxe dos comandos digitalWrite e delay o resultado ser 0. Mais surpreendente, se voc ti-
(escrita digital e retardo) parecer mais familiar. ver uma varivel int com o valor 32.767 e adicionar
Embora possamos pensar neles como comandos 1, o resultado ser o valor negativo 32.768.
Um passeio pelo Arduino

que so enviados para a placa do Arduino, eles


At voc conhecer bem esses diferentes tipos de
so, na realidade, funes como setup e loop, mas
dados, recomendamos que voc fique com o tipo
agora eles tm o que se denomina parmetros.
int porque funciona com praticamente qualquer
Esses parmetros so colocados dentro de parn-
coisa.
teses e separados por vrgulas. No caso de digi-
talWrite, dizemos que recebe dois parmetros: o
pino do Arduino onde ser feita a escrita e o valor Aritmtica
que ser escrito.
No comum, em um sketch, precisar fazer opera-
captulo 2

No nosso exemplo, passamos os parmetros de es aritmticas complexas. Ocasionalmente, voc


ledPin e HIGH para ligar o LED e, ento, ledPin e precisar ajustar a faixa de leitura de, digamos,
LOW para deslig-lo novamente. uma entrada analgica para convert-la em tem-

29

Monk_02.indd 29 06/12/13 16:22


Tabela 2-1 Tipos de dados em C
Memria
Tipo (bytes) Intervalo Observaes
boolean 1 Verdadeiro ou falso (0 ou 1)
char 1 128 at +128 Usado para representar um cdigo de ca-
ractere ASCII (por exemplo, A represen-
tado como 65). Normalmente, nesse caso,
os nmeros negativos no so usados.
byte 1 0 at 255
int 2 32.768 at +32.767
unsigned int 2 0 at 65.536 Pode ser usado para ter uma preciso
extra quando no h necessidade de n-
meros negativos. Use com cautela, porque
as operaes aritmticas com o tipo int
podem produzir resultados inesperados.
long 4 2.147.483.648 at Necessrio apenas para representar n-
2.147.483.647 meros muito grandes.
unsigned long 4 0 at 4.294.967.295 Veja unsigned int.
float 4 3,4028235E+38 at
+3,4028235E+38
double 4 Como float Normalmente, seriam 8 bytes com uma
preciso mais elevada que float e um in-
tervalo de representao maior. No Ardui-
no, entretanto, o mesmo que float.
Fonte: do autor.

peratura ou, mais comumente, acrescentar 1 a uma como a frase muito usada Hello World (Al Mun-
varivel de contagem. do). No mundo do Arduino, h duas situaes em
que voc pode querer usar strings: quando voc
Quando voc realiza um clculo, voc precisa atri- est escrevendo mensagens para exibir em um
buir o resultado desse clculo a uma varivel. display LCD ou quando voc est enviando dados
As linhas seguintes de cdigo contm duas atribui- seriais de texto por meio da conexo USB.
es. A primeira atribui varivel y o valor 50, e a Strings so criadas usando a seguinte sintaxe:
segunda atribui varivel x o valor de y + 100.
char* message = "Hello World";
y = 50;
30 projetos com Arduino

x = y + 100;
A palavra char* indica que a varivel message
(mensagem) um apontador de caractere. Por en-
quanto, no precisamos entender bem como isso
Strings funciona. Esse assunto voltar a ser tratado mais
Quando os programadores falam de strings, eles adiante neste livro, quando olharmos como fazer
esto se referindo a uma sequncia de caracteres, interface com displays LCD de texto.

30

Monk_02.indd 30 06/12/13 16:22


Assim, um exemplo para ligar o LED se a tempera-
Comandos condicionais tura for menor que 15 ou maior que 20 ser:
Os comandos condicionais so um meio de tomar if ((temperature < 15) || (temperature
decises em um sketch. Por exemplo, o seu sketch > 20))
poder ligar o LED se o valor da varivel tempera- {
tura cair abaixo de um certo limiar. digitalWrite(ledPort, HIGH);
}
O cdigo para isso :
Frequentemente, quando usamos o comando if,
if (temperature < 15) podemos querer fazer uma coisa se a condio
{
for verdadeira e outra diferente se for falsa. Voc
digitalWrite(ledPort, HIGH);
} pode fazer isso usando a palavra-chave else (se-
no) como mostrado no exemplo a seguir. Obser-
ve o uso de parnteses aninhados para expressar
A linha ou linhas de cdigo entre as chaves sero
claramente os argumentos que participam da
executadas apenas se a condio aps a palavra-
operao ou.
-chave if (se) for verdadeira.
if ((temperature < 15) ||
A condio tem que estar contida dentro de pa-
(temperature > 20))
rnteses, e o que os programadores denomi- {
nam uma expresso lgica. Uma expresso lgica digitalWrite(ledPort, HIGH);
como uma expresso matemtica que sempre }
else
deve ter um valor entre dois possveis: verdadeiro
{
ou falso. digitalWrite(ledPort, LOW);
}
A seguinte expresso ser verdadeira se o valor da
varivel temperatura for menor que 15:

(temperature < 15)


Resumo
Assim como <, voc tem: >, <= e >=. Para ver se Neste captulo, exploramos o hardware do Arduino
dois nmeros so iguais, voc pode usar ==, e para e revisamos os nossos conhecimentos de eletrni-
testar se no so iguais, voc pode usar !=. ca elementar.

Desse modo, a expresso a seguir retornaria o va- Iniciamos tambm a nossa explorao da lingua-
Um passeio pelo Arduino

lor verdadeiro se a varivel temperatura tivesse um gem C de programao. No se preocupe se voc


valor que fosse qualquer coisa exceto 15: achou um pouco difcil. Quando no se conhece
muito a eletrnica, h muito para ser aprendido.
(temperature != 15) Mesmo que tenha sido explicado como tudo fun-
ciona, voc deve ficar completamente vontade
Voc tambm pode construir condies comple- para comear de imediato a construo dos pro-
xas usando os denominados operadores lgicos. Os jetos e deixar a teoria para depois quando voc j
principais operadores so && (e) e || (ou). estiver mais bem preparado.
captulo 2

31

Monk_02.indd 31 06/12/13 16:22


Se voc quiser aprender mais sobre a programao No Captulo 3, iremos nos deparar com a progra-
do Arduino em C, consulte o livro Programao mao do nosso Arduino e embarcaremos em al-
com Arduino: comeando com sketches (publicado guns projetos mais srios.
pela Bookman Editora), deste autor.
30 projetos com Arduino

32

Monk_02.indd 32 06/12/13 16:22


captulo 3

Projetos com LED


Neste captulo, comearemos a construir alguns projetos baseados em LED. O
hardware ser bem simples, para que possamos nos concentrar na programao
do Arduino. A programao de microcontroladores um assunto que exige
criatividade e um conhecimento profundo de como suas partes (fusveis,
registradores, etc.) funcionam. Em parte, isso decorre de os microcontroladores
modernos permitirem configuraes quase infinitas. O Arduino padroniza
a sua configurao de hardware, o que, custa de uma pequena perda de
flexibilidade, facilita muito sua programao.

Objetivos deste captulo


Construir projetos baseados em LED.

Ensinar a utilizar os comandos loop e array.

Aplicar LEDs Luxeon de alta potncia.

Propor a montagem de um Shield e acopl-lo a uma placa Arduino.

Monk_03.indd 33 06/12/13 16:25


Projeto 2 partida. Assim, complete o Projeto 1 antes de co-
mear este projeto.
Sinalizador de SOS em
Se voc ainda no o fez, baixe o cdigo do projeto
cdigo Morse de www.arduinoevilgenius.com. Em seguida, voc
O cdigo Morse era um mtodo vital de comunica- pode carregar o sketch completo do Projeto 1 que
o nos sculos XIX e XX. A codificao de letras na est no Arduino Sketchbook e, em seguida, transferir
forma de uma sequncia de pontos e traos significa- o Sketch para a placa (veja o Captulo 1). Entretanto,
va que o cdigo Morse podia ser enviado atravs de se modificar o sketch do Projeto 1, como ser feito a
fios telegrficos, enlaces de rdio e sinalizao lumi- seguir, voc compreender melhor o Arduino.
nosa. As letras S.O.S (Save Our Souls, ou Salve Nossas
Almas)* ainda so reconhecidas como um sinal inter- Modifique a funo loop do Projeto 1 de modo que
nacional usado em situaes de emergncia. ela fique como mostra a seguir. Observe que o uso
de cortar e colar altamente recomendvel nesse
Neste projeto, faremos o nosso LED emitir a se- tipo de situao.
quncia S.O.S repetindo-a indefinidamente.
void loop()
Voc precisar dos mesmos componentes do {
Projeto 1. digitalWrite(ledPin, HIGH);
// S (...) primeiro ponto
delay(200);
COMPONENTES E EQUIPAMENTO
digitalWrite(ledPin, LOW);
Descrio Apndice delay(200);
digitalWrite(ledPin, HIGH);
Arduino Uno ou Leonardo m1/m2
// segundo ponto
D1 LED vermelho de 5 mm s1 delay(200);
R1 Resistor de 270 V e 1/4 W r3 digitalWrite(ledPin, LOW);
delay(200);
Sero adequados um LED qualquer e um re- digitalWrite(ledPin, HIGH);
sistor de 270 ohms comum. // terceiro ponto
Nenhuma ferramenta, exceto um alicate de delay(200);
bico ou de corte, ser necessria. digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
// O (---) primeiro trao
delay(500);
Hardware digitalWrite(ledPin, LOW);
delay(500);
O hardware exatamente o mesmo do Projeto 1. digitalWrite(ledPin, HIGH);
Assim, voc pode simplesmente inserir o resistor e // segundo trao
o LED diretamente nos pinos de conexo do Ardui- delay(500);
no ou usar um protoboard (veja o Captulo 1). digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin, HIGH);
30 projetos com Arduino

// terceiro trao
Software delay(500);
digitalWrite(ledPin, LOW);
Em vez de comear a escrever o sketch do zero, delay(500);
usaremos o cdigo do Projeto 1 como ponto de digitalWrite(ledPin, HIGH);
// S (...) primeiro ponto
delay(200);
* N. de T.: Em cdigo Morse, S = . . . e O = - - -. Portanto, a digitalWrite(ledPin, LOW);
sequncia . . . - - - . . . a codificao de SOS.

34

Monk_03.indd 34 06/12/13 16:25


delay(200);
Aps a chave final da funo loop, acrescente o se-
digitalWrite(ledPin, HIGH); guinte cdigo:
// segundo ponto
delay(200); void flash(int duration)
digitalWrite(ledPin, LOW); {
delay(200); digitalWrite(ledPin, HIGH);
digitalWrite(ledPin, HIGH); delay(duration);
// terceiro ponto digitalWrite(ledPin, LOW);
delay(200); delay(duration);
digitalWrite(ledPin, LOW); }
delay(1000);
// esperar 1 segundo antes de iniciarmos
//novamente Agora modifique a funo loop de modo que fique
como a seguir:
}
void loop()
{
Esse sketch funcionar perfeitamente. Fique flash(200); flash(200); flash(200);
vontade para test-lo e fazer alteraes. No pa- // S
raremos por aqui. Vamos modificar esse Sketch delay(300);
// seno os flashes luminosos ocorrero ao
para melhor-lo e, ao mesmo tempo, torn-lo // mesmo tempo
mais curto. flash(500); flash(500); flash(500);
// O
Podemos reduzir o tamanho do sketch criando flash(200); flash(200); flash(200);
a nossa prpria funo, que substituir por uma // S
delay(1000);
nica linha as quatro linhas de cdigo usadas para
// esperar 1 segundo antes de iniciarmos
fazer piscar o LED. // novamente
}

LISTAGEM DO PROJETO 2
int ledPin = 13;

void setup() // executado uma vez quando o sketch iniciado


{
pinMode(ledPin, OUTPUT); // configurar o pino digital como sada
}
Projetos com LED

void loop()
{
flash(200); flash(200); flash(200); // S
delay(300); // seno os flashes luminosos ocorrero ao mesmo tempo
flash(500); flash(500); flash(500); // O
flash(200); flash(200); flash(200); // S
delay(1000); // esperar 1 segundo antes de iniciarmos
// novamente
}
captulo 3

void flash(int duration)


(continua)

35

Monk_03.indd 35 06/12/13 16:25


LISTAGEM DO PROJETO 2 continuao
{
digitalWrite(ledPin, HIGH);
delay(duration);
digitalWrite(ledPin, LOW);
delay(duration);
}

A listagem completa final est mostrada na Lista- O comando for como uma funo loop que re-
gem do Projeto 2. cebe trs argumentos. Aqui, os argumentos so
separados por pontos e vrgulas em vez de por vr-
Dessa forma, o sketch fica bem menor e mais fcil gulas comuns. Isso algo prprio da linguagem C.
de ser lido. Se voc errar, o compilador logo o alertar.

Aps a palavra-chave for, a primeira coisa dentro


Juntando tudo dos parnteses uma declarao de varivel. Esse
Com isso, conclumos o Projeto 2. Agora, examina- argumento especifica uma varivel que ser usada
remos mais alguns fundamentos de programao como varivel de contagem, atribuindo-lhe um va-
do Arduino antes de passarmos para o Projeto 3, lor inicial no caso, o valor 0.
em que usaremos o mesmo hardware para escre-
ver um tradutor de cdigo Morse. Assim, podere- A segunda parte uma condio que deve ser ver-
mos digitar frases no nosso computador e v-las dadeira para permanecermos dentro do for repe-
piscando como cdigo Morse. No Projeto 4, au- tindo comandos. Nesse caso, ficaremos dentro do
mentaremos o brilho, substituindo o LED vermelho for enquanto a varivel i for menor que 100. Logo
por um LED Luxeon de alta potncia. que i for igual ou maior que 100, deixaremos de fa-
zer as coisas que esto dentro do for.
Antes, precisamos de mais um pouco de teoria
para compreender os Projetos 3 e 4. O terceiro argumento mostra o que deve ser feito
a cada vez que todos os comandos dentro do for
forem executados. Nesse caso, a varivel deve ser
incrementada de 1 de modo que, aps 100 vezes,
Loops ela deixe de ser menor que 100 fazendo que se saia
Um loop (lao de repetio) permite que um grupo de dentro do for.
de comandos seja repetido um certo nmero de
vezes ou at que alguma condio seja atingida. No Outra forma de fazer laos de repetio na lingua-
Projeto 2, para sinalizar um S, queramos que trs gem C usando o comando while (enquanto).
pontos fossem exibidos pelo LED. Nesse caso, no d Com esse comando, poderamos obter os mesmos
muito trabalho repetir trs vezes o comando de pis- resultados do exemplo anterior, como mostrado a
car. Entretanto, seria bem mais trabalhoso se tivsse- seguir:
30 projetos com Arduino

mos que fazer o LED piscar 100 ou 1.000 vezes. Nesse


int i = 0;
caso, podemos usar o comando for da linguagem C: while (i < 100)
{
for (int i = 0; i < 100; i ++) flash(200);
{ i ++;
flash(200); }
}

36

Monk_03.indd 36 06/12/13 16:25


A expresso dentro das chaves, aps a palavra- int durations[10];
-chave while, deve ser verdadeira para permane-
cermos dentro do while. Quando ela deixar de ser
Agora, poderemos modificar o nosso loop incluin-
verdadeira, o sketch executar os comandos que
do o array:
esto aps a chave final.
void loop()
As chaves so usadas para reunir comandos for-
// repetir indefinidamente
mando um grupo. Em programao, dizemos que {
esse grupo forma um bloco. for (int i = 0; i < 9; i++)
{
flash(durations[i]);
}
Arrays delay(1000);
// esperar 1 segundo antes de iniciarmos
Os arrays so uma forma de criar uma lista de // novamente
valores. As variveis que encontramos at ago- }
ra tinham apenas um nico valor, usualmen-
te um int. Por outro lado, um array contm um Uma vantagem bvia dessa abordagem a facilida-
conjunto ou lista de valores. Voc pode acessar de de alterar a mensagem simplesmente modifican-
qualquer um desses valores dando a sua posio do o array com as duraes. No Projeto 3, daremos
dentro da lista. um passo adiante no uso de arrays construindo um
sinalizador luminoso de cdigo Morse para uso geral.
A linguagem C, como a maioria das linguagens de
programao, comea a indexao dessas posies
com 0 em vez de 1. Isso significa que o primeiro
elemento , na realidade, o elemento zero. Projeto 3
Para ilustrar o uso de arrays, poderemos modificar Tradutor de cdigo Morse
o nosso exemplo de cdigo Morse incluindo um Neste projeto, usaremos o mesmo hardware dos
array com as duraes dos flashes luminosos do Projetos 1 e 2, mas escreveremos um novo sketch.
LED. Ento, poderemos usar um lao de for para Com esse sketch, poderemos digitar uma frase no
acessar cada um dos itens do array. nosso computador e a placa do Arduino ir con-
Primeiro, vamos criar um array do tipo int conten- vert-la em uma sequncia adequada de pontos e
do as duraes (durations): traos em cdigo Morse.

A Figura 3-1 mostra o tradutor de cdigo Morse em


int durations[] = {200, 200, 200, 500,
500, 500, 200, 200, 200} ao. Os contedos da caixa de mensagem esto
Projetos com LED

sendo sinalizados como pontos e traos no LED.


Voc indica que uma varivel contm um array Para isso, usaremos o que aprendemos sobre ar-
colocando [ ] aps o nome da varivel. Se voc rays e strings e aprenderemos algo sobre o envio
estiver dando valores aos contedos do array en- de mensagens do nosso computador para a placa
quanto voc o define, como no exemplo anterior, de Arduino atravs do cabo USB.
ento voc no precisar especificar o tamanho
do array. Se voc no estiver atribuindo os valores Para esse projeto, precisaremos dos mesmos com-
captulo 3

iniciais, ento voc precisar especificar o tama- ponentes dos Projetos 1 e 2. De fato, o hardware
nho do array colocando-o dentro dos colchetes. exatamente o mesmo. Iremos simplesmente modi-
Por exemplo, ficar o sketch do Projeto 1.

37

Monk_03.indd 37 06/12/13 16:25


Figura 3-1 Tradutor de cdigo Morse.
Fonte: do autor.

COMPONENTES E EQUIPAMENTO Tabela 3-1 Letras em cdigo Morse

Descrio Apndice A .- N -. 0 -----


Arduino Uno ou Leonardo m1/m2 B - O --- 1 .----
D1 LED vermelho de 5 mm s1 C -.-. P .--. 2 ..---
R1 Resistor de 270 V e 1/4 W r3 D -.. Q --.- 3 --
E . R .-. 4 .-
F ..-. S 5 ..
G --. T - 6 -.
Hardware H . U ..- 7 --
Em relao construo deste projeto, consulte I .. V - 8 ---..
Projeto 1 no Captulo 1. J .--- W .-- 9 ----.
K -.- X -..-
Voc pode simplesmente inserir o resistor e o LED
L .-.. Y -.--
diretamente nos conectores do Arduino ou pode
M -- Z --..
usar o protoboard (veja o Captulo 1). Voc tam-
bm pode mudar a varivel ledPin no sketch para Fonte: do autor.
que seja o pino 13. Desse modo, o prprio LED da
30 projetos com Arduino

placa do Arduino ser usado e no haver necessi- Algumas das regras do cdigo Morse postulam
dade de um componente extra. que a durao de um trao igual a trs vezes a
durao de um ponto, que a durao do intervalo
entre traos e/ou pontos igual durao de um
Software ponto, que a durao do intervalo entre duas letras
As letras em cdigo Morse esto mostradas na tem a mesma durao de um trao e, finalmente,
Tabela 3-1.

38

Monk_03.indd 38 06/12/13 16:25


que a durao do intervalo entre duas palavras completa dos caracteres do cdigo Morse, veja
tem a mesma durao de sete pontos. en.wikipedia.org/wiki/Morse_code.

Neste projeto, no vamos nos preocupar com a O sketch para isso est mostrado na Listagem do
pontuao, embora seja um exerccio interessan- Projeto 3. Uma explicao de seu funcionamento
te tentar inclu-la no sketch. Para uma lista mais ser dada a seguir.

LISTAGEM DO PROJETO 3
int ledPin = 12;

char* letters[] = // array de letras


{
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", // A-I
".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", // J-R
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.." // S-Z
};

char* numbers[] = // array de nmeros


{
"-----", ".----", "..---", "...--", "....-", ".....", "-....", // 0-6
"--...", "---..", "----." // 7-9
};

int dotDelay = 200; // durao de um ponto

void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}

void loop()
{
char ch;
if (Serial.available()) // h algo para ser lido pela USB?
{
ch = Serial.read(); // ler uma letra
if (ch >= 'a' && ch <= 'z')
{
flashSequence(letters[ch - 'a']);
}
Projetos com LED

else if (ch >= 'A' && ch <= 'Z')


{
flashSequence(letters[ch - 'A']);
}
else if (ch >= '0' && ch <= '9')
{
flashSequence(numbers[ch - '0']);
}
else if (ch == ' ')
captulo 3

{
delay(dotDelay * 4); // espao entre palavras
(continua)

39

Monk_03.indd 39 06/12/13 16:25


LISTAGEM DO PROJETO 3 continuao
}
}
}

void flashSequence(char* sequence)


{
int i = 0;
while (sequence[i] != NULL)
{
flashDotOrDash(sequence[i]);
i++;
}
delay(dotDelay * 3); // espao entre letras
}

void flashDotOrDash(char dotOrDash)


{
digitalWrite(ledPin, HIGH);
if (dotOrDash == '.')
{
delay(dotDelay);
}
else // deve ser um trao -
{
delay(dotDelay * 3);
}
digitalWrite(ledPin, LOW);
delay(dotDelay); // espao entre flashes de luz
}

Para gerar os pontos e traos, usaremos arrays de Serial.begin(9600);


strings. Temos dois arrays, um para as letras e outro
para os nmeros. Assim, para sabermos o cdigo,
Esse comando faz a placa do Arduino configurar
em pontos e traos, da primeira letra (A) do alfabe-
a velocidade de comunicao atravs da cone-
to, consultaremos a string letters[0] lembre-se de
xo USB para ser 9600 bauds. Isso no muito
que o primeiro elemento de um array o elemento
rpido, mas suficientemente rpido para as
0, no o elemento 1.
nossas mensagens em cdigo Morse. Tambm
A varivel dotDelay (pontoRetardo, ou seja, durao uma boa velocidade porque a velocidade que
de um ponto) deve ser definida. Desse modo, se o software do Arduino j tem definida no com-
quisermos fazer o nosso tradutor de cdigo Morse putador.
30 projetos com Arduino

piscar mais rpida ou lentamente, deveremos alte-


Na funo loop, verificamos repetidamente se al-
rar esse valor, porque todas as duraes so defini-
das como mltiplos da durao de um ponto. guma letra foi enviada atravs da conexo USB e se
ela deve ser processada. A funo Serial.available()
A funo setup muito similar s de nossos pro- (serial disponvel) do Arduino ser verdadeira se
jetos anteriores. Entretanto, desta vez, usaremos a houver um caractere que deve ser convertido em
porta USB para fazer a comunicao com o compu- cdigo Morse, e a funo Serial.read() (ler serial)
tador. Por isso, acrescentamos o comando fornecer o caractere, que atribudo a uma vari-

40

Monk_03.indd 40 06/12/13 16:25


vel denominada ch (de character, em ingls). Essa o LED e, antes de deslig-lo, usa um comando if
varivel foi definida dentro do loop. para aguardar o tempo necessrio corresponden-
te a um ponto simples, se o caractere for um pon-
A seguir, temos uma srie de comandos if que de- to, ou trs vezes essa durao, se o caractere for
terminam se o caractere uma letra maiscula, um trao.
uma letra minscula ou um espao separando
duas palavras. Examinando o primeiro comando if,
testamos se o valor do caractere maior ou igual Juntando tudo
ao valor de um a e menor ou igual ao valor de um
Carregue o sketch completo do Projeto 3, que est
z. Se isso for verdadeiro, poderemos achar a se-
no Sketchbook do software do Arduino, e baixe-o
quncia de traos e pontos que deve ser sinalizada
para a sua placa (veja o Captulo 1).
usando o array letters de letras. Esse array foi defi-
nido no incio do sketch. Para determinar a posio Para usar o tradutor de cdigo Morse, precisamos
dessa sequncia no array, subtramos o valor de a usar uma parte do software do Arduino denomi-
do valor do caractere que est na varivel ch. nada Serial Monitor (Monitor Serial). Essa janela
permite que voc digite mensagens que sero
Em um primeiro momento, pode parecer estra-
enviadas placa do Arduino e que voc possa ver
nho subtrair uma letra de outra, mas isso per-
qualquer mensagem que a placa do Arduino deci-
feitamente aceitvel na linguagem C. Assim, por
da enviar como resposta.
exemplo, a a 0, ao passo que d a 3. Por-
tanto, se a letra que chegar por meio da conexo A execuo do Serial Monitor iniciada clicando o
USB for f, deveremos calcular f a, que resulta- cone que est bem direita na Figura 3-2.
r 5. Esse valor dar a posio no array letters.
Acessando a posio letters[5], temos a string ..-.. O Serial Monitor (veja Figura 3-3) tem duas par-
que ser repassada para uma funo denominada tes. Em cima, h um campo no qual uma linha de
flashSequence.

A funo flashSequence trabalhar com cada uma


das partes da sequncia, fazendo o LED piscar si-
nalizando os pontos e traos. Strings na linguagem
C tm um cdigo especial no final para indicar o
seu final. Esse cdigo denominado NULL. Assim,
a primeira coisa que flashSequence faz definir
uma varivel denominada i. Ela indicar a posio
corrente na string que contm os pontos e traos, Figura 3-2 Iniciando a execuo do Serial Monitor.
Fonte: do autor.
comeando pela posio 0. O lao while ficar re-
Projetos com LED

petindo o processo at chegar ao fim da string.

Dentro do lao while, primeiro fazemos piscar o


ponto ou trao corrente usando uma funo que
ser discutida logo em seguida. Ento, somamos 1
a i e voltamos ao incio do while, repetindo a cada
vez o processo, para um ponto ou trao, at che-
garmos ao fim da string.
captulo 3

A ltima funo definida flashDotOrDash Figura 3-3 A janela do Serial Monitor.


(flashPontoOuTrao). Ela simplesmente acende Fonte: do autor.

41

Monk_03.indd 41 06/12/13 16:25


texto pode ser digitada e enviada placa quando
COMPONENTES E EQUIPAMENTO
voc clicar em Send (enviar) ou apertar Return
(ou Enter). Descrio Apndice
Arduino Uno ou Leonardo m1/m2
Abaixo, h uma rea maior na qual so exibidas D1 LED Luxeon de 1W s10
as mensagens vindas da placa do Arduino. di- R1 Resistor de 270 V e 1/4 W r3
reita, na parte de baixo, h uma janela na qual R2 Resistor de 4,7 V e 1/4 W r1
voc pode escolher, em uma lista, a velocidade
T1 BD139 transistor de potncia s17
com a qual os dados sero enviados. O que voc
Protoboard h1
selecionar aqui deve corresponder taxa de bau-
Fios de conexo (jumpers) h2
ds que voc especificou no incio do sketch que
Kit para Protoshield (opcional) m4
est na placa do Arduino. Usamos 9600, que o
valor default. Portanto, no h necessidade de
modificar aqui.

Portanto, tudo que precisamos fazer iniciar a Hardware


execuo do Serial Monitor, digitar um texto no O LED que usamos no Projeto 3 consumia em torno
campo de envio de mensagem e clicar no boto de 10 mA com 2V. Esses valores podem ser usados
Send ou apertar Return (ou Enter). Ento, devere- para calcular a potncia com a frmula
mos ver a nossa mensagem sendo sinalizada em
cdigo Morse por meio de flashes luminosos no P = IV
LED.
A potncia igual tenso aplicada em alguma
coisa vezes a corrente que circula atravs dela. A
unidade de potncia o watt (W). Portanto, o LED
consome aproximadamente 20 mW, ou cinquenta
Projeto 4 avos da potncia do nosso LED Luxeon de 1W. Se,
Tradutor de cdigo Morse por um lado, um Arduino pode lidar muito bem
de alto brilho com um LED de 20 mW, por outro ele no conse-
gue acionar diretamente um LED de 1W.
improvvel que o pequeno LED do Projeto 3 seja
visto de distncias muito grandes. Neste projeto, Esse um problema comum em eletrnica e pode
aumentaremos a potncia luminosa do LED usan- ser resumido em fazer uma corrente pequena con-
do um LED Luxeon de 1W. Esses LEDs tm uma lu- trolar uma corrente maior. Esse processo conhe-
minosidade extremamente elevada que emitida cido como amplificao. O componente eletrnico
de uma rea muito pequena no centro. Por essa mais comumente utilizado em amplificao o
razo, para evitar qualquer dano retina, no olhe transistor. Ns o utilizaremos para ligar e desligar
diretamente para eles. o nosso LED Luxeon.

Com algumas soldas, veremos tambm como O funcionamento bsico de um transistor est mos-
30 projetos com Arduino

transformar esse projeto em um shield que pode trado na Figura 3-4. H muitos tipos diferentes de
ser encaixado em nossa placa de Arduino. transistor e provavelmente o mais comum denomi-
nado transistor bipolar NPN. o que usaremos aqui.

Esse transistor tem trs terminais (pernas): emissor,


coletor e base. O princpio bsico que uma pe-
quena corrente circulando pela base permitir que

42

Monk_03.indd 42 06/12/13 16:25


Coletor Coletor
5V

Corrente de coletor

Base Base

Corrente de base

0V

Emissor
Emissor

Figura 3-4 Funcionamento de um transistor bipolar NPN.


Fonte: do autor.

uma corrente muito maior circule entre o coletor e


5V
o emissor.
R2
O quanto maior ser essa corrente depender do

4,7 V
transistor, mas o valor tpico em torno de 100. As-
sim, uma corrente de 10 mA circulando pela base
poderia fazer passar uma corrente de at 1A pelo
Arduino LED
coletor. Desse modo, se continuarmos usando o Luxeon D1
resistor de 270 ohms, acionando o LED com 10 mA, 1W
Pino digital 12 c
poderemos esperar que isso seja suficiente para R1
b
que circule no transistor a corrente de centenas de 270 V T1
miliamperes necessria ao LED Luxeon. e

O diagrama esquemtico do nosso circuito de con- GND


trole est mostrado na Figura 3-5.
Figura 3-5 Diagrama esquemtico do
O resistor de 270 ohms (R1) limita a corrente que acionamento de um LED de alta potncia.
circula pela base. Essa corrente pode ser calculada Fonte: do autor.

usando a frmula I = V/R. O valor de V ser 4,4V


O resistor R2 limita a corrente que circula no LED
Projetos com LED

em vez de 5V porque os transistores normalmente


funcionam com uma tenso de 0,6V entre a base a 200 mA. Usando a frmula R = V/I, obtemos
e o emissor. Como a tenso mais elevada que um 4,7 ohms. A tenso V ser aproximadamente
Arduino pode fornecer em um pino de sada 5V, a 5 3,4 0,6 = 1,0V. O valor 5V a tenso de ali-
corrente ser 4,4/270= 16 mA. mentao, a queda de tenso no LED 3,4V e, no
transistor, 0,6V. Portanto, a resistncia deve ser
As especificaes desse LED postulam que a sua 1,0V/200 mA = 5 ohms. Os resistores esto dis-
corrente direta mxima 350 mA e a tenso direta ponveis em valores padronizados. O que mais se
captulo 3

3,4V. Assim, vamos escolher em torno de 200 mA aproxima do valor encontrado um resistor de
para que o LED funcione bem sem encurtar a sua 4,7 ohms. O resistor tambm deve suportar essa
vida til. corrente relativamente elevada. A potncia com a

43

Monk_03.indd 43 06/12/13 16:25


qual um resistor queima devido ao calor excessivo e na fotografia da Figura 3-8. crucial identificar
igual sua tenso multiplicada pela corrente que corretamente os terminais (pernas) do transistor
circula nele. Nesse caso, temos 200 mA 1,0V, o e do LED. O lado metlico do transistor deve estar
que 200 mW. Isso significa que um resistor co- voltado para a placa do Arduino. O LED tem um pe-
mum de 1/2 W ou mesmo 1/4 W funcionar bem. queno smbolo + junto ao terminal positivo.

Da mesma forma, quando escolhemos um transistor, Mais adiante neste projeto, mostraremos como
devemos nos assegurar de que ele poder suportar transportar o projeto do protoboard para uma
a potncia. Quando est ativo, o transistor consome placa definitiva usando o Protoshield do Arduino.
uma potncia igual corrente vezes a tenso. Nesse Para isso, sero necessrias algumas soldas. Por-
caso, a corrente de base suficientemente pequena tanto, se voc pretender construir um shield e tem
para ser ignorada. Portanto, a potncia ser simples- ferramentas para fazer soldas, voc poder soldar
mente 0,6V 200 mA, ou 120 mW. Sempre uma alguns terminais no LED Luxeon. Solde fios rgidos
boa ideia escolher um transistor que pode facilmen- curtos em dois dos seis terminais do LED. Devem
te suportar a potncia. Nesse caso, usaremos um ser os que tm as marcas + e na borda. uma boa
BD139, que tem a especificao nominal de potncia ideia usar fios coloridos: vermelho para o terminal
de 12W. No Captulo 10, voc poder encontrar uma positivo e azul ou preto para o negativo.
tabela de transistores comumente usados.
Se voc no quiser soldar, basta enrolar cuidado-
Agora, precisamos dispor os nossos componentes samente o fio rgido em torno das conexes, como
no protoboard, como est mostrado na Figura 3-6 est mostrado na Figura 3-7.
30 projetos com Arduino

T1- Face metlica para a esquerda, tringulo para a direita.

Figura 3-6 Projeto 4 com a disposio dos componentes no protoboard.


Fonte: do autor.

44

Monk_03.indd 44 06/12/13 16:25


Juntando tudo
Se voc ainda no carregou o sketch do Projeto 3,
ento carregue-o a partir do Sketchbook do soft-
ware de Arduino e, em seguida, transfira-o para a
sua placa (veja o Captulo 1).

Novamente, para testar o projeto, faa o mesmo


que no Projeto 3. Voc precisa abrir a janela do Se-
Figura 3-7 Colocando terminais no LED Luxeon rial Monitor e simplesmente comear a digitar.
sem fazer soldas.
Fonte: do autor. Na realidade, o LED tem um ngulo bem grande
de viso. Uma variao deste projeto seria adaptar
A Figura 3-8 mostra o protoboard com a monta- uma lanterna de LED, na qual o LED tem um refle-
gem completa. tor para focar o feixe luminoso.

Software Como construir um shield


O Projeto 4 usa exatamente o mesmo sketch do Este o primeiro projeto feito por ns em que h um
Projeto 3. nmero suficiente de componentes para justificar a
construo de uma placa prpria com os circuitos na

Projetos com LED


captulo 3

Figura 3-8 Fotografia do protoboard completo do Projeto 4.


Fonte: do autor.

45

Monk_03.indd 45 06/12/13 16:25


forma de um shield. Esse shield poder ser acopla- outros shields encaixados por cima, soldaremos
do a qualquer placa de Arduino. No Projeto 6 mais apenas os pinos inferiores de conexo para fazer o
adiante, tambm usaremos esse hardware com al- encaixe com a placa do Arduino.
gumas pequenas alteraes. Portanto, talvez seja o
momento de construirmos um Shield LED Luxeon. Uma boa maneira de montar placas de circuito
comear soldando primeiro os componentes de
A construo de suas prprias placas de circuito perfil baixo. Assim, neste caso, soldaremos os re-
em casa perfeitamente possvel, mas requer o sistores, o LED, a chave de reset e ento os pinos
uso de produtos qumicos corrosivos e de uma boa inferiores de conexo (pinos machos).
quantidade de ferramentas. No entanto, h um ou-
tro componente de hardware, relacionado com o O resistor de 1K, o LED e a chave so todos inseri-
Arduino, denominado Arduino Protoshield. Se voc dos pela parte de cima da placa e ento soldados
fizer uma pesquisa, poder encontr-lo por US$ 10 por baixo (Figura 3-10). A parte curta dos pinos de
ou menos. Esses kits fornecem tudo que voc pre- conexo inserida por baixo da placa e ento sol-
cisa para construir um shield bsico, incluindo a dada na parte de cima.
prpria placa, as barras de pinos de conexo para Quando soldar os pinos de conexo, verifique se eles
encaixar no Arduino, alm de alguns LEDs, chaves esto alinhados corretamente, porque h duas filas
e resistores. Como h diversos tipos de placas Pro- paralelas de conectores: uma para os pinos machos
toshield, possivelmente voc dever adaptar as na parte de baixo e uma para os pinos fmeas (so-
orientaes seguintes para o caso particular da sua quetes) na parte de cima, que no usaremos. Os pi-
placa, se ela for um pouco diferente. nos fmeas so usados para acoplar outros shields.
Os componentes de um kit de Protoshield esto Uma boa maneira de assegurar que os pinos esto
mostrados na Figura 3-9, sendo a parte mais im- no local correto encaix-los primeiro em uma pla-
portante a placa de circuito Protoshield (PCB). ca de Arduino e, ento, colocar o shield por cima e
possvel comprar s a PCB, o que, em muitos pro- soldar os pinos enquanto eles ainda esto encai-
jetos, tudo que voc precisa. xados na placa do Arduino. Isso assegura que os
Na placa, no soldaremos todos os componentes pinos fiquem alinhados.
includos no kit. Acrescentaremos apenas o LED de Quando todos os componentes estiverem solda-
potncia e seu resistor. Como esse shield no ter dos, voc ter uma placa como a da Figura 3-11.
30 projetos com Arduino

Figura 3-9 Protoshield na forma de um kit. Figura 3-10 A parte de baixo do Protoshield.
Fonte: do autor. Fonte: do autor.

46

Monk_03.indd 46 06/12/13 16:25


Figura 3-11 Protoshield bsico montado. Figura 3-12 Disposio dos componentes do
Fonte: do autor. Projeto 4.
Fonte: do autor.
Agora poderemos soldar os componentes desse pro-
jeto, retirando-os do protoboard. Primeiro, coloque Ns montaremos todos os componentes na parte
todos os componentes em seus lugares de acordo de cima, com os terminais inseridos nos furos e sol-
com a disposio mostrada na Figura 3-12 para ga- dados por baixo onde eles emergem. Os terminais
rantir que tudo caber dentro do espao disponvel. dos componentes podem ser conectados entre si e
os excessos podem ser cortados com um alicate. Se
Esse tipo de placa de dupla face isto , voc pode necessrio, o comprimento dos terminais poder
fazer soldas nas partes de baixo e de cima da placa. ser aumentado com pedaos de fio rgido.
Como voc pode ver na Figura 3-12, algumas das
conexes formam trilhas como em um protoboard. A Figura 3-13 mostra o shield completo. Energize
a sua placa e teste-a. Se no funcionar logo em

Projetos com LED


captulo 3

Figura 3-13 Shield Luxeon completo acoplado a uma placa de Arduino.


Fonte: do autor.

47

Monk_03.indd 47 06/12/13 16:25


seguida, desconecte-a imediatamente da alimen-
tao eltrica e, usando um multmetro, verifique
Resumo
cuidadosamente se h curtos-circuitos ou ligaes Neste captulo, iniciamos alguns projetos simples
rompidas. usando LEDs e vimos como usar LEDs Luxeon de
alta potncia. Aprendemos tambm mais coisas
Parabns! Voc criou o seu primeiro shield de Ar- sobre a programao da nossa placa de Arduino
duino, o qual poder ser utilizado em outros proje- usando a linguagem C.
tos mais adiante.
No Captulo 4, iremos mais longe. Veremos outros
projetos baseados em LED, incluindo um modelo
de sinalizao para semforo e uma luz estrobos-
cpica de alta potncia.
30 projetos com Arduino

48

Monk_03.indd 48 06/12/13 16:25


captulo 4

Mais projetos com LED


Neste captulo, continuaremos com projetos baseados nestes pequenos
componentes versteis, os LEDs. Aprenderemos mais sobre entradas e sadas
digitais, incluindo o uso de chaves de contato momentneo. Ainda construiremos
um modelo de sinalizao para semforo, dois projetos com luz estroboscpica
e um mdulo de luz de alto brilho utilizando os LEDs Luxeon de alta potncia.

Objetivos deste captulo


Auxiliar no reconhecimento das entradas e sadas do Arduino.

Identificar outros tipos de LEDs.

Desenvolver projetos que utilizam tcnicas de software para


controlar LEDs.

Relacionar nmeros aleatrios com o Arduino.

Monk_04.indd 49 06/12/13 16:27


Entradas e sadas digitais Projeto 5
Os pinos digitais 0 a 12 podem ser usados como Modelo de sinalizao
entrada ou sada. Isso configurado no seu sketch. para semforo
Visto que circuitos eletrnicos sero ligados a esses
pinos, provavelmente voc no vai querer modifi- Agora que sabemos como configurar um pino di-
car o modo de um pino. Isso significa que, quando gital para que seja uma entrada, poderemos cons-
um pino for configurado como sada, voc no ir truir um modelo de sinalizao de semforo usan-
mais modific-lo configurando-o como entrada do LEDs para os sinais vermelho, amarelo e verde.
durante a execuo do sketch. Sempre que pressionarmos o boto, o semforo
passar para o prximo sinal da sequncia. No Rei-
Por essa razo, em qualquer sketch e por conven- no Unido, a sequncia desses sinais vermelho,
o, o sentido dos dados (entrada ou sada) de um vermelho e amarelo juntos, verde, amarelo e ento
pino digital configurado na funo setup. vermelho novamente.

Por exemplo, no cdigo a seguir, o pino digital 10 Alm disso, se mantivermos o boto pressionado,
configurado como sada e o 11, como entrada. Ob- os sinais mudaro dentro da sequncia por si mes-
serve que usamos uma declarao de varivel no mos, com um retardo entre eles.
nosso sketch para podermos alterar facilmente os
pinos que usamos se quisermos modificar a finali- Os componentes do Projeto 5 esto listados a se-
dade do sketch. guir. Para obter um efeito visual melhor, procure
escolher LEDs com brilhos semelhantes.
No sketch do Projeto 5, ligaremos o pino 5 a uma
chave que far a conexo com o GND quando for COMPONENTES E EQUIPAMENTO
pressionada. A varivel pinMode do pino 5 est Descrio Apndice
configurada para ser INPUT_PULLUP em vez de
Arduino Uno ou Leonardo m1/m2
simplesmente INPUT. Isso significa que a entrada
D1 LED vermelho de 5 mm s1
est puxada para cima (pulled up) para o nvel
D2 LED amarelo de 5 mm s3
HIGH (alto). Uma outra maneira de pensar que a
D3 LED verde de 5 mm s2
entrada por default est em nvel HIGH (alto) a me-
nos que seja puxada para LOW (baixo). R1-R3 Resistor de 270 V e 1/4 W r3
S1 Chave miniatura de contato
int ledPin = 10; momentneo h3
int switchPin = 11; Protoboard h1
Fios de conexo (jumpers) h2
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(switchPin, INPUT);
} Hardware
30 projetos com Arduino

O diagrama esquemtico do projeto est mostrado


na Figura 4-1.

Os LEDs so conectados do mesmo modo que no


nosso projeto anterior, cada um com um resistor li-
mitador de corrente. Quando se aperta o boto da
chave, o pino digital 5 conectado ao GND.

50

Monk_04.indd 50 06/12/13 16:27


D2

D3

D4

Arduino D1 D2 D3
Vermelho Amarelo Verde

D5

R1
270 V R2 R3

270 V

270 V
S1

GND

Figura 4-1 Diagrama esquemtico do Projeto 5.


Fonte: do autor.

Uma fotografia do projeto mostrada na Figura O comando delay(1000) evita que os LEDs acen-
4-2, e a disposio dos componentes pode ser vista dam e apaguem to rapidamente de forma a se
na Figura 4-3. tornarem um borro luminoso.

Usamos uma funo separada denominada setLights


Software (configuraLuzes) para controlar o estado de cada
LED, reduzindo trs linhas de cdigo a apenas uma.
O sketch do Projeto 5 est mostrado na Listagem
Mais projetos com LED

do Projeto 5.

O sketch bem autoexplicativo. Precisamos ape- Juntando tudo


nas verificar uma vez por segundo se a chave est Carregue o sketch completo do Projeto 5, que
pressionada. Dessa forma, se a chave for pressiona- est no Sketchbook do software de Arduino (veja
da rapidamente, a sequncia de sinais no avana- o Captulo 1).
r na mesma rapidez. Entretanto, se mantivermos a
chave apertada, as luzes iro avanar automatica- Teste o projeto apertando o boto e verificando se
mente passo a passo. todos os LEDs acendem na sequncia correta.
captulo 4

51

Monk_04.indd 51 06/12/13 16:27


Figura 4-2 Projeto 5: modelo de sinalizao para semforo.
Fonte: do autor.
30 projetos com Arduino

Figura 4-3 Disposio dos componentes no protoboard para o Projeto 5.


Fonte: do autor.

52

Monk_04.indd 52 06/12/13 16:27


Projeto 6 LISTAGEM DO PROJETO 5
Luz estroboscpica setLights(LOW, LOW, HIGH);
state = 3;
Este projeto usa o mesmo LED Luxeon de alta }
potncia usado no tradutor de cdigo Morse. else if (state == 3)
Acrescentaremos um resistor varivel, tambm {
setLights(LOW, HIGH, LOW);
denominado potencimetro. Com isso teremos um
state = 0;
controle que, ao ser girado, varia a frequncia de }
pisca-pisca da luz estroboscpica. delay(1000);
}
}
ALERTA
Essa luz estroboscpica, piscando com brilho void setLights(int red, int yellow,
intenso. Se voc tiver alguma condio de sade, int green)
como epilepsia, voc deve pular este projeto e {
digitalWrite(redPin, red);
passar diretamente para o prximo.
digitalWrite(yellowPin, yellow);
digitalWrite(greenPin, green);
}
LISTAGEM DO PROJETO 5
int redPin = 4;
int yellowPin = 3; COMPONENTES E EQUIPAMENTO
int greenPin = 2; Descrio Apndice
int buttonPin = 5;
Arduino Uno ou Leonardo m1/m2
int state = 0; D1 LED Luxeon de 1W s10
R1 Resistor de 270 V e 1/4 W r3
void setup()
{ R2 Resistor de 4,7 V e 1/4 W r1
pinMode(redPin, OUTPUT); T1 BD139 transistor de potncia s17
pinMode(yellowPin, OUTPUT); R3 Potencimetro linear de 10K r11
pinMode(greenPin, OUTPUT); (trimpot)
pinMode(buttonPin, INPUT_PULLUP);
} Kit de Protoshield (opcional) m4
Jack CC de alimentao eltrica h4
void loop() de 2,1 mm (opcional)
{
Clip de bateria de 9V (opcional) h5
if (digitalRead(buttonPin))
{
Mais projetos com LED

if (state == 0)
{
setLights(HIGH, LOW, LOW); Hardware
state = 1;
} O hardware deste projeto basicamente o mesmo
else if (state == 1) do Projeto 4, com o acrscimo de um resistor vari-
{ vel, ou potencimetro (Figura 4-4).
setLights(HIGH, HIGH, LOW);
state = 2;
O Arduino apresenta seis entradas analgicas nu-
}
else if (state == 2) meradas de Analog 0 at Analog 5. Elas medem a
captulo 4

{ tenso em seus pinos de entrada produzindo um


valor entre 0 (0V) e 1023 (5V).

53

Monk_04.indd 53 06/12/13 16:27


5V

R3 R2

Analog 0

4,7 V
10 KV
D1
Arduino LED
Luxeon
1W

BD139 c
R1 b
270 V T1
Digital 12
e

GND

Figura 4-4 Diagrama esquemtico do Projeto 6.


Fonte: do autor.

Isso pode ser usado para detectar a posio de +5V


um boto de controle com o uso de um resistor
varivel. Esse resistor atua como um divisor de
tenso ligado na nossa entrada analgica. A Figu-
ra 4-5 mostra a estrutura interna de um resistor
varivel.

O resistor varivel um componente muito usa-


do para controlar o volume de som. construdo
com uma trilha circular condutiva interrompida e
terminais de conexo em ambas as extremidades.
Um brao deslizante fornece um terceiro terminal
mvel que gira acoplado a um eixo.
Pino Analog 0 (A0) do
Voc pode usar um resistor varivel para fornecer Arduino

uma tenso ajustvel. Para isso, voc conecta um


dos terminais do resistor a 0V e o outro a 5V. Ento,
30 projetos com Arduino

a tenso lida no terminal mvel ir variar entre 0V e


5V medida que voc girar o eixo.
GND
Como seria de esperar, a disposio dos compo-
Figura 4-5 O mecanismo interno de um resistor
nentes no protoboard (Figura 4-6) similar do
varivel.
Projeto 4. Fonte: do autor.

54

Monk_04.indd 54 06/12/13 16:27


T1- Face metlica para a esquerda, tringulo para a direita.

Figura 4-6 Disposio dos componentes no protoboard para o Projeto 6.


Fonte: do autor.

LISTAGEM DO PROJETO 6
Software
int ledPin = 12;
A listagem deste projeto est mostrada aqui. As int analogPin = 0;
partes interessantes so: a que faz a leitura do valor
na entrada analgica e a que controla a frequncia void setup()
{
de pisca-pisca.
pinMode(ledPin, OUTPUT);
}
Para as entradas analgicas, no necessrio usar
Mais projetos com LED

a funo pinMode. Por isso, nada precisamos acres- void loop()


centar funo setup. {
int period = (1023 -
Digamos que queremos variar a frequncia de analogRead(analogPin)) / 2 + 25;
digitalWrite(ledPin, HIGH);
pisca-pisca (flash) entre 1 e 20 vezes por segun-
delay(period);
do. Os retardos (delays) entre ligar e desligar o digitalWrite(ledPin, LOW);
LED devero variar entre 500 e 25 milissegundos, delay(period);
respectivamente. }
captulo 4

55

Monk_04.indd 55 06/12/13 16:27


Desse modo, se a nossa entrada analgica variar
entre 0 e 1023, ento o clculo que precisamos
fazer para determinar o retardo do pisca-pisca
(flash_delay) aproximadamente

flash_delay = (1023 - analog_value)


/ 2 + 25

Assim, um analog_value (valor analgico) de 0 d


um flash_delay de 536 e um analog_value de 1023
d um flash_delay de 25. Na realidade, deveramos
dividir por um valor ligeiramente maior do que 2,
mas as coisas ficam mais fceis se trabalharmos
apenas com nmeros inteiros.

Figura 4-7 Disposio dos componentes do


Projeto 6.
Juntando tudo Fonte: do autor.
Carregue o sketch completo, que est no Sketch-
book do Arduino, e transfira-o para a placa (veja o (A0) do Arduino pode ser feita abaixo da superfcie,
Captulo 1). ficando fora da vista.

Voc descobrir que, ao girar o controle do resis- Aps construir o shield, o projeto poder funcionar
tor varivel no sentido horrio, a velocidade do sem o computador se o alimentarmos com uma
pisca-pisca aumentar, j que a tenso na entrada bateria de 9V.
analgica sobe. Girando no sentido anti-horrio, a
Para alimentar o projeto com uma bateria, preci-
velocidade diminui.
samos construir um pequeno cabo que tem um
Construindo um shield clip de bateria PP3 em uma extremidade e um
Se voc quiser construir um shield para este pro- plugue de alimentao eltrica de 2,1 mm na ou-
jeto, voc pode fazer uma adaptao no shield do tra extremidade. A Figura 4-8 mostra o cabo sendo
Projeto 4 ou criar um novo shield partindo do zero. montado. Voc tambm pode comprar esses cabos
j montados da Sparkfun ou Adafruit e de outros
A disposio dos componentes no Protoshield fornecedores.
mostrada na Figura 4-7.

Basicamente, so os mesmos componentes do Pro-


jeto 4, exceto que acrescentamos o resistor vari-
vel. Os pinos de um resistor varivel so espessos
demais para encaixarem nos furos do Protoshield.
30 projetos com Arduino

Por isso, voc pode montar o resistor usando fios


ou, como fizemos aqui, soldar cuidadosamente os
terminais nos locais em que encostam na superf-
cie da placa. Para ter alguma resistncia mecnica,
o resistor varivel pode ser primeiro colado no
lugar com uma gota de alguma cola adequada. A Figura 4-8 Construindo um cabo de bateria.
fiao do resistor varivel at 5V, GND e Analog 0 Fonte: do autor.

56

Monk_04.indd 56 06/12/13 16:27


Projeto 7 Para que a luz seja suficientemente intensa para
ser usada como luz SAD, utilizaremos seis LEDs Lu-
Luz para desordem xeon em vez de apenas um.
afetiva sazonal (SAD) No Projeto 8, voltaremos a usar este mesmo
A desordem afetiva sazonal (SAD, de seasonal hardware para construir uma luz estroboscpica
affective disorder) atinge um grande nmero de de alta potncia.
pessoas, e pesquisas mostraram que a exposio a
uma luz branca de alta intensidade, imitando a luz
solar, durante 10 a 20 minutos tem efeito benfico. Hardware
Para usar este projeto com esse objetivo, sugeri- Alguns dos pinos digitais pinos 5, 6, 9, 10 e 11 no
mos utilizar um tipo de difusor parecido com um Uno, e mais alguns no Leonardo podem fornecer
vidro leitoso, porque voc no deve olhar direta- uma sada varivel em vez de 5V ou nada. Esses pi-
mente para as fontes luminosas pontuais dos LEDs. nos esto indicados com PWM na placa.
Este outro projeto baseado em LEDs Luxeon PWM significa pulse-width modulation (modulao
de alto brilho. Usaremos uma entrada analgica por largura de pulso). uma forma de controlar o
conectada a um resistor varivel que funcionar valor da potncia em uma sada. Isso feito ligan-
como controle de um marcador de tempo. O LED do e desligando rapidamente a sada.
ficar aceso durante um perodo que pode ser ajus-
tado girando o eixo do resistor varivel. Usaremos Os pulsos produzidos sempre so entregues na
tambm uma sada analgica para aumentar, aos mesma velocidade (aproximadamente 500 por
poucos, o brilho dos LEDs quando so ligados e, segundo), mas a sua durao variada. Se o pul-
depois, diminuir o brilho quando so desligados. so for longo, o nosso LED estar sempre ligado. Se,
entretanto, os pulsos forem curtos, o LED estar
aceso apenas durante um perodo muito curto.
COMPONENTES E EQUIPAMENTO Isso acontece rpido demais para que o observa-
Descrio Apndice dor possa perceber que o LED est piscando. O que
Arduino Uno ou Leonardo m1/m2 ele percebe o LED brilhando com maior ou me-
D1-6 LED Luxeon de 1W s10 nor intensidade.
R1-3 Resistor de 1 kohms e 1/4 W r5
Ns voltaremos a encontrar PWM no Projeto 19,
R4-5 Resistor de 4,7 ohms e 1/4 W r1 em que ser usado para gerar sons.
R6 Potencimetro linear de 100K r12
CI1-2 LM317 Regulador de tenso s18 O valor de sada pode ser ajustado usando a funo
Mais projetos com LED

T1-2 2N7000 FET s15 analogWrite, a qual requer um valor de sada entre
Fonte de tenso regulada 15V 1A h8 0 e 255, em que 0 significa desligado e 255, potn-
Placa perfurada h9 cia mxima.
Conector KRE triplo h10 Como voc pode ver no diagrama esquemtico
Observe que este um dos projetos deste mostrado na Figura 4-9, os LEDs esto dispostos em
livro em que necessrio fazer soldas. duas colunas de trs. A alimentao dos LEDs feita
Voc precisar de seis LEDs Luxeon neste com uma fonte externa de 15V em vez de 5V como
projeto. Se voc quiser economizar, acesse havamos feito antes. Como cada LED consome cer-
captulo 4

sites de leilo online, em que 10 LEDs Luxeon ca de 300 mA, cada coluna consumir em torno de
podero ser adquiridos por um valor entre 10
300 mA, de modo que a fonte deve poder fornecer
e 20 dlares.
0,6A (ou 1A para ter uma margem de segurana).

57

Monk_04.indd 57 06/12/13 16:27


CI1 CI2
15V Entrada Sada Entrada Sada
LM317 LM317

5V Ref R2 R4 Ref R3 R5

4,7 V
4,7 V
1 KV

1K V
R6

Analog 0 100 KV
Arduino LED D3 LED D6
Luxeon Luxeon
2N7000 2N7000
1W 1W
T1 d T2 d
R1 D2 D5
g g
1 KV
Digital 11 s D1 s D4
N N

GND

Figura 4-9 Diagrama esquemtico do Projeto 7.


Fonte: do autor.

Esse o diagrama esquemtico mais complexo at O mdulo construdo em uma placa perfurada.
agora. Estamos utilizando dois circuitos integrados Essa placa simplesmente uma placa com furos.
(CIs) reguladores de tenso varivel para limiar a cor- No h conexes. Assim, ela funciona como uma
rente que circula nos LEDs. A sada dos reguladores estrutura na qual voc monta os componentes e faz
de tenso ser normalmente 1,25V mais elevada que a fiao entre eles na parte de baixo da placa. Isso
a tenso que, est no pino Ref do chip. Isso significa feito soldando os seus terminais ou incluindo fios.
que, se acionarmos os nossos LEDs atravs de um re-
sistor de 4 ohms, haver uma corrente de aproxima- Fica mais fcil se voc soldar dois fios em cada LED
damente I = V/R, ou 1,25/4 = 312 mA, circulando no antes de mont-los na placa. uma boa ideia usar
resistor (o que est correto). fios coloridos vermelho para positivo e preto ou

O transistor de efeito de campo (FET, de field effect


transistor) como o nosso transistor bipolar. Ele
atua como uma chave, mas tem uma resistncia de
sada muito elevada quando est desativado. Assim,
quando no est ativado por uma tenso em sua
porta, como se ele no existisse no circuito. Entre-
tanto, quando est ativado, ele faz a tenso do pino
30 projetos com Arduino

Ref do regulador baixar at uma tenso suficiente-


mente baixa para impedir que qualquer corrente
circule nos LEDs, desligando-os. Ambos os FETs so
controlados a partir do mesmo pino digital 11.

O mdulo completo dos LEDs mostrado na Figu- Figura 4-10 Projeto 7: mdulo de luzes de alto
ra 4-10, e a disposio dos componentes na placa brilho.
perfurada est na Figura 4-11. Fonte: do autor.

58

Monk_04.indd 58 06/12/13 16:27


CI1 LM317 CI2 LM317
(visto de cima) (visto de cima)

15V

Controle
0V

Figura 4-11 Disposio dos componentes na placa perfurada.


Fonte: do autor.

azul para negativo pois assim voc facilmente co- pino Vin do Arduino. Por sua vez, a tenso do pino
loca os LEDs na ordem correta. Vin ser fornecida por uma fonte de alimentao.

Os LEDs aquecero, de modo que bom deixar O nosso mdulo de LEDs de alta potncia ser uti-
Mais projetos com LED

um espao entre eles e a placa perfurada usando lizado em outros projetos. Por isso, vamos encaixar
o isolamento do fio como espaador. O regulador o resistor varivel diretamente na barra Analog In
de tenso tambm aquecer, mas no haver pro- de pinos de conexo da placa do Arduino. O es-
blema, mesmo que voc no use um dissipador de paamento dos terminais de um resistor varivel
calor. Na realidade, os circuitos integrados (CIs) do tem um quinto de polegada. Isso significa que, se
regulador de tenso tm uma proteo trmica in- o terminal central for inserido em Analog 2, os ou-
terna e automaticamente reduziro a corrente se tros dois terminais estaro em Analog 0 e Analog 4.
comearem a aquecer demais. Esse arranjo pode ser visto na Figura 4-12.
captulo 4

O conector KRE triplo da placa para GND, para Para ter 5V em um dos terminais do nosso resistor
15V e para a entrada de controle da fonte de ali- varivel e 0V no outro terminal, vamos ajustar as
mentao. Quando o conector KRE triplo for conec- sadas dos pinos analgicos 0 e 4 para 0V e 5V,
tado placa de Arduino, a tenso de 15V vir do respectivamente.

59

Monk_04.indd 59 06/12/13 16:27


e maxOnSeconds. Essa uma prtica comum em
Software programao. Atribuindo a variveis os valores que
queremos modificar e tornando-as visveis no in-
No incio do sketch, aps as variveis usadas
cio do sketch, poderemos alter-las facilmente.
para os pinos, temos mais quatro variveis:
startupSeconds, turnOffSeconds, minOnSeconds

LISTAGEM DO PROJETO 7
int ledPin = 11;
int analogPin = A2;

int startupSeconds = 20;


int turnOffSeconds = 10;
int minOnSeconds = 300;
int maxOnSeconds = 1800;

int brightness = 0;

void setup()
{
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
pinMode(A0, OUTPUT); // usar os pinos Analog 0 e 4 para
pinMode(A4, OUTPUT); // o resistor varivel
digitalWrite(A4, HIGH);
int analogIn = analogRead(analogPin);
int onTime = map(analogIn, 0, 1023, minOnSeconds, maxOnSeconds);
turnOn();
delay(onTime * 1000);
turnOff();
}

void turnOn()
{
brightness = 0;
int period = startupSeconds * 1000 / 256;
while (brightness < 255)
{
analogWrite(ledPin, 255 - brightness);
delay(period);
brightness ++;
}
}

void turnOff()
{
int period = turnOffSeconds * 1000 / 256;
30 projetos com Arduino

while (brightness >= 0)


{
analogWrite(ledPin, 255 - brightness);
delay(period);
brightness -;
}
}
void loop()
{}

60

Monk_04.indd 60 06/12/13 16:27


Figura 4-12 Projeto 7: luz SAD.
Fonte: do autor.

A varivel startupSeconds define a durao do analgica. Assumindo que desejamos um intervalo


perodo inicial em que o brilho dos LEDs aumen- de tempo que vai de 5 at 30 minutos, precisamos
tado gradativamente at alcanar o mximo. De converter o valor de 0 a 1023 em um nmero de
modo similar, a varivel turnOffSeconds define o segundos entre 300 e 1800. Felizmente, existe
perodo final em que o brilho dos LEDs diminui. uma funo til no Arduino que pode fazer isso. A
As variveis minOnSeconds e maxOnSeconds de- funo map recebe cinco argumentos: o valor que
terminam o intervalo dos tempos que podem ser voc deseja converter, o valor de entrada mnimo
ajustados pelo resistor varivel. (0, neste caso), o valor de entrada mximo (1023),
o valor de sada mnimo (300) e o valor de sada
Nesse sketch, nada h na funo loop. Em vez dis-
mximo (1800).
so, todo o cdigo est em setup. Assim, as luzes
comearo imediatamente a acender quando a
energia eltrica for ligada. Quando terminar o ciclo,
as luzes permanecero desligadas at que o boto
Juntando tudo
Reset seja pressionado. Carregue o sketch completo do Projeto 7, que est
Mais projetos com LED

no Sketchbook do Arduino, e transfira-o para a pla-


O perodo inicial de aumento lento do brilho ca (veja o Captulo 1).
obtido aumentando gradualmente o valor da
sada analgica de 1 em 1. Isso realizado em Em seguida, voc precisa fazer as conexes entre
um lao while, em que o retardo ajustado para Vin, GND e o pino digital 11 do Arduino com o co-
1/255 do perodo inicial, de modo que, aps 255 nector KRE triplo do mdulo de LEDs (Figura 4-12).
passos, o brilho mximo atingido. O perodo Insira o plugue de 15V no jack de alimentao el-
final de diminuio lenta do brilho funciona de trica da placa do Arduino. Agora, voc est pronto
modo similar. para fazer os testes.
captulo 4

A durao do perodo em que os LEDs permane- Para iniciar novamente a sequncia, clique no bo-
cem com o brilho mximo ajustada pela entrada to Reset.

61

Monk_04.indd 61 06/12/13 16:27


Projeto 8
Hardware
Luz estroboscpica de Em relao a componentes e detalhes de cons-
alta potncia truo, veja o Projeto 4 (tradutor de cdigo Morse
Neste projeto, voc poder usar o mdulo de seis usando um shield de LEDs Luxeon) ou o Projeto 7
LEDs Luxeon do Projeto 7 ou o shield Luxeon que (conjunto de seis LEDs Luxeon). Observe que, se
construmos no Projeto 4. O software ser quase o optar por usar novamente o Projeto 7, voc preci-
mesmo em ambos os casos. sar modificar ledPin no sketch para que seja usa-
do o pino 11 em vez do 12.
Nesta verso de luz estroboscpica, utilizaremos
comandos para controlar os efeitos luminosos es-
troboscpicos a partir do computador. Enviaremos Software
os seguintes comandos atravs da conexo USB Este sketch usa a funo trigonomtrica sin (seno)
usando o Serial Monitor: para produzir um efeito bonito com brilho lenta-
mente crescente. Fora isso, em sua maior parte, as
0-9 Ajusta a velocidade com os seguintes tcnicas usadas neste sketch so as dos projetos
comandos: de 0 - desligado at 9 - muito anteriores.
rpido.
w Efeito ondulatrio (wave). O brilho varia
gradualmente entre nulo e mximo.
s Efeito estroboscpico.

LISTAGEM DO PROJETO 8
int ledPin = 12;

int period = 100;

char mode = 'o'; // o-desligado, s-strobe, w-ondulatrio

void setup()
{
pinMode(ledPin, OUTPUT);
analogWrite(ledPin, 255);
Serial.begin(9600);
}

void loop()
{
if (Serial.available())
30 projetos com Arduino

{
char ch = Serial.read();
if (ch == '0')
{
mode = 0;
analogWrite(ledPin, 255);
}
else if (ch > '0' && ch <= '9')

62

Monk_04.indd 62 06/12/13 16:27


LISTAGEM DO PROJETO 8
{
setPeriod(ch);
}
else if (ch == 'w' || ch == 's')
{
mode = ch;
}
}
if (mode == 'w')
{
waveLoop();
}
else if (mode == 's')
{
strobeLoop();
}
}

void setPeriod(char ch)


{
int period1to9 = 9 - (ch - '0');
period = map(period1to9, 0, 9, 50, 500);
}

void waveLoop()
{
static float angle = 0.0;
angle = angle + 0.01;
if (angle > 3.142)
{
angle = 0;
}
// analogWrite(ledPin, 255 - (int)255 * sin(angle)); // com protoboard
analogWrite(ledPin, (int)255 * sin(angle)); // com shield
delay(period / 100);
}

void strobeLoop()
{
//analogWrite(ledPin, 0); // com protoboard
Mais projetos com LED

analogWrite(ledPin, 255); // com shield


delay(10);
//analogWrite(ledPin, 255); // com protoboard
analogWrite(ledPin, 0); // com shield
delay(period);
}
captulo 4

63

Monk_04.indd 63 06/12/13 16:27


rio que voc pode obter , na realidade, o mximo
Juntando tudo menos um.
Carregue o sketch completo, que est no Sketch- Assim, a linha seguinte atribuir a x um valor entre
book do Arduino, e transfira-o para a placa (veja o 1 e 6:
Captulo 1).
int x = random(1, 7);
Inicialmente, quando voc instalar o sketch e co-
locar o shield Luxeon ou conectar o painel Luxeon
E a linha a seguir atribuir a x um valor entre 0 e 9:
com seis LEDs de alto brilho, os LEDs estaro des-
ligados. Abra a janela do Serial Monitor, digite s e int x = random(10);
pressione RETURN. Com isso, os LEDs comearo a
piscar. Experimente os comandos de velocidade de Como dissemos no incio desta seo, os com-
1 a 9. A seguir, digite o comando w para entrar em putadores so determinsticos e, na realidade,
modo ondulatrio. os nossos nmeros aleatrios no so aleatrios,
mas sim um conjunto de nmeros com uma distri-
buio aleatria. Na verdade, voc sempre obtm
Gerao de nmeros a mesma sequncia de nmeros quando executa
o sketch.
aleatrios
Os computadores so determinsticos. Se voc fi- Uma segunda funo, denominada randomSeed
zer a mesma pergunta duas vezes, voc obter a (semente aleatria) permite que isso seja contro-
mesma resposta. Entretanto, algumas vezes voc lado. A funo randomSeed determina em que
gostaria que no fosse assim. ponto da sequncia de nmeros pseudoaleatrios
o gerador de nmeros aleatrios iniciar.
Isso pode ser til em algumas circunstncias por
exemplo, um passeio aleatrio, no qual um rob Uma boa maneira de definir esse valor inicial (se-
gira aleatoriamente e, em seguida, anda para mente) usando o valor de uma entrada analgica
frente uma distncia aleatria ou at que colida desconectada, porque ela estar flutuando com
com alguma coisa, quando ento d marcha r e diversos valores e dar no mnimo 1.000 valores
gira novamente. Esse modo aleatrio de deslo- iniciais diferentes para a nossa sequncia aleat-
camento garante que o rob cubra totalmente a ria. Isso no funcionaria na loteria, mas aceitvel
rea de uma sala. Isso poder no ocorrer com um para nossas aplicaes. Nmeros realmente aleat-
algoritmo determinstico, que pode levar o rob rios so difceis de ser produzidos e necessitam de
a ficar preso dentro de um padro repetitivo de hardware especial.
deslocamento.

A biblioteca do Arduino inclui uma funo que cria


nmeros aleatrios. a funo random.
Projeto 9
Dado com LEDs
30 projetos com Arduino

H dois tipos de funo random. Uma que recebe


dois argumentos (mnimo e mximo) e outra que Este projeto usa o que acabamos de aprender so-
recebe um nico argumento (mximo). Neste caso, bre nmeros aleatrios. Construiremos um dado
assume-se que o mnimo 0. eletrnico com seis LEDs e um boto. Sempre que
voc apertar o boto, os LEDs mostraro diversos
Entretanto, tenha cuidado porque o argumento valores durante algum tempo antes de parar e, pis-
mximo pode confundir. O maior nmero aleat- cando, exibiro um valor final.

64

Monk_04.indd 64 06/12/13 16:27


COMPONENTES E EQUIPAMENTO
Descrio Apndice
Arduino Uno ou Leonardo m1/m2
D1-7 LED comum de qualquer cor s1-s6
R1-7 Resistor de 270 V e 1/4 W r3
S1 Chave miniatura normalmente h3
aberta
Protoboard h1
Fios de conexo (jumpers) h2

Figura 4-13 Diagrama esquemtico do Projeto 9.


Hardware Fonte: do autor.

O diagrama esquemtico do Projeto 9 est mos-


Embora um dado s tenha uma face com um m-
trado na Figura 4-13. Cada LED acionado por
ximo de seis pontos, ainda assim precisaremos de
uma sada digital prpria atravs de um resistor
sete LEDs para dispor do ponto central, que usa-
limitador de corrente. Os dois outros componen-
do quando so mostradas as faces com um nme-
tes so a chave e o seu respectivo resistor inter-
ro mpar de pontos.
no de pull-up. Todos os resistores e LEDs so os
mesmos. Por essa razo, no receberam rtulos A Figura 4-14 mostra a disposio dos componentes
individuais. no protoboard, e a Figura 4-15, o protoboard pronto.

Mais projetos com LED


captulo 4

Figura 4-14 Protoboard pronto do Projeto 9.


Fonte: do autor.

65

Monk_04.indd 65 06/12/13 16:27


Figura 4-15 Projeto 9: dado com LEDs.
Fonte: do autor.

um dado real. Por exemplo, medida que o dado


Software rola, o nmero vai mudando, cada vez mais lenta-
Este sketch bem simples e h alguns detalhes que mente. Alm disso, o intervalo de tempo durante o
fazem o dado se comportar de modo semelhante a qual o dado fica rolando tambm aleatrio.

LISTAGEM DO PROJETO 9
int ledPins[7] = { 2, 3, 4, 5, 7, 8, 6 };
int dicePatterns[7][7] = // array com as configuraes de pontos (LEDs)
{
{0, 0, 0, 0, 0, 0, 1}, // 1
{0, 0, 1, 1, 0, 0, 0}, // 2
{0, 0, 1, 1, 0, 0, 1}, // 3
{1, 0, 1, 1, 0, 1, 0}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 1, 1, 1, 1, 1, 0}, // 6
{0, 0, 0, 0, 0, 0, 0} // APAGADO
30 projetos com Arduino

};

int switchPin = 9; // definio do pino da chave


int blank = 6; // varivel correspondente a todos LEDs apagados

void setup()
{
for (int i = 0; i < 7; i++) // inicializao dos LEDs (sada e apagados)

66

Monk_04.indd 66 06/12/13 16:27


LISTAGEM DO PROJETO 9
{
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW);
}
pinMode(switchPin, INPUT_PULLUP); // modo do pino da chave (entrada com pull-up)
randomSeed(analogRead(0)); // obteno da "semente" aleatria
}

void loop()
{
if (digitalRead(switchPin))
{
rollTheDice(); // fazer lanamento do dado
}
delay(100);
}

void rollTheDice() // funo de lanamento do dado


{
int result = 0;
int lengthOfRoll = random(15, 25); //durao do lanamento do dado
for (int i = 0; i < lengthOfRoll; i++)
{
result = random(0, 6); // o resultado ser 0 a 5, no 1 a 6
show(result); // exibir o dado
delay(50 + i * 10); // perodo varivel de espera
}
for (int j = 0; j < 3; j++)
{
show(blank); // exibir o dado com todos LEDs apagados
delay(500); // perodo de meio segundo de espera
show(result); // exibir o dado com LEDs acesos
delay(500); // perodo de meio segundo de espera
}
}

void show(int result) // funo de exibio do dado


{
Mais projetos com LED

for (int i = 0; i < 7; i++)


{
digitalWrite(ledPins[i], dicePatterns[result][i]);
}
}

Neste projeto, como temos sete LEDs para serem aleatria). Se ela no estivesse aqui, sempre que
inicializados, vale a pena coloc-los em um array inicializssemos a placa, teramos as mesmas se-
e usar um lao de repetio (for) para inicializar quncias de lanamento de dado. Como teste,
captulo 4

cada pino. Dentro de setup, temos tambm uma voc pode desativar esse comando, colocando //
chamada para a funo randomSeed (semente na frente da respectiva linha no sketch. Observe

67

Monk_04.indd 67 06/12/13 16:27


como, aps cada reset, as sequncias repetem-se.
Se omitir essa linha e estiver jogando com algum, Juntando tudo
voc poder prever o resultado de cada lanamen-
Carregue o sketch completo do Projeto 9, que est
to do dado.
no Sketchbook do Arduino, e transfira-o para a pla-
O array dicePatterns (configuraes ou padres ca (veja o Captulo 1).
do dado) define quais LEDs devem estar acesos ou
apagados em cada lanamento de dado. Assim,
cada linha do array , na realidade, ela prpria um Resumo
array de sete elementos, cada um em nvel HIGH
(alto, ou 1) ou LOW (baixo, ou 0). Quando temos Neste captulo, conhecemos diversos tipos de LEDs
que exibir um lanamento do dado em particular, e utilizamos algumas tcnicas de software para
precisamos simplesmente exibir a linha correspon- control-los. No Captulo 5, investigaremos alguns
dente ao lanamento, ligando ou desligando apro- tipos diferentes de sensores, usando-os como en-
priadamente cada LED. tradas em nossos projetos.
30 projetos com Arduino

68

Monk_04.indd 68 06/12/13 16:27


captulo 5

Projetos com sensores


Os sensores convertem medidas feitas no mundo real em sinais eletrnicos que
podem ser utilizados em nossas placas de Arduino. Todos os projetos deste
captulo envolvem luz e temperatura. Veremos como construir interfaces com
teclados e com encoders rotativos.

Objetivos deste captulo


Identificar diversos tipos de sensores.

Utilizar uma interface com teclado.

Empregar encoders rotativos.

Explicar como funcionam os sensores luminosos.

Construir um medidor de batimentos cardacos.

Construir um medidor de temperatura utilizando um termistor.

Listar os dados lidos por um Sketch em uma planilha.

Monk_05.indd 69 06/12/13 16:30


Projeto 10 pressionada, a sua chave conecta uma dada fila
com uma coluna em particular.
Cdigo secreto com
Desse modo, dispor as chaves em uma grade sig-
teclado numrico nifica que precisamos usar apenas 7 (4 linhas + 3
Este um projeto que merece estar na residncia colunas) de nossos pinos digitais em vez de 12 (um
de qualquer projetista criativo. Um cdigo secreto para cada chave).
deve ser digitado no teclado e, se estiver correto,
um LED verde acender. Em caso contrrio, um LED Entretanto, isso tambm significa que o software
vermelho permanecer aceso. No Projeto 27, vol- ter que trabalhar mais para determinar quais so
taremos a este projeto e mostraremos como, alm as chaves que esto sendo pressionadas. A aborda-
de acender o LED apropriado, poderemos tambm gem bsica que devemos adotar consiste em co-
controlar uma fechadura. nectar uma linha a uma sada digital, e cada coluna
a uma entrada digital. A seguir, colocamos cada
COMPONENTES E EQUIPAMENTO sada, uma de cada vez, em nvel alto e verificamos
qual das entradas est em nvel alto.
Descrio Apndice
Arduino Uno ou Leonardo m1/m2 A Figura 5-3 mostra como voc pode soldar sete pi-
D1 LED vermelho de 5 mm s1 nos de uma barra de pinos machos no teclado. Os
D2 LED verde de 5 mm s2 pinos machos so comprados em barras, de modo
R1-2 Resistor de 270 ohms e 1/4 W r3 que voc pode cort-las no tamanho que contm o
K1 Teclado numrico 4 por 3 h11 nmero adequado de pinos.
Barra de pinos machos de 0,1 h12
polegada Agora, precisamos descobrir qual pino do teclado
Protoboard h1
corresponde a qual linha ou coluna. Se tivermos sor-
te, o teclado j vir com uma folha de especificaes
Fios de conexo (jumpers) h2
mostrando essas conexes. Se no, teremos que fa-
Infelizmente, os teclados numricos no costumam zer um trabalho de detetive com auxlio de um mul-
ter pinos acoplados. Por essa razo, teremos de in- tmetro. Coloque-o no modo de teste de continui-
clu-los, e a nica maneira de fazer isso soldando- dade. Se o multmetro dispuser de indicao sonora
-os. Desse modo, este ser mais um de nossos proje- (bipe), ele tambm a produzir quando as ponteiras
tos em que voc ter que fazer algumas soldas. entrarem em contato. A seguir, pegue uma folha de
papel e desenhe um diagrama das conexes do te-
clado, indicando cada pino com uma letra de a at
Hardware g. Faa tambm uma lista de todas as teclas. Agora,
mantendo pressionada uma tecla de cada vez, en-
O diagrama esquemtico do Projeto 10 est mos-
contre o par de pinos que faz o multmetro emitir
trado na Figura 5-1. Agora, voc j conhece os
um bipe, mostrando uma conexo (Figura 5-4).
LEDs, e o novo componente ser o teclado.
Solte a tecla para verificar se voc realmente encon-
30 projetos com Arduino

Normalmente, os teclados so estruturados na forma trou o par correto. Depois de algum tempo, voc
de uma grade, de modo que, quando uma tecla ver surgir um padro mostrando como os pinos
pressionada, uma linha conectada a uma coluna. A conectam-se s filas e colunas. A Figura 5-4 mostra a
Figura 5-2 mostra uma configurao tpica de um te- configurao do teclado utilizado aqui.
clado de 12 teclas com nmeros de 0 a 9 e teclas * e #.
O protoboard com a disposio completa dos com-
As chaves das teclas esto dispostas na intersec- ponentes e as ligaes est mostrado na Figura
o dos fios das filas e colunas. Quando uma tecla 5-5, e o protoboard j montado est na Figura 5-6.

70

Monk_05.indd 70 06/12/13 16:30


c a e
D6 D2 D4 1 2 3
D3
b

D1
4 5 6
Vermelho D13 D8
270 V g
R1
D2 7 8 9
Verde D12 D7
270 V f
R2
Arduino
* 0 #
D5
d

GND

Figura 5-1 Diagrama esquemtico do Projeto 10.


Fonte: do autor.

Observe que seu teclado pode ter uma conexo di- Voc talvez tenha notado que, prximo dos pinos
ferente de pinos. Se for o caso, voc dever alterar digitais 0 e 1, h duas indicaes: TX e RX. Esses
as ligaes adequadamente. pinos tambm podem ser usados pela placa do Ar-
duino para realizar comunicaes seriais, incluindo
Col 1 Col 2 Col 3 a conexo USB. Costuma-se evitar o uso desses
pinos em tarefas comuns de entrada e sada, de
modo que as comunicaes seriais, incluindo a
7 8 9

Linha 1

4 5 6
Projetos com sensores

Linha 2

1 2 3
Linha 3

# 0 *
Linha 4
captulo 5

Figura 5-2 Um teclado de 12 teclas. Figura 5-3 Soldando os pinos ao teclado.


Fonte: do autor. Fonte: do autor.

71

Monk_05.indd 71 06/12/13 16:30


Tecla Pinos conectados

1 b, c Software
2 a, b Voc poderia simplesmente escrever um sketch que
3 b, e pe em nvel alto (HIGH) cada uma das sadas das li-
4 c, g nhas e que l as entradas para obter as coordenadas
5 a, g de uma tecla pressionada. Na realidade, essa leitura
6 bem mais complexa porque, quando voc pres-
7
siona as chaves, elas nem sempre se comportam de
a b c d e f g
forma ideal. muito provvel que, ao serem pressio-
8 a, f
nados, os teclados e as chaves de contato moment-
9
neo realizem o que se denominada bouncing. Isso
*
ocorre quando uma chave no passa diretamente da
0 a, d
condio de chave aberta para a de chave fechada.
# Quando se pressiona um boto, a chave pode abrir
Figura 5-4 Pesquisando as conexes do teclado. e fechar diversas vezes at finalmente ficar fechada.
Fonte: do autor.
Felizmente, Mark Stanley e Alexander Brevig criaram
programao do Arduino, possam ser feitas sem a uma biblioteca denominada Keypad (teclado). Ela
necessidade de desconectar fios. contm funes que podem ser utilizadas com te-
clados e tratam da questo do bouncing das chaves.

Vermelho

Verde
30 projetos com Arduino

Figura 5-5 Disposio dos componentes no protoboard do Projeto 10.


Fonte: do autor.

72

Monk_05.indd 72 06/12/13 16:30


A Figura 5-7 mostra como, dento de libraries, voc
pode fazer unzip para instalar a pasta Keypad a
partir do arquivo Zip baixado.

Quando essa pasta estiver corretamente instala-


da, voc poder us-la em qualquer sketch que
escrever.

Voc poder verificar se a biblioteca est instala-


da corretamente executando o software do Ar-
duino e selecionando a opo Examples (exem-
plos) do menu File (arquivo). Agora voc ver
que h uma nova opo indicando a biblioteca
Keypad (Figura 5-8).

O sketch da aplicao est mostrado na Listagem


do Projeto 10. Voc talvez tenha que alterar os
contedos dos arrays rowPins (pinos das linhas)
e colPins (pinos das colunas) de suas chaves, de
modo que estejam de acordo com a disposio
Figura 5-6 Projeto 10: Cdigo Secreto com Teclado
no seu teclado, como j discutimos na seo de
Numrico.
Fonte: do autor. hardware.*

Essa uma boa oportunidade para demonstrar como


instalar uma biblioteca no software do Arduino.

Alm das bibliotecas que acompanham o Ardui-


no, muitas pessoas desenvolvem as suas prprias
bibliotecas e prestam um favor divulgando-as na
comunidade do Arduino.

Para utilizar a biblioteca Keypad, primeiro precisa-


mos baix-la do site do Arduino em: www.arduino.
cc/playground/Code/Keypad.

A seguir, descreveremos como fazer o download


Projetos com sensores

de keypad.zip e a instalao da biblioteca Keypad


(teclado).
Figura 5-7 Fazendo unzip para instalar a biblioteca
Se voc estiver usando Windows, Mac ou Linux, Keypad em Windows.
Fonte: do autor.
voc ver que o software do Arduino criou uma
pasta denominada Arduino no diretrio Meus
Documentos do Desktop. Todas as bibliotecas que
* N. de T.: Observe a primeira linha do sketch, em que a bi-
voc baixa devem ser instaladas em uma pasta li-
blioteca Keypad includa. Observe tambm, ao longo do
braries (bibliotecas) que est dentro dessa pasta
captulo 5

sketch, o uso de recursos dessa biblioteca na forma de cha-


Arduino. Se esta a primeira vez que voc instala madas como keypad.getKey() e outras. Para mais detalhes,
uma biblioteca, voc dever primeiro criar a pasta acesse www.arduino.cc/playground/Code/Keypad e http://
libraries dentro de Arduino. playground.arduino.cc//Main/KeypadTutorial.

73

Monk_05.indd 73 06/12/13 16:30


Figura 5-8 Verificando a instalao.
Fonte: do autor.

LISTAGEM DO PROJETO 10
#include <Keypad.h>

char* secretCode = "1234"; // cdigo secreto


int position = 0; // varivel auxiliar de posio

const byte rows = 4; // nmero de linhas


const byte cols = 3; // nmero de colunas
char keys[rows][cols] = // array com a definio das teclas
{
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[rows] = {7, 2, 3, 5}; // array com os pinos das linhas
byte colPins[cols] = {6, 8, 4}; // array com os pinos das colunas
Keypad keypad =
Keypad(makeKeymap(keys), rowPins, colPins, rows, cols); // criao do teclado

int redPin = 13; // pino do LED vermelho (fechadura trancada)


30 projetos com Arduino

int greenPin = 12; // pino do LED verde (libera)

void setup()
{
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
setLocked(true); // o LED vermelho ligado indicando que o sistema
} // est trancado (locked)

74

Monk_05.indd 74 06/12/13 16:30


LISTAGEM DO PROJETO 10
void loop() // lao que verifica se uma tecla foi pressionada
{ // e se seu valor coincide com um dgito do cdigo
char key = keypad.getKey(); // secreto. Isso repetido para cada dgito do
if (key == '*' || key == '#') // cdigo at liberar o sistema ou mant-lo
{ // trancado.
position = 0;
setLocked(true);
}
if (key == secretCode[position])
{
position ++;
}
if (position == 4)
{
setLocked(false);
}
delay(100);
}

void setLocked(int locked) // definio da funo que acende o LED vermelho


{ // indicando que o sistema est trancado (locked)
if (locked) // ou o LED verde indicando que foi liberado.
{
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, LOW);
}
else
{
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH);
}
}

Esse sketch bem simples. A funo loop verifica


se uma tecla foi pressionada. Se a tecla pressiona- Juntando tudo
da for # ou *, o valor da varivel position (posio)
Carregue o sketch completo do Projeto 10, que
retorna a 0. Por outro lado, se a tecla pressionada
est no Sketchbook do Arduino, e transfira-o para a
for uma das numricas, a funo loop verifica se
Projetos com sensores

placa (veja o Captulo 1).


o prximo dgito que est sendo esperado do c-
digo secreto (secretCode[position]) igual tecla Se voc encontrar dificuldades para faz-lo funcio-
recm-pressionada. Em caso afirmativo, a varivel nar, ento pode ser que haja um problema com a
position incrementada em 1 pela funo loop. disposio dos pinos do seu teclado. Nesse caso,
Finalmente, a funo loop verifica se a varivel po- usando o multmetro, confira o mapeamento das
sition chegou a 4. Se for o caso, a funo loop liga conexes dos pinos.
o LED verde, indicando que o sistema foi liberado
por exemplo, destrancando uma fechadura eltrica
captulo 5

que estava fechada.

75

Monk_05.indd 75 06/12/13 16:30


bm ser indicado por A em nvel baixo, B em n-
Encoders rotativos vel alto, e ento A tornando-se alto (indo da fase
J nos deparamos com resistores variveis, os 2 para a 3), etc. Entretanto, se A estiver alto e B es-
quais mudam sua resistncia quando giramos o tiver baixo e, em seguida, B ficar alto, teremos nos
boto. Esses componentes costumam estar por deslocado da fase 4 para a 3 e, portanto, estaremos
trs da maioria dos botes que voc controla em girando no sentido anti-horrio.
um equipamento eletrnico. Contudo, h uma al-
ternativa: o encoder rotativo. Se voc tiver algum
equipamento de udio ou vdeo no qual algum
boto pode ser girado indefinidamente, ento pro-
Projeto 11
vavelmente h um encoder rotativo por trs. Modelo de sinalizao
Alguns encoders rotativos, ou simplesmente enco- para semforo com encoder
ders, tambm dispem de um boto de presso (P) Este projeto usa um encoder, com boto de
tal que, aps girar o encoder, pode ser pressionado presso, para controlar a sequncia de luzes de
acionando uma chave interna de contato momen- um semforo e baseia-se no Projeto 5. uma ver-
tneo (push-buttom). Isso particularmente til so muito mais realstica de um controlador de
para fazer uma escolha de um menu utilizando semforo e, na realidade, no est muito distante
uma tela de display de cristal lquido (LCD). da lgica que voc encontra em um controlador de
semforo real.
Um encoder rotativo um dispositivo digital que
tem duas sadas ou canais (A e B). Quando voc Ao girar o encoder, voc modificar a velocidade
gira o boto, ocorrem alteraes na sada de modo do sequenciamento das luzes. Para testar as luzes,
tal que possvel determinar se o boto est giran- voc deve pressionar o boto. Todas as luzes per-
do em sentido horrio ou anti-horrio. manecem acesas enquanto voc mantm pressio-
nado o boto.
A Figura 5-9 mostra como os sinais modificam-se
quando o boto do encoder girado. No sentido
COMPONENTES E EQUIPAMENTO
horrio, os pulsos iro se modificar como se esti-
vssemos em deslocamento da esquerda para a di- Descrio Apndice
reita no diagrama. No sentido anti-horrio, os pul- Arduino Uno ou Leonardo m1/m2
sos iro se modificar como se nos deslocssemos D1 LED vermelho de 5 mm s1
da direita para a esquerda no diagrama. D2 LED amarelo de 5 mm s3
D3 LED verde de 5 mm s2
Desse modo, se A e B estiverem em nvel baixo e,
R1-R3 Resistor de 270 ohms e 1/4 W r3
em seguida, B tornar-se alto (indo da fase 1 para
S1 Encoder rotativo com chave h13
a 2), isso indicar que estamos girando o boto no
Protoboard h1
sentido horrio. Um giro no sentido horrio tam-
Fios de conexo (jumpers) h2
30 projetos com Arduino

A Hardware
B O diagrama esquemtico do Projeto 11 est mos-
Fase 1 2 3 4 1 2 3 4 1 2 3 4 trado na Figura 5-10. A maior parte do circuito
igual ao Projeto 5, exceto que agora temos um en-
Figura 5-9 Pulsos de um encoder.
Fonte: do autor. coder.

76

Monk_05.indd 76 06/12/13 16:30


D11

D12

D13

5V

Arduino D1 D2 D3
D3 Vermelho Amarelo Verde

D2

D4 Encoder
R1 R2 R3

270 V

270 V

270 V
A B P

GND

Figura 5-10 Diagrama esquemtico do Projeto 11.


Fonte: do autor.

O encoder funciona como se houvesse trs chaves: cho que l os terminais do encoder e acende todas os
duas para os canais A e B e uma para o boto de LEDs quando o boto pressionado. Tambm apro-
presso P.* veitamos para melhorar a lgica que est por trs das
luzes. Queremos que elas se comportem de modo
Como o diagrama esquemtico muito semelhan- mais realstico, mudando automaticamente. No Pro-
te ao do Projeto 5, no surpresa ver tambm que jeto 5, quando voc mantinha o boto pressionado,
a disposio dos componentes no protoboard (Fi- as luzes mudavam aproximadamente uma vez a cada
gura 5-11) semelhante em ambos os projetos. segundo. Normalmente, um semforo comum fica
verde ou vermelho durante um perodo bem mais
longo do que quando est amarelo. Por isso, agora
Projetos com sensores

Software o nosso sketch tem dois perodos: shortPeriod (pe-


Como ponto de partida, vamos comear com o rodo curto), que no se altera, sendo usado quando
sketch do Projeto 5. Acrescentamos ao sketch um tre- o semforo est mudando, e longPeriod (perodo
longo), que define quanto tempo os sinais verde e
vermelho ficam acesos. O valor de longPeriod pode
* N. de T.: O encoder rotativo costuma ter cinco terminais: dois
para os canais A e B, um para o boto de presso P, um GND co-
ser modificado girando o boto do encoder rotativo.
mum para os canais A e B, e um GND para o boto de presso.
O elemento-chave para lidar com o encoder a
Quando instalar o seu encoder, voc dever conferir a folha de
captulo 5

especificaes e, se for o caso, fazer as adaptaes necessrias funo getEncoderTurn. Sempre que for chama-
na fiao. Se no dispuser da folha de especificaes, poder da, essa funo compara o estado anterior de A e
usar o multmetro para fazer um levantamento dos terminais. B com o estado atual. Se alguma coisa mudou, ela

77

Monk_05.indd 77 06/12/13 16:30


Figura 5-11 Disposio dos componentes do Projeto 11 no protoboard.
Fonte: do autor.

determina se o giro foi horrio ou anti-horrio e re- Se voc quiser usar um encoder em outros proje-
torna um 1 ou 1 respectivamente. Se no houver tos, voc poder copiar essa funo. A funo usa
modificao (o boto no foi girado), ela retornar static para modificar as variveis oldA (A antigo)
o valor 0. Essa funo deve ser chamada frequen- e oldB (B antigo). Essa tcnica til para manter os
temente porque, se isso no for feito, algumas valores entre uma chamada da funo e a prxima.
mudanas no sero reconhecidas corretamente Normalmente, os valores das variveis so iniciali-
quando o boto for girado rapidamente. zados a cada vez que a funo chamada.

LISTAGEM DO PROJETO 11
int redPin = 13;
30 projetos com Arduino

int yellowPin = 12;


int greenPin = 11;
int aPin = 4;
int bPin = 2;
int buttonPin = 3;

int state = 0;
int longPeriod = 5000; // perodo de tempo durante vermelho ou verde
int shortPeriod = 700; // perodo de tempo durante uma mudana

78

Monk_05.indd 78 06/12/13 16:30


LISTAGEM DO PROJETO 11
int targetCount = shortPeriod;
int count = 0;

void setup()

{
pinMode(aPin, INPUT_PULLUP); // configurao dos modos dos pinos
pinMode(bPin, INPUT_PULLUP);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(redPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
pinMode(greenPin, OUTPUT);
}

void loop()
{
count++;
if (digitalRead(buttonPin) == LOW)
{
setLights(HIGH, HIGH, HIGH);
}
else
{
int change = getEncoderTurn();
int newPeriod = longPeriod + (change * 1000);
if (newPeriod >= 1000 && newPeriod <= 10000)
{
longPeriod = newPeriod;
}
if (count > targetCount)
{
setState();
count = 0;
}
}
delay(1);
}

int getEncoderTurn()
{
// retorna -1, 0, ou +1
Projetos com sensores

static int oldA = LOW;


static int oldB = LOW;
int result = 0;
int newA = digitalRead(aPin);
int newB = digitalRead(bPin);
if (newA != oldA || newB != oldB)
{
// algo mudou
if (oldA == LOW && newA == HIGH)
{
captulo 5

result = -(oldB * 2 - 1);


}
(continua)

79

Monk_05.indd 79 06/12/13 16:30


LISTAGEM DO PROJETO 11 continuao
}
oldA = newA;
oldB = newB;
return result;
}

int setState()
{
if (state == 0)
{
setLights(HIGH, LOW, LOW);
targetCount = longPeriod;
state = 1;
}
else if (state == 1)
{
setLights(HIGH, HIGH, LOW);
targetCount = shortPeriod;
state = 2;
}
else if (state == 2)
{
setLights(LOW, LOW, HIGH);
targetCount = longPeriod;
state = 3;
}
else if (state == 3)
{
setLights(LOW, HIGH, LOW);
targetCount = shortPeriod;
state = 0;
}
}

void setLights(int red, int yellow, int green)


{
digitalWrite(redPin, red);
digitalWrite(yellowPin, yellow);
digitalWrite(greenPin, green);
}

Esse sketch ilustra uma tcnica til que permite Por isso, o que faremos utilizar um perodo muito
medir a durao de eventos (por exemplo, deixar curto (1 milissegundo) e um contador que incre-
30 projetos com Arduino

um LED aceso por determinados segundos) e, ao mentado a cada execuo do loop. Assim, se quiser-
mesmo tempo, verificar se o encoder girou ou se mos um retardo de 20 segundos, basta interromper
o boto foi pressionado. Se simplesmente ussse- o processo quando o contador atingir 20.000. No
mos a funo delay (retardo) com, digamos, o valor to exato quanto chamar uma nica vez a funo de-
20.000, ento, durante 20 segundos nada mais po- lay porque, na realidade, esse 1 milissegundo 1 mi-
deramos fazer como, por exemplo, verificar o esta- lissegundo mais o tempo de processamento dos de-
do do encoder ou da chave durante esse perodo. mais comandos que so executados dentro do loop.

80

Monk_05.indd 80 06/12/13 16:30


+5V
Juntando tudo
Carregue o sketch completo do Projeto 11, que
est no Sketchbook do Arduino, e transfira-o para a
placa (veja o Captulo 1).

LDR
Voc pode pressionar o boto do encoder para tes-
tar os LEDs e gir-lo para mudar o perodo em que Pino Analog 0 (A0)
Arduino
os LEDs permanecero ligados.

Sensor luminoso

100 KV
Um dispositivo comum e de fcil utilizao para
medir a intensidade luminosa o resistor depen-
dente de luz (LDR, de Light Dependent Resistor). Al-
GND
gumas vezes tambm denominado fotorresistor.
Figura 5-12 Utilizao de um LDR para medir luz.
Quanto mais intensa a luz que bate na superfcie Fonte: do autor.
do LDR, menor a resistncia. Um LDR tpico tem
uma resistncia no escuro de aproximadamen- tenso, ento, ser de aproximadamente 4:1 a fa-
te 2 MV e, sob iluminao intensa, em torno de vor do resistor fixo, dando uma tenso na entrada
20 kV. analgica em torno de 4V.

Podemos converter essa variao de resistncia em Um fotossensor mais sensvel o fototransistor.


uma variao de tenso. Para isso, usaremos o LDR Ele funciona como um transistor comum, no qual
em srie com um resistor como divisor de tenso, normalmente no existe o terminal da base. Em
conectado a uma entrada analgica. O diagrama vez disso, a corrente de coletor controlada pela
esquemtico est mostrado na Figura 5-12. quantidade de luz que incide no fototransistor.

Com um resistor fixo de 100K, podemos fazer uma


estimativa grosseira dos valores de tenso que po-
dem ser esperados na entrada analgica. Projeto 12
Na escurido, o LDR ter uma resistncia de 2 MV. Monitor de pulsao
arterial
Projetos com sensores

Nesse caso, com um resistor fixo de 100K, haver


uma razo de tenso de 20:1, com a maior parte da
Este projeto utiliza um LED infravermelho (IR,
tenso aplicada no LDR. Isso resulta em uma tenso
de infrared) de alta potncia e um fototransistor
em torno de 4,8V no LDR e 0,2V no pino analgico.
para detectar a pulsao no seu dedo. Ao mesmo
Por outro lado, se o LDR estiver sob luz intensa, sua tempo, um LED vermelho pisca acompanhando a
resistncia cair para cerca de 20 kV. A razo de pulsao.
captulo 5

81

Monk_05.indd 81 06/12/13 16:30


cia do fototransistor muda ligeiramente quando o
COMPONENTES E EQUIPAMENTO
sangue pulsa no dedo.
Descrio Apndice
Arduino Uno ou Leonardo m1/m2 O diagrama esquemtico est mostrado na Figura
D1 LED vermelho de 5 mm s1 5-13 e a disposio dos componentes, na Figura 5-15.
D2 LED IR de 5 mm, transmissor s20 Escolhemos um valor bem elevado para a resistncia
de comprimento de onda de R1 porque a maior parte da luz que passa atravs do
940nm dedo ser absorvida e queremos que o fototransistor
R1 Resistor de 56 kV e 1/4 W r7 seja bem sensvel. Talvez voc deva testar diversos
R2 Resistor de 270 V e 1/4 W r3' valores de resistncia para obter o melhor resultado.
R3 Resistor de 100 V e 1/4 W r2'
T1 Fotorresistor IR (mesmo s19 importante blindar o fototransistor impedindo
comprimento de onda de D2) ao mximo a interferncia de outras luzes. Isso
Protoboard h1 particularmente importante com luzes domsticas,
Fios de conexo (jumpers) h2 cuja luminosidade flutua ligeiramente 50 ou 60 ve-
zes por segundo (frequncia da rede eltrica). Isso
acrescenta uma quantidade considervel de rudo
ao nosso sinal fraco de pulsao arterial.
Hardware
O monitor de pulsao arterial funciona da seguin- Por essa razo, o fototransistor e o LED so alojados
te forma: faz o LED incidir o feixe de luz IR em um em um tubo de plstico ou so feitos de carto cor-
dos lados do seu dedo enquanto o fototransistor rugado e fita adesiva.* A construo est mostrada
capta a luz transmitida no outro lado. A resistn- na Figura 5-14.

+5V
+5V
56KV

R1 D2

D12

T1 A0 Arduino

D1
270V

100V

R2 R3
30 projetos com Arduino

GND GND

Figura 5-13 Diagrama esquemtico do Projeto 12.


Fonte: do autor.

* N. de T.: O dimetro deve ser suficiente para alojar o dedo,


o LED e o fototransistor. Leia o prximo pargrafo antes de
providenciar o tubo.

82

Monk_05.indd 82 06/12/13 16:30


Para reduzir as interferncias, bom usar fio blin-
dado com o fototransistor. preciso levar em conta
que, nos LEDs IR, o terminal mais comprido o ne-
gativo, em vez de ser o positivo. Assim, consulte a
folha de especificaes do LED antes de mont-lo.

A disposio dos componentes deste projeto no


protoboard (Figura 5-15) bem simples.

O tubo j completo pode ser visto na Figura 5-16.

Figura 5-14 Tubo do sensor para o monitor de


pulsao arterial.
Software
Fonte: do autor. O software deste projeto um tanto engenhoso.
Na verdade, no instalaremos imediatamente o
Dois furos de 5 mm so feitos, frente a frente, em sketch final completo. Comearemos executando
lados opostos do tubo. O LED e o fototransistor so um sketch de teste que levantar alguns dados. Em
inseridos em cada um deles. Pequenos pedaos co- seguida, poderemos colar esses dados em uma
loridos de fio rgido so soldados nos terminais do planilha eletrnica, produzindo um grfico que
LED e do fototransistor. A seguir, os fios so dobra- permitir testar o algoritmo de suavizao (essa
dos e fita adesiva aplicada por cima para mant- questo ser aprofundada mais adiante).
-los no lugar. Anote que cor de fio corresponde a
cada terminal antes de passar a fita por cima. O sketch de teste est na Listagem do Projeto 12.

Projetos com sensores

LED IR
coletor emissor
captulo 5

Fototransistor

Figura 5-15 Disposio dos componentes do Projeto 12 no protoboard.


Fonte: do autor.

83

Monk_05.indd 83 06/12/13 16:30


Figura 5-16 Projeto 12: monitor de pulsao arterial.
Fonte: do autor.

Esse sketch (ou script) l o sinal bruto


LISTAGEM DO PROJETO 12 SKETCH DE TESTE
(raw) da entrada analgica, aplica a
int ledPin = 12; funo de suavizao ao sinal e, em
int sensorPin = 0; seguida, envia ambos os valores ao
double alpha = 0.75;
Serial Monitor, que os exibir na tela,
int period = 20; de onde ns poderemos copi-los e
double change = 0.0; ento col-los em uma planilha eletr-
nica. Observe que a comunicao com
void setup()
{
o Serial Monitor est configurada para
pinMode(ledPin, OUTPUT); a velocidade mxima. Com isso, pode-
Serial.begin(115200); remos minimizar os efeitos de retardo
} causados pelo envio dos dados. Quan-
void loop()
do voc iniciar a execuo do Serial
{ Monitor, voc dever ajustar a veloci-
static double oldValue = 0; dade serial para 115.200 bauds.
static double oldChange = 0;
int rawValue = A funo de suavizao utiliza uma
analogRead(sensorPin);
tcnica especial em que o valor cor-
double value = alpha * oldValue
rente resultado de uma soma pon-
30 projetos com Arduino

+ (1 - alpha) * rawValue;
derada de todos as leituras anteriores
Serial.print(rawValue); com pesos cada vez menores. O local,
Serial.print(",");
no cdigo, em que realizamos essa su-
Serial.println(value);
avizao nas linhas
oldValue = value;
delay(period); double value = alpha * oldValue
} + (1 - alpha) * rawValue;

84

Monk_05.indd 84 06/12/13 16:30


A varivel alpha um nmero maior que 0 e menor
LISTAGEM DO PROJETO 12
que 1. Ela determina o grau de suavizao.
int ledPin = 12;
Coloque seu dedo no tubo sensor, inicie o Serial int sensorPin = 0;
Monitor e espere 3 ou 4 segundos para capturar
double alpha = 0.75;
alguns pulsos.
int period = 20;
double change = 0.0;
A seguir, copie e cole o texto capturado em uma pla-
nilha eletrnica. Provavelmente, ser feita uma per- void setup()
gunta a respeito do caractere delimitador de coluna {
que est sendo usado. Nesse caso, uma vrgula. Os pinMode(ledPin, OUTPUT);
}
dados resultantes e um grfico desenhado a partir
das duas colunas esto mostrados na Figura 5-17. void loop()
{
A linha mais irregular a dos dados brutos (raw), li- static double oldValue = 0;
dos da porta analgica. Na linha mais suave, vemos static double oldChange = 0;
int rawValue =
claramente que a maior parte do rudo foi removi-
analogRead(sensorPin);
da. Se, na linha suave, aparecer rudo significativo double value = alpha * oldValue
particularmente, picos falsos que podem causar + (1 - alpha) * rawValue;
confuso , ento aumente o grau de suavizao change = value - oldValue;
aumentando o valor de alpha.
digitalWrite(ledPin, (change <
0.0 && oldChange > 0.0));
Logo que voc descobrir o valor correto de alpha
para o caso do seu sensor, voc poder transferi- oldValue = value;
-lo para o sketch real (ou script), passando a us-lo oldChange = change;
no lugar do sketch de teste. O sketch real est na delay(period);
}
listagem a seguir.

Projetos com sensores


captulo 5

Figura 5-17 Dados de teste do monitor de pulsao arterial passados para uma planilha.
Fonte: do autor.

85

Monk_05.indd 85 06/12/13 16:30


Agora resta o problema de deteco dos picos. Exa- Para uma dada temperatura, a frmula de clculo
minando a Figura 5-17, vemos que as leituras cres- da resistncia dada por
cem gradativamente at que mudam de sentido e
comeam a diminuir. Se guardarmos a leitura ante- R = Ro exp(beta/(T + 273) beta/(To + 273)
rior (oldValue) e a compararmos com a leitura cor- Voc pode fazer o clculo se quiser, mas um modo
rente (value), poderemos calcular a variao (chan- bem mais simples de medir temperatura usando
ge) de valor. Quando os valores esto crescendo, a um circuito integrado especial que mede tempera-
variao positiva e, quando esto diminuindo, a tura, como o chip TMP36. Esse dispositivo de trs
variao negativa. Assim, se acendermos o LED terminais tem dois pinos para a alimentao eltri-
sempre que a variao anterior (oldChange) for po- ca (5V) e um terceiro pino de sada (out), cuja tem-
sitiva e a nova variao for negativa, ento o LED peratura T, em graus clsius C, relaciona-se com a
piscar por um breve momento no pico de cada tenso de sada V atravs da equao
batimento cardaco.
T = (V 0,5) 100

Juntando tudo Assim, se a tenso de sada for 1V, a temperatura


o
ser 50 C.
Tanto o sketch de teste quanto o sketch real do
Projeto 12 esto no Sketchbook do Arduino. Instru-
es de como transferi-los para a placa podem ser
vistas no Captulo 1. Projeto 13
Como foi mencionado antes, este projeto exige Registrador de
engenhosidade para coloc-lo em funcionamen- temperatura USB
to. Provavelmente, voc descobrir que dentro do
tubo h um lugar melhor para colocar o dedo e Este projeto controlado por um computador.
conseguir que pulsos sejam detectados. Se houver No entanto, aps receber as instrues para o
dificuldades, execute o sketch de teste como foi registro (logging) das temperaturas, o dispositivo
descrito antes. Verifique se o sensor est obtendo pode ser desconectado, funcionando com as ba-
pulsos e se o fator alpha suficientemente baixo. terias enquanto faz o registro. Primeiro, durante
o registro, os dados so armazenados. Depois,
preciso enfatizar que este dispositivo no deve ser quando o registrador volta a ser conectado, os
utilizado em qualquer tipo de aplicao mdica real. dados so transferidos para o computador por
meio da conexo USB. No computador, os dados
podem ser copiados e colados em uma planilha
eletrnica. Por default, o registrador l e grava
Medio de temperatura uma amostra a cada 5 minutos e pode registrar
A medio de temperatura um problema similar at 1.000 amostras.
ao da medio da intensidade luminosa. Em vez
de um LDR, usaremos um dispositivo denominado Para instruir o registrador de temperatura, usare-
30 projetos com Arduino

termistor. medida que a temperatura se eleva, a mos comandos a partir do computador. A Tabela
resistncia tambm aumenta. 5-1 mostra as definies desses comandos e seus
significados.
Quando voc compra um termistor, ele tem uma
resistncia nominal. Neste caso, o termistor de Este projeto requer apenas um circuito integrado
33 kV. Essa a resistncia do dispositivo na tem- TMP36, que pode ser inserido diretamente nos pi-
o
peratura de 25 C. nos de conexo do Arduino.

86

Monk_05.indd 86 06/12/13 16:30


Tabela 5-1 Comandos para o lado curvo do TMP36 deve estar voltado para fora
registrador de temperatura da placa do Arduino. Fazendo uma pequena dobra
nos terminais com a ajuda de um alicate, consegui-
R L os dados armazenados pelo re-
remos um contato melhor.
gistrador
X Limpa todos os dados do registrador Dois dos pinos analgicos (A0 e A2) sero utili-
C Modo Celsius zados como conexes de GND e 5V do TMP36. A
F Modo Fahrenheit corrente consumida to baixa que as sadas ana-
19 Ajusta o perodo de amostragem em lgicas conseguem fornecer potncia suficiente se
minutos de 1 a 9 colocarmos um dos pinos em nvel alto (HIGH) e o
G Comea a registrar as temperaturas outro em nvel baixo (LOW).
? Faz um relatrio do estado do dispo-
sitivo, nmero de amostras registra-
das, etc. Software
Fonte: do autor.
O software deste projeto mais complexo do
que os anteriores (veja a Listagem do Projeto 13).
Todas as variveis usadas nos sketches at agora
COMPONENTES E EQUIPAMENTO eram apagadas quando a placa do Arduino era ini-
Descrio Apndice cializada (reset) ou desconectada da alimentao
Arduino Uno ou Leonardo m1/m2 eltrica. Algumas vezes, no entanto, gostaramos
CI1 TMP36 s22 de manter os dados armazenados de forma per-
manente pois, assim, estaro disponveis quando
voltarmos a energizar ou inicializar a placa. Isso
pode ser feito se utilizarmos um tipo de memria
Hardware especial que est disponvel no Arduino: a EE-
O diagrama esquemtico do Projeto 13 est mos- PROM, que significa memria programvel apenas
trado na Figura 5-18. de leitura eletricamente apagvel. Tanto o Arduino
Uno quanto o Leonardo tm 1024 bytes de EE-
O circuito to simples que podemos simplesmen- PROM.
te inserir os terminais do TMP36 na placa do Ardui-
no, como mostrado na Figura 5-19. Observe que o Para que o registrador seja til, necessrio que
ele se lembre das leituras j feitas, mesmo quando
ele desconectado do computador e alimentado
A2 com baterias. Tambm necessrio que ele se lem-
Projetos com sensores

5V bre do perodo de registro (logging period).

Este o primeiro projeto em que utilizamos a EE-


TMP36
A1 Sada PROM do Arduino para armazenar valores de for-
Arduino
ma que esses dados no se percam quando a placa
GND for inicializada (reset) ou desligada da alimentao
eltrica. Isso significa que, aps ajustar as confi-
A0
guraes de operao do registrador, poderemos
desconectar o cabo USB e deix-lo funcionando
captulo 5

com baterias. Mesmo que a carga das baterias aca-


Figura 5-18 Diagrama esquemtico do Projeto 13. be, os dados ainda estaro l na prxima vez que o
Fonte: do autor. Arduino for energizado.

87

Monk_05.indd 87 06/12/13 16:30


Figura 5-19 Projeto 13: registrador de temperatura.
Fonte: do autor.

LISTAGEM DO PROJETO 13
#include <EEPROM.h>

#define analogPin 1
#define gndPin 0
#define plusPin 2
#define maxReadings 1000

int lastReading = 0;

boolean loggingOn;
//long period = 300;
long period = 10000; // 10 segundos
long lastLoggingTime = 0;
char mode = 'C';

void setup()
30 projetos com Arduino

{
pinMode(gndPin, OUTPUT);
pinMode(plusPin, OUTPUT);
digitalWrite(gndPin, LOW);
digitalWrite(plusPin, HIGH);

Serial.begin(9600);

88

Monk_05.indd 88 06/12/13 16:30


LISTAGEM DO PROJETO 13
Serial.println("Ready");

lastReading = EEPROM.read(0); // o primeiro byte a posio da leitura


char sampleCh = (char)EEPROM.read(1); // o segundo o perodo de registro '0' a '9'
if (sampleCh > '0' && sampleCh <= '9')
{
setPeriod(sampleCh);
}
loggingOn = true; // a varivel loggingOn torna-se verdadeira, ativando o registro
}

void loop()
{
if (Serial.available())
{
char ch = Serial.read();
if (ch == 'r' || ch == 'R')
{
sendBackdata();
}
else if (ch == 'x' || ch == 'X')
{
lastReading = 0;
EEPROM.write(0, 0);
Serial.println("Data cleared");
}
else if (ch == 'g' || ch == 'G')
{
loggingOn = true;
Serial.println("Logging started");
}
else if (ch > '0' && ch <= '9')
{
setPeriod(ch);
}
else if (ch == 'c' or ch == 'C')
{
Serial.println("Mode set to deg C");
mode = 'C';
}
Projetos com sensores

else if (ch == 'f' or ch == 'F')


{
Serial.println("Mode set to deg F");
mode = 'F';
}
else if (ch == '?')
{
reportStatus();
}
}
captulo 5

long now = millis();


if (loggingOn && (now > lastLoggingTime + period))
(continua)

89

Monk_05.indd 89 06/12/13 16:30


LISTAGEM DO PROJETO 13 continuao
{
logReading();
lastLoggingTime = now;
}
}

void sendBackdata()
{
loggingOn = false;
Serial.println("Logging stopped");
Serial.println("------ cut here ---------");
Serial.print("Time (min)\tTemp (");
Serial.print(mode);
Serial.println(");
for (int i = 0; i < lastReading + 2; i++)
{
Serial.print((period * i) / 60000);
Serial.print("\t");
float temp = getReading(i);
if (mode == 'F')
{
temp = (temp * 9) / 5 + 32;
}
Serial.println(temp);
}
Serial.println("------ cut here ---------");
}

void setPeriod(char ch)


{
EEPROM.write(1, ch);
int periodMins = ch - '0';
Serial.print("Sample period set to: ");
Serial.print(periodMins);
Serial.println(" mins");
period = periodMins * 60000;
}

void logReading()
{
if (lastReading < maxReadings)
{
storeReading(temp, lastReading);
lastReading++;
}
30 projetos com Arduino

else
{
Serial.println("Full! logging stopped");
loggingOn = false;
}
}

float measureTemp()

90

Monk_05.indd 90 06/12/13 16:30


LISTAGEM DO PROJETO 13
{
int a = analogRead(analogPin);
float volts = a / 205.0;
float temp = (volts - 0.5) * 100;
return temp;
}

void storeReading(float reading, int index)


{
EEPROM.write(0, (byte)index); // armazenar o nmero de amostras no byte 0
byte compressedReading = (byte)((reading + 20.0) * 4);
EEPROM.write(index + 2, compressedReading);
reportStatus();
}

float getReading(int index)


{
lastReading = EEPROM.read(0);
byte compressedReading = EEPROM.read(index + 2);
float uncompressesReading = (compressedReading / 4.0) - 20.0;
return uncompressesReading;
}

void reportStatus()
{
Serial.println("----------------");
Serial.println("Status");
Serial.print("Current Temp C");
Serial.println(measureTemp());
Serial.print("Sample period (s)\t");
Serial.println(period / 1000);
Serial.print("Num readings\t");
Serial.println(lastReading);
Serial.print("Mode degrees\t");
Serial.println(mode);
Serial.println("----------------");
}

Voc ver que, no incio desse sketch, usamos o Felizmente, a leitura e a escrita na EEPROM so
Projetos com sensores

comando #define para fazer o que antes fazamos feitas com 1 byte a cada vez. Assim, se quisermos
usando variveis. Na verdade, essa uma forma mais escrever uma varivel do tipo byte ou char, podere-
eficiente de definir constantes, isto , valores que mos usar as funes EEPROM.write e EEPROM.read,
no se modificam durante a execuo do sketch. como mostrado a seguir:
ideal para definio de pinos e constantes, como
beta. O comando #define o que denominamos di- char letterToWrite = 'A'; // letra a ser
escrita
retiva de pr-processamento. Acontece que, antes da EEPROM.write(0, letterToWrite);
compilao do sketch, todas as ocorrncias de seu
captulo 5

nome, em qualquer lugar do sketch, so substitudas char letterToRead;


por seu valor. uma questo de gosto pessoal usar letterToRead = EEPROM.read(0); // letra a ser
lida
#define ou uma varivel.

91

Monk_05.indd 91 06/12/13 16:30


O 0 que aparece na leitura e escrita o endereo Tanto a codificao como a decodificao esto em-
utilizado na EEPROM. Pode ser qualquer valor en- butidas nas funes storeReading (armazena leitura)
tre 0 e 1023. Cada endereo uma posio de me- e getReading (obtenha leitura). Assim, se decidirmos
mria em que 1 byte armazenado. usar um modo diferente de armazenar os dados, pre-
cisaremos apenas modificar essas duas funes.
Neste projeto, queremos armazenar o valor da posi-
o ou endereo na memria em que se encontra a
ltima leitura de temperatura realizada. O valor des- Juntando tudo
sa posio obtido da varivel lastReading (ltima
Carregue o sketch completo do Projeto 13, que
leitura). Alm disso, queremos armazenar tambm
est no Sketchbook do Arduino, e transfira-o para a
todas as leituras de temperatura j realizadas. Assim,
placa (veja o Captulo 1).
no primeiro byte da EEPROM armazenaremos o valor
de lastReading, no segundo byte armazenaremos o Agora abra o Serial Monitor (Figura 5-20) e, como
perodo de registro como um caractere de 1 a 9 e, a teste, ajuste o registrador de temperatura para
partir dessa posio, os dados das leituras realizadas fazer uma leitura de temperatura a cada minuto.
sero armazenados nos bytes que se seguem. Para isso, digite um 1 no Serial Monitor. A placa
responder com a mensagem Sample period set
Cada leitura de temperatura guardada em uma
to: 1 min (Perodo de amostragem ajustado para: 1
varivel do tipo float. Como vimos no Captulo 2,
min). Para usar o modo Fahrenheit, digitamos F no
uma varivel float ocupa 4 bytes de dados. Aqui
Serial Monitor. Tambm poderemos verificar o es-
temos uma opo: podemos armazenar todos os 4
tado do registrador se digitarmos ? (Figura 5-21).
bytes ou encontrar um modo de codificar a tem-
peratura armazenando-a em um nico byte. Esco- Para desconectar o cabo USB, precisamos de uma
lhemos esta ltima opo para armazenarmos o alternativa para a alimentao eltrica, como o
mximo de leituras na EEPROM. cabo de bateria que fizemos no Projeto 6. Se voc
quiser que o registrador continue fazendo leituras
O modo de codificar a temperatura utilizando um ni-
aps desconectar o cabo USB, ento voc dever
co byte comea com algumas suposies a respeito
inserir o cabo da bateria ao mesmo tempo em que
de nossas temperaturas. Primeiro, assumiremos que
desconecta o cabo USB.
qualquer temperatura em graus clsius estar entre
20 e +40. Provavelmente, qualquer coisa maior ou Finalmente, podemos digitar o comando G (go)
menor danificaria a nossa placa de Arduino. Segundo, para iniciar o registro das temperaturas. Em segui-
assumiremos que precisamos conhecer a temperatu- da, podemos desconectar o cabo USB e deixar nos-
ra com uma aproximao de um quarto de grau.

Com essas duas suposies, podemos tomar qual-


quer valor de temperatura lido na entrada anal-
gica, somar 20, multiplicar por 4 e ainda estarmos
seguros de que sempre teremos um nmero entre
30 projetos com Arduino

0 e 240. Como um byte pode armazenar um valor


entre 0 e 255, ento esse processo de codificao
funciona bem.

Quando lemos nossos nmeros da EEPROM, preci-


samos convert-los de volta para o tipo float. Para
isso, invertemos o processo, ou seja, dividimos por Figura 5-20 Enviando comandos pelo Serial
4 e, ento, subtramos 20. Monitor.
Fonte: do autor.

92

Monk_05.indd 92 06/12/13 16:30


Quando os dados estiverem na planilha, voc po-
der desenhar um grfico usando os nossos dados.

Figura 5-21 Exibindo o estado do registrador de


temperatura.
Fonte: do autor.

so registrador funcionando com baterias. Aps 10


ou 15 minutos, podemos conect-lo de novo para
ver que dados temos. Para isso, abra o Serial Moni-
tor e digite o comando R. Os resultados esto mos-
trados na Figura 5-22. Selecione todos os dados,
incluindo os cabealhos Time (tempo) e Temp
(temperatura) no topo.

Copie os dados passando-os para a rea de trans-


ferncia (aperte CTRL-C no Windows e no Linux ou
ALT-C em Macs). A seguir, abra uma planilha em um
Figura 5-22 Dados para copiar e colar em uma
programa como o Excel da Microsoft e, finalmente, planilha eletrnica.
cole o contedo nessa planilha (Figura 5-23). Fonte: do autor.

Projetos com sensores


captulo 5

Figura 5-23 Dados de temperatura transferidos para uma planilha.


Fonte: do autor.

93

Monk_05.indd 93 06/12/13 16:30


LEDs. Na prxima seo, examinaremos alguns
Resumo projetos que utilizam a luz sob diversas formas.
Agora sabemos como utilizar diversos tipos de Veremos tecnologias mais avanadas de display
sensor e dispositivos de entrada. Com isso, po- como, por exemplo, painis de texto LCD e LEDs
demos continuar no nosso conhecimento de de sete segmentos.
30 projetos com Arduino

94

Monk_05.indd 94 06/12/13 16:30


captulo 6

Projetos com LEDs multicores


Neste captulo, examinaremos mais alguns projetos baseados em LEDs e displays.
Em particular, examinaremos o uso de LEDs de diversas cores, de LEDs de sete
segmentos, de displays com matriz de LEDs e de painis LCD.

Objetivos deste captulo


Apresentar dispositivos de exibio mais complexos.

Utilizar um display luminoso multicor.

Mostrar o que so LEDs de sete segmentos.

Demonstrar como funciona um array de LEDs.

Demonstrar como funciona um display LCD.

Ensinar como exibir uma mensagem em um painel LCD a partir de


um computador.

Monk_06.indd 95 06/12/13 16:31


Projeto 14 Cada LED tem o seu prprio resistor que limita a
corrente a 30 mA por LED.
Display luminoso
O LED tricolor ligeiramente plano em um dos la-
multicor dos e, na Figura 6-2, esse lado est orientado para
Este projeto usa um LED composto tricolor de alto cima. O terminal 2 o mais longo e corresponde ao
brilho com um encoder rotativo. Girando o enco- catodo comum.
der, a cor exibida no LED muda.
O projeto completo est mostrado na Figura 6-3.
Esse LED tricolor interessante porque tem trs
LEDs simples montados em um suporte de quatro Cada LED (vermelho, verde e azul) acionado por
terminais ou pernas. O LED composto tem uma uma sada da placa do Arduino, sendo modulada
configurao de catodo comum, ou seja, os catodos por largura de pulso (PWM). Desse modo, pode-
negativos de cada LED esto ligados em comum e mos alterar a sada de cada LED produzindo um
correspondem a um nico terminal externo. espectro completo de cores visveis.

Se voc no conseguir um LED de quatro terminais O encoder rotativo est conectado do mesmo
(vermelho, verde, azul e comum), voc poder usar modo que no Projeto 11. Ao gir-lo, a cor muda e,
um dispositivo de seis terminais. Simplesmente ao pression-lo, o LED ligado ou desligado.
junte todos os catodos, tomando como referncia
a folha de especificao.
Software
COMPONENTES E EQUIPAMENTO Este sketch (Listagem do Projeto 14) utiliza um
array para representar as diferentes cores que se-
Descrio Apndice
ro exibidas pelo LED. Cada um dos elementos do
Arduino Uno ou Leonardo m1/m2
array um nmero do tipo long de 32 bits. Trs
D1 LED RGB tricolor s7
dos quatro bytes do nmero long so usados para
R1-3 Resistor de 270 V e 1/4 W r3 representar as componentes vermelha, verde e
S1 Encoder rotativo com chave h13 azul da cor. Cada componente corresponde in-
Protoboard h1 tensidade luminosa de cada um dos LEDs verme-
Fios de conexo (jumpers) h2 lho, verde e azul. Os nmeros do array esto em
hexadecimal e correspondem aos nmeros em
formato hex que so usados para representar as
Hardware cores de 24 bits em pginas da web. Se voc qui-
ser criar alguma cor em particular, procure uma
A Figura 6-1 mostra o diagrama esquemtico* do
tabela de cores digitando web color chart em seu
Projeto 14, e a Figura 6-2, a disposio dos compo-
site de busca favorito e consulte o valor hex da cor
nentes no protoboard.
que deseja.
30 projetos com Arduino

As 48 cores do array so escolhidas nessa tabe-


* N. de T.: O encoder rotativo costuma ter cinco terminais:
la e constituem uma faixa de cores que abrange
dois para os canais A e B, um para o boto de presso P, um
GND comum para os canais A e B, e um GND para o boto de mais ou menos o espectro desde o vermelho at
presso. Quando instalar o seu encoder, voc dever conferir o violeta.
a folha de especificaes e, se for o caso, fazer as adaptaes
necessrias na fiao. Se no dispuser da folha de especifica-
es, voc poder usar o multmetro para fazer um levanta-
mento dos terminais.

96

Monk_06.indd 96 06/12/13 16:31


270 V
D11 R1 Vermelho
270 V
D10 R2
270 V
D9 R3
Verde

Azul

Arduino
D3

D4

D2 Encoder rotativo

A B P

GND

Figura 6-1 Diagrama esquemtico do Projeto 14.


Fonte: do autor.

Projetos com LEDs multicores


captulo 6

Figura 6-2 Disposio dos componentes do Projeto 14 no protoboard.


Fonte: do autor.

97

Monk_06.indd 97 06/12/13 16:31


Figura 6-3 Projeto 14: display luminoso multicor.
Fonte: do autor.

LISTAGEM DO PROJETO 14
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
int aPin = 2;
int bPin = 4;
int buttonPin = 3;

boolean isOn = true;


int color = 0;
long colors[48]=
{
0xFF2000, 0xFF4000, 0xFF6000, 0xFF8000, 0xFFA000, 0xFFC000, 0xFFE000, 0xFFFF00,
0xE0FF00, 0xC0FF00, 0xA0FF00, 0x80FF00, 0x60FF00, 0x40FF00, 0x20FF00, 0x00FF00,
0x00FF20, 0x00FF40, 0x00FF60, 0x00FF80, 0x00FFA0, 0x00FFC0, 0x00FFE0, 0x00FFFF,
30 projetos com Arduino

0x00E0FF, 0x00C0FF, 0x00A0FF, 0x0080FF, 0x0060FF, 0x0040FF, 0x0020FF, 0x0000FF,


0x2000FF, 0x4000FF, 0x6000FF, 0x8000FF, 0xA000FF, 0xC000FF, 0xE000FF, 0xFF00FF,
0xFF00E0, 0xFF00C0, 0xFF00A0, 0xFF0080, 0xFF0060, 0xFF0040, 0xFF0020, 0xFF0000
};

void setup()
{
pinMode(aPin, INPUT_PULLUP);

98

Monk_06.indd 98 06/12/13 16:31


LISTAGEM DO PROJETO 14
pinMode(bPin, INPUT_PULLUP);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}

void loop()
{
if (digitalRead(buttonPin) == LOW)
{
isOn = ! isOn;
delay(200); // debounce
}
if (isOn)
{
int change = getEncoderTurn();
color = color + change;
if (color < 0)
{
color = 47;
}
else if (color > 47)
{
color = 0;
}
setColor(colors[color]);
}
else
{
setColor(0);
}
}

int getEncoderTurn()
{
// retorna -1, 0, ou +1
Projetos com LEDs multicores

static int oldA = LOW;


static int oldB = LOW;
int result = 0;
int newA = digitalRead(aPin);
int newB = digitalRead(bPin);
if (newA != oldA || newB != oldB)
{
// algo mudou
if (oldA == LOW && newA == HIGH)
{
result = -(oldB * 2 - 1);
}
}
captulo 6

oldA = newA;
oldB = newB;
(continua)

99

Monk_06.indd 99 06/12/13 16:31


LISTAGEM DO PROJETO 14 continuao
return result;
}
void setColor(long rgb)
{
int red = rgb >> 16;
int green = (rgb >> 8) & 0xFF;
int blue = rgb & 0xFF;
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
}

De forma semelhante varredura que fizemos no


Juntando tudo teclado numrico, agora ativaremos um display de
cada vez, acendendo convenientemente os seus
Carregue o sketch completo do Projeto 14, que
segmentos antes de passar para o display seguinte.
est no Sketchbook do Arduino, e transfira-o para a
Isso feito to rapidamente que se tem a iluso de
placa (veja o Captulo 1).
todos os displays estarem acesos ao mesmo tempo.

Cada display pode, em princpio, consumir a


LEDs de sete segmentos corrente de oito LEDs simultaneamente, totali-
zando 160 mA (com 20 mA por LED) bem mais
Houve uma poca em que a moda era possuir um do que podemos dispor em um pino digital de
relgio com display de LEDs. A pessoa apertava um
boto do relgio e as horas surgiam magicamente
como quatro brilhantes dgitos vermelhos. Depois
de um tempo, como era desconfortvel usar as
duas mos para ver as horas, a novidade do relgio
digital foi ultrapassada. Ento, surgiram os relgios
com displays LCD, que s podiam ser lidos sob luz
intensa.

Os displays de LEDs de sete segmentos (Figura 6-4)


foram ultrapassados pelos displays LCD (ver mais
adiante). Entretanto, em algumas situaes, eles
ainda so utilizados.

A Figura 6-5 mostra o circuito de acionamento de


um display de LEDs de sete segmentos.
30 projetos com Arduino

Geralmente, um nico display desse tipo no tem


muita aplicao. A maioria dos projetos requer dois
ou quatro deles. Nesse caso, no teremos pinos de
sada digital suficientes para acionar cada display
separadamente. Uma forma de contornar essa li- Figura 6-4 Display de LEDs de sete segmentos.
mitao usando o circuito da Figura 6-6. Fonte: do autor.

100

Monk_06.indd 100 06/12/13 16:31


Pino digital

2 A

3 B

4 C

5 D
Arduino
6 E

7 F

8 G

9 dp

GND

Figura 6-5 Placa de Arduino acionando um display de LEDs de sete segmentos.


Fonte: do autor.

sada. Por essa razo, usaremos um transistor co- Em condies normais de uso, os transistores tm
mandado por uma sada digital para ativar um a interessante propriedade de manter, entre a base
display por vez. e o emissor, a tenso em 0,6V, independentemen-
te de quanta corrente esteja circulando. Assim, se
O tipo de transistor que utilizaremos denomina- um pino de sada estiver com 5V, ento 0,6V des-
do transistor bipolar. Ele tem trs terminais: emis- sa sada estar presente entre a base e o emissor
sor, base e coletor. Quando uma corrente pequena do transistor. Isso significa que o nosso resistor de
circula entre a base do transistor e o emissor, uma
Projetos com LEDs multicores
base deve ter um valor em torno de
corrente muito maior circula entre o coletor e o
emissor. J vimos esse tipo de transistor no Projeto R = V/I
4, em que ele foi usado para controlar a corrente de
um LED Luxeon de alta potncia. R = 4,4/2 mA = 2,2 kV

No precisamos limitar a corrente que circula entre Na realidade, para garantir que o transistor fun-
o coletor e o emissor porque ela j est limitada cione como uma chave, abrindo e fechando com-
pelos resistores em srie dos LEDs. Entretanto, pletamente, seria bom se a corrente de base fos-
necessrio limitar a corrente que circula pela base. se 4 mA. Como a sada digital pode lidar com at
A maioria dos transistores multiplica a corrente 40 mA, ento no teremos problema se escolher-
por um fator de 100 ou mais. Portanto, precisamos mos um valor padronizado de 1000 ohms.
captulo 6

apenas de uma corrente em torno de 2 mA para


acionar totalmente o transistor.

101

Monk_06.indd 101 06/12/13 16:31


Pino digital

2 A
270 V
3 B
270 V
4 C
270 V
5 D
270 V
Arduino
6 E
270 V
7 F
270 V
8 G
270 V
9 dp
270 V

12 11 10
1K 1K 1K

GND

Figura 6-6 Placa de Arduino acionando mais de um display com LEDs de sete segmentos.
Fonte: do autor.

Projeto 15
Hardware
Dados duplos com LEDs O diagrama esquemtico deste projeto est na Fi-
de sete segmentos gura 6.7.
No Projeto 9, fizemos um dado simples que usava
O mdulo de LEDs de sete segmentos que estamos
sete LEDs separados. Neste projeto, usaremos dois
utilizando do tipo anodo comum. Isso significa
displays de LEDs de sete segmentos para criar da-
que todos os anodos (terminais positivos) dos LEDs
dos duplos.
de sete segmentos esto ligados juntos. Assim,
para ativar um display por vez, devemos controlar
COMPONENTES E EQUIPAMENTO
a alimentao positiva para cada um dos dois ano-
Descrio Apndice dos comuns por vez.
Arduino Uno ou Leonardo m1/m2
Para fazer isso, usamos um transistor. Como que-
D1 Display de dois dgitos com s8
LEDs de sete segmentos (anodo remos controlar a alimentao positiva, o coletor
comum) de cada transistor ligado a 5V, e os emissores so
R3-10 Resistor de 100 V e 1/4 W r2 ligados aos anodos comuns de cada display.
30 projetos com Arduino

R1,R2 Resistor de filme metlico 1 kV r5


e 1/4 W
Usaremos resistores de 100 ohms para limitar a
corrente. Isso pode ser visto embaixo na parte cen-
T1,T2 Transistor 2N2222 s14
tral da figura. Como cada dgito estar ativo duran-
S1 Chave de contato momentneo h3
te metade do tempo, isso significa que, na mdia, o
Protoboard h1
LED receber apenas metade da corrente.
Fios de conexo (jumpers) h2

102

Monk_06.indd 102 06/12/13 16:31


Anodo comum

Figura 6-7 Diagrama esquemtico do Projeto 15.


Fonte: do autor.

A disposio dos componentes no protoboard e


uma fotografia do projeto esto mostradas nas Fi- Software
guras 6-8 e 6-9.
Usamos um array para conter os pinos que esto
Assegure-se de que nenhum dos resistores entre conectados aos segmentos de a at g e ao pon-
em contato com algum outro, porque isso coloca- to decimal. Usamos tambm um array para deter-
ria em curto alguns pinos de sada do Arduino, o minar quais segmentos devem estar acesos para
qual poderia ser danificado. exibir qualquer dgito em particular. Esse array
bidimensional. Cada fila representa um dgito
separado (0 at 9) e cada coluna um segmento
(veja a Listagem do Projeto 15).
Projetos com LEDs multicores
captulo 6

Figura 6-8 Disposio dos componentes do Projeto 15 no protoboard.


Fonte: do autor.

103

Monk_06.indd 103 06/12/13 16:31


Figura 6-9 Dados duplos com displays de LEDs de sete segmentos.
Fonte: do autor.

LISTAGEM DO PROJETO 15
int segmentPins[] = {3, 2, A5, A2, A4, 4, 5, A3};
int displayPins[] = {A1, 6};

int buttonPin = A0;

byte digits[10][8] =
{
// a b c d e f g .
{ 1, 1, 1, 1, 1, 1, 0, 0}, // 0
{ 0, 1, 1, 0, 0, 0, 0, 0}, // 1
{ 1, 1, 0, 1, 1, 0, 1, 0}, // 2
{ 1, 1, 1, 1, 0, 0, 1, 0}, // 3
{ 0, 1, 1, 0, 0, 1, 1, 0}, // 4
{ 1, 0, 1, 1, 0, 1, 1, 0}, // 5
{ 1, 0, 1, 1, 1, 1, 1, 0}, // 6
{ 1, 1, 1, 0, 0, 0, 0, 0}, // 7
{ 1, 1, 1, 1, 1, 1, 1, 0}, // 8
{ 1, 1, 1, 1, 0, 1, 1, 0} // 9
};
30 projetos com Arduino

void setup()
{
for (int i=0; i < 8; i++)
{
pinMode(segmentPins[i], OUTPUT);
}
pinMode(displayPins[0], OUTPUT);

104

Monk_06.indd 104 06/12/13 16:31


LISTAGEM DO PROJETO 15
pinMode(displayPins[1], OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}

void loop()
{
static int dice1;
static int dice2;
if (digitalRead(buttonPin) == LOW)
{
dice1 = random(1,7);
dice2 = random(1,7);
}
updateDisplay(dice1, dice2);
}

void updateDisplay(int value1, int value2)


{
digitalWrite(displayPins[0], LOW);
digitalWrite(displayPins[1], HIGH);
setSegments(value1);
delay(5);
digitalWrite(displayPins[0], HIGH);
digitalWrite(displayPins[1], LOW);
setSegments(value2);
delay(5);
}
void setSegments(int n)
{
for (int i=0; i < 8; i++)
{
digitalWrite(segmentPins[i], ! digits[n][i]);
}
}

Para acionar ambos os displays, devemos ativar se-


Projetos com LEDs multicores

paradamente um por vez, acendendo adequada- Juntando tudo


mente os segmentos. Assim, a funo loop dever
Carregue o sketch completo do Projeto 15, que
guardar os valores exibidos nos displays. Para isso,
est no Sketchbook do Arduino, e transfira-o para a
ela utiliza variveis separadas: dice1 e dice2 (dado1
placa (veja o Captulo 1).
e dado2).

Para fazer o lanamento dos dados, e sempre que


o boto for pressionado, novos valores de dice1 e Projeto 16
dice2 sero produzidos. Isso significa que a jogada
tambm depender de quanto tempo o boto fica Array de LEDs
pressionado. Assim, no precisamos nos preocupar Um array de LEDs um daqueles dispositivos que
captulo 6

em criar uma semente para o gerador de nmeros tem tudo para ser til a um projetista criativo. Con-
aleatrios. siste em uma matriz de LEDs que, neste caso, de

105

Monk_06.indd 105 06/12/13 16:31


8 por 8. Esses dispositivos podem ter apenas um
LED em cada posio da matriz. No projeto que Hardware
construiremos, entretanto, cada LED , na reali-
O mdulo com a matriz de LEDs fornecido como
dade, um par de LEDs, um vermelho e um verde.
um kit (Figura 6-11), sendo muito fcil de montar.
Esse par est montado abaixo de uma nica lente,
Instrues completas esto disponveis no site
dando a impresso de ser um nico ponto. Pode-
da Adafruit. Contudo, sero necessrias algumas
mos ligar cada um ou ambos ao mesmo tempo.
soldas.
Assim, possvel produzir as cores vermelha, ver-
de e laranja. A coisa mais importante verificar se a matriz de
LEDs foi soldada na placa com a orientao correta.
O projeto completo est mostrado na Figura 6-10.
Depois de montada, dificilmente ser modificada.
Ele utiliza um desses arrays, permitindo que pa-
A Figura 6-12 mostra o diagrama esquemtico do
dres multicores sejam exibidos.
projeto. O mdulo usa um tipo de interface serial
2
Usaremos um mdulo da Adafruit que inclui um denominado I C (pronunciado I dois C). So uti-
chip de acionamento. O mdulo necessita de dois lizados apenas os dois pinos localizados aps os
pinos para controlar a matriz de LEDs e de mais pinos GND e AREF. No Leonardo, esses pinos so
dois para a alimentao eltrica. denominados SDA e SCL. No Uno, eles no rece-
bem denominaes. Outra diferena que, no
COMPONENTES E EQUIPAMENTO Leonardo, esses pinos so usados exclusivamente
2
como I C, ao passo que, no Arduino Uno, eles tam-
Descrio Apndice
bm esto conectados a A4 e A5. Assim, no Uno,
Arduino Uno ou Leonardo m1/m2 2
2
se voc estiver utilizando uma interface I C, voc
Mdulo I C matriz de LEDs 8x8, m5 no poder usar os pinos A4 e A5 como entradas
bicolor
analgicas.
Protoboard h1
Fios de conexo (jumpers) h2 Se voc tiver uma placa antiga de Arduino, sem pi-
nos SDA e SCL, ento, em seu lugar, voc poder
usar os pinos A4 e A5.

Com apenas quatro pinos de conexo, a disposio


dos componentes no protoboard bem simples
(Figura 6-13).

Software
O mdulo de LEDs necessita da instalao de
duas bibliotecas. Ambas esto disponveis no
site da Adafruit (http://learn.adafruit.com/ada-
30 projetos com Arduino

fruit-led-backpack/bi-color-8x8-matrix). O procedi-
mento de instalao o mesmo utilizado com a bi-
Figura 6-10 Projeto 16: array de LEDs.
Fonte: do autor.
blioteca Keypad (teclado numrico) do Projeto 10.

106

Monk_06.indd 106 06/12/13 16:31


Figura 6-11 O kit do mdulo matriz de LEDs bicolor da Adafruit.
Fonte: do autor.

Ao acessar o site da Adafruit, entre na pgina de a biblioteca Keypad. Voc tambm precisar mudar
Downloads. Dentro dessa pgina, siga os links os nomes das pastas para Adafruit_LEDBackpack
para os dois arquivos listados a seguir. Utilize as e Adafruit_GFX.
opes de download Zip (na coluna da direita,
embaixo). Os arquivos so: Inicie novamente a IDE do Arduino para in-
cluir as novas bibliotecas e carregue o sketch
Adafruit-LED-Backpack-Libray-master Project16_led_Matrix. Voc dever ver um bonito
Adafruit-GFX-Library-master display colorido.

Extraia esses arquivos Zip e coloque-os em Meus O software deste projeto bem curto (Listagem do
Documentos/Arduino/libraries, como voc fez com Projeto 16), utilizando bastante as bibliotecas.
Projetos com LEDs multicores

5V V+

SDA SDA

SCL SCL
Arduino Mdulo da matriz de LEDs

GND V-
captulo 6

Figura 6-12 Diagrama esquemtico do Projeto 16.


Fonte: do autor.

107

Monk_06.indd 107 06/12/13 16:31


Figura 6-13 Disposio dos componentes do Projeto 16 no protoboard.
Fonte: do autor.

O sketch gera coordenadas e cores aleatrias que


LISTAGEM DO PROJETO 16
so usadas para ativar apropriadamente o pixel
#include <Wire.h> correspondente.
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h" A biblioteca GFX produz diversos tipos de efeitos
especiais, incluindo a rolagem de texto e coman-
Adafruit_BicolorMatrix matrix =
Adafruit_BicolorMatrix(); dos para desenhar quadrados, crculos, etc. Consul-
te a documentao da Adafruit sobre a biblioteca
void setup() GFX para desenvolver outras ideias.
{
matrix.begin(0x70);
}
Displays LCD
void loop()
Se nosso projeto precisar exibir mais dgitos, pro-
{
vavelmente usaremos um mdulo de displays LCD.
30 projetos com Arduino

uint16_t color = random(4);


int x = random(8); Eles apresentam a vantagem de j terem includa
int y = random(8); toda a eletrnica de acionamento. Dessa forma,
matrix.drawPixel(x, y, color);
muito do trabalho j est feito sem que precisemos
matrix.writeDisplay();
delay(2); ficar ligando ou desligando cada dgito ou seg-
} mento separadamente.

Tambm h uma certa padronizao em relao a


esses dispositivos. Embora diversos fabricantes os

108

Monk_06.indd 108 06/12/13 16:31


produzam, costumam ser usados da mesma forma. trs controlam o fluxo de dados. Os detalhes do que
Os dispositivos que poderemos utilizar so os acio- enviado ao mdulo LCD podem ser ignorados por-
nados pelo chip HD44780. que h uma biblioteca padro que podemos utilizar.

Quando adquiridos em lojas de componentes ele- Isso ser ilustrado no prximo projeto.
trnicos, os painis LCD podem ser bem caros, mas,
se voc procurar na Internet, voc poder ach-los
por poucos dlares, especialmente se voc adquirir Projeto 17
diversos deles de uma s vez.
Painel de mensagens USB
A Figura 6-14 mostra um mdulo que pode exi- Este projeto permitir exibir uma mensagem em
bir duas linhas de 16 caracteres. Cada caractere um painel LCD a partir de nosso computador. No
constitudo de uma matriz de 7 por 5 segmentos. h razo para que o mdulo LCD fique prximo
bom porque no necessrio acionar cada seg- do computador. Assim, voc pode us-lo na ex-
mento separadamente. tremidade de um cabo USB comprido para exibir
mensagens remotamente por exemplo, junto a
O mdulo do display contm um conjunto de ca-
um painel de intercomunicao na entrada de sua
racteres. Isso significa que, para qualquer carac-
residncia.
tere, o mdulo sabe quais so os segmentos que
devem ser ativados. Alm disso, basta dizer qual
o caractere que desejamos exibir e onde ele deve
Hardware
ficar no display.
O diagrama esquemtico do display LCD pode ser
Precisamos apenas sete sadas digitais para acionar visto na Figura 6-15, e a disposio dos componen-
o display. Quatro delas so conexes de dados, e tes no protoboard est na Figura 6-16. Como voc
pode ver, os nicos componentes necessrios so
o prprio mdulo LCD e o resistor varivel que con-
trola o contraste do display.

COMPONENTES E EQUIPAMENTO
Descrio Apndice
Arduino Uno ou Leonardo m1/m2 Projetos com LEDs multicores
Mdulo LCD (controlador m6
HD44780)
R1 Trimpot de 10 kV r11
Barra de pinos machos (no h12
mnimo, 16)
Protoboard h1
Fios de conexo (jumpers) h2

O mdulo LCD recebe 4 bits de dados por vez atra-


vs das conexes D47. O mdulo LCD tambm
dispe de conexes para D03, que so usadas
captulo 6

para transferir 8 bits por vez. Para reduzir o nmero


Figura 6-14 Um mdulo LCD 16 por 2. de pinos, ns no iremos usar essas conexes.
Fonte: do autor.

109

Monk_06.indd 109 06/12/13 16:31


5V

D2 RS 2 15
4
D4 E
6
D3 RW 5

D9 D4
Mdulo LCD
11 HD44780
Arduino
D5 R1
D10
12

10 kV
3
D6
D11
13

D7
D12
14
1 16

GND

GND

Figura 6-15 Diagrama esquemtico do Projeto 17.


Fonte: do autor.

O modo mais fcil de instalar o mdulo LCD no pro-


toboard soldando primeiro a barra de pinos ma- Software
chos nos terminais de conexo do mdulo. Aps,
O software deste projeto simples (Listagem do
o mdulo poder ser inserido diretamente no pro-
Projeto 17). Todo o trabalho de comunicao com
toboard. Observe que, se voc alinhar o pino 1 do
o mdulo LCD realizado pela biblioteca LCD. Essa
mdulo com a fila 1 do protoboard, ficar muito
biblioteca j faz parte da instalao padronizada
mais fcil fazer a fiao do projeto.
do software do Arduino. Assim, no precisamos
30 projetos com Arduino

baixar nem instalar algo especial.

110

Monk_06.indd 110 06/12/13 16:31


Figura 6-16 Disposio dos componentes do Projeto 17 no protoboard.
Fonte: do autor.

LISTAGEM DO PROJETO 17
#include <LiquidCrystal.h>

//pinos de controle e de dados do LCD (rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal lcd(2, 3, 4, 9, 10, 11, 12);
Projetos com LEDs multicores

void setup()
{
Serial.begin(9600);
lcd.begin(2, 20);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Evil Genius");
lcd.setCursor(0,1);
lcd.print("Rules");
}

void loop()
captulo 6

{
if (Serial.available())
(continua)

111

Monk_06.indd 111 06/12/13 16:31


LISTAGEM DO PROJETO 17 continuao
{
char ch = Serial.read();
if (ch == '#')
{
lcd.clear();
}
else if (ch == '/')
{
lcd.setCursor(0,1);
}
else
{
lcd.write(ch);
}
}
}

A funo loop l qualquer valor de entrada. Se for Agora podemos testar o projeto abrindo o Serial
um caractere, o display ser limpo. Se for um /, o cur- Monitor e digitando algum texto.
sor ser deslocado para a segunda linha. Nos demais
casos, o caractere enviado simplesmente exibido. Mais adiante, no Projeto 22, voltaremos a usar o
painel LCD com um termistor e um encoder rotati-
vo para fazer um termostato.
Juntando tudo
Carregue o sketch completo do Projeto 17, que
est no Sketchbook do Arduino, e transfira-o para a Resumo
placa (veja o Captulo 1).
Isso tudo para os projetos relacionados com LEDs
Provavelmente, voc ter de girar o potencimetro e luz. No Captulo 7, examinaremos alguns projetos
at que o contraste do display esteja correto. que utilizam som.
30 projetos com Arduino

112

Monk_06.indd 112 06/12/13 16:31


captulo 7

Projetos com som


Uma placa de Arduino pode ser utilizada tanto para gerar som em uma sada como
para receber sons em uma entrada por meio de um microfone. Neste captulo,
temos projetos do tipo instrumento musical e tambm projetos que processam
entradas de som. Mesmo no sendo rigorosamente um projeto com som, o
nosso primeiro projeto criar um osciloscpio simplificado. Com ele, poderemos
ver a forma de onda de um sinal presente em uma entrada analgica.

Objetivos deste captulo


Definir maneiras de lidar com som.

Ler valores de entrada e repass-los a um computador pelo cabo


USB.

Reproduzir udio com uma placa de Arduino.

Demonstrar como construir alguns instrumentos musicais.

Monk_07.indd 113 06/12/13 16:33


Projeto 18 COMPONENTES E EQUIPAMENTO
Osciloscpio Descrio Apndice
Arduino Uno ou Leonardo m1/m2
Um osciloscpio um dispositivo que permite
C1 Capacitor de 220 nF c2
ver graficamente a forma de onda de um sinal
eletrnico. Um osciloscpio tradicional funciona C2,C3 Capacitor eletroltico de 100 mF c3
amplificando um sinal e controlando a posio de R1,R2 Resistor de 1 MV e 1/4 W r10
um ponto no eixo Y (vertical) de um tubo de raios R3,R4 Resistor de 1 kV e 1/4 W r5
catdicos. Ao mesmo tempo, um mecanismo de D1 Diodo zener de 5,1V s13
base de tempo faz repetidamente uma varredura Protoboard h1
da esquerda para a direita no eixo X (horizontal) e, Fios de conexo (jumpers) h2
ento, ao chegar ao final retorna ao ponto inicial
no lado esquerdo. O resultado ser semelhante ao Esta a primeira vez que estamos utilizando ca-
da Figura 7-1. pacitores. O capacitor C1 pode ser conectado de
qualquer forma, mas C2 e C3 so polarizados e de-
Atualmente, os osciloscpios digitais com displays vem ser conectados com a orientao correta, caso
LCD tm substitudo amplamente os osciloscpios contrrio provavelmente sero danificados. Assim
de raios catdicos, mas os princpios permanecem como com os LEDs, nos capacitores polarizados,
os mesmos. o terminal positivo (marcado com um retngulo
branco no smbolo esquemtico) mais comprido
Neste projeto, leremos valores da entrada analgi-
do que o terminal negativo, que costuma ter um si-
ca que sero repassados ao computador pelo cabo
nal negativo () ou o smbolo de um diamante. Em
USB. Em vez de serem recebidos pelo Serial Moni-
caso de dvida, procure a folha de especificaes
tor, eles sero recebidos por um pequeno programa
fornecida pelo fabricante.
que os exibe na forma de osciloscpio. medida
que o sinal muda, a forma de onda tambm muda.

Observe que, por ser um osciloscpio, no ganhar Hardware


um prmio pela sua preciso ou velocidade, mas, A Figura 7-2 mostra o diagrama esquemtico do
alm de ser divertido constru-lo, exibe formas de Projeto 18, e a Figura 7-3, a disposio dos compo-
onda com at cerca de 1 kHz. nentes no protoboard.

H duas partes no circuito. Os resistores R1 e R2


so de valor elevado e polarizam com 2,5V o si-
nal que vai entrada analgica. Eles so como
um divisor de tenso. O capacitor C1 permite a
passagem do sinal filtrando qualquer compo-
nente de corrente contnua (CC). Corresponde ao
modo de corrente alternada (CA) em um oscilos-
30 projetos com Arduino

cpio tradicional.

Os componentes R3, R4, C2 e C3 fornecem uma


tenso de referncia estvel de 2,5V. Isso ocorre
porque, desse modo, o osciloscpio poder exibir
Figura 7-1 Uma onda senoidal de 230 Hz em um sinais positivos e negativos. Qualquer sinal presen-
osciloscpio. te na ponteira de teste ser relativo outra pon-
Fonte: do autor. teira, que est fixa em 2,5V. Dessa forma, um valor

114

Monk_07.indd 114 06/12/13 16:33


5V

R1 R3

C2

1 MV

1 KV
100 mF
A0

C1 Ponteiras de teste
Arduino
220 nF
R2 R4

D1 C3
1 MV

1 KV
Zener de 5,1V 100 mF

GND

Figura 7-2 Diagrama esquemtico do Projeto 18.


Fonte: do autor.

Ponteiras de
teste
Projetos com som
captulo 7

Figura 7-3 Disposio dos componentes do Projeto 18 no protoboard.


Fonte: do autor.

115

Monk_07.indd 115 06/12/13 16:33


negativo significar um valor menor que 2,5V na
LISTAGEM DO PROJETO 18
entrada analgica.
int analogPin = 0;
O diodo D1 proteger a entrada analgica de algu-
ma tenso excessiva acidental. void setup()
{
A Figura 7-4 mostra o osciloscpio completo. Serial.begin(115200);
}

void loop()
Software {
int value = analogRead(analogPin);
O sketch desse projeto pequeno e simples (Lis- byte data = (value >> 2);
tagem do Projeto 18). O seu nico propsito ler Serial.write(data);
o valor presente na entrada analgica e envi-lo }
porta USB o mais rapidamente possvel.

A primeira coisa a observar o aumento da taxa Naturalmente, precisaremos de um software para


de bauds, que foi elevada para 115.200, a maior ser executado em nosso computador e que nos
possvel. Para transferir o mximo de dados atra- permita ver os dados enviados pela placa (Figura
vs da conexo, sem usar as tcnicas complexas 7-1). Ele pode ser baixado de www.arduinoevilge-
de compresso de dados, os nossos valores brutos nius.com.
de 10 bits sero deslocados para direita de 2 bits
(>>2). O resultado ser uma diviso por quatro, Para instalar o software, primeiro voc precisa ins-
permitindo que cada valor seja armazenado em talar um software de nome Processing, que utili-
um byte simples. zado para escrever aplicativos de computador que
30 projetos com Arduino

Figura 7-4 Projeto 18: osciloscpio.


Fonte: do autor.

116

Monk_07.indd 116 06/12/13 16:33


se comunicam com um Arduino. De fato, a IDE do em uma ponteira de teste que esteja conectada
Arduino foi escrita em Processing entrada analgica. Voc dever ver um sinal seme-
lhante ao da Figura 7-1. Ao mesmo tempo, expe-
Como ocorre com a IDE do Arduino, o Processing rimente mexer a outra mo prximo de qualquer
tambm est disponvel para Windows, Mac e equipamento para ver como o sinal se modifica.
Linux e pode ser baixado de www.processing.org.
O sinal mostrado na Figura 7-1 , na realidade, uma
Quando o Processing estiver instalado, execute- onda senoidal de 230 Hz produzida por um aplica-
-o. As semelhanas com a IDE do Arduino sero tivo de smartphone gerador de funes.
imediatamente visveis. Agora abra o arquivo
scope.pde e clique no boto Play para execut-lo.

Uma janela como a da Figura 7-1 dever aparecer.


Gerao de udio
Voc pode gerar sons com uma placa de Arduino
Juntando tudo simplesmente ligando e desligando um de seus pi-
Carregue o sketch completo do Projeto 18, que nos com a frequncia correta. Se voc fizer isso, o
est no Sketchbook do Arduino, e transfira-o para a som produzido ser spero e no harmonioso. o
placa (veja o Captulo 1). Instale o software no seu que se denomina onda quadrada. Para produzir um
computador, como descrito antes, e voc estar som mais agradvel, voc precisa de um sinal que
pronto para comear. parea com uma onda senoidal (Figura 7-5).

A maneira mais fcil de testar o osciloscpio usar A gerao de uma onda senoidal requer um pou-
um sinal que se encontra facilmente disponvel e co de imaginao e esforo. Uma primeira ideia
que permeia a maior parte de nossas vidas: o zum- poderia ser o uso de uma sada analgica de um
bido eltrico produzido pelos aparelhos eltricos. dos pinos para produzir a forma de onda. Entre-
A eletricidade residencial oscila com uma frequn- tanto, o problema que as sadas analgicas do
cia de 50 ou 60 Hz (dependendo de onde voc Arduino no so realmente sadas analgicas. Elas
vive). Todos os aparelhos eltricos emitem radia- so sadas moduladas por largura de pulso (PWM),
o eletromagntica em uma dessas frequncias. sendo ligadas e desligadas muito rapidamente. Na
Para capt-la, tudo que voc deve fazer encostar realidade, a sua frequncia de chaveamento est

1,5

0,5
Projetos com som

0 Senoidal
0 100 200 300 400 500 600 700 800 Quadrada

-0,5

-1
captulo 7

-1,5

Figura 7-5 Ondas quadrada e senoidal.


Fonte: do autor.

117

Monk_07.indd 117 06/12/13 16:33


em uma faixa de udio, de modo que, sem muito Tabela 7-1 Sada analgica para
cuidado, o nosso sinal soar to ruim quanto uma entradas digitais
onda quadrada. D3 D2 D1 D0 Sada
Uma maneira melhor seria usar um conversor di- 0 0 0 0 0
gital-analgico (DAC). Um DAC (digital-to-analog 0 0 0 1 1
converter) tem uma srie de entradas digitais e 0 0 1 0 2
produz uma tenso de sada proporcional ao valor 0 0 1 1 3
da entrada digital. Felizmente, fcil construir um 0 1 0 0 4
DAC simples precisamos apenas de resistores. 0 1 0 1 5
A Figura 7-6 mostra um DAC construdo com a as- 0 1 1 0 6
sim chamada escada R-2R de resistores. 0 1 1 1 7
1 0 0 0 8
Ela utiliza resistores com o valor R e o dobro de R. 1 0 0 1 9
Assim, R poderia ser 5K e 2R poderia ser 10K. Cada 1 0 1 0 10
uma das entradas digitais ser conectada a uma 1 0 1 1 11
sada digital do Arduino. Os quatro dgitos repre- 1 1 0 0 12
sentam os 4 bits do nmero digital. Desse modo, 1 1 0 1 13
poderemos ter 16 sadas analgicas diferentes,
1 1 1 0 14
como mostrado na Tabela 7-1.
1 1 1 1 15
Uma outra forma de gerar uma dada forma de Fonte: do autor.
onda por usar o comando analogOutput do Ar-
duino. Aqui, o Arduino usa a tcnica PWM voc A Figura 7-7 mostra o sinal de um pino PWM do
j viu, no Captulo 4, como usar essa tcnica para Arduino.
controlar o brilho de LEDs.
O pino de PWM est oscilando em torno de 500
D3 2R vezes por segundo (hertz). O tempo relativo que o
Sada
pino est em nvel alto varia com o valor especifica-
analgica
R do na funo analogWrite. Assim, olhando a Figura

1/500 segundo
D2 2R
5V

R 1/20 (5%)
0V

D1 2R
5V

R 10/20 (50%)
30 projetos com Arduino

0V

D0 2R 2R
5V

GND 18/20 (90%)


0V
Figura 7-6 Conversor digital-analgico usando
uma escada R-2R. Figura 7-7 Modulao por largura de pulso (PWM).
Fonte: do autor. Fonte: do autor.

118

Monk_07.indd 118 06/12/13 16:33


7-7, se a sada estiver alta apenas durante 5% do O array contm uma srie de valores que, quan-
tempo, ento o que estivermos acionando recebe- do usados sucessivamente com o comando
r apenas 5% da potncia total. Se, entretanto, a analogWrite, produz o efeito de uma onda senoidal.
sada estiver em 5V durante 90% do tempo, ento
a carga receber 90% da potncia. O traado inferior mostra o sinal PWM bruto, com
os pulsos mais concentrados correspondendo aos
Devido inrcia de rotao do motor, quando um picos e vales da onda senoidal, e os mais espalha-
motor acionando com PWM, ele no arranca e dos correspondendo parte mdia da onda senoi-
para 500 vezes por segundo. Ele recebe apenas um dal. O traado superior mostra esse mesmo sinal
empurro de intensidade varivel a cada 5 centsi- depois de passar por um filtro passa-baixa, que
mos de segundo. O efeito resultante um controle elimina a alta frequncia PWM (63 kHz), deixando-
suave da velocidade do motor. -nos com uma onda senoidal bem formada.

Os LEDs podem responder muito mais rapida-


mente do que um motor, mas o efeito o mesmo.
Como no conseguimos enxergar os LEDs acen- Projeto 19
dendo e apagando nessa velocidade, o que vemos Tocador de msica
o brilho se modificando.
Este projeto executar uma sucesso de notas
Podemos usar essa mesma tcnica para criar uma musicais por meio de um alto-falante miniatura
onda senoidal, mas h um problema. A frequncia usando PWM para fazer uma onda senoidal apro-
padronizada usada pelo Arduino para produzir ximada.
seus pulsos PWM est em torno de 500 Hz, que fica
bem dentro da faixa audvel de frequncia. Feliz- Se voc conseguir um alto-falante miniatura com
mente, podemos alterar essa frequncia em nosso terminais para serem soldados em uma placa de
sketch, tornando-a muito mais elevada e fora da circuito impresso (PCB), ento voc poder encai-
faixa de audio. x-lo diretamente no protoboard. Caso contrrio,
voc dever soldar alguns pedaos de fio rgido
A Figura 7-8 mostra dois traados, em um oscilos- aos terminais do alto-falante ou, se no tiver um
cpio, de uma onda senoidal de 254 Hz, que foi ferro de soldar, poder enrolar com cuidado peda-
gerada a partir de uma sucesso de valores em um os de fio em torno dos terminais.
array.
COMPONENTES E EQUIPAMENTO
Descrio Apndice
Arduino Uno ou Leonardo m1/m2
C1 Capacitor no polarizado de c1
Projetos com som

100 nF
C2 Capacitor eletroltico de 100 mF, c3
16V
R1 Resistor de 470 V e 1/4 W r4
R2 Trimpot de 10 V r11
CI1 TDA7052 Amplificador de udio s23
de 1W
captulo 7

Alto-falante miniatura de 8 V h14


Figura 7-8 Traados de osciloscpio na gerao de Protoboard h1
onda senoidal. Fios de conexo (jumpers) h2
Fonte: do autor.

119

Monk_07.indd 119 06/12/13 16:33


menos 10 vezes, dependendo do ajuste feito no
Hardware resistor varivel. o controle de volume.
Para no utilizar muitos componentes, utilizamos
um circuito integrado (CI) para amplificar o sinal e
acionar o alto-falante. O circuito TDA7052 fornece Software
1 W de potncia com um pequeno chip de oito pi- Para gerar uma onda senoidal, o sketch usa suces-
nos e de fcil utilizao. sivamente uma srie de valores armazenados no
array sine (seno). Esses valores esto plotados no
A Figura 7-9 mostra o diagrama esquemtico do grfico da Figura 7-11. No a onda senoidal mais
Projeto 19, e a disposio dos componentes no perfeita do mundo, mas definitivamente melhor
protoboard est mostrada na Figura 7-10. do que uma onda quadrada (veja a Listagem do
Em conjunto, R1 e C1 funcionam como um filtro pas- Projeto 19).
sa-baixa que elimina o rudo PWM de alta frequncia A funo setup contm os comandos mgicos
antes que seja passado para o chip amplificador. que alteram a frequncia PWM.
O C2 usado como um capacitor de desacopla- A funo playNote (toca uma nota musical) a
mento que desvia qualquer interferncia vinda chave da gerao das notas. A altura (frequncia)
pela rede eltrica ao terra. Ele deve estar o mais da nota gerada controlada pelo retardo aps
prximo possvel de CI1. cada passo do sinal dentro da funo playSine
O resistor varivel R2 (trimpot) um divisor de ten- (toca seno), a qual chamada pela funo
so que reduz o sinal vindo do filtro R1C1 em pelo playNote.

5V

C2

R1 100 mF
D11
470 V 16V
GND

1
8
Arduino
C1 CI1
TDA7052
100 nF
10K

R2 2
3 6 5
30 projetos com Arduino

GND

Figura 7-9 O diagrama esquemtico do Projeto 19.


Fonte: do autor.

120

Monk_07.indd 120 06/12/13 16:33


Alto-falante

Figura 7-10 A disposio dos componentes do Projeto 19 no protoboard.


Fonte: do autor.

As msicas so tocadas a partir de um array de


caracteres, em que cada caractere corresponde a
uma nota e um intervalo para o silncio entre as
notas. O lao principal loop examina cada letra
(nota) da varivel song (cano) e a executa. Quan-
do a cano inteira tiver sido tocada, h uma pausa
de 5 segundos e, em seguida, a cano comea a
ser tocada novamente.

Figura 7-11 Um grfico do array sine (seno).


Fonte: do autor.

LISTAGEM DO PROJETO 19
int soundPin = 11;
Projetos com som

byte sine[] = {0, 22, 44, 64, 82, 98, 111, 120, 126, 127,
126, 120, 111, 98, 82, 64, 44, 22, 0, -22, -44, -64, -82,
-98, -111, -120, -126, -128, -126, -120, -111, -98, -82,
-64, -44, -22};

int toneDurations[] = {120, 105, 98, 89, 78, 74, 62};

char* song = "e e ee e e ee e g c d eeee f f f f f e e e e d d e dd gg e e ee e e ee e g c d eeee


captulo 7

f f f f f e e e g g f d cccc";
(continua)

121

Monk_07.indd 121 06/12/13 16:33


LISTAGEM DO PROJETO 19 continuao

void setup()
{
// alterar a frequncia PWM para 63kHz
cli(); //desabilitar interrupes enquanto configura os registradores
bitSet(TCCR2A, WGM20);
bitSet(TCCR2A, WGM21); //ajustar Timer2 para modo PWM rpido (dobra a frequncia PWM)
bitSet(TCCR2B, CS20);
bitClear(TCCR2B, CS21);
bitClear(TCCR2B, CS22);
sei(); //habilitar interrupes aps configurar os registradores
pinMode(soundPin, OUTPUT);
}

void loop()
{
int i = 0;
char ch = song[0];
while (ch != 0)
{
if (ch == ' ')
{
delay(75);
}
else if (ch >= 'a' and ch <= 'g')
{
playNote(toneDurations[ch - 'a']);
}
i++;
ch = song[i];
}

delay(5000);
}

void playNote(int pitchDelay)


{
long numCycles = 5000 / pitchDelay;
for (int c = 0; c < numCycles; c++)
{
playSine(pitchDelay);
}
}

void playSine(int period)


30 projetos com Arduino

{
for( int i = 0; i < 36; i++)
{
analogWrite(soundPin, sine[i] + 128);
delayMicroseconds(period);
}
}

122

Monk_07.indd 122 06/12/13 16:33


COMPONENTES E EQUIPAMENTO
Juntando tudo
Descrio Apndice
Carregue o sketch completo do Projeto 19, que
Arduino Uno ou Leonardo m1/m2
est no Sketchbook do Arduino, e transfira-o para a
C1 Capacitor no polarizado de c1
placa (veja o Captulo 1). 100 nF

A msica tocada Jingle Bells. Talvez voc queira C2 Capacitor eletroltico de 100 mf, c3
16V
troc-la por outra.* Para isso, coloque // no incio
R1 Resistor de 470 V e 1/4 W r4
da linha que comea por char* song = para trans-
R2,R3 Resistor de 1 kV e 1/4 W r5
form-la em um comentrio. Em seguida, defina o
array da sua msica. R6 Trimpot de 10 kV r11
R4,R5 LDR r13
Para uma nota de durao maior, simplesmente CI1 TDA7052 Amplificador de udio s23
repita a letra da nota sem colocar um espao entre de 1W
elas. Alto-falante miniatura de 8 V h14
Protoboard h1
Voc observar que a qualidade no muito boa.
Fios de conexo (jumpers) h2
Mesmo assim, bem melhor do que a de uma
onda quadrada. Estamos muito distantes do som
de alta qualidade produzido por um instrumento
musical real, em que cada nota tem um envelope
prprio que controla a sua amplitude (volume)
Hardware
medida que tocada. A Figura 7-12 mostra o diagrama esquemtico do
Projeto 20, e a Figura 7-13 mostra a disposio dos
componentes no protoboard. A Figura 7-14 mostra
o projeto completo.
Projeto 20
Harpa luminosa Os LDRs R4 e R5 esto distanciados entre si para
facilitar o uso do instrumento com as duas mos.
Este projeto , na realidade, uma adaptao do
Projeto 19, que utiliza dois sensores luminosos
(LDRs): um que controla a altura (frequncia) do Software
som e outro que controla o volume. Isso foi ins-
O software deste projeto muito similar ao do Pro-
pirado no instrumento musical Theremin que,
jeto 19 (Veja listagem do Projeto 20).
para ser tocado, requer que voc movimente suas
mos no ar entre duas antenas. Na realidade, este H duas diferenas principais. O perodo passado
Projetos com som

projeto produz um som mais semelhante ao de funo playSine determinado pelo valor da en-
uma gaita de fole do que ao de uma harpa, mas trada analgica 0. A seguir, esse valor ajustado
bem divertido. para a faixa correta usando a funo map. Do mes-
mo modo, o volume determinado lendo o valor
da entrada analgica 1, ajustando-o com a funo
map e, ento, usando-o para modificar os valores
do array sine antes de gerar as notas musicais.
captulo 7

* N. de T.: Para representar a msica no array, o autor usa a


notao em que a sequncia de notas de l at sol corres- Os LDRs tm diversas faixas de resistncia. Por isso,
ponde sequncia de letras de a at g. voc talvez tenha que testar e alterar os valores das

123

Monk_07.indd 123 06/12/13 16:33


5V 5V

C2
1 kV

1 kV

R3 R2
100 mF
D11 R1
A0 470 V 16V
GND
1
8
Arduino
A1 C1 CI1
TDA7052
100 nF

10K
R6 2
3 6 5
LDR

LDR

R5 R4

GND

Figura 7-12 Diagrama esquemtico do Projeto 20.


Fonte: do autor.

Alto-falante

Figura 7-13 Disposio dos componentes do Projeto 20 no protoboard.


30 projetos com Arduino

Fonte: do autor.

124

Monk_07.indd 124 06/12/13 16:33


Figura 7-14 Projeto 20: harpa luminosa.
Fonte: do autor.

LISTAGEM DO PROJETO 20
int soundPin = 11;
int pitchInputPin = 0;
int volumeInputPin = 1;
int ldrDim = 400;
int ldrBright = 800;

byte sine[] = {0, 22, 44, 64, 82, 98, 111, 120, 126, 127,
126, 120, 111, 98, 82, 64, 44, 22, 0, -22, -44, -64, -82,
-98, -111, -120, -126, -128, -126, -120, -111, -98, -82,
-64, -44, -22};

long lastCheckTime = millis();


int pitchDelay;
int volume;

void setup()
Projetos com som

{
// alterar a frequncia PWM para 63kHz
cli(); //desabilitar interrupes enquanto configura os registradores
bitSet(TCCR2A, WGM20);
bitSet(TCCR2A, WGM21); //ajustar Timer2 para modo PWM rpido (dobra a frequncia PWM)
bitSet(TCCR2B, CS20);
bitClear(TCCR2B, CS21);
bitClear(TCCR2B, CS22);
sei(); //habilitar interrupes aps configurar os registradores
captulo 7

(continua)

125

Monk_07.indd 125 06/12/13 16:33


LISTAGEM DO PROJETO 20 continuao
pinMode(soundPin, OUTPUT);
}

void loop()
{
long now = millis();
if (now > lastCheckTime + 20L)
{
pitchDelay = map(analogRead(pitchInputPin), ldrDim, ldrBright, 10, 30);
volume = map(analogRead(volumeInputPin), ldrDim, ldrBright, 1, 4);
lastCheckTime = now;
}

playSine(pitchDelay, volume);
}

void playSine(int period, int volume)


{
for( int i = 0; i < 36; i++)
{
analogWrite(soundPin, (sine[i] / volume) + 128);
delayMicroseconds(period);
}
}

variveis ldrDim e ldrBright para obter intervalos -in-line, a forma comum de encapsular circuitos
melhores de altura e volume. integrados).

O boto permite alternar o modo de funcionamen-


Juntando tudo to do medidor VU. No modo normal, a barra grfica

Carregue o sketch completo do Projeto 20, que


est no Sketchbook do Arduino, e transfira-o para a
placa (veja o Captulo 1).

Para tocar o instrumento, passe a sua mo direita


sobre o LDR que controla o volume do som e passe
a mo esquerda sobre o outro LDR que controla a
altura do som. Efeitos interessantes podem ser ob-
tidos movimentando as mos sobre os LDRs.
30 projetos com Arduino

Projeto 21
Medidor VU
Este projeto (mostrado na Figura 7-15) utiliza LEDs
para mostrar, na forma de uma barra grfica, o
volume do rudo captado por um microfone. Uti- Figura 7-15 Projeto 21: medidor de VU.
lizamos um array de LEDs montados em DIL (dual- Fonte: do autor.

126

Monk_07.indd 126 06/12/13 16:33


(bar graph) simplesmente sobe e desce acompa-
nhando o volume do som. No modo mximo ou de Hardware
pico, a barra grfica registra tambm o valor mxi-
O diagrama esquemtico deste projeto est mos-
mo ocorrido at o momento e acende o LED corres-
trado na Figura 7-16. O array de LEDs (bar graph)
pondente. Desse modo, aos poucos, o valor mximo
tem conexes separadas para cada LED. Os LEDs
do nvel do som aparece cada vez mais para cima.
devem ser acionados atravs de resistores limita-
dores de corrente.
COMPONENTES E EQUIPAMENTO
Descrio Apndice O microfone no gera um sinal suficientemente
Arduino Uno ou Leonardo m1/m2 forte para acionar diretamente a entrada analgi-
R1,R3 Resistor de 10 kV e 1/4 W r6
ca. Por isso, para refor-lo, usaremos um ampli-
ficador de um estgio. Escolhemos uma configu-
R2 Resistor de 100 kV e 1/4 W r8
rao padronizada denominada polarizao com
R4-13 Resistor de 270 V e 1/4 W r3
realimentao de coletor, em que uma parte da
C1 Capacitor no polarizado de c1
tenso do coletor usada para polarizar o transis-
100 nF
tor. Desse modo, a amplificao ser mais linear do
T1 Transistor 2N2222 s14
que simplesmente um liga e desliga do sinal.
Display bar graph de 10 s9
segmentos A disposio dos componentes no protoboard est
S1 Chave de contato momentneo h3 mostrada na Figura 7-17. Com tantos LEDs, muitos
Microfone de eletreto h15 fios sero necessrios. Assegure-se de que o m-
Protoboard h1 dulo de LEDs esteja com as conexes negativas de
Fios de conexo (jumpers) h2 LED voltadas para a esquerda, como aparece na

Projetos com som


captulo 7

Figura 7-16 Diagrama esquemtico do Projeto 21.


Fonte: do autor.

127

Monk_07.indd 127 06/12/13 16:33


Figura 7-17 Disposio dos componentes do Projeto 21 no protoboard.
Fonte: do autor.

LISTAGEM DO PROJETO 21
int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
int switchPin = 12;
int soundPin = 0;

boolean showPeak = false;


int peakValue = 0;

void setup()
{
for (int i = 0; i < 10; i++)
{
pinMode(ledPins[i], OUTPUT);
30 projetos com Arduino

}
pinMode(switchPin, INPUT_PULLUP);
}

void loop()
{
if (digitalRead(switchPin) == LOW)
{
showPeak = ! showPeak;

128

Monk_07.indd 128 06/12/13 16:33


LISTAGEM DO PROJETO 21
peakValue = 0;
delay(200); // faz o "debounce" da chave do boto
}
int value = analogRead(soundPin);
int topLED = map(value, 0, 1023, 0, 11) - 1;
if (topLED > peakValue)
{
peakValue = topLED;
}
for (int i = 0; i < 10; i++)
{
digitalWrite(ledPins[i], (i <= topLED || (showPeak && i == peakValue)));
}
}

Figura 7-17. Se no houver indicao de polarida- entre 0 e 9. Esse nmero corresponder ao LED que
de, faa um teste usando um dos resistores de 270 estar aceso no topo da barra grfica. Fazemos um
ohms e a alimentao de 5V do Arduino. pequeno ajuste estendendo o intervalo para 0 e 11
e, em seguida, subtramos 1. Com isso, evitamos
que os dois LEDs inferiores permaneam ligados
Software devido polarizao do transistor.
O sketch deste projeto (Listagem do Projeto 21)
A seguir, ligamos ou no cada LED de 0 a 9. Para
usa um array de pinos de LEDs (ledPins) para dimi-
isso, usamos uma expresso booleana, que ser
nuir o tamanho da funo setup. O array tambm
verdadeira (acendendo, portanto, o LED corres-
ser usado pela funo loop para acionar cada LED,
pondente) se a varivel i for menor ou igual ao LED
decidindo se ele deve ser ligado ou desligado.
que estar aceso no topo da barra grfica (topLED).
No incio da funo loop, verificamos se o boto Na realidade, um pouco mais complicado do que
est pressionado. Se estiver, inverteremos o modo isso porque, se estivermos no modo mximo ou de
atual (showPeak). O comando ! inverte um valor. pico, tambm deveremos exibir o LED correspon-
Assim, verdadeiro fica falso e falso fica verdadei- dente ao peakValue (valor de pico).
ro. Por essa razo, algumas vezes esse comando
referido como operador de mercado.* Aps alterar
o modo, inicializamos o valor mximo com 0 e, Juntando tudo
ento, aguardamos 200 ms para impedir que o Carregue o sketch completo do Projeto 21, que
Projetos com som

bouncing da chave do boto mude novamente est no Sketchbook do Arduino, e transfira-o para a
o modo. placa (veja o Captulo 1).

O nvel do som lido na entrada analgica 0. A se-


guir, usamos a funo map de mapeamento para
fazer uma mudana de escala desse nvel, que Resumo
passa de um valor entre 0 e 1023 para um nmero Com isso conclumos os nossos projetos baseados
captulo 7

em som. No Captulo 8, veremos como utilizar uma


* N. de T.: O autor est se referindo aos operadores financei- placa para controlar equipamentos de potncia
ros que alternadamente compram na baixa e vendem na alta. certamente um assunto de muita importncia.

129

Monk_07.indd 129 06/12/13 16:33


captulo 8

Projetos de potncia
Depois de examinarmos projetos com luz e som, agora voltaremos nossa ateno
ao controle de potncia. Basicamente, isso significa ligar e desligar equipamentos
eltricos e controlar seu funcionamento como, por exemplo, a velocidade.
Geralmente, isso se aplica ao projeto de laser controlado por servomotor e a
motores e lasers.

Objetivos deste captulo


Desenvolver projetos para controlar dispositivos de potncia.

Demonstrar como ligar e desligar equipamentos eltricos atravs


do computador.

Aplicar pontes H.

Descrever o funcionamento de equipamentos eltricos pelo


computador.

Monk_08.indd 131 06/12/13 16:35


Projeto 22 COMPONENTES E EQUIPAMENTO
Termostato com LCD Descrio Apndice
Arduino Uno ou Leonardo m1/m2
Este projeto tem como objetivo controlar a tem-
CI1 TMP36 sensor de temperatura s22
peratura de uma sala, e particularmente til
para quem suscetvel a resfriados. Usaremos R1 Resistor de 270 V 1/4 W r3
um sensor de temperatura e um display LCD para R2 Resistor filme metlico 1 V 1/4 W r5
exibir a temperatura atual e a temperatura pro- R3 Trimpot 10 kV r11
gramada que desejamos manter na sala. Usare- D1 LED vermelho de 5 mm s1
mos um encoder rotativo para programar (ajus- D2 Diodo 1N4004 s12
tar) a temperatura desejada. O boto do encoder T1 Transistor 2N2222 s14
tambm usado como uma chave para alternar o Rel 5V h16
modo de funcionamento.* Mdulo LCD HD44780 m6
Barra de pinos machos h12
Quando a temperatura medida for menor do que
2 Protoboards h1
a temperatura programada, um rel ser ativado.
Rels so componentes eletromagnticos que Fios de conexo (jumpers) h2
ativam uma chave mecnica quando uma corren-
te circula em seu solenoide. Apresentam diversas
vantagens. Primeiro, podem chavear correntes e
tenses elevadas, o que os torna adequados para
Hardware
uso com equipamentos eltricos utilitrios. Alm O mdulo LCD conectado exatamente da mesma
disso, tambm apresentam isolamento eltrico en- forma que no Projeto 17. O encoder tambm co-
tre o lado de controle (a bobina) de baixa tenso e nectado do mesmo modo que fizemos em projetos
o lado de chaveamento de alta tenso. Assim, essas anteriores.
tenses nunca se encontram, o que definitivamen-
O rel exigir cerca de 70 mA, que mais do que
te algo bom.
uma sada de Arduino pode fornecer sozinha.
Se o leitor decidir usar este projeto para controlar Usaremos um transistor NPN para aumentar a cor-
equipamentos eltricos utilitrios, ento dever rente. Voc observar tambm que um diodo foi
faz-lo somente se tomar extremo cuidado e sou- conectado em paralelo com a bobina do rel. Isso
ber exatamente o que deve ser feito. A eletricidade para neutralizar algo denominado FCEM (fora
usada em equipamentos muito perigosa e mata contraeletromotriz), que ocorre quando o rel
cerca de 500 pessoas por ano s nos Estados Uni- desligado. O colapso repentino do campo mag-
dos. Muitas outras sofrem queimaduras dolorosas, ntico na bobina gera uma tenso que poderia ser
que deixam traumas e cicatrizes. suficientemente alta para danificar a eletrnica se
o diodo no estivesse l para, eficazmente, coloc-
-la em curto-circuito.
30 projetos com Arduino

A Figura 8-1 mostra o diagrama esquemtico do


projeto.
* N. de T.: Neste projeto, h dois modos de funcionamento:
Na realidade, este projeto requer dois protoboards
o modo automtico, em que o rel ativado ou desativado
para manter a temperatura programada, e o modo override, comuns ou um de tamanho duplo. Mesmo com dois
em que o rel fica permanentemente ativado sem levar em protoboards, a disposio dos fios bastante aper-
conta a temperatura programada. tada porque o mdulo LCD ocupa muito espao.

132

Monk_08.indd 132 06/12/13 16:35


Encoder rotativo 5V
GND
D2
RS 2 15
A B P 4
D3 E 6
D3 R/W 5
A2 D9 D4
11 R2
A1 Mdulo LCD
D10 D5

10 KV
HD44780
12 3
A4 D11 D6
13
D12 D7
+5V Arduino 14
1 16
+5V

CI1 A3
TMP36 R1
A0 D1
1 KV

GND
T1 Rel 5V

2N2222
GND

Figura 8-1 Diagrama esquemtico do Projeto 22.


Fonte: do autor.

Confira a folha de especificaes do seu rel por- trador de temperatura e o controlador de semfo-
que a funo dos pinos pode no ser bvia. Como ro, no qual utilizamos o encoder (veja Listagem do
so utilizadas diversas configuraes de pinos, Projeto 22).
pode ser que a sua seja diferente da que foi usada
no rel utilizado aqui. Algo que requer bastante considerao quando
se projeta um termostato como este evitar a
A Figura 8-2 mostra a disposio dos componentes ativao e a desativao muito frequente do rel.
para o protoboard do projeto. Isso ocorre quando temos um sistema de contro-
Projetos de potncia

le simples do tipo liga-desliga, como neste caso.


Voc tambm poder usar um multmetro, no Quando a temperatura cai abaixo da temperatura
modo de resistncia, para descobrir os terminais previamente ajustada, o rel ativado e a sala
da bobina. Haver apenas um par de pinos com aquecida at que a temperatura esteja acima da
uma resistncia de 40 a 100 ohms. temperatura ajustada, quando ento o rel de-
sativado. Em seguida, a sala comea a esfriar at
que a temperatura esteja novamente abaixo da
Software
captulo 8

temperatura ajustada, quando o aquecimento


O software deste projeto utiliza muitas coisas de novamente ligado, e assim por diante. Isso leva
nossos projetos anteriores: o display LCD, o regis- um pouco de tempo para acontecer, mas, quando

133

Monk_08.indd 133 06/12/13 16:35


Bobina

Figura 8-2 Disposio dos componentes do Projeto 22 no protoboard.


Fonte: do autor.
30 projetos com Arduino

a temperatura est muito prximo da temperatura Uma maneira de minimizar esse efeito introduzir
programada, esse liga-desliga pode ocorrer muito algo denominado histerese. Talvez voc j tenha
frequentemente. Esse liga-desliga muito frequen- notado que existe uma varivel denominada hys-
te, denominado oscilao ou flutuao (hunting), teresis (histerese) no sketch, estando definida com
o
indesejvel porque tende a desgastar rapidamente o valor 0,25 C.
os contatos do rel.

134

Monk_08.indd 134 06/12/13 16:35


LISTAGEM DO PROJETO 22
#include <LiquidCrystal.h>

// terminais do display de cristal lquido (rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal lcd(2, 3, 4, 9, 10, 11, 12);

int relayPin = A3;


int aPin = A4;
int bPin = A1;
int buttonPin = A2;
int analogPin = A0;

float setTemp = 20.0;


float measuredTemp;
char mode = 'C'; // pode ser mudado para F (Fahrenheit)
boolean override = false;
float hysteresis = 0.25;

void setup()
{
lcd.begin(2, 16);
pinMode(relayPin, OUTPUT);
pinMode(aPin, INPUT_PULLUP);
pinMode(bPin, INPUT_PULLUP);
pinMode(buttonPin, INPUT_PULLUP);
lcd.clear();
}

void loop()
{
static int count = 0;
measuredTemp = readTemp();
if (digitalRead(buttonPin) == LOW)
{
override = ! override;
updateDisplay();
delay(500); // esperar para realizar o debounce
}
int change = getEncoderTurn();
setTemp = setTemp + change * 0.1;
if (count == 1000)
{
Projetos de potncia

updateDisplay();
updateOutput();
count = 0;
}
count ++;
}

int getEncoderTurn()
{
captulo 8

(continua)

135

Monk_08.indd 135 06/12/13 16:35


LISTAGEM DO PROJETO 22 continuao
// retornar -1, 0, ou +1
static int oldA = LOW;
static int oldB = LOW;
int result = 0;
int newA = digitalRead(aPin);
int newB = digitalRead(bPin);
if (newA != oldA || newB != oldB)
{
// algo mudou
if (oldA == LOW && newA == HIGH)
{
result = -(oldB * 2 - 1);
}
}
oldA = newA;
oldB = newB;
return result;
}

float readTemp()
{
int a = analogRead(analogPin);
float volts = a / 205.0;
float temp = (volts - 0.5) * 100;
return temp;
}

void updateOutput()
{
if (override || measuredTemp < setTemp - hysteresis)
{
digitalWrite(relayPin, HIGH);
}
else if (!override && measuredTemp > setTemp + hysteresis)
{
digitalWrite(relayPin, LOW);
}
}

void updateDisplay()
{
lcd.setCursor(0,0);
lcd.print("Actual: ");
lcd.print(adjustUnits(measuredTemp));
lcd.print(" o");
30 projetos com Arduino

lcd.print(mode);
lcd.print(" ");

lcd.setCursor(0,1);
if (override)
{
lcd.print(" OVERRIDE ON "); // modo override ativado
}

136

Monk_08.indd 136 06/12/13 16:35


LISTAGEM DO PROJETO 22
else
{
lcd.print("Set: ");
lcd.print(adjustUnits(setTemp));
lcd.print(" o");
lcd.print(mode);
lcd.print(" ");
}
}

float adjustUnits(float temp)


{
if (mode == 'C')
{
return temp;
}
else
{
return (temp * 9) / 5 + 32;
}
}

A Figura 8-3 mostra como usamos um valor de his- ratura cai, o rel no ligado at o momento em
terese para evitar o liga-desliga muito frequente que a temperatura tenha chegado temperatura
do rel. ajustada menos o valor de histerese.

Quando a temperatura se eleva, aps ligar o rel, No queremos atualizar o display continuamente
ela se aproxima da temperatura previamente ajus- porque qualquer mudana mnima de leitura far
tada. Entretanto, quando ela chegar l, o rel no o display tremular rapidamente. Por isso, em vez
ser desligado imediatamente. Esperaremos que a de atualizar o display a cada repetio do loop,
temperatura chegue ao valor ajustado mais o valor ns o faremos a cada 1.000 repeties. Mesmo
de histerese. Do mesmo modo, quando a tempe- assim, isso significa atualizar o display trs ou
quatro vezes por segundo. Para isso, utilizaremos
Temperatura uma varivel de contagem que ser incrementada
a cada repetio do loop. Quando atingir o valor
1.000, atualizaremos o display e colocaremos o
Projetos de potncia

20,25 contador em 0.
Desligar Desligar Desligar
20 Temp. Alm disso, se chamssemos a funo lcd.clear() a
programada
19,75
cada vez, o display tambm tremularia muito. Por
Ligar Ligar
isso, ns simplesmente escrevemos a nova tempe-
ratura por cima da anterior. Essa a razo pela qual
Ligar h espaos em branco antes e depois da mensa-
Tempo gem de que o modo override est ativo (OVERRIDE
captulo 8

ON). Assim, qualquer texto que tiver sido exibido,


Figura 8-3 Histerese em sistemas de controle. ser completamente apagado.
Fonte: do autor.

137

Monk_08.indd 137 06/12/13 16:35


Figura 8-4 Projeto 22: termostato com LCD.
Fonte: do autor.

eltrica residencial, ento muito importante que


Juntando tudo voc realize a montagem deste projeto soldando
todos os componentes e terminais em uma placa
Carregue o sketch completo do Projeto 22, que
capaz de suportar as altas tenses e correntes que
est no Sketchbook do Arduino, e transfira-o para a
circularo. Placas de protoboard no so adequa-
placa (veja o Captulo 1).
das para tenses nem para correntes elevadas.
O projeto completo est mostrado na Figura 8-4. Alm disso, seja muito cuidadoso. Confira mais de
Para test-lo, gire o encoder ajustando a tempera- uma vez tudo o que voc fizer. A eletricidade da
tura programada para um valor ligeiramente maior rede eltrica pode matar.
que a temperatura atual. O rel dever fazer um
Para testar o rel, voc dever usar somente ten-
rudo de ativao. A seguir, coloque o seu dedo
ses baixas, a no ser que, partindo deste projeto,
no sensor TMP36 para aquec-lo. Se tudo estiver
voc tenha feito um novo projeto com as recomen-
correto, ento, quando a temperatura ajustada for
daes do pargrafo anterior.
ultrapassada, o LED ser desligado e voc ouvir o
rel fazer um rudo.
30 projetos com Arduino

Voc tambm pode testar o funcionamento do rel


ligando as ponteiras de um multmetro no modo
Projeto 23
de teste de continuidade (bipe) aos terminais de Ventilador controlado
sada do rel. por computador
Se voc pretende utilizar este projeto para contro- Neste projeto, utilizaremos um ventilador apro-
lar equipamentos usando a eletricidade da rede veitado de um computador PC sucateado (Figura

138

Monk_08.indd 138 06/12/13 16:35


8-5). Ele ser muito til. Ns o usaremos para nos de pulso) para acionar um transistor de potncia
refrescarmos no vero. Naturalmente, uma chave que envia pulsos de potncia ao motor. Como os
simples do tipo liga e desliga no o que que- ventiladores de computador costumam funcionar
remos e, por isso, controlaremos a velocidade do com 12V, utilizaremos uma fonte externa de ali-
ventilador usando o nosso computador. mentao para fornecer a potncia necessria ao
ventilador. provvel que o ventilador tenha ter-
Se voc no dispuser de um desses ventiladores, minais positivo e negativo. Geralmente, o positivo
no se preocupe, porque eles podem ser compra- o terminal vermelho.
dos novos por um preo bem baixo.
A Figura 8-6 mostra o diagrama esquemtico do
COMPONENTES E EQUIPAMENTO projeto, e a Figura 8-7, a disposio dos compo-
Descrio Apndice nentes no protoboard.
Arduino Uno ou Leonardo m1/m2
R1 Resistor de 270 V e 1/4 W r3
Software
D1 1N4004 diodo s12
T1 BD139 transistor de potncia s17 Esse sketch realmente muito simples (Listagem
M1 Ventilador de computador de h17
do Projeto 23). Essencialmente, precisamos ape-
12V nas ler um dgito de 0 a 9 na USB e executar um
Fonte de alimentao de 12V h7 comando analogWrite no pino motorPin utilizan-
Protoboard h1 do o valor do dgito multiplicado por 10 e somado
Fios de conexo (jumpers) h2 a 150. Isso far que o valor seja mapeado para um
novo valor entre 150 e 240. O valor 150 neces-
srio para garantir que haja uma tenso mnima,
sem a qual o ventilador no conseguiria girar.
Hardware possvel que voc tenha de fazer alguns testes e
Podemos controlar a velocidade do ventilador alterar esses valores para que sejam adequados
usando a sada analgica (modulao por largura ao seu ventilador.

Projetos de potncia
captulo 8

Figura 8-5 Projeto 23: ventilador controlado por computador.


Fonte: do autor.

139

Monk_08.indd 139 06/12/13 16:35


12V Vin Vin
12V CC
Fonte de
alimentao

GND

D1 M

Arduino

c
D11 R1
b
270 V T1

GND
Figura 8-6 Diagrama esquemtico do Projeto 23.
Fonte: do autor.

LISTAGEM DO PROJETO 23
int motorPin = 11;

void setup()
{
pinMode(motorPin, OUTPUT);
analogWrite(motorPin, 0);
Serial.begin(9600);
}

void loop()
{
if (Serial.available())
{
char ch = Serial.read();
if (ch >= '0' && ch <= '9')
{
int speed = ch - '0';
if (speed == 0)
{
30 projetos com Arduino

analogWrite(motorPin, 0);
}
else
{
analogWrite(motorPin, 150 + speed * 10);
}
}
}
}

140

Monk_08.indd 140 06/12/13 16:35


Ventilador
12V

Figura 8-7 Disposio dos componentes do Projeto 23 no protoboard.


Fonte: do autor.

Na Figura 8-8, S1 e S4 esto fechadas e S2 e S3 es-


Juntando tudo to abertas. Isso permite que a corrente circule no
motor, sendo o terminal A positivo e o terminal B
Carregue o sketch completo do Projeto 23, que
est no Sketchbook do Arduino, e transfira-o para a
Projetos de potncia

placa (veja o Captulo 1).

Controladores com ponte H


Para mudar o sentido de rotao de um motor,
voc deve inverter o sentido em que a corrente
circula. Para isso, necessrio quatro chaves ou
captulo 8

transistores. A Figura 8-8 mostra como isso funcio-


na usando chaves em uma configurao que, por Figura 8-8 Uma ponte H.
razes bvias, denominada ponte H. Fonte: do autor.

141

Monk_08.indd 141 06/12/13 16:35


negativo. Se invertermos os estados das chaves de rotao horrio ou anti-horrio de um motor.
de modo que S2 e S3 fiquem fechadas e S1 e S4 Acoplado ao motor, h um disco no qual uma espiral
abertas, ento B ser positivo e A, negativo. Como foi desenhada para hipnotizar pessoas.
consequncia, o motor gira no sentido oposto.
COMPONENTES E EQUIPAMENTO
Entretanto, voc talvez tenha notado que h um
perigo nesse circuito. Se, por alguma razo, S1 e Descrio Apndice
S2 forem fechadas, a alimentao positiva estar Arduino Uno ou Leonardo m1/m2
conectada diretamente alimentao negativa e, M1 Motor CC de 6V com reduo h18
como consequncia, ocorrer um curto-circuito. O Disco com encaixe para o eixo h19
mesmo acontecer se S3 e S4 forem fechadas ao do motor
mesmo tempo. CI1 L293D CI acionador de motor s24
Protoboard h1
Embora voc possa usar transistores avulsos para
Fios de conexo (jumpers) h2
construir uma ponte H, o mais prtico usar um
circuito integrado (CI) de ponte H, como o L293D.
Esse chip tem, na realidade, duas pontes H, poden- O motor usado neste projeto com reduo, isto
do controlar dois motores. Um desses chips ser , um motor CC que, combinado com uma caixa de
utilizado no Projeto 24. reduo, constitui uma unidade. A caixa de redu-
o diminui a velocidade do eixo, tornando-a mais
adequada a este projeto.

Projeto 24
Hipnotizador Hardware
O controle da mente pode ser uma atividade bem in- O diagrama esquemtico do hipnotizador est
teressante. Neste projeto (veja a Figura 8-9), contro- mostrado na Figura 8-10. Utilizaremos apenas o
laremos no s a velocidade como tambm o sentido primeiro dos dois canais disponveis no chip L293D.
30 projetos com Arduino

Figura 8-9 Projeto 24: hipnotizador.


Fonte: do autor.

142

Monk_08.indd 142 06/12/13 16:35


C1
100 mF

GND
5V +V motor
8

+V
16
D11
Out 1
Enable 1 1 3
D10
2
Arduino
In 1 L293D M
D9
7
In 2 6
Out 2

GND 4
GND
GND

Figura 8-10 Diagrama esquemtico do Projeto 24.


Fonte: do autor.

O L293D tem dois pinos +V (8 e 16). O pino +Vmo- espiral, que est em www.arduinoevilgenius.com\
tor (8) fornece potncia para os motores e o +V(16) new-downloads.
alimenta os circuitos lgicos do chip. Neste proje-
to, ambos foram ligados ao pino de 5V do Arduino. A espiral foi recortada de uma folha de papel e co-
Entretanto, se voc usar um motor mais potente ou lada em um carto que, por sua vez, foi colado na
de tenso mais elevada, voc dever providenciar pequena cabea de engrenagem montada no eixo
Projetos de potncia

uma fonte de alimentao separada para o motor, da caixa de reduo (poder ser diferente confor-
com o pino 8 do L293D conectado ao terminal po- me o seu caso).
sitivo dessa segunda fonte e com seu terminal terra
conectado ao terminal terra do Arduino.
Software
A Figura 8-11 mostra a disposio dos componen-
O sketch usa um array denominado speeds (veloci-
tes deste projeto no protoboard.
dades) para controlar gradativamente a velocidade
O nosso hipnotizador precisa do desenho de uma de rotao do disco. O disco gira com uma veloci-
captulo 8

espiral para funcionar. Voc pode copiar a Figura dade cada vez maior em um sentido. A seguir, a
8-12, cort-la e col-la adequadamente no motor. velocidade comea a baixar at parar. O sentido
Uma outra forma usar a verso mais colorida da trocado e a velocidade comea a aumentar nesse

143

Monk_08.indd 143 06/12/13 16:35


Motor
6V

Figura 8-11 Disposio dos componentes do Projeto 24 no protoboard.


Fonte: do autor.

novo sentido. Esse processo fica se repetindo inde- Pelo pino enable 1 (habilitao 1) do chip, pode-
finidamente. Voc talvez tenha que alterar o array mos controlar a velocidade do motor usando PWM
para que se ajuste ao seu motor. Os valores que (modulao por largura de pulso) e, pelos pinos in1
devem ser especificados no array variam de motor e in2, podemos controlar o sentido de rotao do
para motor. muito provvel que voc tenha que motor, como mostrado na tabela seguinte:
fazer esse ajuste.

In1 In2 Motor


GND GND Parado
5V GND Gira no sentido A
GND 5V Gira no sentido B
5V 5V Parado

Juntando tudo
Carregue o sketch completo do Projeto 24, que
30 projetos com Arduino

est no Sketchbook do Arduino, e transfira-o para a


placa (veja o Captulo 1).

Faa uma verificao cuidadosa de sua montagem


antes de ligar a alimentao eltrica. Voc poder
testar a ponte H conectando diretamente ao terra
Figura 8-12 Espiral para o hipnotizador. ambos os pinos de controle (pinos 2 e 7). Nesse
Fonte: do autor.

144

Monk_08.indd 144 06/12/13 16:35


caso, o motor no deve girar. Agora, conecte um seguida, conecte o outro pino a 5V. O motor dever
desses pinos a 5V e o motor dever girar em um girar em sentido contrrio.*
sentido. Conecte esse pino de volta ao terra e, em

LISTAGEM DO PROJETO 24
int enable1Pin = 11;
int in1Pin = 10;
int in2Pin = 9;

int speeds[] = {80, 100, 160, 240, 250, 255, 250, 240, 160, 100, 80,
-80, -100, -160, -240, -250, -255, -250, -240, -160, -100, -80};
int i = 0;

void setup()
{
pinMode(enable1Pin, OUTPUT);
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
}

void loop()
{
int speed = speeds[i];
i++;
if (i == 22)
{
i = 0;
}
drive(speed);
delay(1500);
}

void drive(int speed)


{
if (speed > 0)
{
analogWrite(enable1Pin, speed);
digitalWrite(in1Pin, HIGH);
digitalWrite(in2Pin, LOW);
}
else if (speed < 0)
{
Projetos de potncia

analogWrite(enable1Pin, -speed);
digitalWrite(in1Pin, LOW);
digitalWrite(in2Pin, HIGH);
}
}

* N. de T.: O autor est subentendendo que o pino de


captulo 8

enable1 est em nvel alto, ou seja, o motor est habilitado.


Poder ser til consultar a tabela anterior de controle do sen-
tido de rotao.

145

Monk_08.indd 145 06/12/13 16:35


um pulso a cada 20 ms, no mnimo. O ngulo que
Servomotores o servo assume determinado pela largura do pul-
so. Uma largura de pulso de 1,5 ms coloca o servo
Os servomotores so componentes pequenos, mas
em sua posio mdia, ou 90 graus. Um pulso de
muito importantes, utilizados frequentemente em
carros comandados por rdio para controlar a dire- 1,75 ms normalmente far gir-lo at 180 graus e
o e em aeromodelos para mover as superfcies um pulso igual ou menor que 1,25 ms far o ngu-
de controle (isto , ailerons, lemes de profundidade lo ser 0 graus.
e leme de direco). Os servomotores so forneci-
dos em diversos tamanhos para diferentes tipos de
aplicao. Como so muito usados em modelismo, Projeto 25
o seu custo tornou-se baixo.
Laser controlado por
Diferentemente dos motores normais, eles no
giram de forma contnua. Eles so controlados por
servomotores
um PWM para que assumam uma dada posio Este projeto (veja a Figura 8-13) usa dois servomo-
angular. A eletrnica necessria para isso j est tores para apontar um diodo laser em uma direo.
contida no prprio motor. Assim, tudo que voc O laser pode ser movido bem rapidamente, permi-
tem que fazer aliment-lo com uma tenso (ge- tindo que voc escreva em paredes distantes.
ralmente 5V) e um sinal de controle, que pode ser
gerado a partir da placa do Arduino. Esse laser real! No de alta potncia, de ape-
nas 3 mW, mas mesmo assim no o aponte para os
Com os anos, a interface com os servos tornou-se seus olhos, para os de outra pessoa ou os de um
padronizada. O servo deve receber continuamente animal. Isso poderia danificar as retinas.
30 projetos com Arduino

Figura 8-13 Projeto 25: laser controlado por servomotores.


Fonte: do autor.

146

Monk_08.indd 146 06/12/13 16:35


O mdulo laser acionado como um LED comum
COMPONENTES E EQUIPAMENTO
a partir de D4 atravs de um resistor limitador de
Descrio Apndice corrente.
Arduino Uno ou Leonardo m1/m2
D1 Mdulo laser vermelho de 3 mW s11 Os servos costumam vir acompanhados de diver-
M1,M2 Servomotor de 9g h20 sos braos, que podem ser encaixados no eixo e
R1 Resistor de 100 V e 1/4 W r2
fixados por um parafuso. Um dos servos colado
em um desses braos (Figura 8-15). Por sua vez,
C1 Capacitor 100 mF r3
esse brao fixado no outro servo. No aperte ain-
Protoboard h1
da o parafuso de fixao porque ser necessrio
Fios de conexo (jumpers) h2
ajustar o ngulo. Cole o diodo laser em um segun-
do brao e encaixe-o no primeiro servo. Para impe-
dir que um esforo mecnico possa danificar os fios
no lugar onde eles saem do laser, bom fix-los no
Hardware
brao. Isso pode ser feito colocando um lao de
O diagrama esquemtico deste projeto est mos- fio rgido atravs de dois furos do brao (disco, no
trado na Figura 8-14. tudo muito simples. Os ser- caso) do servo. A seguir, tora o lao em torno dos
vos tm apenas trs terminais. No servo, o terminal fios do laser. Uma forma de fazer isso pode ser vista
marrom conectado ao terra (GND), o terminal na Figura 8-13.
vermelho a +5V e o laranja (controle) est ligado
a uma sada digital (2 ou 3). Os fios de um servo Agora voc precisa montar o servo de baixo no
costumam terminar em um soquete, o que facilita protoboard. Fita autoadesiva o manter no lugar
a sua conexo a pinos. Fios de conexo so usados de forma suficientemente firme. Antes de fixar o
para ligar o soquete placa protoboard. servo em qualquer coisa, importante que voc

Projetos de potncia
captulo 8

Figura 8-14 Diagrama esquemtico do Projeto 25.


Fonte: do autor.

147

Monk_08.indd 147 06/12/13 16:35


baixo antes de fix-lo no lugar. Quando voc tiver
certeza que tudo est no lugar correto, aperte os
parafusos de fixao dos braos dos servos.

Na Figura 8-16, voc pode ver como os diversos


fios so fixados utilizando a placa protoboard. Nes-
sa placa, no h componentes, exceto um resistor
e um capacitor.

Servos diferentes consomem correntes diferentes.


Ao ativar os servos, possvel que o Arduino iniciali-
ze (reset) sozinho. Para resolver esse problema, voc
pode usar uma fonte de tenso externa de 9 ou 12V.
Figura 8-15 Colocando um brao em um servo.
Fonte: do autor.
Software
veja claramente como ele se mover. Em caso de Felizmente para ns, uma biblioteca para ser-
dvida, espere at a instalao do software e tes- vos est includa na biblioteca do Arduino. Desse
te o projeto segurando com os dedos o servo de modo, s precisamos informar a cada servo qual
30 projetos com Arduino

Figura 8-16 Disposio dos componentes do Projeto 25 no protoboard.


Fonte: do autor.

148

Monk_08.indd 148 06/12/13 16:35


o ngulo que ele deve assumir. Obviamente, h Para movimentos menores, as letras r, l, u e d exe-
mais coisas alm disso. Queremos dispor tambm cutam movimentos de apenas 1 grau. Para pausar
de um meio de informar quais so as coordenadas e permitir que o laser termine de se movimentar,
do ponto para o qual o laser deve apontar. voc pode enviar o caractere - (hfen) (veja a Lis-
tagem do Projeto 25).
Para isso, vamos enviar comandos atravs do cabo
USB. Eles esto na forma de letras. As letras mais- H mais trs comandos. A letra c centraliza o laser
culas R, L, U e D direcionam o laser para a direita de volta em sua posio inicial de repouso, e os
(right), para a esquerda (left), para cima (up) e para comandos 1 e 0 ativam e desativam o laser, res-
baixo (down), executando movimentos de 5 graus. pectivamente.

LISTAGEM DO PROJETO 25
#include <Servo.h>

int laserPin = 4;
Servo servoV;
Servo servoH;

int x = 90;
int y = 90;
int minX = 10;
int maxX = 170;
int minY = 50;
int maxY = 130;

void setup()
{
servoH.attach(3);
servoV.attach(2);
pinMode(laserPin, OUTPUT);
Serial.begin(9600);
}

void loop()
{
char ch;
if (Serial.available())
{
ch = Serial.read();
Projetos de potncia

if (ch == '0')
{
digitalWrite(laserPin, LOW);
}
else if (ch == '1')
{
digitalWrite(laserPin, HIGH);
}
else if (ch == '-')
{
captulo 8

delay(100);
}
(continua)

149

Monk_08.indd 149 06/12/13 16:35


LISTAGEM DO PROJETO 25 continuao
else if (ch == 'c')
{
x = 90;
y = 90;
}
else if (ch == 'l' || ch == 'r' || ch == 'u' || ch == 'd')
{
moveLaser(ch, 1);
}
else if (ch == 'L' || ch == 'R' || ch == 'U' || ch == 'D')
{
moveLaser(ch, 5);
}
}
servoH.write(x);
servoV.write(y);
delay(15);
}

void moveLaser(char dir, int amount)


{
if ((dir == 'r' || dir == 'R') && x > minX)
{
x = x - amount;
}
else if ((dir == 'l' || dir == 'L') && x < maxX)
{
x = x + amount;
}
else if ((dir == 'u' || dir == 'U') && y < maxY)
{
y = y + amount;
}
else if ((dir == 'd' || dir == 'D') && x > minY)
{
y = y - amount;
}
}

Abra o Serial Monitor e digite a sequncia de carac-


Juntando tudo teres que est a seguir. Voc dever ver o laser tra-
ar a letra A, como est mostrado na Figura 8-17.
Carregue o sketch completo do Projeto 25, que
30 projetos com Arduino

est no Sketchbook do Arduino, e transfira-o para a c1UUUUUURRRRDDDDDD0UUU1LLLL0DDD


placa (veja o Captulo 1).

150

Monk_08.indd 150 06/12/13 16:35


Resumo
Nos captulos anteriores, aprendemos a usar luz,
som e diversos sensores com o Arduino. Aprende-
mos tambm a controlar o acionamento de potn-
cia de motores e a usar rels. Provavelmente, isso
cobre praticamente tudo o que desejaremos fazer
com a nossa placa de Arduino. Assim, no Captulo
9, vamos reunir todas essas coisas para criar alguns
projetos mais elaborados.

Figura 8-17 Escrevendo a letra A com o laser.


Fonte: do autor.

Projetos de potncia
captulo 8

151

Monk_08.indd 151 06/12/13 16:35


captulo 9

Outros projetos
Este captulo mostra um conjunto de projetos que podemos construir utilizando
o que aprendemos at aqui. Esses projetos no ilustram um ponto em particular,
exceto que muito divertido construir projetos com Arduino.

Objetivos deste captulo


Aplicar e ampliar o conhecimento adquirido at aqui sobre luz,
som e sensores com o Arduino.

Demonstrar o uso da placa Lilypad.

Monk_09.indd 153 06/12/13 16:37


Projeto 26 Usamos um LED multicor que acender a cor ver-
melha para indicar uma mentira, a cor verde para
Detector de mentira verdade e a cor azul para indicar que o detector
Como podemos saber se algum est dizendo de mentira deve ser ajustado girando o resistor
a verdade? Certamente, usando um detector de varivel.
mentira. Esse detector de mentira (Figura 9-1) utili-
H dois tipos de buzzers piezoeltricos. Alguns so
za um efeito conhecido como resposta galvnica da
apenas um transdutor piezoeltrico, ao passo que
pele. Quando uma pessoa fica nervosa ao mentir,
outros contm um oscilador eletrnico para acion-
por exemplo a resistncia de sua pele diminui.
-los. Neste projeto, queremos o primeiro tipo, mais
Podemos medir essa resistncia usando um LED e
comum do que o eletrnico, porque a frequncia
um buzzer (sinalizador sonoro) para indicar que a
necessria ser gerada pelo prprio Arduino.
pessoa est mentindo.

ALERTA Hardware
Como, neste projeto, a pessoa deve tocar em ele-
Para medir a resistncia da pele, a pessoa utilizada
trodos que esto em ambos os lados do corao,
como um dos resistores de um divisor de tenso. O
h um pequeno risco de algo sair errado com o
seu computador se uma tenso elevada passar
outro resistor um de valor fixo. Quanto menor for
atravs da porta USB. Para evitar qualquer possibi- a resistncia da pessoa, mais a entrada analgica 0
lidade de ocorrer algo assim, use uma bateria para ser puxada em direo aos 5V. Quanto maior a re-
alimentar o Arduino. sistncia, mais prximo estar de GND (0V).
30 projetos com Arduino

Figura 9-1 Projeto 26: detector de mentira.


Fonte: do autor.

154

Monk_09.indd 154 06/12/13 16:37


Na realidade, o buzzer, apesar do nvel de rudo que de cada vez para sinalizar as cores vermelha, verde
produz, consome pouca corrente e pode ser acio- ou azul.
nado diretamente por um pino digital do Arduino.
A Figura 9-2 mostra o diagrama esquemtico deste
COMPONENTES E EQUIPAMENTO projeto, e a Figura 9-3, a disposio dos compo-
nentes no protoboard.
Descrio Apndice
Arduino Uno ou Leonardo m1/m2 O resistor varivel utilizado para calibrar o
R1-3 Resistor de 270 V e 1/4 W r3 ponto de ajuste da resistncia, e os eletrodos de
R4 Resistor de 470 kV e 1/4 W r9 toque so apenas dois percevejos inseridos no
R5 Trimpot de 10 kV r11 protoboard.
D1 LED RGB (catodo comum) s7
S1 Buzzer piezoeltrico h21
Percevejos metlicos
Software
Protoboard h1 O sketch deste projeto (Listagem do Projeto 26)
Fios de conexo (jumpers) h2 simplesmente compara as tenses em A0 e A1.
Se forem aproximadamente iguais, o LED ficar
Este projeto utiliza o mesmo LED multicor do Pro- verde. Se a tenso vinda do sensor do dedo (A0)
jeto 14. Entretanto, neste caso, no combinaremos for muito maior do que a tenso de A1, o resistor
as diferentes cores. Acenderemos apenas um LED varivel indicar uma diminuio da resistncia da

Vermelho
+5V
270 V
D11 R1

Verde
R5
270 V
A1 D10 R2
10 kV

Azul

Arduino 270 V
D9 R3
Eletrodos de toque

A0
Outros projetos

D7
R4 +
470 kV

Buzzer

GND GND
captulo 9

Figura 9-2 Diagrama esquemtico do Projeto 26.


Fonte: do autor.

155

Monk_09.indd 155 06/12/13 16:37


Figura 9-3 Disposio dos componentes do Projeto 26 no protoboard.
Fonte: do autor.

pele, o LED ficar vermelho e o buzzer soar. Por LISTAGEM DO PROJETO 26


outro lado, se A0 for significativamente menor do
que A1, o LED ficar azul, indicando um aumento int redPin = 11; // para colar
// no sketch modificado
da resistncia da pele.
int greenPin = 10;
int bluePin = 9;
O buzzer requer uma frequncia em torno de 5 int buzzerPin = 7;
kHz (5.000 ciclos por segundo) para ser acionado.
Para isso, usamos um comando for que repetida- int potPin = 1;
mente liga e desliga os pinos apropriados interca- int sensorPin = 0;
lando retardos. long red = 0xFF0000;
30 projetos com Arduino

long green = 0x00FF00;


long blue = 0x000080;

int band = 50;


// ajuste da sensibilidade

void setup()
{

156

Monk_09.indd 156 06/12/13 16:37


LISTAGEM DO PROJETO 26
Juntando tudo
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT); Carregue o sketch completo do Projeto 26, que
pinMode(bluePin, OUTPUT); est no Sketchbook do Arduino, e transfira-o para a
pinMode(buzzerPin, OUTPUT); placa (veja o Captulo 1).
}
Como voc precisar das mos livres para ajustar o
void loop()
{ resistor varivel, convide uma pessoa para testar o
int gsr = analogRead(sensorPin); detector de mentira.
int pot = analogRead(potPin);
if (gsr > pot + band) Primeiro, pea pessoa para colocar dois dedos vi-
{ zinhos sobre os percevejos metlicos. Ento, gire o
setColor(red);
eixo do resistor varivel at que o LED fique verde.
beep();
}
else if (gsr < pot - band)
Agora voc pode interrogar a vtima. Se o LED fi-
{ car vermelho ou azul, voc deve ajustar o resistor
setColor(blue); varivel at que fique novamente verde. A seguir,
} continue o interrogatrio.
else
{
setColor(green);

}
}
Projeto 27
void setColor(long rgb)
Fechadura magntica
{
int red = rgb >> 16;
para porta
int green = (rgb >> 8) & 0xFF; Este projeto (Figura 9-4), baseado no Projeto 10,
int blue = rgb & 0xFF; alm de acender o LED verde quando o cdigo
analogWrite(redPin, red);
analogWrite(greenPin, green);
correto for digitado, incluir tambm a abertura da
analogWrite(bluePin, blue); fechadura eletromagntica de uma porta. O ske-
} tch foi melhorado de modo que o cdigo secreto
pode ser alterado sem necessidade de modificar e
void beep()
{
instalar novamente o sketch. O cdigo secreto fica
// 5 khz para 1/5 de segundo armazenado em uma memria programvel ape-
for (int i = 0; i < 1000; i++) nas de leitura eletricamente apagvel (EEPROM).
{ Assim, se a alimentao eltrica for desligada, o
digitalWrite(buzzerPin, HIGH);
delayMicroseconds(100);
cdigo no ser perdido.
digitalWrite(buzzerPin, LOW);
Outros projetos

delayMicroseconds(100); Quando energizada, a fechadura eletromagnti-


} ca libera o seu mecanismo de trava (lingueta), de
} modo que a porta pode ento ser aberta. Quando
no energizada, a fechadura permanece trancada.

O adaptador de tenso CC deve poder fornecer


corrente suficiente para liberar a trava. Assim, voc
captulo 9

deve consultar as caractersticas eltricas da sua


fechadura antes de escolher um adaptador de ten-

157

Monk_09.indd 157 06/12/13 16:37


Figura 9-4 Projeto 27: fechadura magntica para porta.
Fonte: do autor.

so CC. Normalmente, uma corrente de 2A estar Note que essas fechaduras so projetadas para
tima. manter a trava liberada por apenas alguns segun-
dos enquanto a porta est sendo aberta.
COMPONENTES E EQUIPAMENTO
Descrio Apndice
Arduino Uno ou Leonardo m1/m2
Hardware
D1 LED vermelho de 5 mm s1 O diagrama esquemtico (Figura 9-5) e a disposi-
D2 LED verde de 5 mm s2 o dos componentes no protoboard (Figura 9-6)
so os mesmos do Projeto 10, com alguns compo-
R1-2 Resistor de 270 V e 1/4 W r3
nentes a mais. Assim como um rel, uma trava ele-
K1 Teclado 4 por 3 h11
tromagntica uma carga indutiva. Portanto, pode
Barra de pinos machos h12
gerar uma fora contraeletromotriz (FCEM) que
30 projetos com Arduino

T1 Transistor FQP30N06 s16


neutralizada pelo diodo D3.
Fechadura eletromagntica h23
D3 1N4004 s12 A trava controlada pelo transistor T1, que faz o
Protoboard h1 chaveamento de 12V. Como o projeto ser alimen-
Fios de conexo (jumpers) h2 tado com um adaptador de tenso de 12V, o pino
Adaptador de tenso CC de 12V h7 Vin conectado a um dos terminais do solenoide do
e 2A mecanismo eletromagntico de trava da fechadura.

158

Monk_09.indd 158 06/12/13 16:37


c a e
D6 D2 D4 1 2 3
Vin
D3
b
D1
Vermelho 4 5 6
D13 D8
270 V g
R1
D2
Verde 7 8 9
D12 D7
270 V
Solenoide R2 f
D3
(12V) Arduino
* 0 #
D5
d

T1
D10

FQP33N06

GND

Figura 9-5 Diagrama esquemtico do Projeto 27.


Fonte: do autor.

Fonte de alimentao
12V CC

Vermelho

Verde

Solenoide da fechadura
12V CC
Outros projetos

Figura 9-6 Disposio dos componentes do Projeto 27 no protoboard.


captulo 9

Fonte: do autor.

159

Monk_09.indd 159 06/12/13 16:37


LISTAGEM DO PROJETO 27
Software
if (c == 'u')
O software deste projeto similar ao do Projeto 10 {
(veja Listagem do Projeto 27). unlock();
}
LISTAGEM DO PROJETO 27 if (c == 'l')
{
#include <Keypad.h> lock();
#include <EEPROM.h> }
if (c == 'c')
char* secretCode = "1234"; {
int position = 0; getNewCode();
}
}
const byte rows = 4;
char key = keypad.getKey();
const byte cols = 3;
if (key == '#')
char keys[rows][cols] = {
{
{'1','2','3'},
lock();
{'4','5','6'},
}
{'7','8','9'}, if (key == secretCode[position])
{'*','0','#'} {
}; position ++;
byte rowPins[rows] = {7, 2, 3, 5}; }
byte colPins[cols] = {6, 8, 4}; else if (key != 0)
Keypad keypad = Keypad(makeKeymap(keys), {
rowPins, colPins, rows, cols); lock();
}
int redPin = 13; if (position == 4)
int greenPin = 12; {
int solenoidPin = 10; unlock();
}
void setup() delay(100);
{ }
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT); void lock()
pinMode(solenoidPin, OUTPUT); {
loadCode(); position = 0;
flash(); digitalWrite(redPin, HIGH);
lock(); digitalWrite(greenPin, LOW);
Serial.begin(9600); digitalWrite(solenoidPin, LOW);
while(!Serial); Serial.println("LOCKED");
Serial.print("Code is: "); }
Serial.println(secretCode);
Serial.println("Change code: cNNNN"); void unlock()
Serial.println("Unloack: u"); {
digitalWrite(redPin, LOW);
Serial.println("Lock: l");
digitalWrite(greenPin, HIGH);
}
30 projetos com Arduino

digitalWrite(solenoidPin, HIGH);
Serial.println("UN-LOCKED");
void loop()
delay(5000);
{
lock();
if (Serial.available())
}
{ void getNewCode()
char c = Serial.read(); {
for (int i = 0; i < 4; i++ )
{

160

Monk_09.indd 160 06/12/13 16:37


LISTAGEM DO PROJETO 27
char ch = Serial.read();
secretCode[i] = ch;
}
saveCode();
flash();flash();
Serial.print("Code changed to: ");
Serial.println(secretCode);
}
void loadCode()
{
if (EEPROM.read(0) == 1)
{
secretCode[0] = EEPROM.read(1);
secretCode[1] = EEPROM.read(2);
secretCode[2] = EEPROM.read(3);
secretCode[3] = EEPROM.read(4); Figura 9-7 Controlando a fechadura com o Serial
} Monitor.
}
void saveCode()
{ Cada vez que uma tecla pressionada, a funo faz
EEPROM.write(1, secretCode[0]); uma comparao com o respectivo caractere do
EEPROM.write(2, secretCode[1]); cdigo secreto e a varivel de contagem incre-
EEPROM.write(3, secretCode[2]);
mentada. Quando a contagem chega a 4, a fecha-
EEPROM.write(4, secretCode[3]);
EEPROM.write(0, 1); dura destrancada.
}
Como cada caractere ocupa exatamente 1 byte,
void flash() o cdigo pode ser armazenado diretamente na
{ EEPROM. Usamos o primeiro byte (posio 0) para
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, HIGH);
indicar se um cdigo novo foi fornecido. Se no, o
delay(500); cdigo default ser 1234. Se um cdigo novo for
digitalWrite(redPin, LOW); digitado, o primeiro byte da EEPROM receber o
digitalWrite(greenPin, LOW); valor 1. Se no fizssemos isso, o cdigo poderia
}
ser qualquer coisa que estivesse na EEPROM.

Embora este projeto seja alimentado com um


adaptador de tenso externo, mesmo assim voc Juntando tudo
ainda pode conectar o cabo USB no seu computa- Carregue o sketch completo do Projeto 27, que
dor e entrar com comandos para abrir e trancar a est no Sketchbook do Arduino, e transfira-o para a
porta ou mudar o cdigo secreto.
Outros projetos

placa (veja o Captulo 1).


A funo setup d algumas instrues para alterar Para verificar se tudo est funcionando, podemos
o cdigo secreto utilizando o Serial Monitor. Ela ligar a alimentao eltrica e digitar o cdigo
tambm mostra o cdigo atual (Figura 9-7). 1234. O LED verde dever acender e a fechadura
ser liberada.
A funo loop tem duas partes. Primeiro, verifica
se chegaram comandos vindos do Serial Monitor e,
captulo 9

em seguida, se teclas foram pressionadas no tecla-


do numrico.

161

Monk_09.indd 161 06/12/13 16:37


Projeto 28 COMPONENTES E EQUIPAMENTO
Controle remoto com Descrio Apndice

infravermelho R1
Arduino Uno ou Leonardo
Resistor de 10 V e 1/4 W
m1/m2
r14
Este projeto (Figura 9-8) permite que qualquer R2 Resistor de 270 V e 1/4 W r3
equipamento (controlado remotamente por infra- T1 Transistor 2N2222 s14
vermelho) possa ser comandado diretamente do D1 LED transmissor IR, 940nm, de s20
seu computador. Poderemos gravar uma mensa- 5mm
gem infravermelha enviada por um controle remo- CI1 CI receptor IR de controle s21
to j existente e, depois, repeti-la a partir do nosso remoto
computador. Protoboard h1
Fios de conexo (jumpers) h2
Armazenaremos os cdigos infravermelhos na
EEPROM para que no sejam perdidos quando a
placa do Arduino for desligada.
30 projetos com Arduino

Figura 9-8 Projeto 28: controle remoto com infravermelho.


Fonte: do autor.

162

Monk_09.indd 162 06/12/13 16:37


poder ver o brilho dele, pois essas cmeras so
Hardware um pouco sensveis luz infravermelha.
O receptor de controle remoto infravermelho (IR*) A partir de um pino de sada, voc pode alimentar
um mdulo pequeno e excelente que combina um diretamente o transmissor IR se usar um resistor
fotodiodo IR com toda a amplificao, filtragem e em srie de, digamos, 270 ohms para limitar a cor-
suavizao necessrias para produzir uma sada di- rente. Entretanto, esses dispositivos so projetados
gital a partir da mensagem IR. Essa sada alimenta o para ser alimentados continuamente com 100 mA
pino digital 9. O diagrama esquemtico (Figura 9-9) (cinco vezes a corrente de um LED normal). Des-
mostra como simples o uso desse mdulo, que sa forma, o nosso mdulo ter um alcance muito
tem apenas trs pinos: GND, +V e o sinal de sada. curto. Contudo, ns usaremos um transistor para
chavear o LED e um resistor em srie de valor bem
O transmissor IR um LED IR. Os LEDs IR trabalham
mais baixo para acionar o LED IR com o mximo de
como um LED vermelho comum, mas emitem ra-
corrente.
diao na faixa infravermelha invisvel do espec-
tro. Em alguns LEDs IR possvel ver um leve halo A Figura 9-10 mostra a disposio dos componen-
vermelho quando esto ligados. Normalmente, se tes deste projeto no protoboard.
apontar uma cmera digital para um LED IR, voc

5V

5V

D1
IR
3

1 D9
CI1
R1
D3
Arduino
2
10 V

R2
270 V

T1
Outros projetos

GND 2N2222

Figura 9-9 Diagrama esquemtico do Projeto 28.


captulo 9

Fonte: do autor.

* N. de T.: A sigla IR deriva do termo ingls infrared (infra-


vermelho).

163

Monk_09.indd 163 06/12/13 16:37


Figura 9-10 Disposio dos componentes do Projeto 28 no protoboard.
Fonte: do autor.

Quando fizer a montagem no protoboard, obser-


ve que a maioria dos LEDs IR no adota a conven-
Software
o normal dos LEDs. Nos LEDs IR, o terminal mais O sketch permite que voc grave, em uma de 10
comprido normalmente o terminal negativo. memrias, os sinais transmitidos por um controle
Consulte a folha de especificaes do seu LED an- remoto e, em seguida, reproduza-os (veja Lista-
tes de conect-lo. gem do Projeto 28).

LISTAGEM DO PROJETO 28
#include <EEPROM.h>

#define maxMessageSize 100


#define numSlots 9
30 projetos com Arduino

int irRxPin = 9;
int irTxPin = 3;

int currentCode = 0;
int buffer[maxMessageSize];

void setup()
{

164

Monk_09.indd 164 06/12/13 16:37


LISTAGEM DO PROJETO 28
Serial.begin(9600);
Serial.println("0-9 to set code memory, l - learn, s - to send");
pinMode(irRxPin, INPUT);
pinMode(irTxPin, OUTPUT);
setCodeMemory(0);
}

void loop()
{
if (Serial.available())
{
char ch = Serial.read();
if (ch >= '0' && ch <= '9')
{
setCodeMemory(ch - '0');
}
else if (ch == 's')
{
sendIR();
}
else if (ch == 'l')
{
int codeLen = readCode();
Serial.print("Read code length: "); Serial.println(codeLen);
storeCode(codeLen);
}
}
}

void setCodeMemory(int x)
{
currentCode = x;
Serial.print("Set current code memory to: ");
Serial.println(currentCode);
}

void storeCode(int codeLen)


{
// escrever o cdigo na EEPROM, o primeiro byte o comprimento
int startIndex = currentCode * maxMessageSize;
EEPROM.write(startIndex, (unsigned byte)codeLen);
for (int i = 0; i < codeLen; i++)
{
Outros projetos

EEPROM.write(startIndex + i + 1, buffer[i]);
}
}

void sendIR()
{
// construir um buffer com os dados armazenados na EEPROM e transmita-os
int startIndex = currentCode * maxMessageSize;
captulo 9

int len = EEPROM.read(startIndex);


Serial.print("Sending Code for memory "); Serial.print(currentCode);
(continua)

165

Monk_09.indd 165 06/12/13 16:37


LISTAGEM DO PROJETO 28 continuao
Serial.print(" len="); Serial.println(len);
if (len > 0 && len < maxMessageSize)
{
for (int i = 0; i < len; i++)
{
buffer[i] = EEPROM.read(startIndex + i + 1);
}
sendCode(len);
}
}

void sendCode(int n)
{
for (int i = 0; i < 3; i++)
{
writeCode(n);
delay(90);
}
}

int readCode()
{
int i = 0;
unsigned long startTime;
unsigned long endTime;
unsigned long lowDuration = 0;
unsigned long highDuration = 0;
while(digitalRead(irRxPin) == HIGH) {}; // espera pelo primeiro pulso
while(highDuration < 5000l)
{
// encontrar a durao em nvel baixo
startTime = micros();
while(digitalRead(irRxPin) == LOW) {};
endTime = micros();
lowDuration = endTime - startTime;
if (lowDuration < 5000l)
{
buffer[i] = (byte)(lowDuration >> 4);
i ++;
}
// encontrar a durao em nvel alto
startTime = micros();
while(digitalRead(irRxPin) == HIGH) {};
endTime = micros();
30 projetos com Arduino

highDuration = endTime - startTime;


if (highDuration < 5000l)
{
buffer[i] = (byte)(highDuration >> 4);
i ++;
}
}
return i;

166

Monk_09.indd 166 06/12/13 16:37


LISTAGEM DO PROJETO 28
}

void writeCode(int n)
{
int state = 0;
unsigned long duration = 0;
int i = 0;
while (i < n)
{
duration = buffer[i] << 4;
int cycles = duration / 14;
if ( ! (i % 2))
{
for (int x = 0; x < cycles; x++)
{
state = ! state;
digitalWrite(irTxPin, state);
delayMicroseconds(10); // menor que 12 para ajustar as outras instrues
}
digitalWrite(irTxPin, LOW);
}
else
{
digitalWrite(irTxPin, LOW);
delayMicroseconds(duration);
}
i ++;
}
}

Os controles remotos IR enviam uma sequncia Um bit com valor 1 representado por um pulso de
de pulsos em uma frequncia entre 36 e 40 kHz. A onda quadrada com frequncia entre 36 e 40 kHz.
Figura 9-11 mostra o traado em um osciloscpio. Um 0 representado por uma pausa na qual no
h envio de pulsos.

Na funo setup, a comunicao serial iniciada


e escrevemos na Console Serial as instrues de
como usar este projeto. dessa Console Serial que
Outros projetos

controlamos o sistema. Tambm definimos que a


varivel setCodeMemory zero.

A funo loop segue o padro familiar de verificar


se alguma entrada chegou atravs da porta USB.
Se for um cdigo entre 0 e 9, a memria correspon-
captulo 9

dente a esse cdigo ser tornada a memria cor-


Figura 9-11 Cdigo infravermelho em um rente. Se um caractere s (de send, enviar ou trans-
osciloscpio. mitir) vier do Serial Monitor, a mensagem que est
Fonte: do autor.

167

Monk_09.indd 167 06/12/13 16:37


na posio corrente da memria de mensagens trole remoto do aparelho para o sensor do nosso
ser transmitida e, se for um l (de learn, apren- projeto. Aperte um boto no controle remoto (ligar
der), o sketch passa a esperar que uma mensagem um DVD player ou ejetar a sua gaveta so aes
chegue do controle remoto. que impressionam). Voc dever ver uma mensa-
gem como a seguinte (em que dito que o cdigo
A seguir, a funo loop verifica se algum sinal IR foi salvo e o seu comprimento 67):
foi recebido. Em caso afirmativo, esse sinal IR
memorizado na memria programvel apenas de Saved code, length: 67
leitura eletricamente apagvel (EEPROM) por meio
da funo storeCode. O comprimento do cdigo Agora, aponte o LED IR para o aparelho e digite s
armazenado no primeiro byte e ento, para cada (send) no Serial Monitor. Voc receber uma men-
pulso sucessivo, o nmero de intervalos de 50 ms sagem como a seguinte (em que dito que o cdi-
armazenado nos bytes seguintes. go foi enviado e que seu comprimento foi 67):
Quando acessamos a EEPROM por meio das fun- Sent code, length: 67
es storeCode e sendIR, utilizamos uma tcnica
interessante que permite o acesso, na forma de um
Mais importante, o aparelho dever responder
array, s posies das mensagens na memria. A mensagem enviada pela placa do Arduino.
posio de partida na memria para armazenar ou
ler os dados da EEPROM calculada multiplican- Voc poder tentar alterar a posio de memria
do o valor de currentCode (cdigo corrente) pelo se digitar um nmero diferente no Serial Monitor
comprimento de cada cdigo (mais o byte que diz e armazenar diversos comandos IR. No h uma
qual o comprimento). razo para que tenham de ser do mesmo aparelho.

Observe que esse projeto no necessariamente


Juntando tudo funcionar com qualquer aparelho controlado por
IR. Portanto, se acontecer de no funcionar com
Carregue o sketch completo do Projeto 28, que
um aparelho, experimente com outro.
est no Sketchbook do Arduino, e transfira-o para a
placa (veja o Captulo 1).

Para testar o projeto, escolha algum eletrodoms- Projeto 29


tico que seja comandado por um controle remoto
IR. A seguir, ligue o dispositivo que acabamos de Relgio com Lilypad
construir. O Arduino Lilypad funciona do mesmo modo que
as placas Uno ou Leonardo, mas, em vez de uma
Abra o Serial Monitor. Voc ser saudado pela se-
placa de circuito visualmente desinteressante, o Li-
guinte mensagem:
lypad circular e projetado para ser costurado nas
0-9 to set code memory, l - learn, roupas com linha condutiva metlica. Quando nos
30 projetos com Arduino

s - to send deparamos com um deles, podemos perceber o


Set current code memory to: 0 seu belo visual. Por essa razo, construiremos este
projeto em um porta-retrato, de forma que possa-
Por default, qualquer mensagem que captarmos mos mostrar a beleza natural da eletrnica (Figura
ser armazenada na posio 0 da memria. Assim, 9-12). Uma chave reed utilizada para acertar o
digite l (learn) no Serial Monitor e aponte o con- relgio.

168

Monk_09.indd 168 06/12/13 16:37


cpsula selada de vidro. Quando um m aproxima-
-se da chave, os contatos so aproximados e a cha-
ve fechada.

Usamos uma chave reed em vez de uma comum


para que o projeto inteiro possa ser montado atrs
do vidro de um porta-retrato. Poderemos acertar o
relgio se o m for aproximado da chave.

A Figura 9-13 mostra o diagrama esquemtico do


projeto.

Cada LED tem um resistor soldado ao terminal ne-


gativo mais curto. O terminal positivo ento sol-
dado no respectivo terminal do Arduino Lilypad e o
terminal do resistor passa por baixo da placa, onde
soldado a todos os demais terminais de resistor.
Figura 9-12 Projeto 29: relgio binrio com Lilypad. A Figura 9-14 d uma viso detalhada dos LEDs e
Fonte: do autor.
resistores. A fiao dos terminais abaixo da placa
est mostrada na Figura 9-15. Observe um disco
COMPONENTES E EQUIPAMENTO grosseiro depapelo funcionando como proteo
Descrio Apndice entre a parte de trs da placa e os terminais solda-
Arduino Lilypad e m3 dos dos resistores.
programador USB
Uma fonte de alimentao de 5V usada porque,
R1-16 Resistor de 100 V e 1/4 W r2
quando todos os LEDs esto acesos, uma potncia
D1-4 LED vermelho de 2 mm s4
significativa consumida. Pilhas ou baterias no
D5-10 LED azul de 2 mm s6
durariam muito tempo. Os fios de alimentao el-
D11-16 LED verde de 2 mm s5 trica so ligados a um conector montado em uma
R17 Resistor de filme metlico r8 das molduras laterais do porta-retrato.
de 100 kV e 1/4 W
S1 Chave reed miniatura h3 Utilizamos um carregador de telefone celular que
Porta-retrato de 18 x 13 cm estava fora de uso. Verifique se a fonte de alimenta-
Fonte de alimentao de 5V h6 o que voc usar consegue fornecer 5V com uma
corrente de, no mnimo, 500 mA. Para testar a pola-
Neste projeto, usaremos um ferro de soldar. ridade, voc pode usar um multmetro.
Outros projetos

Hardware
Software
Neste projeto, quase todas as conexes do Lilypad
tm um LED e um resistor em srie. A programao do Lilypad um pouco diferente
da programao de um Uno ou Leonardo. O Li-
A chave reed um pequeno componente til que lypad no tem uma porta USB. Para program-lo
captulo 9

consiste apenas em um par de contatos em uma deve-se usar um adaptador especial.

169

Monk_09.indd 169 06/12/13 16:37


+5V
S1

R17
+

100 V
A4

-
GND
Vermelho (horas) A3
D1
Arduino A2
D1
D2 Lilypad A1 D16
R1
D2 D15 R16
D3 A0
100 V

R2 D14 R15

100 V
D3 D13
D4
100 V

100 V
D13 R14
R3
D4 D12

100 V
D12 R13
100 V

R4 D5 D6 D7 D8 D9 D10

100 V
D11 R12
100 V

100 V
R11
D5 D6 D7 D8 D9 D10

100 V
R5 R6 R7 R8 R9 R10
100 V
100 V

100 V
100 V

100 V
100 V

GND
Azul (minutos) Verde (segundos)

Figura 9-13 Diagrama esquemtico do Projeto 29.


Fonte: do autor.
30 projetos com Arduino

Figura 9-14 Vista detalhada dos LEDs soldados aos


resistores. Figura 9-15 Lado de baixo da placa Lilypad.
Fonte: do autor. Fonte: do autor.

170

Monk_09.indd 170 06/12/13 16:37


No caso do Windows, na primeira vez que voc in-
serir o adaptador no Lilypad e o conectar ao com-
putador, ser executado o assistente para novo
hardware encontrado. Em seguida, voc deve se-
lecionar a opo de instalao a partir de um local
especificado e procurar a opo FTDI USB Drivers
na pasta Drivers dentro do diretrio de instalao
do seu Arduino. Com isso, os drivers necessrios
sero instalados.

A Figura 9-16 mostra o adaptador conectado ao


Lilypad.

Para Mac e Linux, voc encontrar instaladores na


pasta Drivers para instalar o driver USB. possvel
que voc descubra que sua mquina reconhece o Figura 9-16 Adaptador USB conectado placa
adaptador USB adequado sem precisar instalar nada. Lilypad.
Fonte: do autor.
Este outro projeto em que usaremos uma bi-
blioteca. Essa biblioteca facilita a manipulao de o diretrio inteiro na pasta libraries dentro de seu
tempo e pode ser baixada de http://playground. diretrio Arduino sketches.
arduino.cc/Code/Time.
Logo que voc instalar essa biblioteca no seu
Baixe o arquivo Time.zip e faa unzip. Se voc es- diretrio Arduino, voc poder us-la com qual-
tiver usando Windows, clique o boto direito do quer sketch que voc escrever (veja Listagem do
mouse e escolha Extraia Tudo e, em seguida, salve Projeto 29.)

LISTAGEM DO PROJETO 29
#include <Time.h>

int hourLEDs[] = {1, 2, 3, 4}; // o bit menos significativo o primeiro


int minuteLEDs[] = {10, 9, 8, 7, 6, 5};
int secondLEDs[] = {17, 16, 15, 14, 13, 12};

int loopLEDs[] = {17, 16, 15, 14, 13, 12, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};

int switchPin = 18;


Outros projetos

void setup()
{
for (int i = 0; i < 4; i++)
{
pinMode(hourLEDs[i], OUTPUT);
}
for (int i = 0; i < 6; i++)
captulo 9

{
pinMode(minuteLEDs[i], OUTPUT);
(continua)

171

Monk_09.indd 171 06/12/13 16:37


LISTAGEM DO PROJETO 29 continuao
}
for (int i = 0; i < 6; i++)
{
pinMode(secondLEDs[i], OUTPUT);
}
setTime(0);
}

void loop()
{
if (digitalRead(switchPin))
{
adjustTime(1);
}

else if (minute() == 0 && second() == 0)


{
spin(hour());
}
updateDisplay();
delay(1);
}

void updateDisplay()
{
time_t t = now();
setOutput(hourLEDs, 4, hourFormat12(t));
setOutput(minuteLEDs, 6, minute(t));
setOutput(secondLEDs, 6, second(t));
}

void setOutput(int *ledArray, int numLEDs, int value)


{
for (int i = 0; i < numLEDs; i++)
{
digitalWrite(ledArray[i], bitRead(value, i));
}
}
void spin(int count)
{
for (int i = 0; i < count; i++)
{
for (int j = 0; j < 16; j++)
{
30 projetos com Arduino

digitalWrite(loopLEDs[j], HIGH);
delay(50);
digitalWrite(loopLEDs[j], LOW);
}
}
}

172

Monk_09.indd 172 06/12/13 16:37


Os arrays so usados para definir os diversos Em um papel, voc poder desenhar identifica-
conjuntos de LEDs. Eles so usados na funo dores para os LEDs, facilitando assim a leitura das
setOutput e para simplificar a instalao. Essa fun- horas. Um desses desenhos est disponvel em
o determina os valores binrios do array de LEDs www.arduinoevilgenius.com.
que deve exibir um valor binrio. A funo tambm
recebe o valor que dever ser escrito nele e argu- Para ler as horas do relgio, voc olha sucessiva-
mentos relativos ao comprimento desse array. Isso mente cada uma das sees (horas, minutos e
usado na funo loop para sucessivamente ativar Segundos) e soma os valores dos LEDs que esto
os LEDs de horas, minutos e segundos. Ao passar acesos. Assim, se os LEDs 8 e 2 da seo horas esti-
um array para dentro de uma funo como essa, verem acesos, sero 10 horas. A seguir, faa o mes-
voc dever antepor um asterisco (*) ao argumen- mo com os minutos e os segundos.
to na definio da funo.

Uma caracterstica adicional do relgio que, a


cada hora, ele acende sucessivamente de forma
Projeto 30
circular cada um dos LEDs do mostrador de hora. Contador regressivo de
Assim, quando for 6 horas, por exemplo, ele far tempo
seis sequncias sucessivas de acendimentos nos
LEDs da hora antes de seguir com o padro normal. Nenhum livro de projetos com Arduino pode fi-
car sem um contador de tempo do estilo Bond
Se o rel reed for ativado, a funo adjustTime ser (Figura 9-17). Este contador de tempo tambm
chamada com o argumento de 1 segundo. Como serve como marcador de tempo para cozinhar
isso est na funo loop com um retardo de 1 ms, alimentos.
os segundos passaro rapidamente.

Juntando tudo
Carregue o sketch completo do Projeto 29, que
est no Sketchbook do Arduino, e transfira-o para
a placa (veja o Captulo 1). Em um Lilypad, isso
feito de modo um pouco diferente do que estamos
acostumados a fazer. No software do Arduino, antes
de carregar o sketch, voc deve selecionar um tipo
diferente de placa (Lilypad 328) e de porta serial.

Monte o projeto, mas teste-o conectado ao progra-


mador USB antes de mont-lo definitivamente no
Outros projetos

porta-retrato.

Escolha um porta-retrato que tenha espaadores


Figura 9-17 Projeto 30: contador regressivo de
suficientemente largos entre o fundo e o vidro
tempo.
frontal. Isso permitir instalar os componentes Fonte: do autor.
nesse vo.
captulo 9

173

Monk_09.indd 173 06/12/13 16:37


COMPONENTES E EQUIPAMENTO
Software
Descrio Apndice
O sketch deste projeto (Listagem do Projeto 30)
Arduino Uno ou Leonardo m1/m2
2 utiliza as mesmas bibliotecas do Projeto 16. As-
Display I C de quatro dgitos e m7
sete segmentos sim, se voc ainda no as instalou, consulte o
Encoder rotativo h13
Captulo 6.
Buzzer piezoeltrico h21 Em vez de fazer o encoder alterar o tempo corrente
Protoboard h1 em 1 segundo a cada rotao, usaremos um array
Fios de conexo (jumpers) h2 com tempos padronizados adequados para cozi-
nhar alimentos. Esse array pode ser editado e am-
pliado, mas se voc alterar o seu tamanho, voc de-
ver mudar adequadamente a varivel numTimes.
Hardware
Como o Projeto 16, este projeto tambm usa um Para manter atualizada a contagem do tempo, a
2
mdulo I C, mas neste caso um mdulo display funo updateCountingTime (atualiza contagem
com LEDs de sete segmentos e quatro dgitos. de tempo) verifica se mais de um segundo decor-
reu. Em caso afirmativo, ela diminui 1 do nmero
O diagrama esquemtico do projeto est mostrado de segundos. Quando os segundos chegam a zero,
na Figura 9-18, e a disposio dos componentes no ento, do mesmo modo, ela diminui 1 do nmero
protoboard est na Figura 9-19. de minutos.

5V V+

SDA SDA
Mdulo display com LEDs de
SCL SCL sete segmentos e quatro dgitos

GND V-

D3

Arduino D4

D2 Encoder

A B P
30 projetos com Arduino

GND

Figura 9-18 Diagrama esquemtico do Projeto 30.


Fonte: do autor.

174

Monk_09.indd 174 06/12/13 16:37


Figura 9-19 Disposio dos componentes do Projeto 30 no protoboard.
Fonte: do autor.

LISTAGEM DO PROJETO 30
#include <Adafruit_LEDBackpack.h>
#include <Adafruit_GFX.h>
#include <Wire.h>
Outros projetos

Adafruit_7segment display = Adafruit_7segment();

int times[] = {5, 10, 15, 20, 30, 45, 100, 130, 200, 230, 300, 400, 500, 600, 700, 800, 900,
1000, 1500, 2000, 3000};
int numTimes = 19;

int buzzerPin = 11;


captulo 9

(continua)

175

Monk_09.indd 175 06/12/13 16:37


LISTAGEM DO PROJETO 30 continuao
int aPin = 2;
int bPin = 4;
int buttonPin = 3;

boolean stopped = true;

int selectedTimeIndex = 12;


int timerMinute;
int timerSecond;

void setup()
{
pinMode(buzzerPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(aPin, INPUT_PULLUP);
pinMode(bPin, INPUT_PULLUP);
Serial.begin(9600);
display.begin(0x70);
reset();
}

void loop()
{
updateCountingTime();
updateDisplay();
if (timerMinute == 0 && timerSecond == 0 && ! stopped)
{
tone(buzzerPin, 400);
}
else
{
noTone(buzzerPin);
}
if (digitalRead(buttonPin) == LOW)
{
stopped = ! stopped;
while (digitalRead(buttonPin) == LOW);
}
int change = getEncoderTurn();
if (change != 0)
{
changeSetTime(change);
}
}
30 projetos com Arduino

void reset()
{
timerMinute = times[selectedTimeIndex] / 100;
timerSecond = times[selectedTimeIndex] % 100;
stopped = true;
noTone(buzzerPin);
}
void updateDisplay() // mmss

176

Monk_09.indd 176 06/12/13 16:37


LISTAGEM DO PROJETO 30
if (newA != oldA || newB != oldB)
{
// atualizar display I2C
int timeRemaining = timerMinute * 100 + timerSecond;
display.print(timeRemaining, DEC);
display.writeDisplay();
}

void updateCountingTime()
{
if (stopped) return;

static unsigned long lastMillis;


unsigned long m = millis();
if (m > (lastMillis + 1000) && (timerSecond > 0 || timerMinute > 0))
{
if (timerSecond == 0)
{
timerSecond = 59;
timerMinute --;
}
else
{
timerSecond --;
}
lastMillis = m;
}
}

void changeSetTime(int change)


{
selectedTimeIndex += change;
if (selectedTimeIndex < 0)
{
selectedTimeIndex = numTimes;
}
else if (selectedTimeIndex > numTimes)
{
selectedTimeIndex = 0;
}
timerMinute = times[selectedTimeIndex] / 100;
timerSecond = times[selectedTimeIndex] % 100;
Outros projetos

int getEncoderTurn()
{
// retornar -1, 0, ou +1
static int oldA = LOW;
static int oldB = LOW;
int result = 0;
captulo 9

int newA = digitalRead(aPin);


int newB = digitalRead(bPin);
(continua)

177

Monk_09.indd 177 06/12/13 16:37


LISTAGEM DO PROJETO 30 continuao
{
// algo mudou
if (oldA == LOW && newA == HIGH)
{
result = -(oldB * 2 - 1);
}
}
oldA = newA;
oldB = newB;
return result;
}

O tempo que deve ser mostrado vem formatado


em minutos e segundos. Para isso, cria-se um nico
Resumo
nmero decimal multiplicando o nmero de minu- No Captulo 10, voc encontrar uma seleo de
tos por 100 e somando-se, em seguida, o nmero projetos voltados ao Arduino Leonardo. Essa placa
de segundos. diferente da placa Uno porque pode emular um
teclado e um mouse USB, abrindo inmeras possi-
bilidades novas.
Juntando tudo
Carregue o sketch completo do Projeto 30, que
est no Sketchbook do Arduino, e transfira-o para a
placa (veja o Captulo 1).
30 projetos com Arduino

178

Monk_09.indd 178 06/12/13 16:37


captulo 10

Projetos USB com o Leonardo


O Arduino Leonardo difere em vrios aspectos do Arduino mais convencional.
mais barato e tem um chip diferente de microcontrolador. A utilizao desse
circuito integrado permite ao Leonardo personificar um teclado USB, que a
base dos projetos descritos neste captulo.

Objetivos deste captulo


Desenvolver projetos com a placa Arduino Leonardo de forma
sistemtica.

Monk_10.indd 179 06/12/13 16:38


Projeto 31 putador da pessoa em quem voc quer aplicar o
truque.
O truque do teclado
Quem conhece o filme Matrix de 1999 e quem
no o conhece? ir se lembrar da cena em que o
Software
heri, Neo, est em seu quarto e mensagens come- O sketch do Projeto 31 est mostrado na Listagem
am a surgir na tela do seu computador. de Projeto 31.

Este projeto usa um Arduino Leonardo, secreta-


mente acoplado porta USB do computador de
algum, para enviar mensagens aps um perodo
aleatrio de tempo (Figura 10-1).

COMPONENTES E EQUIPAMENTO
Descrio Apndice
Arduino Uno ou Leonardo m2

Hardware Figura 10-1 Aplicando o truque do teclado.


A nica coisa de que voc precisa para esse proje- Fonte: do autor.
to um Leonardo e um cabo USB primeiro para
fazer a conexo com o seu computador a fim de A funo setup inicializa o gerador de nmeros
program-lo e depois para conect-lo ao com- aleatrios com um valor lido na entrada analgi-

LISTAGEM DO PROJETO 31
void setup()
{
randomSeed(analogRead(0));
Keyboard.begin();
}

void loop()
{
delay(random(10000) + 30000);
Keyboard.print("\n\n\nWake up NeoWake up Neo\n");
delay(random(3000) + 3000);
30 projetos com Arduino

Keyboard.print("The Matrix has you\n");


delay(random(3000) + 3000);
Keyboard.print("Follow the White Rabbit\n");
delay(random(3000) + 3000);
Keyboard.print("Knock, knock, Neo...\n");
}

180

Monk_10.indd 180 06/12/13 16:38


ca A0. Como esse pino est flutuando, o resultado Uploading na rea de status e ento liberar o
deve ser bem aleatrio. A biblioteca de emulao boto.
do teclado tambm inicializada por meio do co-
mando Keyboard.begin.
Juntando tudo
A funo principal loop espera aleatoriamente
Este um projeto pequeno e divertido. Obvia-
por 30 ou 40 segundos e ento comea a enviar as
mente, voc poder alterar o texto da mensagem.
mensagens com um intervalo de 3 a 6 segundos
Entretanto, lembre-se de que o texto aparecer
entre cada frase.
apenas se sua vtima estiver editando alguma
Os caracteres \n so comandos de nova linha. So coisa em um programa no qual h digitao sen-
equivalentes a pressionar a tecla ENTER. do feita por meio do teclado.

Como este projeto simula um teclado que comea


a funcionar sozinho, lembre-se de que ele digitar
o texto em qualquer programa que esteja sendo Projeto 32
executado, e isso inclui o sketch do Arduino, se
voc estiver com ele aberto na IDE. bom desco- Digitador automtico de
nect-lo, exceto quando voc estiver programando senha
a placa ou pronto para aplicar o truque.
Este projeto (Figura 10-2) utiliza as caractersti-
Se voc empacar enquanto tenta program-lo, cas de emulao de teclado do Leonardo para
poder manter pressionado o boto vermelho automatizar a gerao e digitao de senhas. Ao
de Reset at que o software do Arduino diga pressionar um boto, uma nova senha criada

Projetos USB com o Leonardo


captulo 10

Figura 10-2 Digitador automtico de senha.


Fonte: do autor.

181

Monk_10.indd 181 06/12/13 16:38


e armazenada na memria programvel apenas
de leitura eletricamente apagvel (EEPROM). Ao Hardware
apertar o outro boto, a senha mostrada com o
Em relao ao hardware, este um dos projetos
auxlio da capacidade do Leonardo de personifi-
mais simples do livro. Tem apenas dois botes
car um teclado.
montados no protoboard.
Um alerta: muito fcil pressionar o boto errado
A Figura 10-3 mostra o diagrama esquemtico, e
e acidentalmente trocar a senha. Pense bem antes
a Figura 10-4, a disposio dos componentes no
de usar esse projeto para as suas senhas. Ele tam-
protoboard.
bm no muito seguro porque tudo que algum
precisa fazer para descobrir a sua senha levar o
cursor para dentro da janela de algum editor de D9
texto que j esteja aberto na tela e apertar o boto
que faz aparecer a senha.
D8

COMPONENTES E EQUIPAMENTO
Arduino
Descrio Apndice
Arduino Leonardo m2 S1 S2

S1,S2 Chave de contato momentneo h3


(miniatura)
Protoboard h1 GND
Fios de conexo (jumpers) h2
Figura 10-3 Diagrama esquemtico do digitador
de senha.
Fonte: do autor.
30 projetos com Arduino

Figura 10-4 Disposio dos componentes no protoboard do digitador de senha.


Fonte: do autor.

182

Monk_10.indd 182 06/12/13 16:38


comprimento maior, tudo que voc precisar fazer
Software alterar o valor dessa varivel de 8 para outro valor
inferior a 1023. O array de caracteres (letters) con-
O sketch do Projeto 32 est mostrado na Listagem
tm uma lista dos caracteres que sero gerados.
do Projeto 32.
Para que o Leonardo funcione com o teclado, voc
Alm de duas variveis para os botes, foi defini- precisa usar o comando Keyboard.begin() na ini-
da tambm uma varivel para o comprimento da cializao (setup) para que a emulao do teclado
senha (passwordLength). Se quiser senhas com seja iniciada.

LISTAGEM DO PROJETO 32
#include <EEPROM.h>

int typeButton = 9;
int generateButton = 8;
int passwordLength = 8;

char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

void setup()
{
pinMode(typeButton, INPUT_PULLUP);
pinMode(generateButton, INPUT_PULLUP);
Keyboard.begin();
}

void loop()
{
if (digitalRead(typeButton) == LOW)
{
typePassword();
}
if (digitalRead(generateButton) == LOW)
{
generatePassword(); Projetos USB com o Leonardo
}
delay(300);
}

void typePassword()
{
for (int i = 0; i < passwordLength; i++)
{
Keyboard.write(EEPROM.read(i));
}
Keyboard.write('\n');
}
captulo 10

void generatePassword()
{
(continua)

183

Monk_10.indd 183 06/12/13 16:38


LISTAGEM DO PROJETO 32 continuao
randomSeed(millis() * analogRead(A0));
for (int i = 0; i < passwordLength; i++)
{
EEPROM.write(i, randomLetter());
}
}

char randomLetter()
{
int n = strlen(letters);
int i = random(n);
return letters[i];
}

A funo loop precisa apenas verificar se uma


chave foi apertada e ento, de acordo com qual
boto foi pressionado, chamar a funo genera-
tePassword (gera senha) ou typePassword (digita
senha).

A funo typePassword simplesmente l cada um


dos caracteres da senha na EEPROM e os remete
ao teclado usando Keyboard.write. Quando todos
os caracteres forem escritos, sero acrescentados
os dois caracteres \n, que indicam o final da linha
Figura 10-5 Utilizando o digitador de senha com o
simulando a tecla ENTER. Notepad no Windows.
Fonte: do autor.
Para gerar uma nova senha, primeiro o gerador de
nmeros pseudoaleatrios inicializado com uma
semente. Ela a combinao dos milissegundos no
momento atual, contados desde a ltima inicializa- Projeto 33
o, e o valor presente corrente no pino analgico Mouse com acelermetro
A0. Como ambos so aleatrios, esse procedimen-
to ir nos ajudar a criar uma sequncia bem aleat- Neste projeto, um Leonardo transformado em um
ria de caracteres. Essa sequncia criada tomando mouse controlado por um acelermetro com a ajuda
um caractere de cada vez do array letters e escre- de um mdulo medidor de acelerao. Para contro-
vendo-o na EEPROM. lar o mouse, incline o Leonardo de um lado a outro.
Aperte o boto para simular um clique de mouse.
30 projetos com Arduino

Juntando tudo Este projeto no utiliza protoboard. O mdulo me-


didor de acelerao e o boto esto conectados di-
A melhor maneira de testar o projeto utilizar o retamente nos soquetes do Arduino (Figura 10-6).
Notepad do Windows ou qualquer outro editor de
texto. Primeiro, pressione o boto de baixo para Quando o mdulo medidor de acelerao est ni-
gerar uma nova senha. A seguir, pressione o boto velado no plano horizontal, a acelerao da gravi-
de cima. A senha dever aparecer dentro do editor dade atuar igualmente nos eixos X e Y. Entretanto,
de texto (Figura 10-5). quando voc inclina o mdulo para um lado, o va-

184

Monk_10.indd 184 06/12/13 16:38


Figura 10-6 Mouse com acelermetro.
Fonte: do autor.

lor da fora de acelerao nessa dimenso altera-


do. Utilizando essas alteraes, voc poder enviar Hardware
comandos para modificar a posio do mouse.
A Figura 10-7 mostra o diagrama esquemtico do
projeto.
COMPONENTES E EQUIPAMENTO
Descrio Apndice O mdulo medidor de acelerao (acelermetro)
Arduino Leonardo m2 vem na forma de um kit que contm a placa e uma
Chave de contato momentneo h3
pequena barra de pinos machos que deve ser sol-
dada. Siga as instrues de montagem no site da
Mdulo medidor de acelerao m8
Adafruit (http://www.adafruit.com/products/163).
Projetos USB com o Leonardo
Adafruit
No necessrio soldar o terminal Test, mas, se

Vin A0
GND A2
Mdulo Arduino
medidor de Z A3
acelerao Y A4 D12
X A5

GND
S1
captulo 10

Figura 10-7 Diagrama esquemtico do mouse com acelermetro.


Fonte: do autor.

185

Monk_10.indd 185 06/12/13 16:38


voc o fizer, esse pino poder ficar por fora direita A chave tambm testada no loop e, se seu boto
dos pinos fmeas das entradas analgicas, como estiver sendo pressionado, o comando Mouse.cli-
mostrado na Figura 10-6. ck() ser executado.

A chave de contato momentneo tambm est LISTAGEM DO PROJETO 33


simplesmente inserida em pinos fmeas em uma
int gndPin = A2;
das bordas entre GND e D12.
int xPin = 5;
int yPin = 4;
int zPin = 3;
Software int plusPin = A0;
int switchPin = 12;
O sketch do projeto est mostrado na Listagem do
Projeto 33. void setup()
{
O Leonardo utiliza trs dos pinos analgicos para pinMode(gndPin, OUTPUT);
medir as foras de acelerao nos eixos X, Y e Z. digitalWrite(gndPin, LOW);
pinMode(plusPin, OUTPUT);
Utiliza tambm dois dos pinos analgicos (A2 e A0) digitalWrite(plusPin, HIGH);
para fornecer alimentao eltrica ao mdulo me- pinMode(switchPin, INPUT_PULLUP);
didor de acelerao. Na funo setup, todos eles pinMode(A1, INPUT); // sada de 3V
so colocados nos nveis adequados. Mouse.begin();
}
O pino A1 programado para funcionar como en-
void loop()
trada porque o mdulo, na realidade, fornece 3V {
nesse pino. No entanto, A1 uma das conexes int x = analogRead(xPin) - 340;
qual foi soldado um pino da barra de pinos. Desse int y = analogRead(yPin) - 340;
// ponto mdio 340, 340
modo, se o definirmos como entrada, poderemos
if (abs(x) > 10 || abs(y) > 10)
nos assegurar de que ele no entrar em conflito {
eltrico com o pino utilizado como sada pelo Ar- Mouse.move(x / 30, -y / 30, 0);
duino, evitando assim que o Arduino e o mdulo }
if (digitalRead(switchPin) == LOW)
sejam danificados.
{
Mouse.click();
O projeto de fazer um Leonardo se comportar delay(100);
como um mouse muito semelhante aos dois }
projetos de teclado anteriores. Primeiro, voc deve }
fazer o Leonardo personificar um mouse por meio
do comando Mouse.begin.

A funo loop mede as aceleraes nos eixos X e Y.


Se algum desses valores for maior que o valor de
Juntando tudo
limiar 10, ento, em seu lugar, ser usado um valor Instale o sketch deste projeto. Se segurar o Leonar-
do e inclin-lo para um lado ou outro, voc ver
30 projetos com Arduino

modificado para menos para mudar a posio do


mouse.* que possvel mover o cursor.

Se pressionar o boto, voc conseguir o mesmo


resultado que obteria se clicasse o boto de um
* N. de T.: importante considerar a forma como os valores
passados funo Mouse.move modificam a posio cor-
mouse comum.
rente do cursor. Esses valores no representam uma nova
posio, mas sim o quanto a posio atual ser modificada.

186

Monk_10.indd 186 06/12/13 16:38


Este o ltimo dos captulos voltados a projetos.
Resumo Esperamos que o leitor, ao testar os projetos deste
O Leonardo um dispositivo muito verstil, e os livro, tenha se entusiasmado para fazer seus pr-
projetos deste captulo podem ser expandidos em prios projetos.
todas as direes. Voc poderia, por exemplo, mo-
dificar o Projeto 32 acrescentando diversos botes. O Captulo 11 ir ajud-lo no processo de desen-
Com isso, poderia construir um controlador para volvimento de seus projetos.
um software musical como o Ableton Live.

Projetos USB com o Leonardo


captulo 10

187

Monk_10.indd 187 06/12/13 16:38


captulo 11

Seus projetos
Ao longo deste livro, voc se deparou com diversos projetos. Esperamos que tenha
aprendido bastante coisa ao longo do caminho. Agora, chegou o momento de
voc comear a desenvolver seus prprios projetos utilizando o que aprendeu.
Voc poder utilizar as ideias tiradas dos projetos deste livro. Para ajud-lo
neste processo, este captulo mostrar algumas tcnicas bsicas de projeto e
construo.

Objetivos deste captulo


Discutir sobre os circuitos, componentes e ferramentas utilizados
neste livro.

Propor ao leitor que desenvolva seus prprios projetos.

Monk_11.indd 189 06/12/13 16:41


Uma outra conveno dos diagramas esquemti-
Circuitos cos o uso do smbolo de uma pequena barra para
Gostamos de iniciar um projeto com uma vaga no- indicar uma conexo com GND quando no h es-
o do que se deseja obter e, em seguida, projet- pao suficiente para desenhar todas as conexes.
-lo do ponto de vista eletrnico. O software nor-
A Figura 11-1, originalmente do Projeto 5, mostra
malmente tratado depois.
trs resistores, todos com um terminal conectado
A maneira de representar um circuito eletrnico ao pino GND da placa do Arduino. No respectivo
usando um diagrama esquemtico. Foram in- diagrama de disposio dos componentes no pro-
cludos diagramas esquemticos para todos os toboard (Figura 11-2), voc pode ver como as co-
projetos deste livro. Assim, mesmo que voc no nexes ao GND foram feitas usando fios e filas de
conhea eletrnica, nessa altura voc j viu diagra- furos do protoboard.
mas esquemticos suficientes para compreender
H muitas ferramentas diferentes de software
superficialmente qual a ligao deles com os dia-
para desenhar diagramas esquemticos. Algumas
gramas de disposio de componentes no proto-
delas so softwares voltados ao projeto auxiliado
board, que tambm foram includos.
por computador (CAD Computer Aided De-
sign). Esses softwares so usados em eletrnica
integrada e permitem gerar as trilhas de uma pla-
Diagramas esquemticos ca de circuito integrado. Na sua grande maioria,
Em um diagrama esquemtico, as conexes entre criam diagramas de aspecto bem feio. Preferimos
componentes so mostradas na forma de linhas. usar lpis e papel ou algum software de desenho
Essas conexes se do atravs de tiras metlicas, para uso geral. Todos os diagramas deste livro
que ficam abaixo da superfcie do protoboard foram criados usando um excelente software es-
onde se encontram as filas de furos, e de fios tranhamente denominado OmniGraffle, do gru-
de conexo, que ligam cada fila com as demais. po Omni Group. Esse software s est disponvel
Normalmente, para o tipo de projetos deste livro, para os Macs da Apple. Gabaritos da OmniGraffle
a forma como as conexes so feitas no algo para desenhar diagramas esquemticos e leiau-
importante. A distribuio dos fios reais pode ser tes de protoboard esto disponveis e podem ser
feita de qualquer maneira, desde que todos os baixados de www.arduinoevilgenius.com.
pontos que devem estar conectados estejam liga-
dos entre si.
Smbolos de componentes
Os diagramas esquemticos seguem algumas
A Figura 11-3 mostra os smbolos dos componen-
convenes que merecem ser destacadas. Por
tes eletrnicos que foram utilizados neste livro.
exemplo, comum colocar as linhas de GND na
parte inferior do diagrama e as linhas com ten- Para os diagramas de circuito, encontramos diver-
ses mais elevadas na parte superior. Isso permi- sos padres diferentes, mas os smbolos bsicos
te que algum que esteja lendo o diagrama visu- so todos facilmente reconhecveis. O conjunto
30 projetos com Arduino

alize a circulao da corrente atravs do sistema, usado neste livro no segue particularmente um
descendo desde as tenses mais elevadas at as padro especfico. Simplesmente escolhemos os
mais baixas. que pareceram facilitar a leitura dos diagramas.

190

Monk_11.indd 190 06/12/13 16:41


D4

D3

D2

Arduino D1 D2 D3
Vermelho Amarelo Verde

D5

R1 R2 R3

270V

270V

270V
S1

GND

Figura11-1 Exemplo de diagrama esquemtico.


Fonte: do autor.

Seus projetos
captulo 11

Figura 11-2 Exemplo de leiaute de protoboard.


Fonte: do autor.

191

Monk_11.indd 191 06/12/13 16:41


T1

Termistor
R1

LDR
R1
820 V

Resistor
Resistor Termistor Fototransistor
dependente de luz

C1 D1
C1
D1
100 nF 100 mF
1N4001

Capacitor Capacitor Diodo LED


polarizado

T1 T1 T1 T1

N P

Transistor Transistor MOSFET de MOSFET de


bipolar NPN bipolar PNP canal N canal P

CI1
7805

Circuito Integrado

Figura 11-3 Smbolos de circuito.


Fonte: do autor.

Elas funcionam como especificao do comporta-


Componentes mento do componente. Para resistores e capacito-
Nesta seo, examinaremos os aspectos prticos res no so de muito interesse, mas so muito mais
dos componentes: o que fazem e como identific- teis para semicondutores e circuitos integrados.
-los, escolh-los e utiliz-los. Frequentemente incluem notas de aplicao que
30 projetos com Arduino

contm diagramas esquemticos ilustrando a uti-


lizao dos componentes.
Folhas de dados de
Essas folhas esto todas disponveis na Internet.
especificao Entretanto, se voc procurar por BC158 datasheet
Todos os fabricantes de componentes preparam no seu site de busca preferido, voc descobrir que
folhas de dados (datasheet) para os seus produtos. muitos dos sites em destaque so de organizaes

192

Monk_11.indd 192 06/12/13 16:41


que faturam em cima do fato de que h muitas Tabela 11-1 Cdigo de cores
pessoas procurando folhas de dados (datasheet). de resistores
Essas organizaes cercam as folhas de dados com
Preto 0
propaganda de todo tipo e anunciam enganosa-
Marrom 1
mente que, se voc assinar os seus servios, valor
Vermelho 2
ser agregado s especificaes. Acessar esses sites
geralmente leva a frustraes e, portanto, devem Laranja 3
ser ignorados em favor dos sites de fabricantes de Amarelo 4
componentes. Por isso, procure nos resultados da Verde 5
sua busca at voc encontrar uma URL de um fabri- Azul 6
cante, como www.fairchild.com. Violeta 7
Cinza 8
Vez por outra, muitos fornecedores de componen- Branco 9
tes a varejo, como Farnell, oferecem gratuitamente
folhas de dados de especificao para praticamen- Fonte: do autor.
te todos os componentes que vendem, o que me-
rece ser elogiado. Isso tambm significa que voc Geralmente, encontraremos trs faixas juntas em
pode comparar preos e comprar os componentes uma das extremidades do resistor, um intervalo e
enquanto voc os est pesquisando. uma faixa isolada na outra extremidade do resistor.
Essa faixa isolada indica a preciso (ou tolerncia) do
valor de resistor. Como nenhum dos projetos deste
Resistores livro necessitou de resistores de preciso, no houve
Os resistores so os componentes eletrnicos mais necessidade de escolher resistores dessa forma.
comuns e baratos. So usados mais comumente
A Figura 11-4 mostra a disposio das faixas co-
para:
loridas. O valor do resistor dado apenas pelas
Impedir a circulao excessiva de corrente (veja trs faixas. A primeira faixa o primeiro dgito, a
qualquer projeto que usa um LED). segunda faixa o segundo dgito e a terceira fai-
xa (multiplicador) indica quantos zeros devem ser
Formar um par ou, como um resistor varivel,
acrescentados aos dois primeiros dgitos.
para dividir uma tenso.
Assim, um resistor de 270 V ter um primeiro d-
No Captulo 2, a lei de Ohm foi explicada e utiliza-
gito 2 (vermelho), um segundo dgito 7 (violeta)
da para escolher um valor de um resistor em srie
e um multiplicador 1 (marrom). Da mesma forma,
com um LED. De modo semelhante, no Projeto 19
um resistor de 10 kV ter faixas de cores marrom,
reduzimos o sinal de nossa escada de resistores
preto e laranja (1, 0 e 000).
usando dois resistores como divisor de potencial.
Seus projetos

Um resistor tem faixas coloridas que o envolvem e


que servem para indicar o valor do resistor. Entre-
tanto, se voc no estiver seguro desse valor, voc
sempre poder encontr-lo usando um multme-
tro. Com a prtica, voc ver como fcil usar as
Dgito 1 Multiplicador
faixas coloridas.
captulo 11

Dgito 2 Tolerncia

Cada cor de faixa tem um valor associado, como Figura 11-4 Um resistor com cdigo de cores.
mostrado na Tabela 11-1. Fonte: do autor.

193

Monk_11.indd 193 06/12/13 16:41


A maioria dos nossos projetos usa resistores que +V
operam com potncias muito baixas. Um clculo
rpido pode ser feito para estimar a corrente que
circula no resistor. Se multiplicarmos esse valor de
corrente pela tenso aplicada ao resistor, obtere-

CARGA
mos a potncia consumida pelo resistor. Essa po-
tncia dissipada pelo resistor na forma de calor.
Os resistores ficaro bem aquecidos se uma quan-
tidade significativa de corrente circular neles.

Voc s precisa se preocupar com essa questo no


caso de resistores com menos de 100 ohms porque c
os resistores de valor mais elevado tero uma cor- b
rente muito baixa circulando neles. Rb

Por exemplo, um resistor de 100 ohms, conectado e


diretamente entre 5V e GND, ter uma corrente de
I = V/R, ou 5/100, ou 0,05 A. A potncia consumida
GND
por ele ser I V, ou 0,05 5 = 0,25 W.
Figura 11-5 Circuito bsico de chaveamento com
Uma especificao padronizada de potncia para transistor.
resistores 0,5 ou 0,6 W e, a no ser que seja espe- Fonte: do autor.
cificado diferentemente, uma boa escolha so os
resistores de filme metlico de 0,5 W. A corrente que circula da base ao emissor (b para e)
controla a corrente maior, que circula do coletor ao
emissor. Se no houver corrente entrando na base,
Transistores ento no haver corrente circulando na carga. Na
Examine qualquer catlogo de componentes e maioria dos transistores, se a carga tivesse resistncia
voc encontrar literalmente milhares de tipos zero, a corrente que entra no coletor seria 50 a 200
diferentes de transistores. Neste livro, essa lista foi vezes a corrente da base. Entretanto, chavearemos
simplificada ao que est mostrado na Tabela 11-2. nosso transistor deixando-o completamente ligado
ou desligado. Dessa forma, a resistncia de carga
O circuito bsico de chaveamento com transistor sempre limitar a corrente do coletor corrente re-
est mostrado na Figura 11-5. querida pela carga. Alm disso, um corrente de base

Tabela 11-2 Transistores usados neste livro


Transistor Tipo Finalidade
2N2222 NPN Bipolar Chaveamento de pequenas cargas maiores que 40 mA.
30 projetos com Arduino

BD139 NPN Bipolar de potncia Chaveamento de cargas com corrente mais elevada
(como Luxeon LED). Veja o Projeto 6.
2N7000 FET canal N Chaveamento de baixa potncia com resistncia muito
baixa no modo ligado. Veja o Projeto 7.
FQP33N10 MOSFET canal N de potncia Chaveamento de potncia elevada.
FQP27P06 MOSFET canal P de potncia Chaveamento de potncia elevada.
Fonte: do autor.

194

Monk_11.indd 194 06/12/13 16:41


excessiva danificar o transistor, afastando-nos do Tabela 11-3 Dados de especificao
objetivo de controlar uma corrente maior com uma do transistor
menor. Por isso, conectaremos um resistor base. Propriedade Valor Significado
Quando o chaveamento se d a partir de uma pla- Ic 800 mA a corrente mxima
ca de Arduino, a corrente mxima de sada em que pode circular
torno de 40 mA. Assim, quando o pino de sada es- no coletor sem que
tiver em 5V, escolheremos um resistor que permita o transistor seja da-
a circulao de aproximadamente 30 mA. Usando a nificado.
lei de Ohm, temos hFE 100300 Ganho de corrente
CC. a razo entre
R = V/I
a corrente de cole-
R = (5 0,6)/30 = 147 tor e a corrente de
base e, como voc
O valor 0,6 deve-se a uma caracterstica dos tran- pode ver, pode ser
sistores bipolares. Quando um transistor est ativo qualquer coisa en-
(ligado), sempre h uma tenso em torno de 0,6V tre 100 e 300 nesse
entre a base e o emissor. transistor.

Portanto, com o uso de um resistor de base de Fonte: do autor.


150 V, poderemos controlar uma corrente de co-
letor de 40 a 200 vezes 30 mA, ou 1,2 a 6 A, o que Tabela 11-4 Uso de componentes
mais do que suficiente para a maioria das fina- especializados em projetos
lidades. Na prtica, provavelmente usaramos um Componente Projeto
resistor de 1 kV ou talvez 270 V.
LED monocromtico Em quase todos
Para que os transistores no sejam danificados, eles LED multicor 14
tm diversos parmetros cujos valores mximos Display de matriz de LEDs 16
no devem ser excedidos. Esses valores podem ser LED de sete segmentos 15, 30
encontrados nas folhas de dados de especificaes Chip amplificador de udio 19, 20
dos transistores. Por exemplo, a folha de dados do LDR (sensor de luz) 20
2N2222 contm muitos valores. Os que mais nos Regulador de tenso varivel 7
interessam esto resumidos na Tabela 11-3.
Fonte: do autor.

Outros semicondutores
Os diversos projetos deste livro apresentaram Mdulos e shields
Seus projetos

uma srie de tipos diferentes de componentes No faz sentido construir tudo do nada. Afinal, essa
de LEDs a sensores de temperatura. A Tabela 11-4 a razo de comprarmos uma placa de Arduino
aponta os projetos em que os diversos componen- em vez de construirmos a nossa prpria. O mesmo
tes foram usados. Se voc pretende desenvolver aplica-se a alguns mdulos que gostaramos de
o seu prprio projeto para medir temperatura ou usar em nossos projetos.
para fazer outra coisa, primeiro leia os projetos de-
captulo 11

senvolvidos aqui que utilizam esses componentes. Por exemplo, o mdulo de display LCD usado nos
Projetos 17 e 22 contm o chip de acionamento
Talvez seja interessante construir o projeto e, em necessrio para fazer o prprio LCD funcionar, re-
seguida, modific-lo e adapt-lo a seus propsitos. duzindo assim a quantidade de trabalho que pre-

195

Monk_11.indd 195 06/12/13 16:41


cisaramos fazer no sketch e tambm o nmero de
pinos. Comprando componentes
Outros tipos de mdulos esto disponveis para H 30 anos, um entusiasta de eletrnica, mesmo
que voc possa usar em seus projetos. Fornecedo- morando em uma pequena cidade, teria provavel-
res como Sparkfun e Adafruit so grandes fontes de mente sua disposio diversas oficinas de conser-
ideias e mdulos. Uma amostra dos mdulos que to e lojas de componentes eletrnicos para rdio e
voc pode adquirir desses fornecedores contm TV, onde poderia comprar componentes e receber
orientaes amigveis. Atualmente, ainda h algu-
GPS mas dessas lojas que continuam vendendo compo-
Wi-Fi nentes, como RadioShack, nos Estados Unidos, e
Bluetooth Maplin, no Reino Unido. No entanto, a Internet veio
e preencheu as lacunas. Agora, comprar compo-
Zigbee wireless
nentes mais fcil e barato do que nunca.
GPRS modem celular
Em fornecedores de componentes, como Digikey,
Voc precisar passar algum tempo examinando Mouser, Newark, Radio Spares e Farnell, voc pode
as folhas de dados de especificao, planejando encher uma cesta de compras online e receber os
e experimentando. Isso exatamente o que mais componentes em poucos dias. Faa um levantamen-
gostamos de fazer. to, porque os preos podem variar muito entre os
diversos fornecedores dos mesmos componentes.
Menos desafiante do que usar um mdulo tirado
do nada comprar um shield de Arduino com o Voc ver que o Ebay uma grande fonte de com-
mdulo j instalado. Isso uma boa ideia quando ponentes. Se puder esperar algumas semanas pela
os componentes que voc gostaria de usar no po- chegada dos seus componentes, voc encontrar
dem ser utilizados em protoboard (como os com- muitas ofertas vindas da China. Frequentemente,
ponentes de montagem superficial). Um shield j voc ter que comprar grandes quantidades, mas
montado pode lhe proporcionar um salto impor- ver que mais barato obter 50 peas de um com-
tante durante a construo de um projeto. ponente da China do que cinco localmente. Desta
forma, voc ter componentes sobressalentes na
Novos shields esto surgindo todos os dias. Agora,
sua caixa de componentes.
no momento em que este captulo est sendo es-
crito, possvel encontrar shields para

Ethernet (conecta seu Arduino Internet). Ferramentas


XBee (um padro sem fio de conexo de dados
Para construir seus prprios projetos, algumas fer-
usado em automao residencial, entre outras
ramentas sero necessrias. Se voc no pretende
coisas).
fazer soldas, ento voc precisar de:
Acionamento de motor.
GPS. Pedaos de fio rgido de diversas cores, algo em
30 projetos com Arduino

torno de 0,6 mm de dimetro.


Joystick.
Alicates de bico e de corte, especialmente para
Interface para carto SD.
fazer fios de conexo (jumpers) para protoboard.
Display grfico LCD com tela de toque.
Protoboard.
Wi-Fi.
Multmetro.

196

Monk_11.indd 196 06/12/13 16:41


Se pretender fazer soldas, voc precisar tambm de: o dos componentes, especialmente resistores
que no tm os valores impressos neles.
Ferro de soldar.
Solda livre de chumbo.
Alicates de corte e de bico
Caixa de componentes Alicates de corte so utilizados para fazer cortes, e
alicates de bico so utilizados para segurar coisas
Quando voc comea a construir seus prprios
(frequentemente quando voc as corta).
projetos, leva algum tempo para gradualmente
fazer seu estoque de componentes. Toda vez que A Figura 11-6 mostra como voc retira a capa de
voc termina um projeto, alguns componentes vol- isolamento de um fio. Supondo que voc seja des-
tam para a sua caixa de componentes. tro, segure o alicate de bico com sua mo esquerda
e o de corte com sua mo direita. Firme o fio com
til dispor de um estoque bsico de componen-
o alicate de bico prximo do local onde voc quer
tes para evitar que voc tenha de encomendar
comear a descascar o fio. A seguir, aperte suave-
componentes quando tudo o que voc precisa
mente o fio com o alicate de corte e puxe fora a
um resistor de valor diferente. Voc deve ter no-
capa para o lado. Algumas vezes, voc apertar
tado que, neste livro, a maioria dos projetos ten-
demais o alicate de corte e cortar ou romper par-
de a usar valores de resistores como 100 V, 1 kV,
cialmente o fio. Outras vezes, voc no apertar su-
10 kV, etc. Na realidade, voc no precisa de mui-
ficientemente e a capa do fio permanecer intacta.
tos componentes de valores diferentes para cobrir
tudo uma questo de prtica.
o essencial de um novo projeto.
Voc tambm poder ter um alicate descascador
Um bom kit inicial de componentes est listado no
Apndice. de fio automtico que corta e remove a capa em
um nico movimento. Na prtica, esses alicates s
Caixas com divises que podem receber rtulos funcionam bem com um tipo especfico de fio e al-
economizam muito tempo na escolha e localiza- gumas vezes simplesmente no funcionam.

Seus projetos
captulo 11

Figura 11-6 Alicates de corte e de bico.


Fonte: do autor.

197

Monk_11.indd 197 06/12/13 16:41


3. Estanhe a ponta do ferro encostando o ferro na
Soldagem solda at que derreta e cubra a ponta do ferro.
Voc no precisa gastar muito dinheiro para conse- 4. Passe a ponta na esponja mida isso produzi-
guir um ferro de soldar de boa qualidade. Estaes r um rudo caracterstico e tambm eliminar
de solda de temperatura controlada, como a mos- o excesso de solda. Agora, voc dever ter uma
trada na Figura 11-7, so melhores, embora um fer- bela ponta prateada brilhante.
ro de soldar de temperatura fixa tambm seja bom. 5. Encoste o ferro no lugar onde voc far a solda
Compre um com ponta fina e assegure-se de que para aquec-lo. Ento, aps um perodo curto
para uso em eletrnica e no em funilaria. (um segundo ou dois), encoste a solda no pon-
to de encontro do soldador com a pea que
Use solda fina sem chumbo. Qualquer um pode
voc est soldando. Agora a solda fluir como
soldar coisas suficientemente bem, mas algumas
um lquido, fazendo uma bela junta.
pessoas simplesmente tm o dom para fazer soldas
limpas. No se preocupe se suas soldas no ficarem 6. Remova a solda e o ferro de soldar, colocando o
to limpas quanto as feitas em circuito impresso ferro de volta na estao. Cuide para que nada
por um rob. Na verdade, elas nunca ficaro. se mova nos prximos segundos enquanto a
solda se solidifica. Se alguma coisa se mover, en-
Soldar uma daquelas atividades que realmente to encoste novamente o ferro para que a solda
requer trs mos: uma mo para segurar o ferro de se liquefaa. Se no fizer isso, voc poder ter
soldar, uma para segurar a solda e uma para segu- uma conexo ruim, denominada solda fria.
rar a pea que est sendo soldada. Algumas vezes,
a pea que voc est soldando grande e suficien- Acima de tudo, no aquea componentes sensveis
temente pesada para ficar parada enquanto voc a (ou caros) mais que o necessrio, principalmente
solda. Em outras ocasies, voc precisar firm-la. se tiverem terminais curtos.
Alicates pesados so bons para isso, assim como pe-
Antes de comear a trabalhar de verdade em algu-
quenos tornos de bancada e mos auxiliares que
ma coisa, pratique soldando junto pedaos antigos
utilizam pequenas garras para segurar coisas.
de fio ou soldando fios a uma placa de circuito im-
Os passos bsicos para soldar so: presso fora de uso.

1. Umedea a esponja na estao de solda.


2. Espere at que o ferro de soldar tenha atingido Multmetros
a temperatura. Um grande problema com os eltrons que voc
no pode v-los. Um multmetro permite que voc
mea o que esto fazendo. Com ele possvel me-
dir tenso, corrente, resistncia e frequentemente
tambm outras grandezas, como capacitncia e
frequncia. Um multmetro de baixo custo (US$10)
30 projetos com Arduino

perfeitamente adequado para quase qualquer fi-


nalidade. Os profissionais usam multmetros muito
mais robustos e exatos, mas no so necessrios
para a maioria das finalidades.

Os multmetros, como o mostrado na Figura 11-8,


Figura 11-7 Estao de solda. podem ser analgicos ou digitais. Voc pode ler
Fonte: do autor. mais coisas em um analgico do que em um digi-

198

Monk_11.indd 198 06/12/13 16:41


A medio de corrente diferente da medio de
tenso, porque voc quer medir a corrente que
est passando por alguma coisa e no a tenso em
algum ponto. Por isso, voc insere o multmetro no
caminho da corrente que voc est medindo. Isso
significa que, quando o multmetro est ajustado
para corrente, haver uma resistncia bem baixa
entre as duas ponteiras. Portanto, seja cuidadoso
para no colocar em curto-circuito qualquer coisa
com as ponteiras.

A Figura 11-9 mostra como voc poderia medir a


corrente que circula atravs de um LED.
Figura 11-8 Um multmetro.
Fonte: do autor.
Para medir corrente:
tal, porque pode ver com que velocidade a agulha
1. Ajuste a escala do multmetro para uma es-
se desloca e como ela oscila, algo que no pos-
cala de corrente maior do que a corrente es-
svel em um digital, em que os nmeros simples-
perada. Observe que alguns multmetros tm
mente vo mudando. Entretanto, com uma tenso
um conector separado para corrente elevada,
estvel, muito mais fcil ler um multmetro di-
como 10 A.
gital, porque um analgico ter diversas escalas e
voc ter que descobrir em qual escala voc deve 2. Conecte a ponteira positiva do medidor no lado
olhar antes de fazer a leitura. mais positivo de onde vem a corrente.
3. Conecte a ponteira negativa no lado mais ne-
Voc tambm pode ter multmetros com escala
gativo. Observe que, se voc fizer essas cone-
automtica. Depois de escolher se voc ler tenso
xes de forma errada, um multmetro digital
ou corrente, o medidor automaticamente troca as
indicar simplesmente uma corrente negativa.
escalas medida que a tenso ou corrente sobe.
Entretanto, se voc fizer isso em um multmetro
Isso til, mas algumas pessoas podem argumen-
analgico, ele poder ser danificado. No caso
tar que pensar sobre a escala de tenso antes de
de um LED, ele continuar brilhando como fa-
medi-la , na realidade, um passo til.
zia antes do multmetro ser inserido no circuito,
Para medir tenso usando um multmetro: e voc poder ler a corrente consumida.

1. Ajuste a escala do multmetro para uma de Outro recurso de um multmetro que algumas ve-
tenso (comece com uma escala que voc sabe zes til o teste de continuidade. Ele geralmente
que ser superior tenso que voc est em emite um rudo de bipe quando as duas ponteiras
de teste esto conectadas juntas. Isso pode ser
Seus projetos

vias de medir).
usado para testar, entre outras coisas, fusveis, bem
2. Conecte a ponteira preta em GND. Um clipe
como para testar curtos-circuitos acidentais em
jacar (garra) na ponteira negativa facilita essa
uma placa de circuito ou conexes rompidas em
operao.
um fio.
3. Encoste a ponteira vermelha no ponto cuja ten-
so voc deseja medir. Por exemplo, para ver se s vezes, a medio de resistncia til, espe-
captulo 11

uma sada digital do Arduino est em nvel alto cialmente se voc quiser determinar a resistn-
ou baixo, voc pode encostar a ponteira verme- cia de um resistor que no tem o valor impresso
lha no pino e ler a tenso, que deve ser 5V ou 0V. ou legvel.

199

Monk_11.indd 199 06/12/13 16:41


Figura 11-9 Medio de corrente.
Fonte: do autor.

Alguns medidores tambm permitem o teste de Assim, a tenso da onda quadrada tem no total
diodos e transistores. Isso pode ser til para encon- 2,5 2 = 5V.
trar e descartar transistores que esto queimados.
O eixo horizontal o eixo do tempo, sendo calibra-
do em segundos neste caso, 500 microssegundos
por diviso. Assim, a durao de um ciclo completo
Osciloscpio
da onda 1.000 microssegundos, isto , 1 milisse-
No Projeto 18, construmos um osciloscpio sim- gundo (1ms), correspondendo a uma frequncia
ples. Um osciloscpio uma ferramenta indispen- de 1 kHz.
svel para qualquer tipo de projeto ou teste eletr-
nico em que voc quer ver um sinal que varia no
tempo. Os osciloscpios so relativamente caros Ideias para projetos
e h vrios tipos deles. Um de custo mais efetivo
O Arduino Playground, no site principal do Arduino
similar em conceito ao do Projeto 18. Aquele
(www.arduino.cc), uma grande fonte de ideias
osciloscpio simplesmente envia suas leituras a
para projetos. Na verdade, ele contm tambm
um computador, que responsvel pela exibio uma seo especfica para ideias de projeto, dividi-
dos valores lidos. das em fceis, mdias e difceis.
30 projetos com Arduino

Livros inteiros foram escritos sobre como usar um Se voc digitar Arduino Project em seu site de busca
osciloscpio de forma eficaz. Visto que cada osci- favorito ou no YouTube, encontrar inmeros proje-
loscpio diferente, trataremos apenas do bsico tos interessantes que as pessoas desenvolveram.
aqui. Como voc pode ver na Figura 11-10, a tela
que mostra a forma de onda est por cima de uma Uma outra fonte de inspirao um catlogo de
grade. A grade vertical est em unidades de algu- componentes, online ou de papel. Examinando-o,
ma frao de volt, que nessa tela 2V por diviso. voc poder se deparar com um componente in-

200

Monk_11.indd 200 06/12/13 16:41


Figura 11-10 Um osciloscpio.
Fonte: do autor.

teressante e perguntar-se o que poderia fazer com Se voc gostou de ler este livro, leia tambm Pro-
ele. Um projetista criativo deve permitir que um gramao com Arduino: comeando com sketches e
projeto fique em gestao na sua cabea. Depois Projetos com Arduino e Android: use seu smartpho-
de explorar todas as opes e pensar em tudo, o ne ou tablet para controlar o Arduino, ambos publi-
projeto comear a tomar forma. cados pela Bookman Editora.

Seus projetos
captulo 11

201

Monk_11.indd 201 06/12/13 16:41


apndice

Componentes e fornecedores
Todos os componentes e ferramentas usados neste livro esto disponveis na
Internet para pronta entrega. Entretanto, algumas vezes difcil encontrar
exatamente o que voc est procurando. Por essa razo, este apndice lista os
componentes juntamente com os cdigos utilizados por diversos fornecedores.

Monk_Apendice.indd 203 06/12/13 16:41


Comprar componentes pode ser bem assustador, e
Fornecedores comprar algo como o kit de experimentao para
H tantos fornecedores de componentes por a que Arduino da Adafruit (ID do produto = 170,) ou o kit
nos sentimos um pouco desconfortveis para listar Arduino Inventor da Sparkfun (KIT-11227), uma
os poucos que conhecemos. Por essa razo, faa boa maneira de comear com uma seleo bsica
uma pesquisa na Internet, j que os preos variam de componentes e uma placa protoboard.
consideravelmente de fornecedor para fornecedor.
As sees seguintes deste captulo fornecem listas
Alguns pequenos fornecedores especializaram-se de componentes de acordo com o tipo, juntamen-
em oferecer componentes. Assim, os projetistas te com alguns fornecedores possveis e cdigos de
domsticos como ns podem montar projetos com pedido quando disponveis.
microcontrolador. Eles no tm uma faixa ampla
de componentes, mas frequentemente oferecem
componentes mais exticos e divertidos a preos
razoveis. Bons exemplos desse tipo de fornecedor
Fornecedores de
so as empresas Adafruit e Sparkfun Electronics, componentes
mas h muitas outras no mercado. Em cada projeto dos captulos anteriores, h uma
Algumas vezes, quando voc precisa de apenas caixa de componentes em que esto listados os
poucos componentes, bom ir at uma loja local e cdigos disponveis no Apndice para os compo-
compr-los. As empresas RadioShack, nos Estados nentes usados naquele projeto. Esta seo lista es-
Unidos, e Maplins, no Reino Unido, tm um grande ses cdigos e oferece algumas fontes das quais os
estoque de componentes e so timas para essa componentes podem ser obtidos.
finalidade. Os componentes esto agrupados em sees, ten-
A CPC (cpc.farnell.com), no Reino Unido, tambm do cada seo uma letra, M para mdulo, R para
vende diversos kits e componentes ligados ao Ardui- resistor, etc.
no, como resistores e capacitores a preos baixos.

Arduino e mdulos
Componentes e fornecedores

Cdigo Descrio Fornecedores


m1 Arduino Uno R3 Adafruit: 50
Sparkfun: DEV-11021
m2 Arduino Leonardo Adafruit: 849
Sparkfun: DEV-11286
m3 Arduino Lilypad Sparkfun: DEV-09266
m4 Kit para Protoshield eBay
m5 Mdulo I2C matriz de LEDs 88, bicolor Adafruit: 902
m6 Mdulo LCD Adafruit: 181
(Controlador HD44780) Sparkfun: LCD-00255
apndice

m7 Display I2C de quatro dgitos e sete segmentos Adafruit: 880


m8 Mdulo medidor de acelerao Adafruit Adafruit: 163

204

Monk_Apendice.indd 204 06/12/13 16:41


lor que voc procura, uma boa alternativa costuma
Resistores ser o uso do prximo valor para cima. Assim, por
exemplo, neste livro, usamos muitos resistores de
Resistores so componentes de baixo custo e fre-
270 V com LEDs, mas, se seu kit no dispuser desse
quentemente voc encontrar fornecedores que
valor, ento o uso de um resistor de 300 V tambm
os vendem apenas em grandes quantidades, como
funcionar bem.
50 ou 100. Para valores comuns como 270 V, 1 kV
e 10 kV, pode ser bem til t-los em estoque. Alguns kits para conferir so:
Voc tambm pode comprar kits de resistores com Sparkfun: COM-10969
uma ampla faixa de valores na forma de caixa de
Maplins: FA08J
componentes. Se o kit no tiver exatamente o va-

Resistores
Cdigo Descrio Fornecedores
r1 4.7 V resistor 1/4W Digikey: S4.7HCT-ND
Mouser: 293-4.7-RC
CPC: RE06232
r2 100 V resistor 1/4W Digikey: S100HCT-ND
Mouser: 293-100-RC
CPC: RE03721
r3 270 V resistor 1/4W Digikey: 293-100-RC
Mouser: 293-100-RC
CPC: RE03747
r4 470 V resistor 1/4W Digikey: 293-470-RC
Mouser: 293-470-RC
CPC: RE03799
r5 1 kV resistor 1/4W Digikey: S1kHCT-ND
Mouser: 293-1K-RC
CPC: RE03722
r6 10 kV resistor 1/4W Digikey: S10KHCT-ND
Componentes e fornecedores

Mouser: 293-10K-RC
CPC: RE03723
r7 56 kV resistor 1/4W Digikey: S56KHCT-ND
Mouser: 273-56K-RC
CPC: RE03764
r8 100 kV resistor 1/4W Digikey: S100KHCT-ND
Mouser: 273-100K-RC
CPC: RE03724
r9 470 kV resistor 1/4W Digikey: S470KHCT-ND
Mouser: 273-470K-RC
apndice

CPC: RE0375
Continua

205

Monk_Apendice.indd 205 06/12/13 16:41


Resistores (continuao)
Cdigo Descrio Fornecedores
r10 1 MV resistor 1/4W Digikey: S1MHCT-ND
Mouser: 293-1M-RC
CPC: RE03725
r11 Potencimetro linear 10 kV (trimpot) Adafruit: 356
Sparkfun: COM-09806
Digikey: 3362P-103LF-ND
Mouser: 652-3362P-1-103LF
CPC: RE06517
r12 Potencimetro linear 100 kV Digikey: 987-1312-ND
Mouser: 858-P120KGPF20BR100K
CPC: RE04393
r13 LDR Adafruit:161
Sparkfun: SEN-09088
Digikey: PDV-P8001-ND
CPC: RE00180
r14 10 V resistor 1/2W Digikey: S10HCT-ND
Mouser: 293-10-RC
CPC: RE05005
Fonte: do autor.

Capacitores
Cdigo Descrio Fornecedores
c1 100 nF Adafruit: 753
Sparkfun: COM-08375
Digikey: 445-5258-ND
Mouser: 810-FK18X7R1E104K
CPC: CA05514
c2 220 nF Digikey: 445-2849-ND
Componentes e fornecedores

Mouser: 810-FK16X7R2A224K
CPC: CA05521
c3 100 mF eletroltico Sparkfun: COM-00096
Digikey: P5529-ND
Mouser: 647-UST1C101MDD
CPC: CA07510
Fonte: do autor.

que voc precisa, talvez valha a pena procurar um


Semicondutores kit de LEDs. Tambm h selees de LEDs muito ba-
apndice

ratas disponveis diretamente da China. Fornecedo-


Este livro usa muitos LEDs. Por isso, em vez de com-
res, como Maplins e outros, vendem diversos tipos
prar separadamente os LEDs com o tamanho e a cor
de kits iniciais de LEDs (cdigo de produto = RS37S)

206

Monk_Apendice.indd 206 06/12/13 16:41


Semicondutores
Cdigo Descrio Fornecedores
s1 LED vermelho 5 mm Adafruit: 297
Sparkfun: COM-09590
Digikey: 751-1118-ND
Mouser: 941-C503BRANCY0B0AA1
CPC: SC11574
s2 LED verde 5 mm Adafruit: 298
Sparkfun: COM-09650
Digikey: 365-1186-ND
Mouser: 941-C503TGANCA0E0792
CPC: SC11573
s3 LED amarelo 5 mm Sparkfun: COM-09594$0.35
Digikey: 365-1190-ND
Mouser: 941-C5SMFAJSCT0U0342
CPC: SC11577
s4 LED vermelho 2 ou 3 mm Sparkfun: COM-00533
Digikey: 751-1129-ND
Mouser: 755-SLR343BCT3F
CPC: SC11532
s5 LED verde 2 ou 3 mm Sparkfun: COM-09650
Digikey: 751-1101-ND
Mouser: 755-SLR-342MG3F
CPC: SC11533
s6 LED azul 2 ou 3 mm Digikey: 751-1092-ND
Mouser: 755-SLR343BC7T3F
CPC: SC11560
s7 LED RGB catodo comum Sparkfun: COM-09264
s8 Display de dois dgitos com LEDs de sete Mouser: 604-DA03-11YWA
segmentos (anodo comum)
s9 Display bar-graph de 10 segmentos Farnell: 1020492
CPC: SC12044
Componentes e fornecedores

s10 LED Luxeon 1 W Adafruit: 518


Sparkfun: BOB-09656
Digikey: 160-1751-ND
Mouser: 859-LOPL-E011WA
CPC: SC11807
s11 Mdulo diodo laser vermelho 3 mW eBay
s12 Diodo 1N4004 ou 1N4001 Adafruit: 755
Sparkfun: COM-08589
Digikey: 1N4001-E3/54GITR-ND
Mouser: 512-1N4001
apndice

CPC: SC07332
Continua

207

Monk_Apendice.indd 207 06/12/13 16:41


Semicondutores (continuao)
Cdigo Descrio Fornecedores
s13 Diodo zener 5,1V Sparkfun: COM-10301
Digikey: 1N4733AVSTR-ND
Mouser: 1N4733AVSTR-ND
CPC: SC07166
s14 Transistor NPN 2N2222 ou BC548 Sparkfun: COM-00521
ou 2N3904 Digikey: 2N3904-APTB-ND
Mouser: 610-2N3904
CPC: SC12549
s15 FET 2N7000 Digikey: 2N7000TACT-ND
Mouser: 512-2N7000
CPC: SC06951
s16 Transistor FQP30N06 Adafruit: 355
Sparkfun: COM-10213
Digikey: FQP30N06L-ND
Mouser: 512-FQP30N06
CPC: SC08210
s17 Transistor de potncia BD139 Digikey: BD13916STU-ND
Mouser: 511-BD139
CPC: SC09455
s18 Regulador de tenso LM317 Digikey: 296-13869-5-ND
Mouser: 595-LM317KCSE3
CPC: SC08256
s19 Fototransistor IR 940 nm Digikey: 365-1067-ND
Mouser: 828-OP505B
CPC: SC08558
s20 LED transmissor IR, 940 nm, de 5 mm Digikey: 751-1203-ND
Mouser: 782-VSLB3940
CPC: SC1236
s21 CI receptor IR de controle remoto Mouser: 782-TSOP4138
CPC: SC12388
Componentes e fornecedores

s22 Sensor de temperatura TMP36 Adafruit: 165


Sparkfun: SEN-10988
Digikey: TMP36GT9Z-ND
CPC: SC10437
s23 Amplificador de udio TDA7052 1W Digikey: 568-1138-5-ND
Mouser: 771-TDA7052AN
CPC: SC08454
s24 L293D acionador de motor Adafruit: 807
Sparkfun: COM-00315
Digikey: 296-9518-5-ND
apndice

Mouser: 511-L293D
CPC: SC10241
Fonte: do autor.

208

Monk_Apendice.indd 208 06/12/13 16:41


Hardware e componentes
diversos
A maioria dos itens desta seo esto disponveis
no eBay a um baixo custo.

Hardware componentes diversos


Cdigo Descrio Fornecedores
h1 Protoboard Adafruit: 64
Sparkfun: PRT-09567
h2 Kit de fios de conexo (jumpers) Adafruit: 758
Sparkfun: PRT-08431
h3 Chave miniatura de contato momentneo Adafruit: 1119
Sparkfun: COM-00097
Digikey: SW853-ND
Mouser: 653-B3W-1100
h4 Jack CC 2,1mm Digikey: SC1052-ND
Mouser: 502-S-760
CPC: CN14795
h5 Clip para bateria 9V Digikey: BS61KIT-ND
Mouser: 563-HH-3449
CPC: BT03732
h6 Fonte de alimentao regulada 5V 1A Maioria dos fornecedores ou eBay.
Conectores especficos para cada pas.
h7 Fonte de alimentao regulada 12V 2A
h8 Fonte de alimentao regulada 15V 1A
h9 Placa perfurada Farnell: 1172145
CPC: PC01222
h10 Conector KRE triplo Farnell: 1641933
h11 Teclado 4 por 3 Adafruit: 419
Componentes e fornecedores

Sparkfun: COM-08653
h12 Barra de pinos machos 0,1 pol Adafruit: 392
h13 Encoder rotativo com chave Digikey: CT3011-ND
Mouser: 774-290VAA5F201B2
Farnell: 1520815
h14 Alto-falante miniatura 8 V Sparkfun: COM-09151
Farnell: 1300022
h15 Microfone de eletreto Sparkfun: COM-08635
Digikey: 102-1721-ND
Mouser: 665-POM2738PC33R
apndice

Farnell: 1736563
Continua

209

Monk_Apendice.indd 209 06/12/13 16:41


Componentes diversos (continuao)
Cdigo Descrio Fornecedores
h16 Rel 5V Digikey: T7CV1D-05-ND
Mouser: 893-833H-1C-S-5VDC
CPC: SW03694
h17 Ventilador 12V eBay
h18 Motor com reduo 6V CC eBay
h19 Roda de encaixe para o eixo de reduo eBay
h20 Servomotor 9g eBay
Sparkfun: ROB-09065
Adafruit: 169
h21 Buzzer piezoeltrico Adafruit: 160
Sparkfun: COM-07950
h22 Chave reed miniatura Sparkfun: COM-08642
Farnell: 1435590
CPC: SW00759
h23 Fechadura eltrica magntica Farnell: COM-08642
CPC: SR04745
Fonte: do autor.
Componentes e fornecedores
apndice

210

Monk_Apendice.indd 210 06/12/13 16:41


ndice

Referncias s figuras esto em itlico.

!, comando, 128129 assistente para novo hardware Modelo de sinalizao para


encontrado, 169, 171 semforo com encoder (Projeto
A ATmega168, 2425 11), 7681
ATmega328, 2325 cdigo secreto com teclado numrico
Adafruit, 106109
atualizao, 69 (Projeto 10), 6976
alicate de bico, 197198
comandos condicionais, 3032
alicate de corte, 197198
comentrios, 1213
alimentao eltrica, 56, 11 B
compilador, 2628
amplificao, 4243 baixando o software dos projetos,
componentes de placa, 2021, 2026
analogOutput, comando, 117120 10, 12
chip de interface USB, 2526
anodos comuns, 102103 bibliotecas
Arduino Due, placa, 2526 compra, 196197, 203210
Adafruit, 107109
Arduino Leonardo, placa, 67, 2425 conector de programao serial,
software de Arduino, 7173, 7374,
alimentao eltrica, 56, 11 2526
169, 171173
componentes de placa, 2026 conexes de alimentao eltrica,
Blink, programa, 56
configurao, 10, 12 2023
alterao, 1216
digitador automtico de senha conexes digitais, 2224
sketch, 1214
(Projeto 32), 180185 entradas analgicas, 2223
Brevig, Alexander, 7173
fornecedores, 204205 especializados, 195196
buzzers piezoeltricos, 154156
mouse com acelermetro (Projeto folhas de especificaes, 190,
33), 184187 192193
O truque do teclado (Projeto 31), C fonte de alimentao, 2021
179182 cabo USB, 56 fornecedores, 196197, 203210
Arduino Lilypad, placa, 2526, 2526 caixa de componente, 196198 kit inicial, 203204
fornecedores, 204205 capacitores, 114115 microcontroladores, 1921, 2326
relgio com Lilypad (Projeto 29), fornecedores, 206207 mdulos, 195197
167174 chaves reed, 169 oscilador, 2526
Arduino Mega, placa, 2526 circuitos resistores, 192194
Arduino Playground, 200201 diagramas esquemticos, 189190, shields, 195197
Arduino Protoshield, 4347 192 transistores, 194196
alimentao eltrica, 56, 11 smbolos de, 189190, 192, 190, configurao do ambiente Arduino,
Arduino Uno, placa, 67 192 910, 12
componentes de placa, 2026 cdigo, 1214. Veja tambm constantes, 2728
configurao, 10, 12 linguagem C e Morse, cdigo contador regressivo de tempo (Projeto
fornecedores, 204205 Cdigo Secreto com teclado 30), 173178
Array de LEDs (Projeto 16), 105109 numrico (Projeto 10), 6976 controles remotos, controle remoto
arrays, 3639 Fechadura magntica para porta com infravermelho (Projeto 28),
assistente de extrair pastas, 67 (Projeto 27), 157162 161168

Monk_Indice.indd 211 06/12/13 16:44


conversor digital-analgico (DAC), fora eletromotiva (FEM), 132133, LEDs
116118 158 array de LEDs (Projeto 16), 105109
corrente, medio de, 199200 fornecedores, 196197, 203210 conexo de um LED externo, 1416
fotorresistores, 8082 conexes digitais, 2224
D fototransistores, 8187 controle remoto com infravermelho
funes, 2728 (Projeto 28), 161168
DAC, 116118
dado com LEDs (Projeto 9), 6468
dados (de jogar)
G dados duplos com LEDs de Sete
dado com LEDs (Projeto 9), 6468
segmentos (Projeto 15), 101106
dados duplos com LEDs de sete gerao de nmeros aleatrios,
6468, 101106 de sete segmentos, 100106
segmentos (Projeto 15), 101106
detector de mentira (Projeto 26), gerenciador de dispositivos, 69, 910 LED piscante (Projeto 1), 10, 1216,
153157 1617, 2630
getEncoderTurn, funo, 7778
diagramas esquemticos, 189190, gigabytes, 1920 Luxeon de 1W, 4245
192. Veja tambm projetos e nomes GND (ground), 2124 luz estroboscpica (Projeto 6), 51,
de projetos individuais linhas em diagramas esquemticos, 5356
digitador automtico de senha 189190 luz estroboscpica de alta potncia
(Projeto 32), 180185 (Projeto 8), 6265
diretiva de pr-processamento, 91 luz para desordem afetiva sazonal
H (SAD) (Projeto 7), 5761
display luminoso multicor (Projeto
harpa luminosa (Projeto 20), 122129 medidor VU (Projeto 21), 126129
14), 95100
hipnotizador (Projeto 24), 142146 modelo de sinalizao para
histerese, 137, 137138 semforo (Projeto 5), 4951, 53
E modelo de sinalizao para
EEPROM, 2425, 8793, 157162,
167168, 180182
I semforo com encoder (Projeto
ideias para projetos, 200201 11), 7681
entradas, 1921 sinalizador de SOS em cdigo
infravermelho
analgicas, 2223 Morse (Projeto 2), 3337
controle remoto com infravermelho
digitais, 4950, 117118, 118119 tradutor de cdigo Morse (Projeto
(Projeto 28), 161168
entradas e sadas digitais, 4950 3), 3742
LED IR de alta potncia, 8187
sada analgica de entradas tradutor de cdigo Morse de alto
instalao de software, 510, 12
digitais, 117118, 118119 brilho (Projeto 4), 4148
no Linux, 910, 116117, 169, 171
EPROM, 20 lei de Ohm, 2123
no Mac OS X, 910, 11, 116117,
expresses lgicas, 3132 Lilypad. Veja tambm Arduino Lilypad,
169, 171
no Windows, 610, 11, 116117, placa
F 169, 171 linguagem C, 2527
fechadura magntica para porta instalao dos drivers USB, 69 aritmtica, 2931
(Projeto 27), 157162 inteiros, 2728 arrays, 3639
fechaduras comandos condicionais, 3032
cdigo Secreto com teclado constantes, 2728
K conveno para nomes, 2628
numrico (Projeto 10), 6976
kit inicial de componentes, 203204 exemplo, 2630
fechadura magntica para porta
(Projeto 27), 157162 expresses lgicas, 3132
ferramentas L funes, 2728
alicate de bico, 197198 laser controlado por servomotores inteiros, 2728
alicate de corte, 197198 (Projeto 25), 146151 loops, 2930, 3537
caixa de componentes, 196198 LCD, displays, 100, 108112 operadores lgicos, 3132
multmetro, 198201 Termostato com LCD (Projeto 22), parmetros, 2930
osciloscpios, 199201 131139 ponto e vrgula, 2728
soldagem, 197199 LDRs, 8082, 122129 strings, 3031
fios de conexo (jumpers), 1517 LED IR de alta potncia, 8187 tipos de dados, 2930, 3031
folha de especificaes, 190, 192193 LED piscante (Projeto 1), 10, 1216 variveis, 2627, 2930
fonte de alimentao, 2021 protoboard, 1617 Linux, instalao do software no,
fora contraeletromotriz (FCEM), sketch, 2630 910, 116117, 169, 171
ndice

132133, 158 ledPin, 2628 loops, 2930, 3537

212

Monk_Indice.indd 212 06/12/13 16:44


Luz estroboscpica de alta potncia MOSFETs, 194 cdigo Secreto com teclado
(Projeto 8), 6265 Mouse com acelermetro (Projeto 33), numrico (Projeto 10), 6976
Luz para desordem afetiva sazonal 184187 contador regressivo de tempo
(SAD) (Projeto 7), 5761 multmetro, 198201 (Projeto 30), 173178
luzes multmetro de escala automtica, controle remoto com infravermelho
array de LEDs (Projeto 16), 105109 199200 (Projeto 28), 161168
dados duplos com LEDs de sete dado com LEDs (Projeto 9), 6468
segmentos (Projeto 15), 101106 dados duplos com LEDs de sete
display luminoso multicor (Projeto
O
segmentos (Projeto 15), 101106
14), 95100 o truque do teclado (Projeto 31),
detector de mentira (Projeto 26),
luz estroboscpica (Projeto 6), 51, 179182
153157
5356 OmniGraffle, 189190, 192
digitador automtico de senha
luz estroboscpica de alta potncia onda quadrada, 116117, 117118,
(Projeto 32), 180185
(Projeto 8), 6265 120121
display luminoso multicor (Projeto
luz para desordem afetiva sazonal ondas senoidais, 116117, 117118,
14), 95100
(SAD) (Projeto 7), 5761 118123
fechadura magntica para porta
modelo de sinalizao para operadores
(Projeto 27), 157162
semforo (Projeto 5), 4951, 53 de mercado, 128129
harpa luminosa (Projeto 20),
modelo de sinalizao para lgicos, 3132
122129
semforo com encoder (Projeto operadores de mercado, 128129
hipnotizador (Projeto 24), 142146
11), 7681 operadores lgicos, 3132
ideias, 200201
painel de Mensagens USB (Projeto oscilao (hunting), 133138
17), 109112 laser controlado por servomotores
oscilador, 2526
sinalizador de SOS em cdigo (Projeto 25), 146151
osciloscpios, 199201
Morse (Projeto 2), 3337 LED piscante (Projeto 1), 10, 1217,
osciloscpio (Projeto 18), 113117
2630
luz estroboscpica (Projeto 6), 51,
M P 5356
Mac OS X, instalao de software no, painel de mensagens USB (Projeto luz estroboscpica de alta potncia
910, 11, 116117, 169, 171 17), 109112 (Projeto 8), 6265
medio de parmetros, 2930 luz para desordem afetiva sazonal
corrente, 199200 PCBs. Veja tambm Protoshield, tipos (SAD) (Projeto 7), 5761
resistncia, 199201 de placas medidor VU (Projeto 21), 126129
temperatura, 8687 pinos de entrada e sada, 1921 modelo de sinalizao para
tenso, 199200
placa perfurada, 58 semforo (Projeto 5), 4951, 53
medidor VU (Projeto 21), 126129
disposio dos componentes, modelo de sinalizao para
medidores analgicos, 198199
5960 semforo com encoder (Projeto
medidores digitais, 198199
playNote, funo, 120123 11), 7681
megabytes, 1920
playSine, funo, 120123 monitor de pulsao arterial
memria, 1920, 2326
polarizao com realimentao de (Projeto 12), 8187
microcontroladores, 1921, 2326
coletor, 126129 mouse com acelermetro (Projeto
modelo de sinalizao para semforo
(Projeto 5), 4951, 53 ponte H, controladores de, 139142 33), 184187
modelo de sinalizao para semforo porta serial, configuraes, 910, 12 o truque do teclado (Projeto 31),
com encoder (Projeto 11), 7681 potncia 179182
mdulos, 195197 hipnotizador (Projeto 24), 142146 osciloscpio (Projeto 18), 113117
monitor de pulsao arterial (Projeto laser controlado por servomotores painel de mensagens USB (Projeto
12), 8187 (Projeto 25), 146151 17), 109112
Morse, cdigo termostato com LCD (Projeto 22), registrador de temperatura USB
letras em, 3839 131139 (Projeto 13), 8693
sinalizador de SOS em cdigo ventilador controlado por relgio com Lilypad (Projeto 29),
Morse (Projeto 2), 3337 computador (Projeto 23), 138142 167174
tradutor de cdigo Morse (Projeto Processing, software, 116117 sinalizador de SOS em cdigo
3), 3742 programas, 1214 Morse (Projeto 2), 3337
tradutor de cdigo morse de alto projetos termostato com LCD (Projeto 22),
ndice

brilho (Projeto 4), 4148 array de LEDs (Projeto 16), 105109 131139

213

Monk_Indice.indd 213 06/12/13 16:44


tocador de msica (Projeto 19), semicondutores, fornecedores de, termostato com LCD (Projeto 22),
119123 206209 131139
tradutor de cdigo Morse (Projeto sensores termistores, 8687
3), 3742 cdigo secreto com teclado Registrador de temperatura USB
tradutor de cdigo Morse de alto numrico (Projeto 10), 6976 (Projeto 13), 8693
brilho (Projeto 4), 4148 detector de mentira (Projeto 26), termostato com LCD (Projeto 22),
ventilador controlado por 153157 131139
computador (Projeto 23), 138142 harpa luminosa (Projeto 20), teste de continuidade, 199201
protoboards, 1517 122129 Theremin, 123124
Protoshield, tipos de placas, 4546 modelo de sinalizao para tipos de dados, 2930, 3031
PWM (modulao por largura de semforo com encoder (Projeto tocador de msica (Projeto 19),
pulso), 57, 9596, 116120 11), 7681 119123
monitor de pulsao arterial tradutores
Q (Projeto 12), 8187 tradutor de cdigo Morse (Projeto
registrador de temperatura USB 3), 3742
quilobytes, 1920
(Projeto 13), 8693 tradutor de cdigo morse de alto
Serial Monitor, 4142, 4142, 8485 brilho (Projeto 4), 4148
R servomotores, 146151 transistores, 194196
R2R, escada de resistores, 117118, shields, 195197 bipolares, 100102
117118, 120121 luz estroboscpica, 56 FETs, 58, 194
RAM, 1920, 2425 tradutor de cdigo Morse, 4447 folha de especificaes, 195196
random, funo, 6468, 101106 sites fototransistores, 8187
randomSeed, funo, 6468 Adafruit, 106109 transistor bipolar NPN, 4243,
regulador de tenso, 2022 Arduino, 610, 12, 200201 131133
relgio com Lilypad (Projeto 29), Processing, software, 116117 usados neste livro, 194
167174 sketches, 1214
Reset, boto de, 56 software U
Reset, conector de, 2022 Adafruit, 106109 unidade central de processamento
resistncia, medio de, 199201 baixando o software para os (UCP), 2425
resistores, 1415, 192194 projetos, 10, 12 USB, cabo, Tipo A para Tipo B, 56
cdigo de cores, 192193 instalao, 510, 12, 116117, 169, USB, chip de interface, 2526
dependentes de luz, 8082, 122 171 USB, instalao de drivers, 69
129 programa Blink, 56, 1216 USB, painel de mensagem (Projeto
encoders rotativos, 7576, 7581 soldagem, 197199 17), 109112
escada de resistores R2R, 117 som USB, registrador de temperatura
118, 117118, 120121 gerao, 116120 (Projeto 13), 8693
fornecedores, 204206 harpa luminosa (Projeto 20),
valores, 2324 122129
variveis, 5355, 155156
medidor VU (Projeto 21), 126129
V
resposta galvnica da pele, 153157 variveis, 2627, 2930
osciloscpio (Projeto 18), 113117
ventilador controlado por
tocador de msica (Projeto 19),
S computador (Projeto 23), 138142
119123
sadas, 1921 Stanley, Mark, 7173
analgicas de entradas digitais, strings, 3031 W
117118, 118119 suavizao de sinal, 8485 web color chart, 96, 98100
digitais, 4950 Windows, instalao de software no,
semforos 610, 11, 116117, 169, 171
modelo de sinalizao para T
semforo (Projeto 5), 4951, 53 temperatura
modelo de sinalizao para medio, 8687
semforo com encoder (Projeto registrador de temperatura USB
11), 7681 (Projeto 13), 8693
ndice

214

Monk_Indice.indd 214 06/12/13 16:44