Exploring Arduino 1 100.en - PT

Fazer download em docx, pdf ou txt
Fazer download em docx, pdf ou txt
Você está na página 1de 101

explorando Arduino ®

Técnicas e Ferramentas para


Engenharia Wizardry

Jeremy Blum
explorando Arduino®: Técnicas e Ferramentas para Engenharia Wizardry

Publicado por John Wiley & Sons, Inc.


10475 Crosspoint Boulevard
Indianapolis, IN 46256

www.wiley.com

Copyright © 2013 por John Wiley & Sons, Inc., Indianapolis, Indiana

Publicado simultaneamente no Canadá

ISBN: 978-1-118-54936-0ISBN: 978-1-


118-54948-3 (EBK) ISBN: 978-1-118-
78616-1 (EBK)

Fabricado nos Estados Unidos da América

10 9 8 7 6 5 4 3 2 1

Nenhuma parte desta publicação pode ser reproduzida, armazenada em um sistema de recuperação ou transmitida de qualquer forma ou por qualquer
meio, eletrônico, mecânico, fotocópia, gravação, digitalização ou de outra forma, exceto conforme permitido sob as seções 107 ou 108 de 1976 Direitos
Autorais dos EUA Act, sem qualquer autorização prévia por escrito do editor, ou autorização através do pagamento da adequada taxa por cópia ao
Copyright Clearance Center 222 Rosewood drive, Danvers, MA 01923, (978) 750-8400, fax (978) 646 -8600. Pedidos para o Publisher para a permissão
deve ser endereçada ao Departamento de Permissões, John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030, (201) 748-6011, fax (201) 748-6008,
ou online emhttp://www.wiley.com/go/permissions.

Limite de Responsabilidade / Isenção de Garantia:O editor eo autor não faz representações ou garantias quanto à exatidão ou completude do conteúdo
deste trabalho e, especificamente, assumem todas as garantias, incluindo, sem limitação, garantias de adequação a um propósito particular. Nenhuma garantia
pode ser criado ou estendido por vendas ou materiais promocionais. Os conselhos e estratégias contidas neste documento podem não ser adequados para cada
situação. Este trabalho é vendido com o entendimento de que a editora não está envolvida na prestação jurídica, contabilidade ou outros serviços profissionais.
Se a assistência profissional é necessária, os serviços de um profissional competente devem ser procurados. Nem a editora nem o autor será responsável por
danos surgidos a partir deste. O facto de um sítio organização ou Web é referida neste trabalho como uma citação e / ou uma fonte potencial de mais
informações não significa que o autor ou a editora subscreve as informações da organização ou o site pode fornecer ou recomendações que podem fazer. Além
disso, os leitores devem estar cientes de que os sites da Internet listados neste trabalho pode ter mudado ou disap-ceu entre quando este trabalho foi escrito e
quando é lido.

Para informações gerais sobre nossos outros produtos e serviços, por favor entre em contato com nosso Departamento de Atendimento dentro dos Estados
Unidos em (877) 762-2974, fora dos Estados Unidos em (317) 572-3993 ou fax (317) 572-4002.

Wiley publica em uma variedade de formatos impresso e eletrônico e de print-on-demand. Algum material incluído com as versões de impressão
padrão de este livro não pode ser incluída no e-books ou em print-on-demand. Se este livro refere-se a mídia, como um CD ou DVD que não está
incluído na versão que você comprou, você pode baixar esse material emhttp://booksupport.wiley.com. Para mais informações sobre produtos de
Wiley, visitawww.wiley.com.

Biblioteca de controlo do número Congresso: 2013937652

Marcas:Wiley eo logotipo Wiley são marcas comerciais ou marcas registradas da John Wiley & Sons, Inc. e / ou suas afiliadas, nos Estados Unidos e em
outros países, e não podem ser utilizadas sem autorização por escrito. Arduino é uma marca tered-regis de Arduino, LLC. Todas as outras marcas
comerciais são propriedade dos seus respectivos proprietários. John Wiley & amp; Sons, Inc. não está associada a qualquer produto ou fornecedor
mencionado neste livro.
Para minha avó, cuja curiosidade ao longo da vida e incentivo
me inspira a ser uma pessoa melhor a cada dia.
créditos

editor de aquisições Vice-Presidente e Grupo Executivo Publisher


Mary James
Richard Swadley
editor de projeto
Jennifer Lynn Vice-Presidente e Editor Executivo

editor técnico
Neil Edde
Scott Fitzgerald
Editor associado
editor de produção
Jim Minatel
Daniel Scribner
Coordenador do Projecto, Tampa
Editor de cópia
Katie Crocker
Keith Cline
Compositor
Gerente Editorial
Cody Gates, Happenstance Type-O-
Mary Beth Wakefield Rama
Gerente Editorial Freelancer
revisor
Rosemarie Graham
James Saturnio, Word One
Associate Director of Marketing
Indexador
David Mayhew
John Sleeva
Gerente de marketing
cover Designer
Ashley Zurcher
Ryan Sneed
Gerente de negócios
Imagem de capa
Amy Knies
Cortesia de Jeremy Blum
Gerente de produção
Tim Tate

iv
Sobre o

Jeremy Blum recentemente recebeu seu mestrado em Electrotécnica e de Computadores


Engenharia da Universidade de Cornell, onde anteriormente recebeu seu Bacharel
grau no mesmo campo. Em Cornell, ele supervisionou a concepção e criação de
vários edifícios sustentáveis em todo o mundo e internamente através de sua fundação e liderança da
Cornell University Projeto Sustentável, uma organização de design sustentável nacionalmente
reconhecido que tenha sido especificamente elogiado pelo CEO dos EUA e Green World Building Council.
Nesse sentido, Jeremy aplicou sua paixão pela engenharia elétrica para projetar sistemas solares de
energia em casa de monitoramento, sistemas de iluminação LED de fibra óptica rev olucionários, e
painéis solares inteligentes de rastreamento de sol. Ele também é responsável por ajudar a iniciar
um primeiro de seu tipo de espaço de co-working empresarial que contribui para o d esenvolvimento
de dezenas de estudantes em fase de arranque (incluindo alguns de sua própria criação) a cada
ano.

Jeremy projetou premiado métodos de controle de próteses, gesture-


sistemas de reconhecimento e sistemas de edifício de automação, entre muitas outras coisas. Ele
projetou o sistema eletrônico para as impressoras MakerBot Replicator 3D

(Que são utilizados por pessoas de todo o mundo, e por organizações notáveis tais
como NASA), ea eletrônica do protótipo e firmware para a MakerBot digitador
Scanner 3D. Como um pesquisador no renomado criativa Machines Lab, ele tem contribuído para a
criação de robôs que podem montar-se, robôs quadrúpedes de auto-aprendizagem, e as impressoras
3D que redefinem fabricação pessoal. Ele apresentou esta pesquisa em revistas e jornais e em conferências
tão distantes como a Índia.

Jeremy produz vídeos do YouTube que introduziram milhões de pessoas


engenharia e estão entre os tutoriais Arduino mais populares na Internet. Ele é bem conhecido
dentro do código aberto internacional e "criador" comuni-dades para o desenvolvimento de projetos
de hardware de código aberto e tutoriais que

v
vi Sobre o Editor Técnico

foram apresentados no Discovery Channel, e ganharam vários prêmios e A-thons hack-. Jeremy foi
selecionado pelo Instituto Americano de Engenheiros Elétricos e Eletrônicos como o novo rosto
de Engenharia 2012.

Ele oferece serviços de consultoria em engenharia através de sua firma, Blum Idea Labs
LLC, e ele ensina engenharia e sustentabilidade para jovens estudantes em New York City. A paixão de
Jeremy está melhorando a vida das pessoas eo nosso planeta através de soluções de engenharia
criativos. Você pode aprender mais sobre Jeremy e seu trabalho em seu site:www.jeremyblum.com.

Sobre o Editor Técnico

Scott Fitzgerald é um artista e educador que tem vindo a utilizar o plat-forma Arduino como ferramenta
de ensino e na sua prática desde 2006. Foi professor de computação física no Programa de
Telecomunicações Interativas (ITP) de Nova York

Universidade desde 2005, a introdução de artistas e designers para microcontroladores. Scott


trabalha para a equipe Arduino, documentando novos produtos e criar tutoriais para introduzir as pessoas
à plataforma. Ele foi editor técnico da segunda edi-ção deFazer as coisas Discussão em 2011, e ele
foi o autor do livro que acompanha o Kit oficial Arduino Iniciado em 2012.
Agradecimento

Em primeiro lugar, devo agradecer aos meus amigos na publicação Wiley para ajudar a fazer isso
possível: Mary James, por me encorajar a escrever este livro em primeiro lugar; e Jennifer Lynn, por me
manter na pista enquanto eu trabalhava através da escrita de todos os capítulos. Também devo um
grande obrigado a Scott Fitzgerald por seu olhar crítico na edição técnica deste livro.

Se não fosse para os grandes povos em element14, eu nunca pode ter começado em
produzindo o meu Arduino Tutorial Series, um prelúdio para o livro que você está prestes
ler. Sabrina Deitch e Sagar Jethani, em particular, têm sido parceiros maravilhosos com quem eu tive
o privilégio de trabalhar.

Eu escrevi a maior parte deste livro, enquanto completando simultaneamente o meu mestrado
grau e correndo duas empresas, então eu devo uma quantidade enorme de gratidão aos meus
professores e colegas que me aturar enquanto eu tentava equilibrar todas as minhas
responsabilidades.

Finalmente, quero agradecer a minha família, especialmente meus pais e meu


irmão, David, cuja constante encorajamento me lembra porque eu faço as coisas que
faço.
vii
Agradecimento
Introdução xix

parte I Arduino Engenharia Basics 1

Capítulo 1 Obtendo-se e piscando com o Arduino 3

Capítulo 2 entradas digitais, saídas e Pulse-Width Modulation 19Chapter 3 Leitura


Sensores analógicos
41

parte II Controlar o Seu Ambiente 61

Capítulo 4 Uso de transistores e de condução Motors 63

Sons Capítulo 5, que faz 91

Capítulo 6 USB e Comunicação Serial 107

Registros Capítulo 7 Turno 145

parte III Interfaces de comunicação 161

Capítulo 8 A I2C Bus 163

Capítulo 9 A SPI Bus 181

Capítulo 10 Interface com ecrãs de cristais líquidos 199

Capítulo 11 Comunicação sem fio com XBee rádios 221

parte IV Tópicos Avançados e Projetos 255

Capítulo 12 Hardware e interrupções timer 257

Capítulo 13 Registro de dados com cartões SD 277

Capítulo 14 Como conectar o Arduino à Internet 313

Apêndice Decifrando o ATmega folha de dados e Arduino Schematics 341

Índice 349

ix
Conteúdo at a
x Conteú

Introdução xix

parte I Arduino Engenharia Basics 1

Capítulo 1 Obtendo-se e piscando com o Arduino 3


Explorando o Arduino Ecossistema 4
Arduino Funcionalidade 4
Atmel microcontroladores 6
Interfaces de programação 6
Geral I / O e ADCs 7
Suprimentos de energia 7
Arduino Boards 8
Criando seu primeiro programa 13
Baixar e instalar o Arduino IDE 13
Executando o IDE e conectando ao Arduino 14
Breaking Down Seu primeiro programa 16
Resumo 18

Capítulo 2 Entradas, saídas digitais, e Pulse-Width Modulation 19


Saídas digitais 20
Fiação até um LED e Usando Breadboards 20
Trabalhando com Breadboards 21
LEDs de fiação 22
Programação Saídas digitais 24
Usando os loops 25
Pulse-Width Modulation com analogWrite () 27
Leitura de entradas digitais 29
Lendo entradas digitais com PULLDOWN Resistências 29
Trabalhando com botões "saltitantes" 32
Construir uma controlável RGB LED Nightlight 35
Resumo 39

XI
Capítulo 3 Leitura Sensores analógicos 41
Compreender analógica e digital Signals 42
Comparando analógica e digital Signals 43
Converter um sinal analógico para um digital 44
Leitura Sensores analógicos com o Arduino: analogRead () 45
Lendo um potenciômetro 45
Usando Sensores analógicos 50

Conteúd
Trabalhando com Sensores analógicos para detectar a temperatura
Usando Resistores Variáveis fazer seus próprios sensores analógicos 54
52

Usando divisores de tensão resistiva 55


Usando entradas analógicas para controlar saídas analógicas 56
Resumo 59

parte II Controlar o Seu Ambiente 61

Capítulo 4 Uso de transistores e de condução Motors 63


Condução DC Motors 65
Movimentação de cargas de alta corrente indutiva 65
Uso de transistores como interruptores 66
Usando diodos de proteção 67
Usando um secundário fonte de alimentação 68
Fiação do Motor 68
Controlando Motor velocidade com PWM 70
Usando um H-Bridge para controlar DC Direcção Motor 72
Construir um circuito de ponte H 73
A operação de um circuito de ponte H 76
Condução servomotores 80
Compreender a diferença entre Rotação Contínua
e Servos Padrão 80
Entendendo Controle Servo 80
Controlar um Servo 85
A construção de uma varredora Distância Sensor 86
Resumo 90

Sons Capítulo 5, que faz 91


Entendendo como funciona Speakers 92
As propriedades do Som 92
Como um alto-falante produz um som 94
Usando tom () para fazer sons 95
Incluindo um arquivo de definição 95
Ligação do alto-falante 96
Fazendo sequências sonoras 99
usando Arrays 99
Fazendo a anotação e Duração Arrays 100
Completando o Programa 101
Compreender as limitações do tom () função 102
A construção de uma Micro Piano 102
Resumo 105
x Conteú
Capítulo 6 USB e Comunicação Serial 107
Entender Comunicação Serial do Arduino
capacidades 108
Placas Arduino com um interno ou externo FTDI
USB-to-Serial Converter 110
Placas Arduino com um secundário com capacidade USB
ATmega MCU Emulando um conversor Serial 112
Placas Arduino com um MCU Único USB-Capable 114
Arduino Placas com capacidades USB host 114
Ouvindo o Arduino 115
Usando instruções de impressão 115
Usando caracteres especiais 117
Alterar Tipo de Dados Representações 119
Conversando com o Arduino 119
Lendo informações de um computador ou outro dispositivo serial 120
Dizer a Arduino para eco dos dados de entrada 120
Entender as diferenças entre CHAR e Ints 121Sending Individual Characters
para controlar um LED 122
Envio de listas de valores para controlar um LED RGB 125
Conversando com um desktop App 127
Falando ao Tratamento 127
Processamento de instalar 128
Controlar um esboço de processamento do seu Arduino 129
Envio de dados de processamento à sua Arduino 132
Aprender Truques Especiais com o Arduino Leonardo
(E outras Arduinos Baseado-32U4) 134
Emulando um teclado 135
Digitando dados no computador 135
Comandando o computador a fazer o seu lance 139
Emulando um mouse 140
Resumo 144

Registros Capítulo 7 Turno 145


Compreender registos de deslocamento 146
Envio de dados seriais e paralelas 147
Trabalhando com o 74HC595 Shift Register 148
Compreender a mudança Funções Register Pin 148
Entender como o registo de deslocamento Works 149
Mudando de Dados Serial do Arduino 151
Converter entre formatos binários e decimais 154
Controlando animações de luz com um Shift Register 154
Construir um "Rider Luz" 154
Respondendo a entradas com um gráfico de barras de LED 157
Resumo 160

parte III Interfaces de comunicação 161

Capítulo 8 A I2C Bus 163


História da I2C Bus 164
Eu2Design C Hardware 164
Esquema de Comunicação e números de identificação 165
Requisitos de hardware e resistores pull-up 167
Comunicando-se com um I2Sonda de temperatura C 167
Configurar o hardware 168
Referenciando a Folha de dados 169
Escrevendo o Software 171
Combinando registos de deslocamento, Comunicação Serial,
e eu2C Communications 173
Construir o hardware para um sistema de monitorização de temperatura
173Modifying do Programa integrado
Conteúd 174
Escrever o esboço de Processamento 177
Resumo 180

Capítulo 9 A SPI Bus 181


Visão geral do Bus SPI 182
SPI hardware e Design de Comunicação 183
Configuração de hardware 184
Esquema de comunicação 184
Comparando SPI para I2C 185
Comunicação com um SPI de potenciômetros digitais 185
A coleta de informações a partir da Folha de dados 186
Configurar o hardware 189
Escrevendo o Software 190
Criando um monitor Audiovisual Usando
SPI Digital Potentiometers 193
Configurar o hardware 194
Modificação do Software 195
Resumo 197

Capítulo 10 Interface com ecrãs de cristais líquidos 199


Configurando o LCD 200
Usando a Biblioteca LiquidCrystal para escrever para o LCD 203
Adicionando texto para a Tela 204
Criação de personagens e animações especiais 206
Construindo um termostato pessoal 209
Configurar o hardware 210
Exibindo dados no LCD 211
Ajustar o Set Point com um botão 213
Adicionando um aviso sonoro e um ventilador 214
Juntando tudo: o programa completo 215
Tomando esse projeto para o Próximo Nível 219
Resumo 219

Capítulo 11 Comunicação sem fio com XBee rádios 221


Comunicação compreensão XBee sem fio 222
XBee rádios 223
The Shield Radio XBee e conexões seriais 224
Regulator 3.3V 226
Nível de lógica Shifting 226
Associar LED e LED RSSI 226
UART Seleção jumper ou interruptor 226
x Conteú
Hardware vs. Software UART de série Connection Option 227
Configurando seus XBees 228
Configuração com um escudo ou um adaptador USB 228
Opção de programação 1: Usando o Uno como um programador
(Não recomendado) 229
Opção de programação 2: Usando o SparkFun USB Explorador
(Recomendado) 230
Escolhendo as configurações de XBee e ligar o XBee
para seu computador host 230
Configurar o XBee com X-CTU 231
Configurar o XBee com um Terminal Serial 235
Conversando com seu sem fio do computador 236
Como ligar o Arduino remoto 236
USB com um computador ou um adaptador de parede 5V 237
baterias 237
Adaptadores de parede de energia 239
Revisitando os exemplos de série: Controlling Processing
com um potenciômetro 239
Revisitando os exemplos de série: Controlando um LED RGB 243
Falando com outro Arduino: Construindo uma campainha sem fio 246
Projeto de sistema 246
transmissor Hardware 247
receptor Hardware 248
Software transmissor 249
receiver Software 250
Resumo 252

parte IV Tópicos Avançados e Projetos 255

Capítulo 12 Hardware e interrupções timer 257


Usando interrupções de hardware 258
Sabendo as compensações entre Polling e Interrompendo 259
Facilidade de Implementação (Software) 260
Facilidade de Implementação (Hardware) 260
multitarefa 260
aquisição Precisão 261
Compreender o hardware do Arduino
Capacidades de interrupção 261

Construir e testar um Hardware-filtrada por


Botão Circuito de Interrupção 262
Criando um Hardware Debouncing-Circuit 262
Montagem do Circuito Teste completo 267
Escrevendo o Software 267
Usando interrupções timer 270
Compreender interrupções timer 270
Obtendo a Biblioteca 270
Executar duas tarefas simultaneamente (ish) 271
Construir uma máquina de som baseada em interrupções 272
Máquina de hardware de som 272
Software Sound Machine 273
Resumo 275

Capítulo 13 Registro de dados com cartões SD 277


Preparando-se para Registro de Dados 278
Formatação de dados com arquivos CSV 279
Preparar um cartão SD de Registro de Dados 279
A interface do Arduino com um cartão SD 284
SD Card Shields 284
Cartão SD de interface SPI 288
Escrevendo para um cartão SD
Lendo a partir de um cartão SD
Conteúd 289
293
Usando um relógio de tempo real 297
Compreender Clocks em Tempo Real 298
Usando o DS1307-Real Time Clock 298
Usando a Biblioteca RTC Arduino Third-Party 299
Usando o relógio em tempo real 300
Instalando os Módulos de cartão de RTC e SD 300
Atualização do software 301
Construir uma Logger Entrance 305
logger Hardware 306
Software logger 307
Análise de dados 311
Resumo 312

Capítulo 14 Como conectar o Arduino à Internet 313


A Web, o Arduino, e Você 314
Networking Lingo 314
Endereço de IP 314
Tradução do Endereço da Rede 315
Endereço MAC 316
HTML 316
HTTP 316
GET / POST 316
DHCP 316
DNS 317

Clientes e servidores 317


Networking Seu Arduino 317
Controlando a sua Arduino a partir da Web 318
Configuração do I / Hardware O Control 318
Projetando uma simples página da Web 318
Escrevendo um esboço Arduino Servidor 320
Conexão à rede e recuperando um IP via DHCP 321Replying para uma
resposta do cliente 321
Putting It Together: Esboço Web Server 322
Controlando a sua Arduino através da Rede 326
Controlando a sua Arduino através da rede local 326
Usando Port Forwarding Controle seu Arduino
de qualquer lugar 327
Envio de dados ao vivo a um Serviço de Gráficos 329
Construindo um Live Feed de Dados sobre Xively 330
x Conteú
Criando uma conta Xively 330
Criando um feed de dados 330
Instalando as Bibliotecas Xively e HttpClient 331
Fiação Up Your Arduino 332
Configurando o esboço Xively e executar o código 332
Exibindo dados na Web 335
Adicionando componentes de alimentação 336
Adicionando um sensor de temperatura analógico 336
Adicionando Leituras adicionais sensor ao Datastream 336
Resumo 339

Apêndice Decifrando o ATmega Folha de dados


e esquemas Arduino 341
Fichas de leitura 341
Quebrando uma folha de dados 341
Entender Componente Pin-outs 344
Compreender o Arduino Schematic 345

Índice 349
Conteúd
Introdução

Você tem excelente timing. Como muitas vezes eu gosto de dizer, "Nós estamos vivendo no futuro." Com
as ferramentas disponíveis para você hoje, muitos dos quais você vai aprender neste livro, você tem a
oportunidade ea capacidade de dobrar o mundo físico para seus caprichos. Até muito recentemente,
não foi possível para alguém para pegar um microcontrolador e tê-lo controlar o seu mundo em p oucos
minutos. Como você deve ter adivinhado, ummicrocontroladoré uma plataforma programável que lhe
dá o poder de definir a operação de complexos sistemas mecânicos, elétricos e de software usando
comandos relativamente simples. As possibilidades são end-less, e da plataforma microcontrolador
Arduino vai se tornar sua nova ferramenta favorita como você explorar o mundo da eletrônica,
programação, interação humano-computador, arte, sistemas de controle, e muito mais. Durante todo o
curso deste livro, você vai usar o Arduino para fazer tudo, desde a detecção de movimento para a criação de
sistemas de controle de fio-menos para comunicar através da Internet.

Se você é completamente novo para qualquer tipo de engenharia ou são um experiente


veterano olhando para começar com o projeto de sistemas embarcados, o Arduino é
ótimo lugar para começar. Você está procurando uma referência geral para Arduino desenvolvimento
mento? Este livro é perfeito para você também. Este livro orienta você através de uma série de
projectos específicos, mas você também vai encontrá-lo fácil para voltar ao livro para trechos de
código, melhores práticas, esquemas do sistema, e muito mais. As práticas engenheiro-ing elétrico,
projeto de sistemas e programação que você vai aprender ao ler este livro são amplamente aplicáveis
para além da plataforma Arduino e irá prepará-lo para assumir uma variedade de projetos de engenharia,
quer usar o Arduino ou alguma outra plataforma .

xix
introdução

WhoThisBookIsFor

Este livro é para os entusiastas do Arduino de todos os níveis de experiência. capítulos construir
um sobre o outro, utilizando conceitos e componentes do projeto de tulo anterior
ters para desenvolver idéias mais complexas. Mas não se preocupe. Sempre que você enfrentar novas
idéias, complexas, uma referência cruzada você lembra onde você encontrou pela primeira vez todos os
conceitos de blocos de construção relevantes para que você pode facilmente refrescar a sua memória.

Este livro assume que você tem pouca ou nenhuma experiência anterior de trabalho
com programação ou engenharia elétrica. Para facilitar os leitores de vários níveis de experiência, o
livro apresenta uma série de seções opcionais e barras laterais, ou trechos curtos, que explicam um
determinado conceito em maior detalhe. Embora essas barras laterais não são obrigatórias para você
ganhar um bom entendimento de como

para usar o Arduino, eles fornecem um olhar mais atento a temas técnicos para a
mais curioso leitor.

WhatYou'llLearninThisBook

Este livro não é um livro de receitas. Se você quiser seguir as instruções passo-a-passo que
informam exatamente como construir um projeto específico sem realmente explicar-ing porque você está
fazendo o que está fazendo, este livro não é para você. Você pode

pensar que este livro como uma introdução à engenharia elétrica, ciência da computação,
design de produto, eo pensamento de alto nível usando o Arduino como um veículo para ajudá-lo a
experimentar esses conceitos de uma forma prática.

Quando a construção de componentes dos projectos Arduino demonstrado hardware


Neste livro, você vai aprender não só como ligar as coisas em conjunto, mas como ler esquemas,
por que determinadas partes são usados para funções específicas, e como ler folhas de dados que
permitirá que você escolher peças adequadas para construir seus próprios projetos. Ao escrever
software, eu fornecer o código do programa completo, mas você vai primeiro ser reforçada através
de vários processos iterativos para criar o programa final. Isso vai ajudar a reforçar as funções
específicas do programa, as boas práticas de formatação de código e compreensão algorítmica.

Este livro irá ensinar conceitos de física, algoritmos, princípios de design digital,
e conceitos de programação Arduino específicas do. A minha esperança é que o trabalho através
os projectos neste livro não só vai torná-lo um Arduino devel-oper bem versado, mas que também
irá dar-lhe as habilidades que você precisa para desenvolver sistemas elétricos mais complexos, e
de prosseguir os esforços de engenharia em outros campos, e com diferentes plataformas.
x Introduç

FeaturesUsedinThisBook

Os seguintes recursos e ícones são utilizados neste livro para ajudar a chamar a aten-ção de algumas
das informações mais importantes ou úteis no livro:

ATENÇÃO uretotakeheedwhenyouseeoneoftheseasides.Whenpar-
ticularstepscouldcausedamagetoyourelectronicsifperformedincorrectly, you'llseeoneoftheseasides.

DICA Theseasidescontainquickhintsabouthowtoperformsimpletasksthat
mightproveusefulforthetaskathand.

NOTA heseasidescontainadditionalinformationthatmaybeofimportance
toyou, includinglinkstovideosandonlinematerialthatwillmakeiteasiertofol-lowingalongwiththedevelopmentofaparticularproject

TÍTULO DA AMOSTRA

Theseasidesgointoadditionaldepthaboutthecurrenttopicorarelatedtopic.

GettingtheParts

Sorte para você, você pode facilmente obter os componentes necessários para executar os projetos
neste livro. parceiro deste livro, Newark element14, criou kits especialmente concebidos para o
conteúdo deste livro. Você ainda pode usar o código de cupom na parte de trás deste livro para obter
um desconto!

Você deve solicitar o kit básico de primeiros. Então você pode comprar kits de add-on como você
progredir através do livro. Não quero comprar um kit? Não se preocupe. Ao iniciar-ning de cada capítulo,
você encontrará uma lista detalhada de peças que você precisa para completar o capítulo. O site do
companheiro para este livro,
www.exploringarduino.com,
também fornece links para onde você pode encontrar as peças para cada capítulo.

NOTA idyoualreadybuythisbookasabundlefromNewark? IFSO, você está


bom para ir.
xxii

WhatYou'llNeed

Além das peças reais que você vai usar para construir seus projetos Arduino,
existem algumas outras ferramentas e materiais que você precisa no seu
Arduino
aventuras. Mais importante, você precisará de um computador que é compatível com o
Arduino ambiente de desenvolvimento integrado (IDE) (Max OSX 10.4+, o Windows XP +, ou de uma
Distro Linux). Estou disposto a dar instruções para todos os sistemas operacionais quando tal se
justifique.

Você também pode querer algumas ferramentas adicionais que serão utilizados ao longo do livro
depurar, montar hardware, etc. Estes não são explicitamente necessárias para concluir os projetos neste
livro. Como você desenvolver o seu conjunto de habilidades de engenharia elétrica, estas ferramentas serão
úteis para outros projectos. Eu recomendo o seguinte:

■U■m ferro de solda e solda (Nota:. Você não vai precisar de solda para com-pletar os projetos
neste livro, mas você pode desejar para montar seus próprios circuitos em um protoboard, ou
você pode querer comprar proteções que exijam a montagem de solda)

■U■m multímetro (Isso vai ser útil para depurar conceitos dentro deste
reservar, mas não é explicitamente necessário.)

■ U■m conjunto de chaves de fenda

■ A■pistola de cola quente

SourceCodeandDigitalContent

O local do companheiro primário para este livro é www.exploringarduino.com, e isso


é mantida pelo autor. Você vai encontrar downloads de código para cada capítulo neste site
(juntamente com vídeos, links e outros materiais úteis). Wiley também principais-tém um
repositório de conteúdo digital que acompanha este livro na
www.wiley.com.
Especificamente para este livro, o download do código está na guia de transferência de código em
www.wiley.com/go/exploringarduino.
Você também pode procurar o livro www.wiley.compor ISBN (o ISBN para este
livro é 978-1-118-54936-0) para localizar o código.
No início de cada capítulo, você pode encontrar a localização do código principal
arquivos para o capítulo. Ao longo de cada capítulo, você também pode encontrar referências aos
nomes dos arquivos de código conforme necessário na listagem de títulos e texto.

O código disponíveis no www.exploringarduino.com e www.wiley.comé


fornecida em arquivos ZIP compactados. Depois de baixar o código, basta descompactá-lo com
uma ferramenta de compressão apropriada.

NOTA Becausemanybookshavesimilartitles, youmayfinditeasiesttosearch


byISBN; thisbook'sISBNis978-1-118-54936-0.
introdução

errata

Fazemos todos os esforços para garantir que não há erros no texto ou no código. No entanto, ninguém é
perfeito, e os erros ocorrem. Se você encontrar um erro neste livro, como um erro de ortografia ou uma
peça com defeito de código, ficaríamos muito gratos pelo seu feedback. Através do envio de errata,
você pode economizar mais horas leitor de frustração, e, ao mesmo tempo, você pode nos ajudar a fornecer
informações qualidade ainda maior.

Para encontrar a página errata para este


livro,wirwpwa.wrialey.com/go/exploringarduino
e clique no link Errata. Nesta página você pode ver todos errata que foi enviada para este livro e
publicado pelos editores Wiley.

SupplementaryMaterialandSupport

Durante suas aventuras com o seu Arduino, você vai, inevitavelmente, perguntas
e talvez executar em problemas. Uma das melhores partes sobre usando o Arduino é
o excelente comunidade de suporte que você pode encontrar na Web. Esta base extremamente
ativa dos usuários Arduino prontamente ajudá-lo junto à sua maneira. O follow-ing são apenas alguns
recursos que você vai achar útil em sua jornada:

■ R■eferência Oficial Arduino

www.arduino.cc/en/Reference/HomePage

■ M■inha série Tutorial Arduino

www.jeremyblum.com/category/arduino-tutorials

■ S■érie Tutorial Arduino adafruit Industries '

learn.adafruit.com/category/learn-arduino

■ E■letrônica Tutoriais de SparkFun

learn.sparkfun.com/tutorials

■ O■Fórum Oficial Arduino

www.arduino.cc/forum

■ A■Comunidade Arduino element14

www.element14.com/community/groups/arduino

Se você já esgotou todos esses recursos e ainda não conseguir resolver o problema,
chegar a mim no Twitter ( @ sciguy14); Talvez eu possa ajudar. Você também pode entrar
em contato comigo diretamente através da página de contato no meu site w( ww.jeremyblum
.com / contato), Mas eu geralmente não garantem tempos de resposta rápidos.
xxiv

WhatIsanArduino?

A melhor parte sobre a plataforma de prototipagem Arduino é que é o que você quiser que ele seja. O
Arduino pode ser um sistema de controle automático de rega de plantas. Pode ser um servidor web. Pode
até ser um piloto automático Quadrotor.

O Arduino é uma plataforma de desenvolvimento microcontrolador emparelhado com um intuições


linguagem de programação tiva que você desenvolve usando o Arduino integrado
ambiente de desenvolvimento (IDE). Ao equipar o Arduino com sensores, actuadores
ToRs, luzes, alto-falantes, módulos adicionais (chamados escudos), E outro integrado
circuitos, você pode transformar o Arduino em um "cérebro" programável para praticamente
qualquer sistema de controle.

É impossível cobrir tudo que o Arduino é capaz, porque o


possibilidades são limitadas somente por sua imaginação. Assim, este livro serve como um guia
para você se familiarizar com a funcionalidade do Arduino através da execução de uma série de
projectos que lhe dará as habilidades que você precisa para desenvolver seus próprios projetos.

Você vai aprender mais sobre o Arduino e as variações disponíveis do conselho


no Capítulo 1, "Getting Up e piscando com o Arduino." Se você está ansioso para
Conhecemos todos os funcionamentos internos do Arduino, você está com sorte: É completamente
código aberto, e todos os esquemas e documentação estão disponíveis gratuitamente no site do
Arduino. Apêndice A, "Decifrando o ATmega folha de dados e Arduino esquema," abrange algumas das
especificações técnicas do Arduino.

AnOpenSourcePlatform

Se você é novo para o mundo do código aberto, você está em uma surpresa. Este livro não entrar em
detalhes sobre o movimento hardware open source, mas vale a pena

saber um pouco sobre as ideologias que tornam o trabalho com o Arduino assim
Maravilhoso. Se você quiser um resumo completo do que hardware open source é, confira as
definições oficiais no site Association Hardware Open Source

(www.oshwa.org/definition).

NOTA earnallabouttheopensourcemovementfrommyTEDxTalk:
www.jeremyblum.com/portfolio/tedx-cornell-university-2011/.
YoucanalsofindthisvideoontheWileywebsiteshownatthebeginningofthisIntroduction.

Porque o Arduino é hardware de código aberto, todos os arquivos de projeto, diagramas esquemáticos,
e código-fonte está disponível gratuitamente para todos. Não só isso significa que você pode
facilmente cortar o Arduino para servir uma função muito particular, mas você também pode até
mesmo integrar a plataforma Arduino em seus projetos, fazer e
introdução

vender clones Arduino, e usar as bibliotecas de software Arduino em outros projetos. Embora este
livro centra-se principalmente sobre o uso de hardware oficial Arduino, você também pode usar
centenas de Arduino placas de derivativos (muitas vezes com funções específicas adicionados a
eles) para criar os projetos neste livro.

A licença de código aberto Arduino também permite a reutilização comercial de seus projetos
(Contanto que você não utilizar a marca Arduino em seus projetos). Então, se você usar um Arduino
para protótipo um projeto emocionante e pretende transformá-lo em um produto comercial, você
pode fazer isso. Por exemplo, você vai ler sobre produtos como a impressora MakerBot Replicator
3D, que usa eletrônicos baseados no Arduino plataforma mega (www.thingiverse.com/thing:16058).
(Divulgação completa: Eu projetei essa placa-mãe).

Certifique-se de respeitar as licenças de código-fonte e hardware que você usa


ao longo deste livro. Algumas licenças exigem que você fornecer atribuição para
o autor original quando você publicar um projeto baseado em seu trabalho anterior. Outros exigem que
você sempre compartilhar as melhorias feitas sob uma licença equivalente. Esta partilha ajuda a
comunidade crescer, e leva a toda a documentação on-line incrível e apoio que você vai, sem dúvida,
referem-se muitas vezes durante suas aventuras Arduino. Todos os exemplos de código que eu
escrevi para este livro (salvo indicação em contrário) são licenciados sob a GNU General Public
License (GPL), permitindo que você usá-los para o que quiser.

BeyondThisBook

Alguns de vocês podem já estar familiarizado com a minha série popular de YouTube
Arduino e eletrônica tutoriais ( www.youtube.com/sciguy14). Refiro-me a eles
ao longo deste livro como uma maneira de ver orientações mais detalhadas dos tópicos cobertos aqui.
Se você está curioso sobre algumas das coisas notáveis que você pode fazer com combinações
inteligentes de eletrônicos, microcontroladores, computador sci-cia e criatividade, veja minha carteira (

www.jeremyblum.com/portfolio)
para uma amostra de projectos. Como Arduino, mais do que eu faço é liberado através de licenças de
código aberto que permitem duplicar facilmente o meu trabalho para suas próprias necessidades.

Estou ansioso para ouvir sobre o que fazer com as habilidades que você adquire a partir desta
livro. Encorajo-vos a compartilhá-los comigo e com o resto do mundo. Boa sorte em suas aventuras
Arduino!
par t

Eu

Arduino Engenharia Basics

InThisPart

Capítulo 1: Obtendo-se e piscando com o ArduinoCapítulo 2:Entradas digitais,


saídas e Pulse-Width ModulationCapítulo 3: Leitura Sensores alógicos
an
Capítulo

Obtendo-se e piscando
com o Arduino

Peças que você vai precisar para este capítulo:

cabo Arduino
UnoUSB

CÓDIGO E CONTEÚDO DIGITAL PARA ESTE CAPÍTULO

downloads de código, vídeos e outros conteúdos digitais para este capítulo pode
ser encontrada em www.exploringarduino.com/content/ch1 .

Além disso, todos os códigos podem ser encontradas em www.wiley.com/go/exploringarduino


na guia de transferência de código. O código está no download do capítulo 01 e indi-vidualmente
nomeado de acordo com os nomes de todo o capítulo.

Agora que você tem alguma perspectiva sobre a plataforma Arduino e as suas ca-pabilities, é hora
de explorar as suas opções no mundo do Arduino. Neste capítulo, você examinar o hardware
disponível, aprender sobre o ambiente de programação e linguagem, e obter o seu primeiro
programa instalado e funcionando. Uma vez que você tem um controle sobre a funcionalidade que o
Arduino pode fornecer, você vai escrever o seu primeiro programa e obter o Arduino a piscar!

3
4 parte I ■Arduino Engenharia

NOTA ofollowalongwithavideothatintroducestheArduinoplatform, visita


www.jeremyblum.com/2011/01/02/arduino-tutorial-series-it-begins/.
YoucanalsofindthisvideoontheWileywebsiteshownatthebeginningofthischapter.

ExploringtheArduinoEcosystem

Em suas aventuras com o Arduino, você vai depender de três componentes principais para seus
projetos:

■ A■placa Arduino em si

■ h■ardware externo (incluindo ambos os escudos e circuitos feitos à mão, o que


você vai explorar ao longo deste livro)

■ O■ambiente de desenvolvimento integrado Arduino, ou Arduino IDE

Todos estes componentes do sistema funcionam em conjunto para permitir-lhe fazer praticamente
qualquer coisa com seu Arduino.
Você tem um monte de opções quando se trata de Arduino placas de desenvolvimento, mas
este livro centra-se sobre o uso de placas oficiais Arduino. Porque as placas são todos concebidos para
ser programável através do mesmo IDE, você geralmente pode usar qualquer uma das placas
Arduino modernas para completar os projectos neste livro com zero ou

pequenas alterações. No entanto, quando necessário, você verá advertências sobre o uso de diferentes
placas para vários projetos. A maioria dos projectos usar o Arduino Uno.
Você começa a explorar a funcionalidade básica cozido para cada placa Arduino.
Então você examinar as diferenças entre cada placa moderno para que você possa tomar uma decisão
informada ao escolher uma placa de usar para o seu próximo projeto.

ArduinoFunctionality

Todas as placas Arduino tem algumas capacidades e funções chave. Tome um momento para examinar o
Arduino Uno (veja a Figura 1-1); será sua configuração básica. Estes são alguns componentes-chave que
você vai ser referentes-se com:

■ A■tmel microcontrolador

■ In■terface (s) USB de programação / comunicação

r egulador de tensão e conexões de energia


■ ■

/ O pins Breakout I
■ ■

■ D■epuração, poder e LEDs RX / TX

■ B■otão de reset

■ E■m circuito programador de série (ICSP) Conector (s)


Geral I / O
Botão de reset

Debug LED

conector USB

programação MCU
conector (ICSP)
Serial-to-USB
circuitos

ATmega 328 MCU

C
entrada de 7-12VD

Poder e pinos auxiliares


Analógico-digital (ADC) entradas dos conversores

Figura 1-1: componentes Arduino


Uno Crédito: Arduino, www.arduino.cc
6 parte I ■Arduino Engenharia

Atmel microcontroladores

No coração de cada Arduino é uma unidade de microcontrolador Atmel (MCU). A


maioria placas Arduino, incluindo o Arduino Uno, usar um microcontrolador AVR ATmega.
O Arduino Uno na Figura 1-1 utiliza um 328p ATmega. O Due é uma exceção; ele usa um
microcontrolador ARM Cortex. Este microcontrolador é responsável pela

segurando todo o seu código compilado e executar os comandos que você especificar. o
linguagem de programação Arduino lhe dá acesso a periféricos do microcontrolador,
incluindo analógico-digitais conversores (ADCs), entrada de uso geral / saída (I / O)
pinos, barramentos de comunicação (incluindo I 2
C e SPI), e interfaces seriais.
Toda essa funcionalidade útil é quebrado para fora dos minúsculos pinos do micro-controlador
para cabeçalhos femininos acessíveis na Arduino que você pode conectar fios

ou escudos em. Um ressonador cerâmico 16 MHz é ligado ao relógio do ATmega


pinos, que serve de referência pelo qual todos os comandos de programa executar. Você pode
usar o botão Reset para reiniciar a execução do seu programa. A maioria das placas Arduino vêm com
uma depuração LED já ligada ao pino 13, que permite que você execute o seu primeiro programa
(piscar um LED), sem ligar qualquer circuitos adicionais.

Interfaces de programação

Normalmente, os programas de microcontroladores ATmega são escritos em C ou


Assembly e programado através da interface ICSP usando um programador específico (ver

Figura 1-2). Talvez a característica mais importante de um Arduino é que


você pode programá-lo facilmente através de USB, sem o uso de um programador separado. Esta
funcionalidade é possível graças ao bootloader Arduino. O bootloader é carregado no ATmega na fábrica
(usando o cabeçalho ICSP), que permite uma USART série (Universal Synchronous / Asynchronous
Receiver / Transmitter) para carregar o seu programa no Arduino sem o uso de um programador
separado. (Você pode aprender mais sobre como funciona o gerenciador de inicialização "O Arduino
Bootloader e Firmware Setup" barra lateral.)

No caso de o Arduino Uno e mega 2560, um microcontrolador secundário


(Um 16U2 ATmega ou 8U2 dependendo da sua revisão) serve como uma interface
entre um cabo USB e os pinos USART seriais no microcontrolador principal. o
Arduino Leonardo, que usa um ATmega 32U4 como o microcontrolador principal, tem USB cozido na
direita, assim que um microcontrolador secundário não é necessário. Em placas Arduino mais velhos,
um chip USB-to-serial marca FTDI foi usado como a interface entre o porto USART série do
ATmega e uma conexão USB.
Capítulo Obtendo-se e piscando com o Arduino

Corporation. Todos os direitos


Crédito: © 2013 Atmel
Figura 1-2: programador AVR ISP MKII

Geral I / O e ADCs

A parte do Arduino que você se importa o mais aproximadamente durante seus projetos é o general-
purpose de I / O e ADC pinos. Todos esses pinos podem ser tratadas individualmente através dos
programas que você vai escrever. Todos eles podem servir como entradas e saídas digitais. Os pinos
ADC também pode atuar como entradas analógicas que podem medir volt-idades entre 0 e 5V (geralmente a
partir de sensores resistivos). Muitos destes pinos também são multiplexados para servir a funções
adicionais, que você vai explorar durante

seus projetos. Estas funções especiais incluem vários interfaces de comunicação,


interfaces seriais, saídas de pulso de largura modulada, e interrupções externas.

Suprimentos de energia

Para a maioria de seus projetos, você simplesmente usar o poder 5V que é


fornecida ao longo do seu cabo USB. No entanto, quando você estiver pronto para untether seu projeto
a partir de um computador, você tem outras opções de energia. O Arduino pode aceitar entre 6V e 20V
(7- 12V recomendo) através do (DC) conector de corrente contínua barril jack, ou para a V

pino. O Arduino foi construído com 5V e 3.3V reguladores:


dentro

■5■V é usado para toda a lógica no tabuleiro. Em outras palavras, quando você alternar um
pino de E / S digital, você está alternando-o entre 5V e 0V.

■3■.3V é dividida a um pino para acomodar escudos 3.3V e


externa circuitos.
8 parte I ■Arduino Engenharia

O bootloader ARDUINO E CONFIGURAÇÃO DE FIRMWARE

UMAbootloaderisachunkofcodethatlivesinareservedspaceintheprogrammemoryoftheArduino'smainMCU.Ingeneral, AVRmicrocontr
whichtalkstothemicrocontrollerviaaserialperipheralinterface (SPI) .Programmingviathismethodisfairlystraight-forward,
butnecessitatestheuserhavingahardwareprogrammersuchasanSTK500oranAVRISPMKIIprogrammer (seeFigure1-2).

WhenyoufirstboottheArduinoboard, itentersthebootloader, whichrunsforafewseconds.Ifitreceivesaprogrammingcommandfromt

IDEovertheMCU'sUART (serialinterface) inthattimeperiod, itloadstheprogramthatyouaresendingitintotherestoftheMCU'sprogramme


itstartsrunningyourmostrecentlyuploadedsketch, whichresidesintherestoftheprogrammemory.

Whenyousendan "upload" commandfromtheArduinoIDE, itinstructstheUSB-se serialchip (anATMega16U2or8U2inthecaseoftheA

Uno) toresetthemainMCU, henceforcingitintothebootloader.Then, yourcomputerimmediatelybeginstosendtheprogramcontents,


whichtheMCUisreadytoreceiveoveritsUARTconnection (facilitatedbytheUSB-to-serialconverter).

BootloadersaregreatbecausetheyenablesimpleprogrammingviaUSB
withnoexternalhardware.However, theydohavetwodownsides:

■ Em primeiro lugar, theytakeupvaluableprogramspace.Ifyouhavewrittenacom-plicatedsketch, theapproximately2KBofspacet


loadermightbereallyvaluable.

■ Em segundo lugar, usingabootloadermeansthatyourprogramwillalwaysbedelayedbyafewsecondsatbootasthebootloaderche

Ifyouhaveaprogrammer (oranotherArduinothatcanbeprogrammedtoactasaprogrammer), youcanremovethebootloaderfromyour

programitdirectlybyconnectingyourprogrammertotheICSPheaderandusingtheFile
dUploadUsingProgrammercommandfromwithintheIDE.

ArduinoBoards

Este livro não pode cobrir todas as placas Arduino disponíveis; Há muitos,
e os fabricantes estão constantemente lançando novos com vários recursos. o
secção seguinte destaca algumas das características nos quadros de oficiais Arduino.
O Uno (veja a Figura 1-3) é o carro-chefe Arduino e será usado pesadamente
neste livro. Ele usa um chip conversor 16U2 USB-to-serial e um 328p ATmega como a MCU principal.
Ele está disponível em ambas DIP e versões SMD (que define se o MCU é removível).
Capítulo Obtendo-se e piscando com o Arduino

Crédito: Arduino,
Figura 1-3: O Arduino Uno

O Leonardo (veja a Figura 1-4) usa o 32U4 como o microcontrolador principal,


que tem uma interface USB integrado. Portanto, ele não precisa de um MCU secundário para
realizar a conversão serial-to-USB. Isso reduz o custo e permite que você faça coisas únicas, como emular
um joystick ou um teclado em vez de um dispositivo serial simples. Você vai aprender como usar
esses recursos no Capítulo 6 ", USB e

Comunicação Serial ".

Crédito: Arduino,

Figura 1-4: O Arduino Leonardo


1 parte I ■Arduino Engenharia

O mega 2560 (veja a Figura 1-5) emprega um ATmega 2560 como o principal MCU,
que tem 54 I geral / Os para que você possa interagir com muitos outros dispositivos. Mega também tem
mais canais ADC, e tem quatro hardware interfaces seriais

(Ao contrário da interface serial encontrado no Uno).

Crédito: Arduino,
Figura 1-5: O Arduino mega 2560

Ao contrário de todas as outras variantes Arduino, que utilizam 8 bits AVR MCUs, o Due
(Veja a Figura 1-6) usa um 32-bit ARM Cortex M3 SAM3X MCU. As ofertas Devido
ADCs de alta precisão, resolução de modulação por largura de pulso selecionável (PWM), Digital-to-
Analog Converters (DACs), um conector de host USB e um 84 MHz

Velocidade do relógio.
Crédito: Arduino,

Figura 1-6: O Arduino Devido


Capítulo Obtendo-se e piscando com o
■ 1

O Nano (veja a Figura 1-7) é projetado para ser montado para a direita em uma placa de ensaio
socket. Seu fator de forma pequeno torna-o perfeito para uso em projetos mais elaborados.

Crédito: Cozinhar Hacks,


Figura 1-7: O Arduino Nano

O ADK mega (ver Figura 1-8) é muito semelhante ao do mega 2560, excepto que
ele tem a funcionalidade de host USB, permitindo que ele se conectar a um telefone Android para que
que possa se comunicar com aplicativos que você escreve.

Crédito: Arduino,

Figura 1-8: O Arduino mega ADK

O LilyPad (veja a Figura 1-9) é único porque ele é projetado para ser costurado em
vestuário. Usando fio condutor, você pode conectar-lo até sensores sewable, LEDs e mais. Para manter
o tamanho para baixo, você precisa programá-lo usando um cabo FTDI.
1 parte I ■Arduino Engenharia

www.arduino.cc
Crédito: Arduino
Figura 1-9: O Arduino Lilypad

Como explicado na introdução deste livro, o Arduino é hardware livre.


Como resultado, você pode encontrar dezenas e dezenas de dispositivos "Arduino compatíveis"
disponíveis para venda que vai funcionar muito bem com o Arduino IDE e todos os proj-ECTS que
você vai fazer neste livro. Alguns dos populares placas de terceiros incluem o

Seeduino, a bordo de fuga adafruit 32U4, eo SparkFun Pro Mini Arduino


Pranchas. Muitas placas de terceiros são projetados para aplicações muito específicas, com
funcionalidade adicional já construído dentro para o conselho. Por exemplo, o ArduPilot é uma placa de
piloto automático para uso em Quadrotor DIY autónomos (ver a Figura 1-10). Você pode até achar
circuitos Arduino compatível cozido para dispositivos de consumo

como a MakerBot Replicator e impressoras 3D Replicator 2.


Crédito: 3D Robotics, Inc.,

Figura 1-10: Quadrotor e ArduPilot controlador de mega


Capítulo Obtendo-se e piscando com o
■ 1

CreatingYourFirstProgram

Agora que você entende o hardware que você vai usar ao longo deste livro, você pode instalar o
software e executar o seu primeiro programa. Comece por down-carregar o software Arduino ao
computador.

DownloadingandInstallingtheArduinoIDE

Acesse o site do Arduino em www.arduino.cce baixar a mais nova


ver- sion do IDE na página de download (veja a Figura 1-11).

Figura 1-11: A página de download Arduino.cc

Após completar o download, descompactá-lo. Dentro, você encontrará o Arduino


IDE. Novas versões do Windows IDE estão disponíveis como um instalador que você pode
baixar e executar, em vez de baixar um arquivo ZIP.
1 parte I ■Arduino Engenharia

RunningtheIDEandConnectingtotheArduino

Agora que você tem o IDE baixado e pronto para ser executado, você pode conectar o Arduino ao
computador via USB, como mostrado na Figura 1-12. máquinas Mac e Linux instalar os drivers
(principalmente) automaticamente.

Se você estiver usando OS X, a primeira vez que você conecte um Uno ou um mega 2560, você
receberá uma notificação de que um novo dispositivo de rede foi adicionado. Clique no
botão Preferências de rede. Na nova janela, clique em Aplicar. Mesmo que o
conselho vai aparecer como "Não configurado" na lista de dispositivos de rede, será
pronto para usar. Agora, saia de Preferências do Sistema.
Se você estiver usando um Arduino moderna em um computador Windows, você prova-
habilmente necessário instalar drivers. Você pode pular as seguintes indicações, se você não estiver
usando um computador com Windows que precisa ter os drivers instalados. Se você instalou o IDE
usando o instalador do Windows, então essas etapas foram concluídas para você. Se você baixou o ZIP
no seu computador Windows, então você vai precisar

de seguir as instruções apresentadas em seguida.

Figura 1-12: Arduino Uno conectado a um computador via USB


Capítulo ■Obtendo-se e piscando com o 1

No computador Windows, siga estes passos para instalar os drivers (instruções


ções adaptado a partir do site Arduino.cc):

1. Aguarde até que o processo de instalação automática falhar.

2. Abra o menu Iniciar, clique com botão direito em Meu computador e selecione Propriedades.

3. Escolha o Gerenciador de Dispositivos.

4. Procure em Portas (COM e LPT) para o Arduino que você conectado.

5. Botão direito do mouse e escolha Atualizar driver.

6. Escolha para procurar no computador para o software.

7. Selecione o driver apropriado a partir do diretório motoristas do Arduino IDE que você acabou
de baixar (não o diretório de drivers FTDI).

8. O Windows vai agora terminar a instalação do driver.

Agora, inicie o Arduino IDE. Você está pronto para carregar o seu primeiro programa
em o Arduino. Para garantir que tudo está funcionando como esperado, você vai
carregar o Blink exemplo de programa, que começa a piscar a bordo LED. A maioria dos
Arduinos têm
um LED conectado ao pino 13. Navegue até Arquivo d Exemplos dBasic, e clique no programa
Blink. Isso abre uma nova janela IDE com o programa Blink já escrito para você. Primeiro, você vai
programar o Arduino com este exemplo esboço, e então você vai analisar o programa para
compreender os componentes importantes para que você possa começar a escrever seus próprios
programas no próximo capítulo.

Antes de carregar o programa, você precisa dizer ao IDE que tipo de Arduino
de ter ligado e qual porta ele está conectado. Vá em FerramentasdConselho e garantir que a
prancha certa é selecionado. Este exemplo usa o Uno, mas se você estiver usando uma placa diferente,
selecione que um (supondo que ele também tem um LED conectado ao pino 13).

O último passo antes da programação é informar ao IDE que porta o seu conselho é
conectado a. Navegue para FerramentasdSerial Port e selecione a porta apropriada. Em máquinas
Windows, este será
COM *, Em que * é um número representando
o número da porta serial.

DICA Ifyouhavemultipleserialdevicesattachedtoyourcomputer, tryunplugging


yourboardtoseewhichCOMportdisappearsfromthemenu; thenplugitbackinandselectthatCOMport.

Em computadores Linux e Mac, a porta serial é algo como / Dev / tty

.usbmodem *ou /dev/tty.usbserial* , Onde *é uma cadeia de


alfanumérico personagens.
1 parte I ■Arduino Engenharia

Você está finalmente pronto para carregar o seu primeiro programa. Clique no botão )Uepmload (
a parte superior esquerda do IDE. A barra de status na parte inferior do IDE mostra uma barra de
progresso, uma vez que compila e envia o seu programa. Quando o upload for concluído, o

LED amarelo no seu Arduino deve estar piscando uma vez por segundo. Parabéns!
Você acabou de enviar o seu primeiro programa Arduino.

BreakingDownYourFirstProgram

Tome um momento para desconstruir o programa Blink para que você entenda a estrutura básica
de programas escritos para o Arduino. Considere a Figura 1-13. As chamadas numeradas
mostrados na figura correspondem à lista seguinte.

Aqui está como o código funciona, peça por peça:

1. Este é um comentário de várias linhas. Comentários são importantes para documentar seu
código. Tudo que você escreve entre esses símbolos não será ou mesmo visto pelo seu
Arduino empilhados-com. comentários de várias linhas começam com
/*
e terminam com * /. comentários de várias linhas são geralmente usados quando você tem
que dizer muito (como a descrição deste programa).

2. Este é um comentário de linha única. Quando você co//leomca qualquer linha, o compilador
ignora todo o texto que após símbolo na mesma linha. Isso é ótimo para linhas
específicas-
Tating anno de código ou de "comentando" uma determinada linha de código que você acredita
que pode estar causando problemas.

3. Este código é uma declaração de variável. Uma variável é um lugar na memória do Arduino que
contém informações. Variáveis têm tipos diferentes. Neste caso, é do tipoint, O que significa que
irá realizar um inteiro. Neste caso, uma

variável inteira chamada conduziuestá a ser ajustada para o val1o3r, dOe pino que o
LED está ligado a no Arduino Uno. Durante o resto do pró-grama, que pode simplesmente usar
conduziusempre que queremos controlar pin 13. Ambiente
variáveis é útil porque você pode simplesmente mudar esta linha se você ligar o seu LED a um
O pino diferente I / mais tarde; o resto do código ainda funcionará como esperado.

4. void setup () é uma das duas funções que deve ser incluído em cada
programa Arduino. UMAfunçãoé um pedaço de código que faz uma tarefa específica. Código
dentro das chaves do
configuração()função é executada uma vez na
o início do programa. Isso é útil para configurações de uma só vez, como definir a direção de pinos,
inicializar interfaces de comunicação, e assim por diante.
Capítulo ■Obtendo-se e piscando com o 1

6
7
8
9
10

Figura 1-13: Os componentes do programa Blink

5. pinos digitais do Arduino pode funcionar como entrada ou saídas. Para configurar a sua
direcção, use o comando
pinMode (). Este comando leva dois
argumentos. Aargumento dá ordens informações sobre como deveriam
operar. Argumentos são colocados dentro dos parênteses na sequência de um com-mand. O
primeiro argumento para
pinModedetermina o pino que está tendo sua
direcção definida. Como você definiu o conduziuvariável no início do programa,
você está dizendo o comando que você deseja definir a direção do pino 13. O segundo
argumento define a direção do pino:
ENTRADAou SAÍDA. pins
são entradas por padrão, então você precisa configurá-los explicitamente para as saídas se você
quer que eles funcionar como saídas. Porque você quer acender um LED, que definiu o pino
levou a uma saída (corrente está fluindo para fora do pino de I / O). Note que você tem que fazer
isso apenas uma vez. Ela irá então funcionar como uma saída para o resto do programa, ou até
que você alterá-lo para uma entrada.
1 parte I ■Arduino Engenharia

6. A segunda função necessária em todos os programas Arduino é void loop () .


O conteúdo da função loop repetição sempre, enquanto o Arduino está ligado. Se você quiser
que o seu Arduino para fazer alguma coisa uma vez na inicialização somente, você ainda
precisa incluir a função loop, mas você pode deixá-lo vazio.

7. digitalWrite () é utilizado para definir o estado de um pino de saída. É possível configurar o


pino quer para 5V ou 0V. Quando um LED e resistor está conectado a um pino, set-ting-lo para 5V
irá permitir-lhe para acender o LED. (Você aprenderá mais sobre isso no próximo capítulo.)
O primeiro argumento para
digitalWrite () é o pino
você deseja controlar. O segundo argumento é o valor que você deseja configurá-lo para,
sejaALTO(5V) ou BAIXO(0V). O pino permanece neste estado até que seja

alterada no código.

8. O demora()função aceita um argumento: um tempo de atraso em milissegundos. ao


chamardemora(), O Arduino deixa de fazer qualquer coisa para a quantidade de tempo
especificado. Neste caso, você está atrasando o programa para 1000 ms,

ou 1 segundo. Isso resulta no LED ficar em durante 1 segundo antes de executar o próximo
comando.

9. Aqui, digitalWrite () é utilizado para ligar o LED off, definindo o estado


pin para BAIXO.

10. Mais uma vez, atrasar por 1 segundo para manter o LED no estado desligado antes de o loop se
repete e muda para o sobre o estado novamente.

Isso é tudo que existe para ela. Não se intimide se você não compreender totalmente
todo o código ainda. Como você juntar mais exemplos nos capítulos seguintes, você vai se tornar
cada vez mais proficiente em compreender o fluxo do programa, e escrever seu próprio código.

Resumo

Neste capítulo, você aprendeu sobre o seguinte:

■ T■odos os componentes que compõem uma placa Arduino

■C■omo o bootloader Arduino permite programar Arduino firmware através de uma conexão
USB

■ A■s diferenças entre as várias placas Arduino disponíveis

■ C■omo se conectar e instalar o Arduino com o seu sistema

■ C■omo carregar e executar o seu primeiro programa


Capítulo

Entradas, saídas digitais e


Pulse-Width Modulation

Peças que você vai precisar para este capítulo:

Arduino UnoSmall breadboardJumper


wires1 10kohms resistor3 220Ω
resistorsUSB cablePushbutton5mm LED de
cor única LED5mm common-cátodo RGB

CÓDIGO E CONTEÚDO DIGITAL PARA ESTE CAPÍTULO

downloads de código, vídeos e outros conteúdos digitais para este capítulo pode ser
encontrada em www.exploringarduino.com/content/ch2 .

Além disso, todos os códigos podem ser


encwownwtr.wadileays.ceomm/go/exploringarduino
na guia de transferência de código. O código está no download do capítulo 02 e indi-vidualmente
nomeado de acordo com os nomes de todo o capítulo.

19
2 parte I ■Arduino Engenharia

Piscar um LED é grande, como você aprendeu no capítulo anterior, mas o


que faz com que o microcontrolador Arduino plataforma é tão útil que o sistema
está
equipado com as entradas e saídas. Através da combinação de ambos, suas oportunidades são
quase ilimitadas. Por exemplo, você pode usar uma chave de palheta magnética para ouvir música
quando o seu porta se abre, crie um cofre eletrônico, ou construir um instrumento musical light-up!

Neste capítulo, você começa a aprender as habilidades que você precisa para construir projetos
como estes. Você explorar capacidade de entrada digital do Arduino, aprender sobre pullup
e pulldown resistências, e aprender a controlar saídas digitais. A maioria dos Arduinos
não têm saídas analógicas, mas é possível utilizar Modula-ção de largura de impulso digital para
emular em muitos cenários. Você aprende sobre a geração de sinais de largura de pulso modulada neste
capítulo. Você também vai aprender a Debounce comutadores digitais, uma habilidade fundamental
ao ler a entrada humana. No final do capítulo, você será capaz de construir e programar um RGB
controlável (Vermelho, Verde, Azul) nightlight LED.

NOTA oucanfollowalongwithavideoasIteachyouaboutdigitalinputsand
saídas, debouncing, andpulse-widthmodulation (PWM):www.jeremyblum.com/ 2011/01/10 / arduino-tutorial-2-agora-com-mais-blinky
/.YoucanalsofindthisvideoontheWileywebsiteshownatthebeginningofthischapter.

Ifyouwanttolearnmoreaboutsomeofthebasicsofelectricalengineeringtouchedoninthischapter, watchthisvideo:www.jeremyblum.com/2
basics-in-arduino-tutorial-3/.YoucanalsofindthisvideoontheWileywebsiteshownatthebeginningofthischapter.

DigitalOutputs

No Capítulo 1, "Getting Up e piscando com o Arduino", você aprendeu a piscar um LED.


Neste capítulo, você irá explorar ainda mais as capacidades de saída digital de Arduino,
incluindo os seguintes tópicos:

■D■efinindo pinos como saídas

F iação até componentes externos


■ ■

■N■ovos conceitos de programação, incluindo paraloops e constantes

■D■igital versus saídas e modulação por largura de pulso analógico (PWM)

WiringUpanLEDandUsingBreadboards

No Capítulo 1, você aprendeu a piscar o LED a bordo, mas o que diversão é isso? Agora é hora de
sacar a placa de ensaio e fio-se um LED externo ao pino 9 do seu Arduino. Adicionando este
LED externo será um trampolim para ajudar você a entender como conectar-se circuitos externos mais
complexas em
Capítulo ■ Entradas digitais, saídas e Pulse-Width 2

os próximos capítulos. Além do mais, o pino 9 é habilitado para PWM, o que lhe permitirá prosseguir
os exemplos de saída analógicos mais adiante neste capítulo.

Trabalhando com Breadboards

É importante entender como breadboards trabalhar de modo que você pode usá-los de forma eficaz p ara
os projectos neste livro. UMAplaca de ensaioé uma ferramenta de prototipagem simples que
facilmente lhe permite conectar-se circuitos simples sem ter que soldar juntos peças para uma placa de
circuito impresso costume. Primeiro, considere o azul e

linhas vermelhas que correm o comprimento da placa. Os pinos adjacentes a estes cor-
linhas codificadas são projetados para serem usados como ônibus de alimentação e terra. Todos os
pinos vermelhos são ligados electricamente, e são geralmente usados para o fornecimento de
energia. No caso da maioria dos Arduinos e os projetos neste livro, este será geralmente em 5V. Todos os
pinos de azul estão ligados electricamente e são utilizados para o bus de massa. Todos os pinos
alinhados verticalmente também estão conectados em fileiras, com uma divisão no meio para torná-
lo fácil de montar circuitos integrados na placa de ensaio. Figura 2-1 destaca como os pinos são
conectados eletricamente, com toda a espessura

linhas que representam furos conectados.

barramento de terra
área de prototipagem
barramento de energia

barramento de terra
barramento de energia

Figura 2-1: ligações eléctricas Breadboard


2 parte I ■Arduino Engenharia

LEDs de fiação

LEDs quase certamente será uma das peças mais usadas em seus projetos Ao longo de toda
este livro. LEDs são polarizados; Em outras palavras, não importa em que direção você ligá-los. O fio
positivo é chamado deanódioE o condutor negativo é chamado de cátodo. Se olharmos para a parte
superior transparente do diodo emissor de luz, não será normalmente uma superfície plana no bordo do
invólucro. Esse lado é o cátodo. Outra maneira de determinar de que lado está o ânodo e que é o
cátodo é examinando os leads. A vantagem mais curto é o cátodo.

Como você provavelmente já sabe, LED significa diodos emissores de luz. Como todos
diodos, LEDs permitem que a corrente flua em uma única direção-de sua anodo para o seu cátodo.
Dado que os fluxos de corrente de positivo para negativo, o ânodo do diodo emissor de luz deve ser ligado à
fonte de corrente (um sinal digital 5V, neste caso), e o cátodo deverá ser ligado à terra. O resistor pode
ser inserido em série em ambos os lados do LED. Resistores não são polarizados, e assim você não precisa
se preocupar com a sua orientação.

Você vai ligar o LED no pino 9 em série com um resistor. LEDs deve ser sempre
ligados em série com uma resistência para servir como um limitador de corrente. Quanto maior for a
resistência valor, mais ela restringe o fluxo de corrente e o dimmer o LED brilha.
Neste cenário, você usar um resistor 220Ω. Fio-lo para cima, como mostrado na Figura 2-2.
Imagem criada com o Fritzing.

Figura 2-2: Arduino Uno ligado a um LED


Capítulo ■ Entradas digitais, saídas e Pulse-Width 2

A LEI DE OHM ea equação PODER

ThemostimportantequationforanyelectricalengineertoknowisOhm'slaw.Ohm'slawdictatestherelationshipbetweenvoltage
( (measuredinohmsorΩ) inacir-cuit.Acircuitisaclosedloopwithasourceofelectricalenergy (likea9Vbat-tery) andaload
(somethi itisimportanttounderstandwhateachtermmeans, atleastatabasiclevel:

■ Voltagemrepresentsthepotentialelectricaldifferencebetweentwopoints.

■ Atualflowsfromapointofhigherpotentialenergytolowerpotentialenergy.Youcanthinkofcurrentasaflowofwater, andvolta
alwaysflowsfromhighelevation (highervolt-idade) tolowerelevation (solo, oralowervoltage) .Current,
likewaterinariver,

■ Resistência, Inthisanalogy, isrepresentativeofhoweasyitisforcur-renttoflow.Whenthewater (thecurrent) isflowingthro


lesscanpassthroughinthesameamountoftimeasthroughalargerpipe.Thenarrowpipeisequivalenttoahighresistancevalue
ough.Thewiderpipeisequivalenttoalowresistancevalue (likeawire) becausecur-

rentcanflowfreelythroughit.

Ohm'slawisdefinedasfollows:

V = IR

WhereVisVoltagedifferenceinvolts, IisCurrentinamps, andRistheResistanceinohms.

Inacircuit, allvoltagegetsusedup, andeachcomponentoffersupsome


resistancethatlowersthevoltage.Knowingthis,
theaboveequationcomesinhandyforthingslikefiguringoutwhatresistorvaluetomatchupwithanLED.LEDshaveapredefinedvolt
urrentvalue.ThelargerthecurrentthroughtheLED, thebrightertheLEDglows, uptoalimit.ForthemostcommonLEDs,
themaxim liampis1 / 1000ofanampandistypicallyabbreviatedasmA)
.ThevoltagedropacrossanLEDisdefinedinitsdatasheet.Acommonv

ConsidertheLEDcircuitshowninFigure2-3.
Imagem criada com o Águia

Figura 2-3: circuito simples


LED
Continuou
2 parte I ■Arduino Engenharia

contínuo

YoucanuseOhm'slawtodecideonaresistorvalueforthiscircuit.AssumethatthisisastandardLEDwith20mAforwardcurrentanda2V

dropacrossit.Becausethesourcevoltageis5Vanditendsatground, atotalof5Vmustdropacrossthiscircuit.SincetheLEDhasa2Vdrop,
theother3Vmustdropacrosstheresistor.Knowingthatyouwantapproxi-mately20mAtoflowthroughthesecomponents, youcanfindthere

R = V / IWhereV = 3VandI = 20mA.SolvingforR, R = 3V / 0.02A = 150Ω.So, witharesistorvalueof150Ω,

20mAflowsthroughboththeresistorandLED.Asyouincreasetheresis-tancevalue, lesscurrentisallowedtoflowthrough.220Ωisabitmoret
butstillallowstheLEDtoglowsufficientlybright, andisaverycom-monlyavailableresistorvalue.

Anotherusefulequationtokeepinmindisthepowerequation.Thepowerequationtellsyouhowmuchpower, inwatts, isdissipatedacros

resistivecomponent.Becauseincreasedpowerisassociatedwithincreasedheatdissipation,
componentsgenerallyhaveamaximumpowerrating.Youwanttoensurethatyoudonotexceedthemaximumpowerratingforresis-
torsbecauseotherwisetheymightoverheat.Acommonpowerratingforresistorsis1 / 8ofawatt (abbreviatedasW, milliwattsasmW)
.The

P = IV

WherePispowerinwatts, andIandVarestilldefinedasthecurrentandvoltage.Fortheresistordefinedearlierwithavoltagedropof3Vanda

20 mA, P = 3Vn0.02A = 60mW, wellundertheresistor'sratingof1 / 8W, or125mW.So,


youdonothavetoworryabouttheresistoroverhe

ProgrammingDigitalOutputs

Por padrão, todos os pinos do Arduino são definidos para entradas. Se você quer fazer um um pino
saída, você precisa primeiro informar o Arduino como o pino deve ser configurado. Na linguagem de
programação Arduino, o programa exige duas partes: a

configuração()e a loop ().


Como você aprendeu no Capítulo 1, o configuração()função é executada uma vez no início
do programa, e o loop ()função é executada uma e outra vez. Porque você geralmente vai dedicar cada
pino para servir tanto como uma entrada ou uma saída, é
Capítulo ■ Entradas digitais, saídas e Pulse-Width 2

prática comum para definir todos os seus pinos como entradas ou saídas na configuração. Você
começa a escrever um programa simples que define o pino 9 como uma saída e transforma-se
quando o programa é iniciado.

Para escrever este programa, utilize o pinMode ()comando para definir a direção
de pino 9 e uso digitalWrite () para fazer a saída alta (5V). Ver listagem 2-1.

Listagem 2-1: Ligando um-led.ino LED

const int LED = 9; // Define LED para a configuração do pin


9void ()

{
pinMode (LED, OUTPUT); // Definir o pino de LED como um outputdigitalWrite
(LED, HIGH); // Definir o pino de LED de alta

void loop ()
{
// Nós não estão fazendo nada no laço!
}

Carregar este programa em seu Arduino, com fio, como mostrado na Figura 2-2. Dentro
este programa, também notar que eu usei a constoperador antes de definir o
variável inteira pinos. Normalmente, você vai usar variáveis para armazenar valores que
podem mudar durante a execução do programa. Colocando
constantes de seu DEC- variável
declara-, você está dizendo ao compilador que a variável é "somente leitura" e não vai mudar
durante a execução do programa. Todas as instâncias de
CONDUZIUem seu programa
será "substituído" com 9quando eles são chamados. Quando você está definindo valores
que não vai mudar, usando o constqualificador é recomendado. Em algumas das
exemplos mais adiante neste capítulo, você vai definir variáveis não constantes que podem mudar
durante a execução do programa.

Você deve especificar o tipo para qualquer variável que você declarar. No precedente
caso, é um inteiro (pinos estará sempre inteiros), então você deve defini-lo como tal. Agora você pode
facilmente modificar este esboço para coincidir com o que você fez no Capítulo 1, movendo o digitalWrite ()

comando para o loop e adicionando alguns atrasos.


Experimentar com os valores de atraso e criar diferentes taxas piscam.

UsingForLoops

É frequentemente necessário usar loops com a mudança de valores das variáveis para ajustar os
parâmetros de um programa. No caso do programa que você acabou de escrever, você pode

implementar um paraloop para ver como diferentes taxas intermitentes impacto do seu
sistema operação. Você pode visualizar diferentes taxas intermitentes usando upmaraloop
para ciclo através de várias taxas. O código na Listagem 2-2 realiza isso.
2 parte I ■Arduino Engenharia

Listagem 2-2: LED com mudança Blink Rate-blink.ino

const int LED = 9; // Define LED para configuração 9void


Pin ()

{
pinMode (LED, OUTPUT); // Definir o pino de LED como uma saída
}

void loop ()
{
for (int i = 100; i <= 1000; i = i + 100)
{
digitalWrite (LED, HIGH); delay (i);
digitalWrite (LED, LOW); delay (i);

}
}

Compilar o código anterior e carregá-lo em seu Arduino. O que acontece?


Tome um momento para quebrar a paraloop para entender como ele funciona. o
paradeclaração de loop sempre contém três entradas separadas por ponto e vírgula:
■ A■primeira entrada define a variável de índice para o loop. Neste caso, o índice é variávelEue
está programado para começar em um valor de
100.

■A■segunda entrada especifica quando o loop deve parar. O conteúdo do loop será
executado uma e outra vez, enquanto que a condição é verdadeira.
<=
indica menos do que ou igual a. Assim, para este ciclo, o conteúdo irá continuar a executar,
enquanto a variável
Eué ainda inferior ou igual a 1000.

■A■entrada final especifica o que deve acontecer com a variável índice no final de cada execução
do loop. Nesse caso,
Euserá definido como seu valor atual
mais 100.

Para entender melhor estes conceitos, considere o que acontece em duas passagens
através de paraloop:

1. Eué igual a 100.

2. O LED está situado no alto, e permanece elevado para 100 ms, o valor atual deEu.

3. O LED é baixo, e permanece baixa para 100 ms, o valor atual de Eu.

4. No final do ciclo, Eué incrementado por 100, Por isso, é agora 200.

5. 200é inferior ou igual a 1000, De modo que o ciclo repete novamente.


6. O LED está situado no alto, e permanece elevado para 200ms, o valor atual de Eu.

7. O LED é baixo, e permanece baixa para 200ms, o valor atual de Eu.


Capítulo ■ Entradas digitais, saídas e Pulse-Width 2

8. No final do ciclo, Eué incrementado por 100, Por isso, é agora 300.

9. Este processo se repete até que Eusupera 1000ea função de laço externo repete,
preparando o Euvalor de volta para 100e de iniciar o processo de novo.

Agora que você gerou saídas digitais do seu Arduino, você aprenderá
sobre o uso de PWM para criar saídas analógicas de os pinos de I / O no seu Arduino.

Pulso-WidthModulationwithanalogWrite ()

Então, você domina controle digital de seus pinos. Isso é ótimo para piscar LEDs, controle relés, e
girando motores a uma velocidade constante. Mas o que se pretende reproduzir uma voltagem
diferente 0V ou 5V? Bem, você não-pode-se estiver a utilizar os pinos de digital para analógico
(DAC) na Due ou se estiver usando um chip DAC externo.

No entanto, você pode ficar muito perto de gerar valores de saída analógicos usando
um truque chamado modulação por largura de pulso(PWM). Seleccione pinos de cada Arduino pode
usar oanalogWrite ()comando para gerar sinais PWM que pode emular um sinal analógico puro, quando
utilizado com certos periféricos. Estes pinos são marcadas com um ~ na placa. No Arduino Uno, Pins
3, 5, 6, 9, 10, e 11 são pinos PWM. Se você estiver usando um Uno, você pode continuar a usar o circuito
da Figura 2-1 para testar oanalogWrite ()comando com o seu LED. Presumivelmente, se você

pode diminuir a tensão a ser lançadas através do resistor, o LED deve


brilham mais vagamente, porque menos corrente fluirá. Isso é o que você vai tentar realizar
usando PWM viaanalogWrite ()comando. oanalogWrite ()

comando aceita dois argumentos: o pino para controlar e o valor para escrever para ele.
A saída de PWM é um valor de 8 bits. Em outras palavras, você pode escrever os
valores de 0-28-1 Ou 0 a 255. Experimente usar um semeplahraanetsetrutura de loop para o
que você usou anteriormente para percorrer os valores de brilho diferentes (veja a Listagem 2-
3).

Listagem 2-3: LED desvanece-se Sketch-fade.ino

const int LED = 9; // Define LED para configuração


9void Pin ()

{
pinMode (LED, OUTPUT); // Definir o pino de LED como uma saída
}

void loop ()
{
for (int i = 0; i <256; i ++)
{
analogWrite (diodo emissor
de luz, i); atraso (10);
2 parte I ■Arduino Engenharia

}
for (int i = 255; i> = 0; i--)
{
analogWrite (diodo emissor
de luz, i); atraso (10);

}
}

O que faz o LED fazer quando você executar esse código? Você deve observar o LED
desaparecendo de desligado para ligado, em seguida, de ligado para desligado. Claro, porque isso
é tudo no circuito principal, este padrão se repete ad infinitum. Certifique-se notar algumas diferenças
nesteparaloop. No primeiro loop,
i ++é código apenas uma abreviação para repi r=esi e+n1ta. r
Similarmente, Eu--é funcionalmente equivalente a i = i-1. O primeiroparalaço desvanece-se
o LED para cima, eo segundo laço desvanece-lo para baixo.

controlo PWM pode ser usado em muitas circunstâncias, para emular con- analógico puro
controle, mas pode nem sempre ser usado quando você realmente precisa de um sinal analógico.
Por exemplo, PWM é ótimo para dirigir motores de corrente contínua (DC) em velocidades variáveis
(você experimentar com isso em capítulos posteriores), mas ele não funciona bem para a
condução de alto- falantes a menos que você completá-lo com alguns circuitos externos. Espere um
momento

para examinar como PWM realmente funciona. Considere os gráficos mostrados nas Figura 2-4.

Imagem criada com o

Figura 2-4: sinais PWM com ciclos variados

PWM funciona através da modulação do ciclo de trabalho de uma onda quadrada (que um sinal
liga e desliga). ciclo de trabalhorefere-se a percentagem de tempo em que uma onda quadrada é
alta versus baixa. Você provavelmente está mais familiarizado com ondas quadradas que

têm um ciclo de trabalho de 50% -que são elevados metade do tempo, e de baixo de metade do tempo.
Capítulo ■ Entradas digitais, saídas e Pulse-Width 2

o analogWrite ()comando define o ciclo de uma onda quadrada, dependendo


no valor que você passar para ele:

■ E■screvendo um valor de 0 com analogWrite ()indica uma onda quadrada com


uma ciclo de trabalho de 0 por cento (sempre baixa).

■ E■screvendo um 255 indica uma onda quadrada com um ciclo de trabalho de 100 por cento
(sempre alto).

■ E■screvendo um 127 indica uma onda quadrada com um ciclo de trabalho de 50 por cento
(Alta metade do tempo, de baixo metade do tempo).

Os gráficos na Figura 2-4 mostram que, para um sinal com um ciclo de funcionamento de 25 por cento,
é elevada de 25 por cento do tempo, e de baixo 75 por cento do tempo. A frequência desta onda
quadrada, no caso do Arduino, é de cerca de 490Hz. Em outras palavras, o sinal varia entre alta (5V) e
baixo (0V) cerca de 490 vezes por segundo.

Então, se você não está realmente mudando a tensão a ser entregue a um LED,
Por que você vê-lo chegar dimmer como você diminuir o ciclo de trabalho? É realmente um resultado
de seus olhos jogando um truque em você! Se o LED é ligar e desligar a cada 1ms (que é o caso com um
ciclo de trabalho de 50 por cento), parece estar a funcionar a cerca de metade do brilho porque ele
está a piscar mais rápido do que os olhos podem perceber. Portanto, o seu cérebro realmente calcula a
média do sinal e truques você em acreditar que o LED está a funcionar com metade do brilho.

ReadingDigitalInputs

Agora é o momento para o outro lado da equação. Você conseguiu com sucesso
gerarambos (ish) saídas digitais e analógicas. O próximo passo éler digital
insumos, tais como interruptores e botões, para que você possa interagir com o seu projeto em tempo
real. Nesta seção, você aprende a ler entradas, implementar pullup e resistências suspenso e Debounce
um botão no software.

ReadingDigitalInputswithPulldownResistors

Você deve começar por modificar o circuito que você construiu o primeiro a partir da Figura 2-1.
Seguindo Figura 2-5, você poderá adicionar um botão e uma con- pulldown resistor
conectado a um pino de entrada digital.

DICA Besuretoalsoconnectthepowerandgroundbusesofthebreadboardto
theArduino.Nowthatyou'reusingmultipledevicesonthebreadboard, thatwillcomeinhandy.

Antes de escrever o código para ler a partir do botão, é importante


compreender a importância do resistor suspenso usado com este circuito. Quase
3 parte I ■Arduino Engenharia

todas as entradas digitais usar um pullup ou resistor suspenso para definir o "estado padrão" do pino de
entrada. Imagine que o circuito na Figura 2-5, sem o resistor de 10k. Neste cenário, o pino seria
obviamente ler um valor elevado quando o botão é pressionado.

Mas, o que acontece quando o botão não está sendo pressionado? Nesse cenário, o
entrada pino que você estaria lendo está essencialmente ligada a nada-a entrada pino é dito ser " flutuante".
E porque o pino não está fisicamente conectado ao 0V ou 5V, lê-lo poderia causar resultados
inesperados, como o ruído elétrico no pinos nas proximidades faz com que a sua valor a oscilar entre
alta e baixa. Para remediar esta situação, o resistor suspenso é instalado como mostrado na Figura 2-5.

Agora, considere o que acontece quando o botão não está pressionado com o pull
para baixo resistor no circuito: O pino de entrada serão conectados através de uma 10k
resistor à terra. Enquanto a resistência irá restringir o fluxo de corrente, há
ainda o fluxo de corrente é suficiente para assegurar que o pino de entrada irá ler um valor lógico baixo. 10k
é um valor bastante comum resistor suspenso. Valores maiores são disse a serpulldowns fracos porque
é mais fácil superá-los, e valores de resistência menores estão a ser dito pulldowns fortesporque é
mais fácil para o mais corrente flua através deles para o solo. Quando o botão é pressionado, o pino de
entrada está directamente ligado a 5V através do botão.

Agora, a corrente tem duas opções:

■ E■le pode fluir através de um caminho quase zero, resistência ao carril de 5V.

■ E■le pode fluir através de um caminho de alta resistência à barra de terra.


Imagem criada com o Fritzing.

Figura 2-5: Fiação um Arduino para um botão e um LED


Capítulo ■ Entradas digitais, saídas e Pulse-Width 3

Lembre-se a partir da barra lateral anterior sobre a lei de Ohm e a equação de poder que
actual terá sempre segue o caminho da menor resistência de um circuito. Neste cenário, a maioria da
corrente flui através do botão, e um nível lógico alto é gerado no pino de entrada, porque que é o
caminho de menor resistência.

NOTA hisexampleusesapulldownresistor, butyoucouldalsouseapullup

resistorbyconnectingtheresistorto5Vinsteadofgroundandbyconnectingtheothersideofthebuttontoground.Inthissetup, theinput
logicvaluewhenthebuttonisunpressedandalow logicvaluewhenthebuttonisbeingpressed.

Suspenso e pullup resistências são importantes porque garantem que o


botão não criar um curto-circuito entre 5V e chão quando pressionado e que o pino de entrada nunca
é deixado em um estado flutuante.

Agora é hora de escrever o programa para este circuito! Neste primeiro exemplo, você
só tem o LED permanece aceso enquanto o botão é pressionado, e você tem que ficar fora enquanto o
botão é unpressed (consulte a Listagem 2-4).

Listagem 2-4: Controle LED simples com um botão-led_button.ino

const int LED = 9; // O LED está ligado ao pino 9const int BUTTON = 2; // O
botão está ligado ao pino 2

void setup ()
{
pinMode (LED, OUTPUT); // Definir o pino de LED como um outputpinMode (Button,
entradas); // Conjunto de botão como entrada (não obrigatório)

void loop ()
{
if (digitalRead (BOTÃO) == LOW)
{
digitalWrite (LED, LOW);
}
outro
{
digitalWrite (LED, HIGH);
}
}

Note aqui que o código implementa alguns novos conceitos, incluindo


digitalReade E se/outrodeclarações. Um novoconst intdeclaração foi
acrescentado para o pino do botão. Além disso, este código define o pino do botão como entrada
no configuraçãofunção. Este não é explicitamente necessário, no entanto, porque os pinos
são entradas por padrão; ele é mostrado para ser completo. digitalRead () lê o
3 parte I ■Arduino Engenharia

valor de uma entrada. Neste caso, é a leitura do valor da BOTÃOpino. Se o


botão estiver sendo pressiondaigdiota,lRead () retorna um valor de ALTOou 1. Se não
estiver
sendo pressionado, ele retorna BAIXOou 0. Quando colocado naE se()declaração, você está verificando o
estado do pino e avaliar se ele corresponde a condição de que você declarou. NissoE se()declaração,
você está verificando para ver se o valor retornado pelo

digitalRead () é BAIXO. o==é um operador de comparação que testa se o


primeiro item (digitalRead () ) É igual à segunda ( BAIXO). Se isso for verdadeiro (isto é, o
botão não está sendo pressionado), o código dentro dos parênteses executa, eo LED definido para
BAIXO. Se este não é verdadeira (o botão estiver premido), o

executado, e o LED é ligado outrodeclaração é

ALTO.
É isso aí! Programar o circuito com este código e confirmar que ele funciona como
esperado.

Workingwith "saltitantes" Botões

Quando foi a última vez que você teve que segurar um botão para baixo para manter uma luz acesa?
Provavelmente nunca. Faz mais sentido de ser capaz de clicar no botão uma vez para ligá-lo e clique no
botão novamente para desligá-lo. Dessa forma, você não tem que segure o botão para baixo para
manter a luz acesa. Infelizmente, isso não é tão fácil como se poderia primeira adivinhar. Você não pode
apenas olhar para o valor da chave para a mudança

de baixo para cima; você precisa se preocupar com um fenômeno chamadoalternar saltando.
Os botões são dispositivos mecânicos que funcionam como um sistema de mola-amortecedor. Dentro
outras palavras, quando você aperta um botão para baixo, o sinal de que você lê não apenas ir de
baixo para cima, ele salta para cima e para baixo entre esses dois estados por alguns milésimos de
segundo antes de ser assentada. Figura 2-6 ilustra o comportamento esperado ao lado do
comportamento real que você pode ver quando sondando o botão usando um

osciloscópio (embora este valor foi gerado usando um script de MATLAB): Imagem criada com o

Figura 2-6: Saltando efeitos de botão.

O botão é pressionado fisicamente na marca de 25ms. Você esperaria que o


estado do botão ao ser imediatamente lido como um nível lógico alto como o gráfico do lado esquerdo
Capítulo ■ Entradas digitais, saídas e Pulse-Width 3

mostra. No entanto, o botão realmente salta para cima e para baixo antes de se estabelecer, como o
gráfico à direita mostra.

Se você sabe que a chave vai fazer isso, é relativamente simples


para lidar com isso no software. Em seguida, você escrever software-switch debouncing que procura
uma mudança de estado de botão, aguarda a saltar ao fim, e, em seguida, lê o estado interruptor
novamente. Esta lógica do programa pode ser expressa como se segue:

1. Loja um estado botão anterior e um estado atual do botão


(inicializado para BAIXO).

2. Leia o estado atual do botão.

3. Se o estado atual do botão diferente do estado botão anterior, espere 5ms porque o botão deve
ter mudado de estado.

4. Depois de 5ms, reler o estado de botão e usar isso como o estado atual do botão.

5. Se o estado do botão anterior era baixa, e o estado atual do botão é alta, alternar o estado LED.

6. Defina o estado do botão anterior para o estado atual do botão.

7. Volte para o passo 2.

Esta é uma oportunidade perfeita para explorar o uso funções pela primeira vez.
Funções são blocos de código que podem aceitar argumentos de entrada, executar código
com base nesses argumentos, e retornar opcionalmente um resultado. Sem perceber, você já foi
usando funções pré-definidas ao longo de seus programas. Por exemplo,digitalWrite ()

é uma função que aceita um pino e um estado, e escreve


esse estado ao pino de dado. Para simplificar o seu programa, você pode definir suas próprias
funções para encapsular as ações que você faz uma e outra vez.

Dentro do fluxo do programa (listados nas etapas anteriores) é uma série de repetibilidade
ing etapas que precisam ser aplicados a mudança de valores variáveis. Porque você vai querer
Debounce repetidamente o valor da chave, é útil para definir os passos para debouncing como uma
função que pode ser chamado a cada vez. Esta função irá aceitar o estado botão anterior como
entrada e gera o estado do botão filtrada por corrente. O programa a seguir realiza as etapas anteriores
e muda o estado de LED cada vez que o botão é pressionado. Você vai usar o mesmo circuito que o
exemplo anterior para este. Tentar carregá-lo para o seu Arduino e ver como ele funciona (ver Listagem
2-5).

Listagem 2-5: Botão filtrada por Alternando-debounce.ino

const int LED = 9; // O LED está ligado ao pino 9const int BUTTON = 2; // O
botão está ligado ao pino 2boolean lastButton = LOW; // Variável contendo o
botão // anterior stateboolean currentButton = LOW; // Variável contendo o
estado do botão // atual
3 parte I ■Arduino Engenharia

boolean Ledon = false; // O atual estado do LED (on / off)

void setup ()
{
pinMode (LED, OUTPUT); // Definir o pino de LED como um outputpinMode (Button,
entradas); // Conjunto de botão como entrada (não obrigatório)

/*
* Função Debouncing
* Passe-o estado do botão anterior,
* E voltar o estado do botão filtrada por corrente.
*/
boolean debounce (boolean passado)
{
boolean atual = digitalRead (botão); // Leia o botão stateif (durar! = Atual) // se ele é
diferente ...

{
atraso (5); // Espera 5mscurrent = digitalRead (botão); // Lê-lo novamente

voltar corrente; // Retorna o valor atual


}

void loop ()
{
currentButton = estabilização (lastButton); // Lê stateif deboucned (lastButton == LOW
&& currentButton == HIGH) // se ele foi pressionado ...

{
Ledon = Ledon!; // Alternar o valor LED
}
lastButton = currentButton; // Redefinir valor botão

digitalWrite (LED, Ledon); // Alterar o estado de LED

Agora, quebrar o código na Listagem 2-5. Em primeiro lugar, os valores constantes são definidas
para os pinos ligados ao botão e LED. Em seguida, três booleanavariáveis estamos
declarado. Quando oconstqualificador não é colocado antes uma declaração de variável, você está
indicando que essa variável pode mudar dentro do programa. por defin-

ing estes valores no topo do programa, você está declarando-os como global variáveis que podem
ser utilizados e modificados por qualquer função dentro deste esboço.

As três variáveis booleanas declarados no topo deste esboço são inicializado assim, o que significa
que eles foram fixados para um valor inicial (
BAIXO, BAIXOe falso
respectivamente). Mais tarde no programa, os valores destas variáveis pode ser alterado com um operador
de atribuição (um único sinal de igual:
=).
Capítulo ■ Entradas digitais, saídas e Pulse-Width 3

Considere a definição da função no código anterior: boolean debounce (boolean

último). Esta função aceita um valor booleano (um tipo de dados que tem apenas dois estados: true /
false, alto / baixo, on / off, variável 1/0) de entrada chamadúaltimoe retorna um valor booleano
valor que representa o valor pin filtrada por corrente. Esta função compara o estado atual do botão
com o anterior (
último) Estado de botão que foi passado
a ele como um argumento. o! =representa a desigualdade e é usado para comparar as actuais e
anteriores valores dos botões no
E sedeclaração. Se eles forem diferentes, então o
botão deve ter sido pressionado eo E sedeclaração irá executar o seu conteúdo.
o E sedeclaração aguarda 5ms antes de verificar o estado do botão novamente. Este 5ms dá tempo
suficiente para que o botão para parar de saltar. O botão é então verificada

novamente para determinar o seu valor estável. Como você aprendeu anteriormente, as funções podem,
opci retornar valores. No caso de esta função, o corrente de retornoinstrução retorna
o valor do atualvariável booleana quando a função é chamada. atual
é um localvariável é declarada e usada apenas dentro da função de estabilização. Quando a função de
estabilização é chamado a partir do loop principal, o valor retornado é escrito para oglobal

currentButtonvariável que foi definida na parte superior do


esboço. Uma vez que a função foi definida como debounce, Você pode chamar a
função por escrito currentButton = estabilização (lastButton) de dentro do
configuraçãoou

laçofunções. currentButtonserá definido igual ao valor que é devolvido


pelo a debouncefunção.
Depois de chamar a função e preenchido o currentButtonvariável,
você pode facilmente compará-lo com o estado do botão anterior,
utilizandoEosedeclaração no código. o&&é um operador lógico que significa "E". Juntando-
se dois ou
mais declarações de igualdade com um &&numa E sedeclaração, você está indicando
que o conteúdo do E sebloco de instrução deve ser executado somente se ambos do
igualdades avaliar a verdade. Se o botão foi anteriormente BAIXO, E é agora ALTO,
você pode assumir que o botão foi pressionado, e você pode inverter o valor
do Ledonvariável. Ao pôr!na frente do Ledonvariável, você redefinir a variável para o oposto do que é
atualmente. O ciclo é finalizado por atualizar a variável botão anterior e escrever o estado LED
atualizado.

Este código deve alterar o estado de LED cada vez que o botão é pressionado. E se
tentar fazer a mesma coisa sem debouncing o botão, você vai encontrar os resultados imprevisíveis,
com o LED, por vezes, funcionando como esperado e às vezes não.

BuildingaControllableRGBLEDNightlight

Neste capítulo, você aprendeu como controlar saídas digitais, como ler botões filtrada por, e como
usar PWM para alterar o brilho de LED. Usando essas habilidades, agora você pode ligar um LED
RGB e um botão filtrada por dar um ciclo
3 parte I ■Arduino Engenharia

através de algumas cores para uma lâmpada LED RGB controlável. É possível misturar as cores RGB
com um diodo emissor de luz, alterando o brilho de cada cor.

Neste cenário, você usa um cátodo comum LED. Isso significa que o diodo emissor de luz tem
quatro pistas. Um deles é um pino do cátodo que é compartilhado entre todos os três diodos, enquanto
os outros três pinos de conexão com os ânodos de cada cor diodo. Fio que levaram a três pinos
PWM através de resistores limitadores de corrente no Arduino

como mostrado no diagrama de fiação na Figura 2-7.

Imagem criada com o Fritzing.

Limitador de corrente LED RGB Botão Puxar para baixo


resistores resistência

Figura 2-7: diagrama de fiação Nightlight

Você pode configurar um botão filtrada por para percorrer uma seleção de cores
cada vez que você pressiona-lo. Para fazer isso, é útil para adicionar uma função adicional para
Capítulo ■ Entradas digitais, saídas e Pulse-Width 3

definir o LED RGB para o próximo estado no ciclo de cor. No programa seguinte (veja a Listagem 2-6), defini
sete estados totais de cores, além de um fora do estado para o LED. usando oanalogWrite ()função, você
pode escolher suas próprias combinações de mistura de cores. A única alteração ao

loop ()a partir do exemplo anterior é que


em vez de lançar um único estado LED, um contador de estado LED é incrementado cada vez que o
botão é pressionado, e é reposto a zero quando você percorrer todas as opções. Carregar este para o seu
Arduino conectado ao circuito que você acabou de construir e aproveitar a sua luz noturna. Modificar os
estados de cor, alterando os valores deanalogWrite ()para fazer suas próprias opções de cores.

Listagem 2-6: Alternando LED Nightlight-rgb_nightlight.ino

const int BLED = 9; LED // azul no Pin 9const int GLED = 10; LED // Verde
sobre Pin 10const int RLED = 11; LED // vermelha no Pin 11const int
BUTTON = 2; // O botão está ligado ao pino 2

boolean lastButton = LOW; // Último botão Stateboolean


currentButton = LOW; // Botão atual Stateint ledMode = 0; // Ciclo
entre estados do LED

void setup ()
{
pinMode (Bled, OUTPUT); LED // Set Azul como OutputpinMode (GLED, OUTPUT); LED
// Set Verde como OutputpinMode (RLED, OUTPUT); LED // Set Vermelho como
OutputpinMode (Button, entradas); // Conjunto de botão como entrada (não
obrigatório)

/*
* Função Debouncing
* Passe-o estado do botão anterior,
* E voltar o estado do botão filtrada por corrente.
*/
boolean debounce (boolean passado)
{
boolean atual = digitalRead (botão); // Leia o botão stateif (durar! = Atual) // se
ele é diferente ...

{
atraso (5); // Espera 5mscurrent = digitalRead (botão); // Lê-lo novamente

}
voltar corrente; // Retorna o valor atual
}

/*
* Seleção do Modo de LED
* Passe um número para o Estado LED e defini-lo em conformidade.
*/
vazio setMode (modo int)
3 parte I ■Arduino Engenharia

{
// REDif (modo == 1)

{
digitalWrite (RLED, HIGH);
digitalWrite (GLED, LOW);
digitalWrite (Bled, LOW);

}
// GREENelse se (modo ==
2)

{
digitalWrite (RLED, LOW);
digitalWrite (GLED, HIGH);
digitalWrite (Bled, LOW);

}
// BLUEelse se (modo == 3)

{
digitalWrite (RLED, LOW);
digitalWrite (GLED, LOW);
digitalWrite (Bled, HIGH);

}
// ROXO (RED + AZUL) if
(modo == 4)

{
analogWrite (RLED, 127);
analogWrite (GLED, 0); analogWrite
(Bled, 127);

}
// TEAL (AZUL + VERDE) else
if (modo == 5)

{
analogWrite (RLED, 0); analogWrite
(GLED, 127); analogWrite (Bled,
127);

}
// Laranja (verde + vermelho)
else if (modo == 6)

{
analogWrite (RLED, 127);
analogWrite (GLED, 127);
analogWrite (Bled, 0);

}
// BRANCO (verde + vermelho + AZUL)
else if (modo == 7)

{
analogWrite (RLED, 85);
analogWrite (GLED, 85);
analogWrite (Bled, 85);

}
Capítulo ■ Entradas digitais, saídas e Pulse-Width 3

// OFF (mode = 0) else

{
digitalWrite (RLED, LOW);
digitalWrite (GLED, LOW);
digitalWrite (Bled, LOW);

}
}

void loop ()
{
currentButton = estabilização (lastButton); // Lê stateif deboucned (lastButton == LOW &&
currentButton == HIGH) // se ele foi pressionado ...

{
ledMode ++; // Incrementar o valor LED
}
lastButton = currentButton; // Redefinir valor botão // se tiver um ciclo através
das diferentes opções, // repor o contador a 0if (ledMode == 8) ledMode = 0;
setMode (ledMode); // Alterar o estado de LED

Isto pode parecer um monte de código, mas não é nada mais do que um conglomera-
ção de trechos de código que você já tenha escrito ao longo deste capítulo.
De que outra forma você pode modificar esse código? Você pode adicionar botões adicionais para
controlar, independentemente, uma das três cores. Você também pode adicionar modos
intermitentes, usando o código a partir do capítulo 1, que piscou o LED. As possibilidades são ilimitadas.

Resumo

Neste capítulo, você aprendeu sobre o seguinte:

■ C■omo a placa de ensaio funciona

■ C■omo escolher um resistor a corrente limite de um LED

■ C■omo fio um LED para o seu Arduino externa

■ C■omo usar PWM para escrever valores "analógicos" para LEDs

■ C■omo ler um botão

■ C■omo Debounce um botão

■ C■omo usar paralacetes

■ C■omo utilizar pullup e resistências suspensos


Capítulo

Leitura Sensores analógicos

Peças que você vai precisar para este capítulo

Arduino UnoSmall breadboardJumper wires10kΩ potentiometer10kΩ resistor


(n2) resistor 220Ω (n3) sensor de temperatura cablePhotoresistorTMP36 USB
(ou qualquer outro sensor analógico 5V) 5mm common-catodo LED RGB

CÓDIGO E CONTEÚDO DIGITAL PARA ESTE CAPÍTULO

downloads de código, vídeo e outros conteúdos digitais para este capítulo pode ser encontrada em
www.exploringarduino.com/content/ch3 .

Além disso, todos os códigos podem ser


ewnwcwo.nwtirleayd.caosme/gmo/exploringarduinoem
a guia de transferência de código. O código está no capítulo 03 de download e individu-aliado
nomeado de acordo com os nomes de todo o capítulo.

41
4 parte I ■Arduino Engenharia

O mundo ao seu redor é analógico. Mesmo que você pode ouvir que o mundo
"vai digital", a maioria das características observáveis em seu ambiente
será sempre analógico na natureza. O mundo pode assumir um número infinito de estados potenciais,
se você está considerando a cor da luz solar, a tempera-tura do oceano, ou a concentração de
contaminantes no ar. Este capítulo centra-se no desenvolvimento de técnicas para a discretização
dessas infinitas possibilidades em valores digitais palatáveis que podem ser analisadas com um
sistema de microcontrolador como o Arduino.

Neste capítulo, você vai aprender sobre as diferenças entre analógico e


sinais digitais e como converter entre os dois, assim como um punhado de os sensores analógicos
que você pode interagir com o Arduino. Usando as habilidades que adquiriu no capítulo anterior, você irá
adicionar sensores de luz para ajustar automaticamente a sua luz noturna. Você também vai
aprender como enviar dados analógicos do seu Arduino ao computador através de uma conexão USB
para serial, o que abre enormes possibilidades para o desenvolvimento de sistemas mais
complexos que podem transmitir dados ambientais para o seu computador.

NOTA oucanfollowalongwithavideoasIteachyouaboutreadingfromanalog
entradas:entradas www.jeremyblum.com/2011/01/24/arduino-tutorial-4-analog-~~number=plural
/.YoucanalsofindthisvideoontheWileywebsiteshownatthebeginningofthischapter.

Ifyouwanttolearnmoreaboutthedifferencesbetweenanaloganddigitalsig-nais, checkoutthisvideothatexplainseachindepth:www.jeremy
obter-digital ou analógico /.YoucanalsofindthisvideoontheWileywebsiteshownatthebeginningofthischapter.

UnderstandingAnalogandDigitalSignals

Se você deseja que os seus dispositivos de interface com o mundo, eles serão inevitavelmente
com interface de dados analógicos. Considere os projetos que você completou na preced-
ing capítulo. Você usou um interruptor para controlar um LED. Um switch é um insumo-it digital tem
apenas dois estados possíveis: ligado ou desligado, altas ou baixas, 1 ou 0, e assim por diante. A
informação digital (o computador ou os processos Arduino) é uma série de dados binários (ou
digitais). Cada bit só tem um de dois valores.

O mundo ao seu redor, no entanto, raramente expressa informações em apenas dois


maneiras. Tome um olhar para fora da janela. O que você vê? Se é de dia, você prov-habilmente ver luz
solar, árvores que balançavam ao vento, e talvez carros que passavam ou pessoas caminhando ao
redor. Todas essas coisas que você percebe não podem ser facilmente classificados como dados
binários. A luz solar não está ligado ou desligado; seu brilho varia ao longo de um dia. Da mesma
forma, o vento não tem apenas dois estados; rajadas que em velocidades diferentes todo o tempo.
Capítulo ■ Leitura Sensores analógicos

ComparingAnalogandDigitalSignals

Os gráficos na Figura 3-1 mostra como os sinais analógicos e digitais de comparação uns com os
outros. À esquerda é uma onda quadrada que varia entre apenas dois valores: 0 e 5 volts. Assim
como com o botão que você usou no capítulo anterior, esse sinal é apenas uma "alta lógica" ou valor
"lógico baixo". À direita é parte de uma onda de co-seno. Embora seus limites ainda são 0 e 5
volts, o sinal assume um infinito

número de valores entre estas duas tensões.

Imagem criada com o


Figura 3-1: Sinais analógicos e digitais

Os sinais analógicos são aqueles que não podem ser classificados de forma discreta; eles variar dentro
um intervalo, teoricamente assumir um número infinito de valores possíveis dentro desse intervalo.
Pense sobre a luz solar como um exemplo de uma entrada analógica você pode querer medir.
Naturalmente, há uma gama razoável sobre o qual você pode medir a luz solar. Muitas vezes,
medido em lux, ou fluxo luminoso por unidade de área, você pode razoavelmente esperar para
medir valores entre 0 lux (para breu) e

130.1 lux na luz solar direta. Se o dispositivo de medição eram infinitamente preciso, você
poderia medir um número infinito de valores entre os dois. uma coberta

configuração pode ser de 400 lux. Se fosse ligeiramente mais brilhante, pode ser 401 lux, em seguida,
401.1
Lux, em seguida, 401,11 lux, e assim por diante. Um sistema de computador nunca poderia viabilizar
medir um número infinito de casas decimais para um valor analógico porque a memória e poder de
computador devem ser valores finitos. Se for esse o caso, como você pode interagir seu Arduino com o
"mundo real?" A resposta é analógico-digital converter-ers (ADC), que pode converter valores analógicos
em representações digitais com uma quantidade finita de precisão e velocidade.
4 parte I ■Arduino Engenharia

ConvertinganAnalogSignaltoaDigitalOne

Suponha que você quer medir o brilho do seu quarto. Presumivelmente, um sensor de luz boa poderia
produzir uma tensão de saída que varia, que muda com o brilho do ambiente. Quando é escuro como
breu, o dispositivo de saída 0V, e quando ele está completamente saturado pela luz, que seria saída de
5V, com valores em entre correspondente à quantidade variável de luz. Isso é tudo muito bem, mas
como é que você vai ler esses valores com um Arduino para descobrir o quão brilhante o quarto é?
Você pode usar o conversor analógico-digital do Arduino (ADC) pinos para converter valores de
tensão analógico em número de representações que você pode trabalhar com.

A precisão de um ADC é determinada pela resolução. No caso de o


Arduino Uno, não há um ADC de 10 bits para fazer as suas conversões analógicas. "10-bit" significa
que o ADC pode subdividir (ou quantizar) um sinal analógico em dois 10
dife-
valores rentes. Se você fizer as contas, você vai descobrir1q0 u=e12,024; Assim, o Arduino
pode atribuir um valor de 0 a 1023 para qualquer valor analógico que você dá a ele. Apesar
é possível alterar a tensão de referência, você estará usando o padrão 5V
referência para o trabalho analógico que você faz neste livro. A tensão de referência determina a tensão
máxima que você está esperando, e, portanto, o valor que será mapeado para 1023. Assim, com uma
tensão de referência de 5V, colocando 0V em um pino ADC retorna um valor de 0, 2.5V retorna um valor
de 512 (metade do 1023) e 5V retorna um valor de 1023. Para entender melhor o que está acontecendo
aqui, considere

que um de 3 bits ADC faria, como mostrado na Figura 3-2.

Imagem criada com o

Figura 3-2: quantização analógico de 3 bits


Capítulo ■ Leitura Sensores analógicos

NOTA youwanttolearnmoreaboutusingyourownreferencevoltageor
usingadifferentinternalvoltagereference, checkouttheanalogReference ()pageontheArduinowebsite:www.arduino.cc/en/Refere

3
A ADC 3-bit tem 3 bits de resolução. porque 2 = 8, existem oito ní- total de lógica
ELS, de 0 a 7. Portanto, qualquer valor analógico que é passada para um 3-bit ADC terá que ser
atribuído um valor de 0 a 7. Observando a Figura 3-2, pode ver que os níveis de tensão são convertidos
em discreta valores digitais que podem ser utilizados pelo microcontrolador. Quanto maior a resolução,
mais passos que estão disponíveis para representar cada valor. No caso de o Arduino Uno, existem
passos, em vez de 1024 a 8 mostrado aqui.

ReadingAnalogSensorswiththeArduino: analogRead ()

Agora que você entende como converter sinais analógicos em valores digitais,
você pode integrar esse conhecimento em seus programas e circuitos. Arduinos diferentes têm
diferentes números de pinos de entrada analógica, mas você lê-los todos da mesma maneira,
usando o
analogRead ()comando. Primeiro, você vai experimentar com
um potenciómetro e um sensor análogo embalados. Então, você vai aprender como divisores de tensão
funcionam, e como você pode usá-los para fazer seus próprios sensores analógicos a partir de
dispositivos que variam sua resistência em resposta a algum tipo de entrada.

ReadingaPotentiometer

O sensor analógico mais fácil de ler é um potenciômetro simples (uma panela, para abreviar).
As probabilidades são que você tem toneladas destes em torno de sua casa, em seus aparelhos de som, alto-
fal termostatos, carros e em outros lugares. Potenciômetros são divisores de tensão variáveis (discutidas
mais adiante neste capítulo) que se parecem com botões. Eles vêm em lotes de tamanhos e formas,
mas todos eles têm três pinos. Que ligar um dos pinos exteriores para a terra, e o outro para a 5V.
Potenciômetros são simétricas, por isso não importa de que lado você conectar o 5V e terra para. Você
conectar o pino do meio para entrada analógica 0 no seu Arduino. Figura 3-3 mostra como ligar
corretamente o potenciômetro para um Arduino.

Como você gira o potenciômetro, você pode variar a tensão que você está alimentando
entrada analógica 0 entre 0V e 5V. Se você quiser, você pode confirmar isso com um multímetro no
modo de medição de tensão, ligando-o como mostra a Figura 3-4 e lendo a exposição como você girar o
botão. O vermelho sonda (positivo) deve ser ligado ao pino do meio, eo negro sonda (negativa)
deve ser con- conectado a qualquer lado é ligado à terra. Note-se que o seu potenciômetro e multímetro
pode ser diferente do que é mostrado aqui.
4 parte I ■Arduino Engenharia

Imagem criada com o Fritzing.

Figura 3-3: circuito potenciómetro

Antes de usar o potenciômetro para controlar outra peça de hardware, use o


funcionalidade de comunicação serial do Arduino para imprimir valor ADC do potenciômetro no
seu computador como ela muda. Use o
analogRead ()função
para ler o valor do pino analógico ligado ao Arduino eo Serial

.println () funcionam para imprimi-la no monitor serial Arduino IDE. Comece por
ESCRITO ing e carregar o programa na Listagem 3-1 no seu Arduino.
Capítulo ■ Leitura Sensores 4

Figura 3-4: medição multímetro

Listagem 3-1: Potenciômetro de Reading Sketch-pot.ino

// Programa de Leitura de potenciômetros

const int POT = 0; // Pot on 0int pino analógico val = 0; // Variável para manter a
leitura analógica do POT

void setup ()
{
Serial.begin (9600);
}

void loop ()
{
val = analogRead (POT);
Serial.println (val); atraso (500);

}
4 parte I ■Arduino Engenharia

Você vai investigar a funcionalidade da interface serial mais nos próximos capítulos.
Por enquanto, apenas estar ciente de que a interface serial para o computador deve ser iniciado em
a configuração. Serial.begin () Recebe um argumento que especifica a comunicação
velocidade ou taxa de transmissão. otaxa de transmissãoespecifica o número de bits a serem transferidos
por segundo. taxas de transmissão mais rápidas permitem-lhe transmitir mais dados em menos tempo,
mas também pode introduzir erros de transmissão em alguns sistemas de comunicação. 9600 é um valor
comum, e é o que você usa ao longo deste livro.

Em cada iteração através do loop, o valvariável é definida como o valor


presente que os relatórios ADC de pino analógico 0. O analogRead ()comando

requer
o número do pino ADC a ser passado para ela. Neste caso, é 0, porque isso é
o que você enganchou o potenciômetro até. Você também pode passar A0, embora a
analogRead ()Função sabe você deve estar passando um número de pinos analógico,
então você pode passar 0como abreviação. Depois de o valor foi lido (um número entre
0e 1023), Serial.println () impressões que valor ao longo de série para o computador
de
terminal série, seguido por uma "nova linha" que avança o cursor para a próxima linha. O loop, em
seguida, atrasos por meio segundo (de modo que os números não rolar mais rápido do que você pode
lê- los), eo processo se repete.

Depois de colocar essa informação em seu Arduino, você notará que o LED de TX no seu
Arduino pisca a cada 500ms (pelo menos deveria ser). Este LED indica que o Arduino está transmitindo
dados através da ligação USB ao terminal serial no seu computador. Você pode usar uma variedade
de programas de terminal para ver o que o seu Arduino está enviando, mas o Arduino IDE
convenientemente tem um construído na direita!

Clique no botão circulado mostrado na Figura 3-5 para iniciar o monitor serial.

Figura 3-5: botão de série do monitor


Capítulo ■ Leitura Sensores 4

Depois de lançar o monitor serial, você deverá ver uma janela com números
streaming de perto. Gire o botão e você verá os números de ir para cima e para baixo para
correspondência com a posição do potenciómetro. Se você ligá-lo todo o caminho em uma direção, os
números devem se aproximar
0, E se você transformá-lo todo o caminho
no outro sentido, os números devem se aproximar 1023. Será parecido com
o exemplo mostrado na Figura 3-6.

Figura 3-6: serial de dados de entrada

NOTA you'regettingfunkycharacters, makesurethatyouhavethebaudrate


setcorrectly.Becauseyousetitto9600inthecode, youneedtosetitto9600inthiswindowaswell.

Você já conseguiu transformar com sucesso um mostrador e fazer alguns números


alterar; muito emocionante, não é? Não? Bem, esta é a apenas o primeiro passo. Em seguida, você
aprender sobre outros tipos de sensores analógicos e como você pode usar os dados de

sensores analógicos para controlar outras peças de hardware. Por agora, você usa o familiar
LED, mas nos próximos capítulos você usa motores e outros dispositivos de saída para visualizar
suas entradas analógicas.
5 parte I ■Arduino Engenharia

UsingAnalogSensors

Embora potenciómetros gerar um valor de voltagem analógico num pino, que não são realmente sensores
no sentido tradicional. Eles "sentir" o seu giro da marcação, mas isso fica chato muito rapidamente.
A boa notícia é que todos os tipos de sensores geram valores de saída analógicos correspondentes à
acção "mundo real". Exemplos de tais incluem o seguinte:

■A■celerómetros que detectam a inclinação (muitos smartphones e tablets agora têm as)

■M■agnetômetros que detectam campos magnéticos (para fazer bússolas digitais)

s ensores infravermelhos que detectam a distância a um objeto


■ ■

■O■s sensores de temperatura que podem lhe dizer sobre o ambiente operacional do seu projeto

Muitos destes sensores são concebidos para operar de um modo semelhante


ao potenciômetro você só experimentou com: você fornecê-los com uma potência
(VCC) e de terra (GND) de conexão, e eles uma tensão analógica de saída entre
VCC
e GND no terceiro pino que você ligar para o ADC do seu Arduino.
Para esta próxima experiência, você começa a escolher que tipo de sensor analógico você
deseja usar. Eles toda a saída de um valor entre 0V e 5V quando conectado a um Arduino, por
isso todos eles vão trabalhar o mesmo para seus propósitos. Aqui estão alguns exemplos de
sensores que podem ser usados:

■A■fiada Infrared Sensor de proximidade


www.exploringarduino.com/parts/IR-Distance-Sensor

Conector: www.exploringarduino.com/parts/JST-WireOs sensores de distância infravermelhos afiadas


são populares para medir a dis-tância entre seu projeto e outros objetos. Como você se move mais
longe do objeto que você está visando, a saída de tensão diminui. Figura 5 na folha de dados da
página da web parte ligada acima mostra a relação entre tensão e distância medida.

■T■MP36 sensor de temperatura


www.exploringarduino.com/parts/TMP36

O sensor de temperatura TMP36 correlaciona facilmente leituras de temperatura em graus


Celsius, com níveis de tensão de saída. Uma vez que cada 10 mV corresponde a 1$C, você
pode facilmente criar uma correlação linear para converter a partir da tensão a medir volta para
a temperatura absoluta da Environ-ment ambiente: $C = [(Vout em mV) - 500] / 10. O
deslocamento de -500 é para lidar com temperaturas abaixo de 0$C. O gráfico da Figura 3-7
(extraído da folha de dados) mostra esta conversão.
Capítulo ■ Leitura Sensores 5

.
Crédito: Analog Devices, Inc.,www.analog.com
Figura 3-7: Tensão para Correlação de temperatura

■ T■riplo Analog Acelerômetro Axis


www.exploringarduino.com/parts/TriAxis-Analog-Accelerometer

acelerômetros triplo eixo são grandes para a detecção de orientação. Acelerómetros de saída
analógica um valor analógico correspondente a cada um dos eixos de

Movimento: X, Y, e Z (em cada um pino diferente). Usando um pouco de matemática inteligente


(Trigonometria e conhecimento da gravidade), você pode usar esses valores de tensão
para determinar a posição do seu projecto no espaço 3D! É importante ressaltar que muitos
desses sensores são 3.3V, assim que você vai precisar usar o
analogReference ()
comando emparelhado com o pino AREF para definir uma referência de tensão 3,3V
a permitir-lhe obter a resolução completa fora do sensor.

■ D■ual analógico giroscópio Axis


www.exploringarduino.com/parts/DualAxis-Analog-Gyroscope

Os giroscópios, ao contrário de acelerómetros, não são afectados pela gravidade. sua analógico
tensões de saída variar em conformidade com a aceleração angular em torno de um eixo. Estes
revelar-se particularmente útil para detectar movimentos de torção. Para um exemplo de um
giroscópio em ação com um Arduino, confira o meu SudoGlove, uma luva eu projetei que captura
gestos para controlar o hardware como sintetizadores de música e carros de RC:

www.sudoglove.com. Gostar
acelerômetros, estar ciente de que muitos giroscópios são 3.3V partes.

Agora que você já escolheu um sensor, é hora de colocar esse sensor para usar.
5 parte I ■Arduino Engenharia

Trabalhando com Sensores analógicos para detectar a temperatura

Este exemplo simples utiliza o sensor de temperatura mencionada na TMP36


seção anterior. No entanto, sinta-se livre para usar qualquer sensor analógico, você pode chegar
em suas mãos. Experimentar com um dos exemplos listados anteriormente, ou encontrar o seu
próprio. (Deve ser 5V compatível se você estiver usando o Arduino Uno.) Os passos seguintes são
basicamente os mesmos para qualquer sensor analógico, você pode querer usar.

Para começar, o fio de seu LED RGB como fez no capítulo anterior, e
fio do sensor de temperatura até 0 entrada analógica, como mostrado na Figura 3-8.

Imagem criada com o Fritzing.

Figura 3-8: circuito sensor de temperatura


Capítulo ■ Leitura Sensores 5

Usando este circuito, você vai fazer um sistema de alerta de temperatura simples. A luz
acenderá em verde quando a temperatura está dentro de uma faixa aceitável, ficará vermelho quando
fica muito quente, e ficará azul quando fica muito frio.

Primeiro de tudo, você precisa saber quais os valores que você deseja usar como seu
cortes. Usando o mesmo desenho exato da Listagem 3-1, utilize o monitor serial
para descobrir o que os valores analógicos correspondem à temperatura de pontos de corte que você
preocupam. Meu quarto é de cerca de 20$C, o que corresponde a uma leitura de cerca de analógico 143.
Estes números podem ser diferentes para você, para lançar o esboço de antes, abra o terminal serial, e
dar uma olhada nas leituras que você está recebendo. Você pode confirmar os valores matematicamente
usando o gráfico da Figura 3-7. No meu caso, um valor de 143/1023 corresponde a uma entrada de
tensão de cerca de 700mV.

Derivando da folha de dados, a seguinte equação pode ser usada para converter
entre a temperatura ($C) e a tensão (mV):

Temperatura($C) n 10 = tensão (MT) - 500

Ligar o valor de 700mV, você pode confirmar que equivale a uma temperatura
tura de 20$C. Usando a mesma lógica (ou simplesmente observando a janela de série e escolher um
valor), você pode determinar que 22$C é um valor digital
147e
18$C é um valor digital 139. Esses valores servirão como pontos de corte que irão mudar a cor do LED
para indicar que ele está muito quente ou muito frio. usando o

E sedeclarações, o digitalWrite função, eo analogReadfunção que


você já aprendeu sobre, você pode facilmente ler a temperatura, determine o que variam ela cai, e
definir o LED em conformidade.

NOTA BeforeyoucopythecodeinListing3-2, trytowritethisyourselfandsee


whetheryoucanmakeitwork.Aftergivingitashot, compareitwiththecodehere.Howdidyoudo?

Listagem 3-2: Temperatura Alerta Sketch-tempalert.ino

! // Temperatura Alerta const int BLED = 9; LED // azul no pino


9const int GLED = 10; LED // verde no pino 10const int RLED = 11;
LED // Red no pino 11const int TEMP = 0; // Sensor Temp é no pino
A0

const int LOWER_BOUND = 139; // Lower Thresholdconst


int UPPER_BOUND = 147; // Limite superior

int val = 0; // Variável para manter a leitura analógica

void setup ()
{
pinMode (Bled, OUTPUT); LED // Set Azul como OutputpinMode
(GLED, OUTPUT); LED // Set Verde como saída
5 parte I ■Arduino Engenharia

pinMode (RLED, OUTPUT); LED // Set Vermelho como saída


}

void loop ()
{
val = analogRead (TEMP);

Se (val <LOWER_BOUND)
{
digitalWrite (RLED, LOW);
digitalWrite (GLED, LOW);
digitalWrite (Bled, HIGH);

}
else if (val> UPPER_BOUND)
{
digitalWrite (RLED, HIGH);
digitalWrite (GLED, LOW);
digitalWrite (Bled, LOW);

}
outro
{
digitalWrite (RLED, LOW);
digitalWrite (GLED, HIGH);
digitalWrite (Bled, LOW);

}
}

Esta listagem de código não introduz novos conceitos; em vez disso, ele combina o
você aprendeu até agora para fazer um sistema que usa as entradas e saídas para interagir com o
ambiente. Para testá-lo, apertar o sensor de temperatura com os dedos ou exalar sobre ele para aquecê-
lo. Soprar para esfriá-la.

UsingVariableResistorstoMakeYourOwnAnalogSensors

Graças à física, toneladas de dispositivos resistência à mudança, como resultado da ação física.
Por exemplo, algumas tintas condutoras mudar resistência quando esmagado ou flexionada (sensores
de força e sensores Flex), alguns semicondutores mudar a resistência ao ser atingido pela luz
(fotorresistências), e alguns polímeros mudar resistência quando aquecido ou resfriado (termistores).
Estes são apenas alguns exemplos de componentes que você pode aproveitar para construir seus
próprios sensores analógicos. Porque estes sensores estão mudando a resistência e não de tensão,
você precisa criar um circuito divisor de tensão para que você possa medir a sua mudança de
resistência.
Capítulo ■ Leitura Sensores 5

UsingResistiveVoltageDividers

Um divisor de tensão resistivo utiliza duas resistências de saída de uma tensão que é uma fracção da
tensão de entrada. A tensão de saída é uma função directamente relacionada com o valor das duas
resistências. Assim, se um dos resistores é um resistor variável, é possível monitorizar a alteração na
tensão do divisor de tensão que resulta da

variando de resistência. O tamanho do outro resistor pode ser usado para definir a
sensibilidade do circuito, ou você pode usar um potenciômetro para fazer a sensibilidade
ajustável.
Primeiro, considere um divisor de tensão fixa e as equações associados com ele, tal como
mostrado na Figura 3-9. A0 na Figura 3-9 refere-se a pino analógico 0 no Arduino.

Figura 3-9: circuito divisor de tensão simples

A equação para um divisor de tensão é a seguinte:

Vout = Vin (R2 / (R1 + R2))

Neste caso, a tensão de entrada é 5V, ea tensão de saída é o que você vai ser
da introdução em um dos pinos analógicas do Arduino. No caso em que R1 e R2 são combinados (ambos
10k por exemplo), a 5V é dividido por dois para fazer 2.5V na entrada analógica. Confirmar esta ligando
valores na equação:

Vout = 5V (10k / (10k + 10k)) = 5V n 0,5 = 2.5V


5 parte I ■Arduino Engenharia

Suponhamos agora que um desses resistores é substituído com uma resistência variável, tal
como um fotoresistor. Fotorresistências (veja a Figura 3-10) resistência a mudança dependerá-ing sobre
a quantidade de luz que os atinge. Neste caso, eu vou optar por usar um photoresistor 200kΩ.
Quando em completa escuridão, a sua resistência é de cerca de 200kΩ; quando saturado com luz, a
resistência cai para quase zero. Se você optar por substituir R1 ou R2 e qual o valor que você
escolher para fazer o resistor fixo vai afetar a escala ea precisão das leituras que você recebe.
Experimente

com diferentes configurações e usando o monitor serial para ver como seus valores
alterar. Como exemplo, vou optar por substituir R1 com o photoresistor, e eu vou fazer R2 um resistor de
10k (veja a Figura 3-11). Você pode deixar o LED RGB no lugar

Por enquanto, porém você só vai usar uma das cores para este exercício.
Crédito: element14,

Figura 3-10: photoresistor

Carregar o seu esboço impressão serial fiel novamente (Listagem 3-1) e tente alte-
ing as condições de iluminação sobre o photoresistor. Segurá-la até uma luz e um copo com as mãos.
As probabilidades são, você não vai estar a bater toda a gama de

0-1023 porque a resistência variável nunca terá uma resistência de zero. Em vez,
provavelmente você pode descobrir os valores máximos e mínimos que são susceptíveis de receber.
Você pode usar os dados do seu photoresistor para fazer um mais

nightlight inteligente. O nightlight deve ficar mais brilhante como a sala fica mais escura,
e vice versa. Usando o seu esboço monitor serial, escolher os valores que representam quando o seu
quarto está em pleno brilho ou escuridão completa. No meu caso, eu descobri que um quarto escuro
tem um valor de cerca de
200e uma sala completamente luminoso tem
um valor em torno 900. Estes valores irão variar para você com base em suas condições de
iluminação, o valor do resistor que você está usando, e o valor da sua photoresistor.

UsingAnalogInputstoControlAnalogOutputs

Lembre-se que você pode usar aonalogWrite ()comando para definir o brilho de uma
CONDUZIU. No entanto, é um valor de 8 bits; isto é, aceita valores entre 0 e apenas 255, enquanto que
o ADC é devolver valores tão elevados quanto 1023. Convenientemente, a linguagem de
programação Arduino tem duas funções que são úteis para o mapeamento entre os dois grupos de
valores: a

mapa()e restringir ()funções. omapa()


função parecida com esta:

output = mapa (valor, fromLow, fromHigh, toLow, toHigh)


Capítulo ■ Leitura Sensores 5

Imagem criada com o Fritzing.

Figura 3-11: circuito photoresistor

valoré a informação que você está começando com. No seu caso, isso é o
mais recente leitura da entrada analógica. fromLowe fromHighsão a entrada
fronteiras. Estes são valores que você encontrou para corresponder ao mínimo e máximo brilho no
seu quarto. No meu caso, eles eram
200e 900. muito baixo
e toHighsão os valores que você deseja mapeá-los para. Porque analogWrite ()

espera valor entre 0e 255, Você pode usar esses valores. No entanto, queremos um ambiente mais
escuro para mapear a um LED mais brilhante. Portanto, quando a entrada do ADC é um valor baixo, você
quer a saída para o LED para ser um valor alto, e vice-versa.
5 parte I ■Arduino Engenharia

Convenientemente, o mapafunção pode lidar com isso automaticamente; simplesmente trocar


os valores altos e baixos de forma que o valor baixo é 255eo elevado valor é 0.
o mapa()função cria um mapeamento linear. Por exemplo, se o seu fromLowe
fromHighOs valores são 200e 900, Respectivamente, e sua muito baixoe toHighvalores
estamos 255e 0, Respectivamente, 550mapas para 127Porque 550é a meio caminho
entre
200e 900e 127é a meio caminho entre 255e 0. É importante notar, no entanto, omapa()função não
restringe esses valores. Assim, se o fotoresistor faz
medir um valor inferior 200, Que é mapeado para um valor acima d2e55(porque você é
invertendo o mapeamento). Obviamente, você não quer isso, porque você não pode passar um
valor maior que255ao analogWrite ()função. Você pode lidar com isso usando orestringir ()função.
orestringir ()função parecida com esta:

output = constranger (valor, min, max)

Se você passar a saída do mapafunção dentro do constrangerfunção,


você pode definir o minpara 0e a maxpara 255, Garantindo que todos os números acima ou
abaixo desses valores são limitados a qualquer
0ou 255. Finalmente, você pode usar
esses valores para comandar o seu LED! Agora, dê uma olhada no que esse esboço final será
semelhante (ver Listagem 3-3).

Listagem 3-3: Automatic Nightlight Sketch-nightlight.ino

// Nightlight automática

const int RLED = 9; LED // vermelha no pino 9 (PWM) const int LUZ = 0; // Lght
Sensor no pino analógico 0const int MIN_LIGHT = 200; // Mínima esperada int
MAX_LIGHT luz valueconst = 900; // Máxima esperada valueint Luz val = 0; //
Variável para manter a leitura analógica

void setup ()
{
pinMode (RLED, OUTPUT); // Conjunto de LED do pino como saída
}

void loop ()
{
val = analogRead (LUZ); // Leia a luz sensorval = map (val, MIN_LIGHT, MAX_LIGHT, 255, 0);
// Mapa a luz readingval = constranger (val, 0, 255); // Restringir luz valueanalogWrite (RLED,
val); // Controle o LED

}
Capítulo ■ Leitura Sensores 5

Observe que esse código reutiliza o valvariável. Você pode, alternativamente, usar uma dife-
variável rentes para cada chamada de função. Em funções, tais comomapa()Onde valé
tanto a entrada e a saída, o valor anterior de valé usada como
entrada, e seu valor é redefinido para o valor actualizado quando a função foi
concluída.
Brincar com o seu nightlight. Será que funciona como esperado? Lembre-se, você
pode ajustar a sensibilidade alterando os limites mínimos e máximos de
a função de mapeamento ou alterar o valor do resistor fixo. Use o monitor serial
para observar as diferenças com configurações diferentes até encontrar um que funciona melhor. você
pode combinar este esboço com o nightlight de selecção de cores que você projetou no capítulo
anterior? Tente adicionar um botão para alternar entre as cores e usar o photoresistor para ajustar o
brilho de cada cor.

Resumo

Neste capítulo, você aprendeu sobre o seguinte:

■ A■s diferenças entre sinais analógicos e digitais

■ C■omo converter sinais analógicos em sinais digitais

■ C■omo ler um sinal analógico de um potenciômetro

■ C■omo exibir dados usando o monitor serial

■ C■omo a interface com os sensores analógicos embalados

■ C■omo criar seus próprios sensores analógicos

■ C■omo mapear e restringir leituras analógicas de conduzir saídas analógicas


par t

II

Controlar o Seu Ambiente

InThisPart

Capítulo 4: Usando transistores e condução MotorsCapítulo


5: fazendo SoundsCapítulo 6: USB e Comunicação
SerialCapítulo 7: registos de deslocamento
Capítulo

Usando transistores e
Motores de condução

Peças que você vai precisar para este capítulo:

Arduino UnoUSB cable9V battery9V


bateria clip5V L4940V5 linear
regulator22uF capacitor eletrolítico

.1uf Capacitor1uF LEDs capacitorBlue cerâmica eletrolíticos (n4)


resistências de 1k (n4) sensor de distância PN2222 NPN BJT
transistorJumper wiresSharp GP2Y0A41SK0F IR com cableHot cola
ou servo motor tapeStandard

63
6 parte II ■Controlar o Seu

DC
motorBreadboardPotentiome
terSN754410 H-Bridge IC

CÓDIGO E CONTEÚDO DIGITAL PARA ESTE CAPÍTULO

downloads de código, vídeos e outros conteúdos digitais para este capítulo pode ser
encontrada em www.exploringarduino.com/content/ch4 .

Os downloads de código wiley.com deste capítulo foram encontrados emwww.wiley.com/


go / exploringarduinona guia de transferência de código. O código está no
capítulo 04 baixar e individualmente nomeados de acordo com os nomes de todo
o capítulo.

Você agora é um mestre da observando informações do mundo ao seu redor.


Mas como você pode ao controleque mundo? Piscando LEDs e ajustar automaticamente-ing
nightlights são um bom começo, mas você pode fazer muito mais. usando assorted

tipos de motores e atuadores, e com a ajuda de transistores, você pode usar seu
Arduino para gerar ação física no mundo real. Por motores de emparelhamento com o seu
Arduino, você pode dirigir robôs, construir braços mecânicos, adicionar um grau adicional de
liberdade para distanciar sensores, e muito mais.

Neste capítulo, você aprenderá a controlar cargas indutivas como corrente contínua
(DC) motores, como usar transistores para alternar dispositivos de alta corrente, e como fazer a
interface com atuadores de precisão (ou seja, servo motores). No final deste capítulo, você construir um
sensor de distância de varredura capaz de identificar a loca-ção de obstáculos próximos. Este sensor é
perfeito para a montagem sobre um carro robótico auto-condução, por exemplo. Tendo completado este
capítulo, você terá todas as habilidades que você precisa para construir uma máquina que você pode
realmente interagir com!

NOTA youwanttolearnallaboutmotorsandtransistors, checkoutthisvideo:


transistores www.jeremyblum.com/2011/01/31/arduino-tutorial-5-motors-and-~~number=plural
/.YoucanalsofindthisvideoontheWileywebsiteshownatthebeginningofthischapter.

ATENÇÃO ischapter, youusea9Vbatterysothatyoucanpowermotors

thatrequiremorepowerthanwhattheArduinocanprovide.Thesevoltagesarestillnothighenoughtoposeadangertoyou, butifhookedupimpro
thesebatteriescandamageyourelectronics.Asyoumakeyourwaythroughtheexer-cisesinthischapter, followthediagramsandinstructionsc
(connectingpowerdirectlytoground), andwhileyou'llbesharingthegroundlinebetweenpowersupplies, don'ttrytoconnecttwoseparatevolt
don'ttrytohookboththe9VsupplyandtheArduino's5Vsupplyintothesamesupplyrowonthebreadboard.
Capítulo ■ Usando transistores e condução 6

DrivingDCMotors

motores de corrente contínua, que você pode encontrar em vários dispositivos em sua casa, girar
continuamente quando uma voltagem CC é aplicada através deles. Tais motores são com-mumente
encontrado como os motores de condução em controle de rádio (RC) carros, e como os motores que
fazem os discos girar no seu leitor de DVD. DC motores são grandes, porque eles vêm em uma enorme
variedade de tamanhos e são geralmente muito barato. Ajustando a tensão de aplicar a eles, você
pode mudar a sua velocidade de rotação. Ao inverter a direção da tensão aplicada a eles, você pode mudar
sua direção de

rotação bem. Isso geralmente é feito usando um H-ponte, que você


aprende mais adiante neste capítulo.
motores de corrente contínua escovado, Como a que você está usando para este capítulo,
empregam ímãs estacionários e uma bobina de fiação. A electricidade é transferido para a bobina
usando "escovas", daí a razão pela qual eles são chamados escovadomotores de corrente contínua.
Ao contráriobrushlessmotores de corrente contínua (tais como motores de passo), motores DC escovado
são baratos e têm controle de velocidade mais fácil. No entanto, escovado motores DC não duram
tanto tempo porque as escovas podem desgastar-se ao longo do tempo. Estes motores funcionam através de
uma força indutiva. Quando a corrente passa através da bobina de fiação, que gera um campo
magnético que é atraído para um ou outro ou repelidos pelos magnetos estacionários, dependendo da
polaridade.
Ao usar as escovas para trocar a polaridade cada meia rotação, você pode gerar momento angular. A
mesma configuração exacta pode ser usado para criar um gerador de se activar manualmente o induzido.
Isto irá gerar um campo magnético flutuante que irá, por sua vez, geram corrente. Isto é como
geradores hidroeléctricas trabalhar-caindo a água se transforma o veio, e uma corrente é produzido.
Esta capacidade para criar corrente no sentido oposto é por isso que você vai usar um diodo mais
adiante neste capítulo para garantir que o motor não pode enviar corrente de volta para o seu circuito
quando é forçado virou.

HandlingHigh-CurrentInductiveLoads

motores de corrente contínua em geral, exigem mais corrente do que built-in potência do Arduino
alimentação pode fornecer, e eles podem criar picos de tensão prejudiciais devido à sua indução
natureza tiva. Para resolver esse problema, você primeiro aprender a isolar efetivamente um motor de
corrente contínua a partir do seu Arduino e, em seguida, como ligá-lo usando uma oferta secundária.

Um transistor vai permitir que o Arduino para desligar o motor ligado e desligado com segurança, bem
como controlar a velocidade usando as técnicas de modulação por largura de pulso (PWM) que você
aprendeu no Capítulo 3, "Leitura Sensores analógicos." Referência do esquema mostrado na Figura 4-1
como você aprender sobre os vários componentes que entram em conectar um motor de corrente
contínua a um Arduino com uma fonte de alimentação secundária.

Certifique-se de compreender todos esses conceitos antes de começar a fiação.


6 parte II ■Controlar o Seu

Imagem criada com o Águia


Figura 4-1: esquemática de controle de motor DC

Antes de ligar o seu motor de corrente contínua, é importante compreender o que todos
esses componentes estão fazendo:

■Q■1 é um NPN bipolar-junction transistor (BJT) usado para ligar


o 9V separada para o motor. Existem dois tipos de BJTs, NPN e
PNP, que se referem às diferentes semicondutores técnicas de "doping"
utilizado para criar o transistor. Este livro vai se concentrar em usar BJTs NPN. Você pode
simplista pensar em um transistor NPN como um interruptor controlado por tensão que
permite inibir ou permitir que o fluxo de corrente.

■ U■m resistor 1k é usado para separar o pino base do transistor do pino do Arduino
controlo.

■U■1 é o motor DC.

■C■1 é para filtragem de ruído causado pelo motor.

■D■1 é um diodo usado para proteger a fonte de alimentação de voltagem inversa


causado pelo motor actua como um indutor.

Uso de transistores como interruptores

Transistores podem fazer um número excepcional de tarefas, de fazer


amplificadores tornando-se o CPU dentro do seu computador e smartphone. Você
pode usar um único
Capítulo ■ Usando transistores e condução 6

transistor para fazer um simples interruptor controlado eletricamente. Cada BJT tem três pinos (ver
figura 4-2): O emissor (E), o coletor (C) e a base (B).

3C E

2B
1E
Figura 4-2: Um NPN BJT

A corrente passa através do colector e para fora do emissor. através da modulação


o pino de base, é possível controlar se atual é permitida a fluir. Quando uma voltagem suf-
cientemente alta for aplicada para a base, a corrente é deixada fluir através

o transistor, e o motor gira como um resultado. O 5V gerado pelas / O pins Arduino eu mais do que
suficiente para ligar o transistor. Tirando proveito de PWM, você pode controlar a velocidade do motor
girando rapidamente o transistor ligado e desligado. Porque o motor pode manter a dinâmica, o dever
de o ciclo do sinal PWM determina a velocidade do motor. O transistor é essencialmente conectar e
desconectar uma ligação do motor a partir do solo e determinar quando um circuito completo pode ser
feito com a bateria.

Usando diodos de proteção

É importante considerar problemas causados por motores DC agindo como indutores. (indutoressão
dispositivos eléctricos que armazenam energia nos seus campos magnéticos e resistem a alterações na
corrente.) como o motor de corrente contínua gira, a energia é acumulada e armazenada na
indutância das bobinas do motor. Se o poder é instantaneamente removido do

o motor, a energia é dissipada sob a forma de um pico de tensão invertida,


o que poderia revelar-se prejudicial à fonte de alimentação. É aí que diodos de proteção
entrar. Ao colocar o diodo em todo o motor, você garante que a corrente
gerado pelo motor flui através do díodo e que a tensão inversa não pode exceder a tensão directa do
diodo (diodos porque permitem que a corrente flua em apenas um sentido). Isso também vai
absorver toda a corrente gerada pela força lhe girar o motor.
6 parte II ■Controlar o Seu

Usando um secundário fonte de alimentação

Note-se, assim, a partir do diagrama de circuito mostrado na Figura 4-1 que o poder sup-ply para o
motor é 9V, em vez do habitual 5V a partir da conexão USB que você está usando. Para os efeitos
desta experiência, uma bateria de 9V é suficiente, mas você também pode usar um adaptador de
parede AC-DC. A razão para usar uma fonte de energia separada do Arduino do built-in fonte de
5V é duplo:

1. Usando uma alimentação separada, você reduz as chances de que a fiação inadequada de
um circuito de alta potência poderiam prejudicar o seu Arduino.

2. Você pode tirar proveito de limites de corrente mais altas e mais altas tensões.

Alguns motores de corrente contínua pode consumir mais corrente do que o fornecimento Arduino 5V pode
fonte. Além disso, muitos motores são classificados em tensões superiores a 5V. embora eles
pode girar em 5V, você pode alcançar sua velocidade máxima de apenas 9V ou 12V (dependendo das
especificações do motor).

Note que você deve conectar o chão de ambos sua fonte de alimentação secundária
eo chão Arduino. Esta ligação assegura um ponto de referência comum entre os níveis de tensão
nas duas partes do circuito.

Fiação do Motor

Agora que você entende os meandros de controlar um motor DC escovado, é hora de fazê-lo com
fio acima em sua placa de ensaio. Tente conectá-lo apenas por referência ao esquema anterior (mostrado
na Figura 4-1). Depois de ter tentado montar o circuito usando apenas o esquema, referência a
versão gráfica mostrada na Figura 4-3 para confirmar que você wired-lo corretamente.

É importante ficar bom em leitura de esquemas elétricos sem ter que


olhar para um layout gráfico. Queria fio-lo corretamente? Lembre-se de verificar se há o seguinte como
você ligar o circuito:

1. Certifique-se de que está conectado a terra de sua bateria de 9V para o chão do seu Arduino.
Você pode querer usar o ônibus horizontal na placa de ensaio para alcançar este objetivo,
conforme mostrado na Figura 4-3.

2. Certifique-se de que o fornecimento de 9V não está ligado à fonte de 5V. Na verdade, você
não precisa mesmo de ligar a fonte de 5V à placa de ensaio.

3. Certifique-se de que a orientação do transistor está correto. Se você não estiver usando o
mesmo NPN BJT listado na lista de peças para este capítulo, referência a folha de dados para
garantir que o emissor, base e coletor está conectado

para os mesmos pinos. Se eles não são, ajustar a sua fiação.


Capítulo ■ Usando transistores e condução 6

Capacitor

Transistor
Bateria

Imagem criada com o Fritzing.


motor DC Diodo

Figura 4-3: A fiação do motor DC

4. Certifique-se de que a orientação do diodo é correto. A corrente flui desde o lado sem listra para
o lado com a tira. A listra no dispositivo physi-cal corresponde a linha no símbolo esquemático.
Você usa uma cerâmica

capacitor para este exercício, de modo que a polaridade não importa.

Em seguida, é hora de começar este motor girando. Você pode querer anexar um pedaço
de fita ou de uma roda para a extremidade do motor, de modo que pode ver mais facilmente
a
velocidade à qual ele está girando. Antes de escrever o programa, você pode confirmar que o circuito
está a funcionar correctamente, fornecendo energia para o Arduino através da conexão USB, ligar a
bateria de 9V, e conectar o pino da base do transistor (após o resistor) diretamente para 5V do
Arduino. Isso simula um alto comando lógico e deve fazer a rotação do motor. Ligar esse mesmo fio
para a terra irá garantir que ele não gira. Se isso não funcionar, verifique sua fiação antes de passar
para a próxima etapa: programação.
7 parte II ■Controlar o Seu

ControllingMotorSpeedwithPWM

Primeiro, você pode usar um programa muito semelhante ao que você usou para ajustar o brilho LED de
sua luz noturna no Capítulo 3 para ajustar a velocidade do seu motor. Através do envio de sinais
variados ciclo de trabalho para o transistor, o fluxo de corrente através do motor rapidamente inicia e
para que resulte uma alteração na velocidade. Experimentar o programa na Listagem 4-1 a rampa
repetidamente a velocidade do motor para cima e para baixo.

Listagem 4-1: Automático de Velocidade Control-motor.ino

// Programa Motor Speed Control Simples

int MOTOR const = 9; // Motor on Digital Pin 9

void setup ()
{
pinMode (MOTOR, OUTPUT);
}

void loop ()
{
for (int i = 0; i <256; i ++)
{
analogWrite (MOTOR, i); delay (10);

}
delay (2000); for (int i = 255; i> =
0; i--)

{
analogWrite (MOTOR, i); delay (10);

}
atraso (2000);
}

Se tudo está ligado corretamente, este código deve lentamente rampa do motor
acelerar, em seguida, voltar para baixo novamente em um loop. Usando essas técnicas, você poderia
facilmente fazer um robô mecha simples.

Em seguida, você pode combinar seus novos conhecimentos sobre motores de corrente contínua com o seu
conhecimento de sensores analógicos. Usando um potenciômetro, você pode ajustar manualmente
a velocidade do motor. Para começar, adicionar um potenciómetro ao pino analógico 0, como
mostrado nas
Figura 4-4. Observe que é necessário conectar o pino 5V do Arduino ao
trilho de alimentação na placa de ensaio, se você quiser ligar o potenciômetro para essa linha no
tabuleiro.
Capítulo ■ Usando transistores e condução 7

Capacitor

Transistor
Bateria

Imagem criada com o Fritzing.


motor DC DiodePotentiometer

Figura 4-4: Adicionando um potenciômetro

Agora você pode modificar o programa para controlar a velocidade do motor com base na
presente definição do potenciômetro. Com o potenciômetro em zero, o motor pára; com o potenciômetro
girado totalmente, o motor funciona em velocidade máxima. Lembre-se que o Arduino está sendo
executado muito rápido; ele está realmente em execução através do laço

milhares de vezes a cada segundo! Portanto, você pode simplesmente verificar o


velocidade potenciômetro de cada vez através do laço e ajustar a velocidade do motor depois de cada
cheque. Ele verifica muitas vezes o suficiente para que a velocidade do motor ajusta em tempo real

com o potenciômetro. O código na Listagem 4-2 faz o truque. Crie um novo


esboço (ou atualizar seu esboço anterior para corresponder a esse código) e enviá-lo para o seu Arduino
a partir do ambiente de desenvolvimento integrado (IDE).

Listagem 4-2: Velocidade ajustável Control-motor_pot.ino

// Controle de velocidade do motor com um potenciômetro

int MOTOR const = 9; // Motor on Digital Pin 9


7 parte II ■Controlar o Seu

const int POT = 0; // POT na Analog Pin 0

int val = 0;

void setup ()
{
pinMode (MOTOR, OUTPUT);
}

void loop ()
{
val = analogRead (POT); val = map (val, 0,
1023, 0, 255); analogWrite (MOTOR, val);

Um monte de este código deve parecer familiar a partir de sua experiência de negociação anterior
com sensores analógicos. Note-se que o constrangerfunção não é necessária quando
usando um potenciômetro, porque você pode usar toda a gama de entrada, eo valor nunca vai abaixo
0ou
acima 1023. Depois de carregar o código para o seu Arduino, ajustar o pote e observar a velocidade da
mudança em conformidade motor.

UsinganH-BridgetoControlDCMotorDirection

Assim, você pode mudar DC velocidade do motor. Isso é ótimo para a fabricação de rodas em um
Arduino controlado robô ... contanto que você só quer dar um impulso. Qualquer motor de corrente
contínua útil deve ser capaz de girar em dois sentidos. Para conseguir isso, você pode usar um
dispositivo prático chamado deH-ponte. A operação de uma ponte-H

pode ser melhor explicada com um diagrama (veja a Figura 4-5).

Figura 4-5: operação de ponte-H

Você também pode gostar