Exploring Arduino 1 100.en - PT
Exploring Arduino 1 100.en - PT
Exploring Arduino 1 100.en - PT
Jeremy Blum
explorando Arduino®: Técnicas e Ferramentas para Engenharia Wizardry
www.wiley.com
Copyright © 2013 por John Wiley & Sons, Inc., Indianapolis, Indiana
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.
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 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
(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.
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.
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
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.
Índice 349
ix
Conteúdo at a
x Conteú
Introdução xix
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
Í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.
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.
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.
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.)
SourceCodeandDigitalContent
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.
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:
www.arduino.cc/en/Reference/HomePage
www.jeremyblum.com/category/arduino-tutorials
learn.adafruit.com/category/learn-arduino
learn.sparkfun.com/tutorials
www.arduino.cc/forum
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.
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).
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
InThisPart
Obtendo-se e piscando
com o Arduino
cabo Arduino
UnoUSB
downloads de código, vídeos e outros conteúdos digitais para este capítulo pode
ser encontrada em www.exploringarduino.com/content/ch1 .
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
ExploringtheArduinoEcosystem
Em suas aventuras com o Arduino, você vai depender de três componentes principais para seus
projetos:
■ A■placa Arduino em si
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
/ O pins Breakout I
■ ■
■ B■otão de reset
Debug LED
conector USB
programação MCU
conector (ICSP)
Serial-to-USB
circuitos
C
entrada de 7-12VD
Atmel microcontroladores
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
Interfaces de programação
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
Suprimentos de energia
■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.
UMAbootloaderisachunkofcodethatlivesinareservedspaceintheprogrammemoryoftheArduino'smainMCU.Ingeneral, AVRmicrocontr
whichtalkstothemicrocontrollerviaaserialperipheralinterface (SPI) .Programmingviathismethodisfairlystraight-forward,
butnecessitatestheuserhavingahardwareprogrammersuchasanSTK500oranAVRISPMKIIprogrammer (seeFigure1-2).
BootloadersaregreatbecausetheyenablesimpleprogrammingviaUSB
withnoexternalhardware.However, theydohavetwodownsides:
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
Crédito: Arduino,
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
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,
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.
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,
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
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
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
2. Abra o menu Iniciar, clique com botão direito em Meu computador e selecione Propriedades.
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).
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.
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.
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
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
alterada no código.
ou 1 segundo. Isso resulta no LED ficar em durante 1 segundo antes de executar o próximo
comando.
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
■C■omo o bootloader Arduino permite programar Arduino firmware através de uma conexão
USB
downloads de código, vídeos e outros conteúdos digitais para este capítulo pode ser
encontrada em www.exploringarduino.com/content/ch2 .
19
2 parte I ■Arduino Engenharia
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
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.
É 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
barramento de terra
área de prototipagem
barramento de energia
barramento de terra
barramento de energia
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.
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,
rentcanflowfreelythroughit.
Ohm'slawisdefinedasfollows:
V = IR
ConsidertheLEDcircuitshowninFigure2-3.
Imagem criada com o Águia
contínuo
YoucanuseOhm'slawtodecideonaresistorvalueforthiscircuit.AssumethatthisisastandardLEDwith20mAforwardcurrentanda2V
dropacrossit.Becausethesourcevoltageis5Vanditendsatground, atotalof5Vmustdropacrossthiscircuit.SincetheLEDhasa2Vdrop,
theother3Vmustdropacrosstheresistor.Knowingthatyouwantapproxi-mately20mAtoflowthroughthesecomponents, youcanfindthere
20mAflowsthroughboththeresistorandLED.Asyouincreasetheresis-tancevalue, lesscurrentisallowedtoflowthrough.220Ωisabitmoret
butstillallowstheLEDtoglowsufficientlybright, andisaverycom-monlyavailableresistorvalue.
resistivecomponent.Becauseincreasedpowerisassociatedwithincreasedheatdissipation,
componentsgenerallyhaveamaximumpowerrating.Youwanttoensurethatyoudonotexceedthemaximumpowerratingforresis-
torsbecauseotherwisetheymightoverheat.Acommonpowerratingforresistorsis1 / 8ofawatt (abbreviatedasW, milliwattsasmW)
.The
P = IV
WherePispowerinwatts, andIandVarestilldefinedasthecurrentandvoltage.Fortheresistordefinedearlierwithavoltagedropof3Vanda
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
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.
{
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 ()
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
{
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);
}
}
■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:
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.
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ê
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).
{
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.
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
■ 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.
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.
■ E■le pode fluir através de um caminho quase zero, resistência ao carril de 5V.
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.
resistorbyconnectingtheresistorto5Vinsteadofgroundandbyconnectingtheothersideofthebuttontoground.Inthissetup, theinput
logicvaluewhenthebuttonisunpressedandalow logicvaluewhenthebuttonisbeingpressed.
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).
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);
}
}
ALTO.
É isso aí! Programar o circuito com este código e confirmar que ele funciona como
esperado.
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
mostra. No entanto, o botão realmente salta para cima e para baixo antes de se estabelecer, como o
gráfico à direita mostra.
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.
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 ()
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).
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
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
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
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
ú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
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
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
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
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
{
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
downloads de código, vídeo e outros conteúdos digitais para este capítulo pode ser encontrada em
www.exploringarduino.com/content/ch3 .
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.
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.
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
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.
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
.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
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.
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.
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.
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)
■O■s sensores de temperatura que podem lhe dizer sobre o ambiente operacional do seu projeto
.
Crédito: Analog Devices, Inc.,www.analog.com
Figura 3-7: Tensão para Correlação de temperatura
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
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
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.
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):
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
void setup ()
{
pinMode (Bled, OUTPUT); LED // Set Azul como OutputpinMode
(GLED, OUTPUT); LED // Set Verde como saída
5 parte I ■Arduino Engenharia
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.
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:
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,
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
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
// 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
II
InThisPart
Usando transistores e
Motores de condução
63
6 parte II ■Controlar o Seu
DC
motorBreadboardPotentiome
terSN754410 H-Bridge IC
downloads de código, vídeos e outros conteúdos digitais para este capítulo pode ser
encontrada em www.exploringarduino.com/content/ch4 .
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!
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
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.
Antes de ligar o seu motor de corrente contínua, é importante compreender o que todos
esses componentes estão fazendo:
■ U■m resistor 1k é usado para separar o pino base do transistor do pino do Arduino
controlo.
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
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.
É 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
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.
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
Capacitor
Transistor
Bateria
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
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.
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
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
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