Você está na página 1de 156

MANUAL 10

PROJETOS
PRÁTICOS
O GUIA ÉPICO PARA VOCÊ
APRENDER ARDUINO SEM
ENROLAÇÃO

FLÁVIO BABOS
SUMÁRIO

PROJETO COMPLEXIDADE PÁGINA

1. PRIMEIROS COMPONENTES 23

2. ACENDENDO 3 LED'S 41

3. MEDIDOR DE TEMPERATURA 57

4. LED RGB E SENSOR DE LUZ 70

5. ACIONANDO O SERVO MOTOR 81

6. SPEAKER COM BUZZER 89

7. MINI TECLADO MUSICAL 101

8. CONTROLE DE UM MOTOR DC 111

9. LIGANDO UM DISPLAY LCD 121

10. FECHADURA ELÉTRICA 135


SOBRE O AUTOR

FLÁVIO BABOS

PERFIL PROFISSIONAL

Sou um apaixonado por tecnologia e desde


pequeno faço projetos de robótica com
ênfase em Arduino. Além disso, fui Gerente
FALE COMIGO
de Vendas e de Projetos na Empresa Júnior
contato@flaviobabos. Meta Consultoria da Engenharia
com.br Mecatrônica da Universidade Federal de
Uberlândia - UFU.
flaviobabos.com.br

Flávio Resende Babos EXPERIÊNCIA DE TRABALHO


Gerência de vendas
@babosengenharia
Meta Consultoria | ABR/2018 - JAN/2019
Gerente comercial e consultor de vendas
HABILIDADES da empresa por durante 4 meses;
Gerente de marketing de uma equipe de
Gerência de Projetos
6 pessoas fazendo postagens em mídias
Vendas e Marketing sociais e gerenciando o blog da empresa
Modelagem 3D com posts na área de engenharia e
empreendedorismo por durante 5
Processos Empresariais meses.
Arduino Gerência de projetos
Estratégia de negócios Meta Consultoria | FEV 2019 - DEZ 2019
4 projetos como Gerente de Projetos de
Lean Six Sigma
uma equipe na área de Acústica,
modelagem tridimensional com
SolidWorks e Análise de Material;
3 projetos como Consultor de Projetos
na área de modelagem tridimensional
com SolidWorks e na área de projetos
com Arduino.

FLAVIOBABOS.COM.BR
BEM VINDO (A) AO ARDUINO!

A plataforma Arduino facilita ao máximo a programação


de pequenos computadores que na nomenclatura são os
chamados de microcontroladores aos quais fazem a
interação com os objetos no mundo exterior ao da
programação.

Você está cercado (a) de dezenas deles todos os dias:


estão embutidos em temporizadores, termostatos,
brinquedos, controles remotos, micro-ondas, e até em
escovas elétricas. Sendo assim, o objetivo de sua atuação
na maioria dos dispositivos é sentir e controlar as
atividades usando sensores e atuadores.

Basicamente, sensores escutam o mundo físico. Eles


convertem energia que lhes é fornecida através do
acionamento de um botão ou da identificação de energia
solar no ambiente em sinais elétricos. Botões, neste caso,
são interruptores que possuem como funcionalidade
comandar um circuito elétrico a partir da modificação da
sua situação de comutação (ON/OFF). No caso em nossos
projetos aqui da apostila, esses botões são usados para
ligar e desligar um LED, acionar um motor de 5V, ligar um
buzzer, entre outras funções.

Já os atuadores, como o próprio nome já diz, atuam no


mundo físico. Eles convertem a energia elétrica em energia
física, como luz, temperatura e movimento.

Enquanto isso, os microcontroladores representam a


intermediação entre os sensores e os atuadores. São eles
que decidem o que fazer baseado no programa que você
escreve.
4 ANIGÁP

Os microcontroladores e os componentes eletrônicos são


o esqueleto dos seus projetos. Eles são o hardware que
darão forma aos seus projetos enquanto que o software
serão os códigos escritos por você e computados pelos
microcontroladores.

FLAVIOBABOS.COM.BR
SOBRE ESTA APOSTILA

Ao final dessa apostila com 10 projetos, você irá


aprender finalmente como construir seus próprios circuitos
com Arduino e a escrever sua própria programação sem
copiar os projetos e códigos sem entender a lógica dos
algoritmos.

Se você ainda não me conhece, eu atuo com o Arduino


desde 2014, quando descobri a plataforma no Laboratório
de Automação e Robótica da UFV-CRP.
Essa foto representa
um projeto de um
carro autônomo
desenvolvido em
equipe durante o
colegial que ganhou
destaque na Universi-
dade da minha cidade:
a UFV-CRP.

Projeto final do
carro desenvolvido
com objetivo de
5 ANIGÁP

evitar os obstáculos
com uso do sensor
ultrassônico, servo
motor, 2 motores
DC, LED's e LCD
para informarem a
proximidade.
FLAVIOBABOS.COM.BR
SOBRE ESTA APOSTILA

Já essa segunda foto, representa um braço robótico de


baixo custo com Arduino. Também ganhou destaque na
Universidade e isso me ajudou a conseguir uma bolsa para
continuar o desenvolvimento do projeto para ser usado na
sala de aula no ensino à robótica.

Desde essa época, eu não parei de fazer pequenos


projetos com Arduino pois fiquei apaixonado pela área de
eletrônica e de robótica.

Inclusive é engraçado eu te contar isso pois minha paixão


era tamanha que passava tardes inteiras no Laboratório
de Robótica dando vida a projetos que sem o Arduino
talvez não seria possível de criar...
6 ANIGÁP

Um dos projetos que mais gostava era o braço robótico.

Minha ideia com esse projeto era construir um mecanismo


que fosse diferente e que fosse utilizado no ensino de
robótica em minha escola.

FLAVIOBABOS.COM.BR
SOBRE ESTA APOSTILA

Veja só:

Ficou curioso? Então acesse meu artigo sobre esse


projeto para saber mais.

A parte estrutural desse projeto eu construí sem muitos


problemas na época. O que complicava era a programação
na época, não sabia quase nada.

Então, sabe o que eu fiz?

Fui copiando projetos que via na internet e seus códigos


para ver se funcionava no meu braço robótico..., mas, não
7 ANIGÁP

conseguia por nada colocar meus servos motores, o


joystick e o Arduino funcionarem em conjunto.

Até que me dei por vencido e resolvi aprender a lógica


por trás de cada linha dos projetos que estava copiando...

FLAVIOBABOS.COM.BR
SOBRE ESTA APOSTILA

As coisas começaram a fazer sentido conforme iria


aprendendo sobre funções condicionais, sobre funções
de conversão de valores, sobre bibliotecas...

O que antes parecia muitas linhas sem sentido nos


projetos que simplesmente só copiava, agora eu já
entendia e sabia qual lógica escrever para fazer meu
projeto funcionar.

E, pode parecer algo simples, mas quem já passou por


tentar achar um erro de compilação na IDE do Arduino e
não descobrir sabe do que estou falando...

E foi a partir de muitos outros projetos e estudos que fiz,


que aprendi, de fato, como desenvolver meu próprio
projeto com Arduino ao invés de ficar copiando de outras
pessoas sem entender a lógica da programação.

Dessa forma, esse livro digital é o reflexo de toda a


experiência que adquiri durante esses anos com o Arduino
e que estou te dando de graça e de forma exclusiva para
você não precisar passar pelas mesmas dificuldades que
eu passei.

Sei que isso pode parecer bom demais para ser verdade.
Mas, se eu tivesse esse conteúdo que estou te passando lá
em 2014, com certeza teria sido muito mais fácil.

Ademais, não precisa se preocupar pois não estou


falando de você copiar projetos e códigos que você não
entende a lógica.
8 ANIGÁP

Ao invés disso, o que vou te mostrar é algo que


realmente funciona e que vai te ajudar a chegar em um
nível em que você vai construir seus próprios projetos sem
precisar de cópias.

FLAVIOBABOS.COM.BR
SOBRE ESTA APOSTILA

Você finalmente irá:

Aprender de vez sobre programação C++;

Se aprofundar em eletrônica e ampliar seus


conhecimentos em circuitos com Arduino;

Criar seus próprios projetos.

Sem precisar de:

Ficar horas copiando códigos que não sabe


programar ou que não entende a lógica;

Imitar projetos das outras pessoas;

Pagar por cursos sem qualidade que não vão


resolver seus problemas.

E não importa se:

Você é um completo iniciante;


Você tem poucas horas por dia para aplicar;
Você tentou de tudo e não conseguiu.

Não precisa se preocupar, o método que está dentro


desta apostila está estruturada de uma forma bem
didática.

Basta seguir o plano para ter 100% de sucesso!


9 ANIGÁP

FLAVIOBABOS.COM.BR
VAMOS AO QUE INTERESSA

Os componentes eletrônicos mais usados nos projetos


desta apostila serão os listados a seguir:

pinos combinam em
encaixes fêmeas, como
aqueles na protoboard.
Eles auxiliam em uma
conexão direta e fácil.

1) Arduino UNO – esta é a


famosa “placa” que irá
intermediar nossos projetos.
Ela é um simples computador,
que você irá usar para
construir circuitos e
interfaces, que possui um
microcontrolador que irá
comunicar com os demais 4) Protoboard – uma
componentes. placa na qual você irá
montar seus circuitos
eletrônicos. É como se
fosse um um painel com
diversas linhas seguidas
de furos que permite você
conectar juntos, fios e
2) Encaixe da bateria – componentes. Esse tipo de
usado para conectar uma protoboard é bastante
bateria de 9V em cabos de comum de ser utilizada nos
alimentação que pode ser projetos e fácil de ser
facilmente instalado no encontrada no mercado
01 ANIGÁP

Arduino. brasileiro.

3) Pinos machos – esses


FLAVIOBABOS.COM.BR
VAMOS AO QUE INTERESSA

7) Piezo ou buzzer – um
componente elétrico que
pode ser usado para
5) Capacitores – esses detectar vibrações e gerar
componentes armazenam e ruídos.
liberam a energia elétrica.
São usados principalmente
para evitar flutuações nos
circuitos.

8) Foto resistor (também


chamado de foto-célula,
ou resistor dependente
6) Motor DC (corrente de luz) – Um resistor
contínua) – converte a variável que muda sua
energia elétrica em energia resistência de acordo com
mecânica quando a a quantidade de luz que
eletricidade flui pelas suas ele absorve a através de
bobinas e, assim, as bobinas sua face.
se magnetizam quando a
corrente flui através delas.
Esses campos magnéticos
atraem e repelem magnetos,
fazendo com que o eixo gire.
11 ANIGÁP

Cas a a corrente se inverter


o motor irá girar na direção
oposta.

9) Potenciômetro –
também é um resistor vari-
FLAVIOBABOS.COM.BR
VAMOS AO QUE INTERESSA

iável. Ele possui 3 pinos. Dois resultante. Os valores de


deles são conectados um resistor são medidos
internamente às em ohms (representado
extremidades de um resistor pelo caractere grego
fixo, enquanto que, o pino do ômega: Ω). As listras
meio se movimenta sobre o coloridas ao longo dos
resistor, dividindo-o em duas resistores indicam o seu
metades. Quando esses pinos valor de resistência (veja
são submetidos a uma a tabela de código de
corrente, o pino do meio irá cores no Projeto 2).
fornecer a diferença em
tensão quando girarmos o
potenciômetro de um lado
para outro.

10) Botões de pressão ou 12) Servo motor – um tipo


push bottons – fecham um de motor engrenado que
circuito quando são gira apenas 180º. Ele é
pressionados. Eles encaixam controlado quando são
facilmente nas protoboards. enviados pulsos elétricos
Eles são utilizados para do Arduino. Esses pulsos
identificar sinais on/off. dizem ao motor qual a
posição que ele deve se
mover.
21 ANIGÁP

13) Sensor de
11) Resistores – resistem à temperatura – muda a
corrente de energia elétrica tensão de saída
em um circuito, alterando a dependendo da
tensão e corrente como temperatura do componen-
FLAVIOBABOS.COM.BR
VAMOS AO QUE INTERESSA

te. As pernas do lado de fora tem um motor ou outra


conectam ao power e ao carga de alta
ground. A tensão no pino do corrente/tensão no
centro muda conforme o circuito. Diodos são
componente vai esquentando polarizados, isto é, a
ou esfriando. direção que eles são
colocados no circuito
importa. Se ligar seus
extremos de uma forma, o
componente permite a
corrente passar de um
lado. Se colocar do outro,
ele bloqueia a passagem
dessa corrente. Já o anodo
geralmente é conectado
14) Transistor – um no ponto onde há maior
dispositivo de 3 pernas que energia no circuito e o
consegue operar como um catodo tipicamente é
interruptor elétrico. Útil para conectado do lado de
controlar componentes de menor energia, ou seja, ao
alta tensão e alta corrente ground. O catodo é
como motores. Um pino usualmente marcado com
conecta ao ground, o outro uma banda de um lado do
pino ao componente a ser corpo do componente.
controlado e o terceiro pino
conecta ao Arduino. Quando
o componente recebe tensão
no pino conectado ao
Arduino, ele fecha o circuito
entre o ground e o outro
componente eletrônico.
15) Ponte-H – Um circuito
31 ANIGÁP

que permite você controlar


a polaridade da tensão
aplicada na carga,
geralmente essa carga é
15) Diodo – garante que a um motor. A ponte-H,
eletricidade flua apenas em como mostrada na imagem,
uma direção. Útil quando se é um circuito integrado.
FLAVIOBABOS.COM.BR
VAMOS AO QUE INTERESSA

caracteres cada.

16) Diodo emissor de luz


(light emitting diodes –
LED’s) – um tipo de diodo
que ilumina quando a
eletricidade passa através
dele. Como todos os diodos, a
eletricidade flui apenas em
uma direção nesses
componentes, ou seja, os
LED’s são polarizados. O
anodo que conecta ao power,
é o pino mais comprido e o
catodo, é o pino mais curto.

17) Display de cristal líquido


(liquid Crystal display –
LCD) – um tipo de exibidor 18) Cabo USB – não
alfa-numérico ou gráfico menos importante, esse
41 ANIGÁP

baseado em cristais líquidos. cabo que vai fazer a


LCD’s estão disponíveis no comunicação da placa do
mercado em todos os Arduino ao computador
tamanhos, formatos e estilos. para enviar o código ao
Geralmente em KIT’S de microcontrolador.
Arduino usa-se o mostrado
na imagem com 2 linhas e 16
FLAVIOBABOS.COM.BR
TABELA DE SÍBOLOS MAIS USADOS

51 ANIGÁP

FLAVIOBABOS.COM.BR
PLACA ARDUINO UNO

Conector de energia Botão de Reset do


aceita 7-12V. microcontrolador.

Porta USB LED's TX e RX


energizar o arduino, indicam comunicação
entre o Arduino e

IA
dar upload nos
códigos e fazer seu computador. Eles
comunicação serial ascendem quando há

R
(via Serial.println() upload de código e
durante a

A
etc).
comunicação serial.

H
EN
LED pino 13 é a
G

única led construída


no seu Arduino Uno.
N
SE

Pinos Digitais, use


BO

esse pinos com


digitalRead(),
digitalWrite() e
BA

analoWrite(). Esse
último se aplica
apenas às portas
@

de símbolo PWM.

Microcontrolador
Pinos GND, 5V e 3.3V ATMEGA.
61 ANIGÁP

energize seus circuitos


através desses pinos.
Power LED, indica que
o Arduino está ligado.

Analog in, use esse pinos com analogRead().

FLAVIOBABOS.COM.BR
INSTALAÇÃO DA IDE

Você precisa fazer o donwload da IDE para programar sua


placa. Caso já tenha ela instalada no seu sistema
operacional, basta pular para o primeiro projeto deste E-
book nas páginas subsequentes.

A IDE permite que você escreva programas e possibilita


que você os descarregue no arduino.

Baixe a última versão do software aqui:

arduino.cc/download

Não conecte o arduino e o cabo USB ainda.

Siga os procedimentos apropriados nas próximas páginas


para instalar a IDE seja qual for seu sistema operacional
Windows, Mac OS ou Linux.

71 ANIGÁP

Figura 1 - Ilustração da IDE

FLAVIOBABOS.COM.BR
INSTALAÇÃO NO WINDOWS

1) Quando o download da IDE terminar, descompacte o


arquivo baixado. Certifique-se de preservar a estrutura da
pasta. Clique duas vezes na pasta para abri-la. Deve haver
alguns arquivos e subpastas dentro.

2) Conecte o Arduino ao seu computador com o cabo USB.


Seu Arduino consumirá energia automaticamente da
conexão USB ao computador ou de uma fonte de
alimentação externa. A luz verde de energia (rotulada
PWR) deve acender.

3) O Windows deve iniciar seu processo de instalação do


driver quando a placa estiver conectada. Seu computador
não conseguirá encontrar os drivers sozinho, portanto, é
necessário informar onde eles estão localizados.

- Clique no menu Iniciar e abra o Painel de Controle.

- Navegue para "Sistema e segurança" e, após, abra o


Gerenciador de dispositivos.

- No Windows XP, procure a listagem denominada "Portas


(COM e LPT)" e clique com o botão direito na porta
"dispositivo USB"; no Vista e Windows 7, clique com o
botão direito em "Dispositivo desconhecido" em "Outros
dispositivos".

- Escolha "Atualizar driver do software".

- No Windows XP e Windows 7, você será perguntado se


81 ANIGÁP

para instalar automaticamente ou "com um caminho".


Escolha a segunda opção, "com um caminho". No Windows
Vista, prossiga diretamente para a próxima etapa.

- Selecione a opção "Procurar no meu computador pelo


driver do software".

- Navegue até a pasta que você descompactou na etapa


FLAVIOBABOS.COM.BR
INSTALAÇÃO NO WINDOWS

anterior. Localize e selecione a pasta “Drivers” na pasta


principal do Arduino (não o subdiretório “FTDI USB
Drivers”). Pressione "OK" e "Avançar" para prosseguir.

- Se você for solicitado com uma caixa de diálogo de aviso


sobre não passar Teste do logotipo do Windows, clique em
"Continuar mesmo assim".

- O Windows agora assumirá a instalação do driver. No


Gerenciador de dispositivos, agora você deve ver uma lista
de portas semelhantes para "Arduino UNO (COM4)".

Parabéns!

Você instalou o Arduino IDE no seu WINDOWS.

91 ANIGÁP

FLAVIOBABOS.COM.BR
INSTALAÇÃO NO MAC OS 10.5 OU SUPERIOR

1) Quando o download da IDE terminar, clique duas vezes


no arquivo .zip. Isso expandirá o aplicativo Arduino.

2) Copie o aplicativo Arduino para a pasta Aplicativos ou


onde quer que você deseje instalar o software.

3) Conecte a placa ao computador com o cabo USB. O LED


verde de energia (rotulado como PWR) deve acender.

4) Você não precisa instalar nenhum driver para trabalhar


com a placa. Dependendo da versão do OS X que você
esteja executando, pode aparecer uma caixa de diálogo
perguntando se você deseja abrir o " Preferências de
rede”. Clique no botão "Preferências de rede ..." e depois
clique em "Aplicar".

5) O Uno aparecerá como "Não configurado", mas está


funcionando. Você pode sair das Preferências do Sistema.

Parabéns!

Você tem o Arduino configurado e está pronto para


começar a fazer projetos no MAC OS!
02 ANIGÁP

FLAVIOBABOS.COM.BR
INSTALAÇÃO NO LINUX

Caso esteja usando LINUX, visite o site para mais


instruções:

arduino.cc/linux

A COMUNICAÇÃO COM O ARDUINO

Agora que está tudo pronto, com a IDE já instalada no seu


computador, é hora de verificar se ela consegue dar
upload em algum programa.

1) Clique duas vezes no aplicativo Arduino para abri-lo. Se


a IDE carregar no idioma errado, você pode alterar isso no
aplicativo preferências. Procure "Suporte ao Idioma" nesta
página para obter detalhes:

arduino.cc/ide

2) Navegue até o esboço de exemplo de LED piscante


('sketch' é o que os programas do Arduino são chamados).
Está localizado em: ARQUIVO > EXEMPLOS > 01.BASICS >
BLINK.

3) Uma janela com algum texto deveria ter sido aberta.


Deixe-o por enquanto, e selecione seu quadro em:
FERRAMENTAS > BOARD.

4) Escolha a porta serial à qual seu Arduino está conectado


a partir do menu FERRAMENTAS > PORTA SERIAL.
12 ANIGÁP

5) Para dar upload no programa BLINK para seu arduino,


pressione UPLOAD no canto esquerdo da janela.

6) Você deverá ver uma barra indicando o andamento do


upload próximo ao canto inferior esquerdo da IDE do
Arduino e as luzes indicadas TX e RX na placa do Arduino
estarão piscando. Se o upload for bem sucedido, a IDE
exibirá a mensagem DONE UPLOADING.
FLAVIOBABOS.COM.BR
A COMUNICAÇÃO COM O ARDUINO

7) Alguns segundos depois que der o upload, você deverá


ver o LED amarelo com um L ao lado começar a piscar. Se
isso acontecer, sucesso! Você acaba de programar o
arduino a piscar sua própria LED interna.

Você pode mudar o tempo de delay que o LED fica em


standby para piscar na IDE e ir alternando para brincar
com o código. Após todos esses passos, você já está apto a
começar o projeto 1 deste E-BOOK.

ESTÁ PREPARADO PARA POR A MÃO NA


MASSA?

Então, chegou a hora de aprender a programar e a montar


seus próprios projetos com os 10 exemplos didáticos e
ilustrativos como prometido!

Se divirta com o que você irá desvendar nas próximas


páginas!

APROVEITE!
22 ANIGÁP

FLAVIOBABOS.COM.BR
SUMÁRIO

PROJETO 1
RESISTOR DE 220 OHM
SWITCH

32 ANIGÁP
LED

COMPONENTES UTILIZADOS

FLAVIOBABOS.COM.BR
PROJETO 1

CONHEÇA SEUS PRIMEIROS COMPONENTES

Você irá fazer um circuito simples com


alguns botões, um led e um resistor!

Descubra neste projeto: teoria básica de


eletrônica, como funciona uma protoboard,
componentes em série e em paralelo.

TEMPO: 30 minutos

NÍVEL:

Eletricidade é um tipo de energia, como o calor, a


gravidade ou a luz. A energia elétrica flui através
de condutores como fios. Você pode converter a
energia elétrica em outras formas de energia para
fazer algo interessante como ligar uma luz/LED ou
fazer barulho com um auto-falante.

Os componentes que você deverá usar para fazer


isso, como auto-falantes ou lâmpadas, são
transdutores elétricos. Transdutores transformam
outros tipos de energia em energia elétrica e vice-
versa. Componentes que convertem outras formas
de energia em energia elétrica são chamados de
sensores, e componentes que convertem energia
elétrica em outras formas de energia são chamados
42 ANIGÁP

de atuadores.

Em um circuito, eletricidade flui de um ponto de


uma grande quantidade de energia potencial
(geralmente é denotado como power ou +) para um
ponto de energia potencial menor.
FLAVIOBABOS.COM.BR
PROJETO 1

Ground (geralmente representado por GND ou -) é


geralmente um ponto com a menor energia
potencial em um circuito. Nos circuitos que você irá
montar, a eletricidade fluirá somente em uma
direção. Esse tipo de circuito é chamado de
corrente contínua ou DC.

Nos circuitos de corrente alternada (CA), a


eletricidade muda de direção 50 ou 60 vezes por
segundo (dependendo de onde você mora). Isso é o
tipo de eletricidade que vem de uma tomada de
parede.

Existem alguns termos com os quais você deve se


familiarizar ao trabalhar com circuitos. Corrente
(medida em ampères; com o símbolo A) é a
quantidade de carga elétrica que flui para além de
um ponto específico do seu circuito. Tensão
(medida em volts; com o símbolo V) é a diferença de
energia entre um ponto em um circuito e outro. E,
finalmente, a resistência (medida em ohms; com o
símbolo Ω) é o quanto um componente resiste ao
fluxo de corrente elétrica.
Uma maneira de
imaginar isso é pensar
em um deslizamento de
rocha indo ladeira
52 ANIGÁP

abaixo em um penhasco,
como mostrado ao lado.
Quanto mais alto o
penhasco, mais energia
as rochas terão quando
atingirem o fundo.
FLAVIOBABOS.COM.BR
PROJETO 1

A altura do penhasco é como a tensão em um


circuito: quanto maior a tensão na energia da
fonte, mais energia você tem que usar.

Quanto mais pedras você tem, mais energia será


transportada pelo penhasco. O número de rochas
é como a corrente em um circuito elétrico. As
pedras vão através de arbustos ao lado do
penhasco, perdendo um pouco de energia no
processo; a energia é usada para esmagar os
arbustos.

Os arbustos são como resistores em um circuito,


oferecendo resistência à eletricidade fluir e
convertê-la em outras formas de energia.

Algumas coisas sobre circuitos

1) Precisa haver um caminho completo a partir da


fonte de energia (potência) até o ponto de menor
energia (terra) para fazer um circuito. Se não
houver caminho para a energia viajar, o circuito
não funcionará.

2) Toda a energia elétrica é consumida em um


circuito pelos componentes nele. Cada componente
62 ANIGÁP

converte parte da energia em outra forma de


energia. Em qualquer circuito, toda a tensão é
convertida para outra forma de energia (luz, calor,
som, etc.).

3) O fluxo de corrente em um ponto específico de


um circuito sempre será o mesmo entrando e saindo.
FLAVIOBABOS.COM.BR
PROJETO 1

82 ANIGÁP

FLAVIOBABOS.COM.BR
PROJETO 1

Esquema do circuito

Ao longo dos projetos, você irá se deparar com 2


imagens dos projetos: a montagem dos
componentes do projeto e o esquema elétrico da
montagem que é usado para representar as
conexões entre os componentes de um circuito.

A vista esquemática não mostra sempre onde os


componentes são inseridos na protoboard, mas ela
mostra como eles são conectados entre si.

As imagens esquemáticas e do projeto montado


são elaboradas com a ajuda do software Fritzing,
um software de iniciativa open-source.

Você pode fazer o download dele aqui:

92 ANIGÁP

Montagem do projeto
FLAVIOBABOS.COM.BR
PROJETO 1

03 ANIGÁP

Ilustração esquemática do projeto

FLAVIOBABOS.COM.BR
PROJETO 1

Conexões do botão

Esses dois pinos


estão conectados.


esses
dois
não
estão.

Montando o circuito

23 ANIGÁP

Seu primeiro circuito interativo, usando um


botão, um resistor e um LED

FLAVIOBABOS.COM.BR
PROJETO 1

O Arduino está apenas fornecendo energia para


esse circuito; em projetos futuros, você irá usar os
pinos input e output do Arduino para controlar
circuitos mais complexos.

1) Conecte o fio vermelho ao pino


de 5V do Arduino e coloque a
outra extremidade em uma das
longas linhas da sua protoboard.
Conecte o terra do Arduino com
um fio preto na outra linha
adjacente. É útil manter a cor do
fio consistente (vermelho para
power, preto para GND) em todo o
seu circuito.

2) Agora que está tudo montado,


coloque o botão atravessando a
sua protoboard. O botão tem um
lado para ser inserido, atente-se:
a curva nas pernas do botão para
o centro da protoboard.

3) Use um resistor de 220 ohms


para conectar os 5V de um lado do
interruptor. Aqui iremos usar
33 ANIGÁP

resistores de 4 bandas. Já você


deve possuir um mix de 4 a 5
bandas de resistores. Vá para o
final do Projeto 2 onde eu faço
uma explicação detalahada sobre
resistores e seus códigos.

FLAVIOBABOS.COM.BR
PROJETO 1

DIVIRTA-SE!

Basta pressionar o botão que você deverá ver o


LED acender.

Parabéns, seu primeiro circuito foi montado! O


próximo passo é inserir outro botão.

SE liga! Agora você irá aprender a colocar


componentes em série e em paralelo na protoboard.

Circuitos em série!

Circuito em série, os elementos se posicionam um


após o outro.

Após remover o cabo USB ou a fonte do seu


circuito, adicione outro botão na montagem feita
anteriormente.

Conecte o LED ao catodo (gnd) e ligue o arduino.


Agora para ligar o LED você precisa pressionar
ambos botões ao mesmo tempo. Isso acontece pois,
quando estão em série, ambos precisam fechar o
circuito para a eletricidade fluir até o LED e
43 ANIGÁP

acendê-lo.

Passe para a próxima página e veja a montagem


do circuito.

FLAVIOBABOS.COM.BR
PROJETO 1

Montagem dos componentes do circuito em série

Os dois botões estão em série. Isso significa que a


mesma corrente circula através deles. Portanto
ambos precisam ser pressionados ao mesmo tempo
para acender o LED.

53 ANIGÁP

Montagem esquemática do circuito em série

FLAVIOBABOS.COM.BR
PROJETO 1

Entendendo a LEI de OHM

Observe os círculos abaixo para te ajudar a


associar as relações entre tensão, corrente e
resistência caso ainda não conheça essa Lei.

V=R*I R=V/I

I=V/R

Observe que corrente, tensão e resistência estão


diretamente relacionados. Quando você muda uma
dessas variáveis em um circuito, irá afetar o
restante. A relação entre eles é conhecida como Lei
83 ANIGÁP

de Ohm, nomeada assim graças aos estudos e


descobertas de Geog Simon Ohm.

TENSÃO (V) = CORRENTE (I) * RESISTÊNCIA (R)

FLAVIOBABOS.COM.BR
PROJETO 1

Recaptulando...

Você aprendeu sobre as propriedades de tensão,


corrente e resistência enquanto montava os
circuitos propostos.

Com alguns componentes como LED’s, resistores e


interruptores/botões, você criou um sistema
interativo simples: um usuário pressiona o botão e a
luz acende.

Essas diretrizes básicas de trabalho na eletrônica,


serão melhor trabalhadas e explicadas nos próximos
projetos que estão por vir.

A saber

Um multímetro é uma ferramenta que você


consegue verificar diversas variáveis como
resistência, corrente e tensão em um circuito. Não é
requisito essencial possuir essa ferramenta em mãos
para desenvolver os projetos desta apostila.

MULTÍMETRO
04 ANIGÁP

FLAVIOBABOS.COM.BR
SWITCH

LED

COMPONENTES UTILIZADOS
SUMÁRIO

FLAVIOBABOS.COM.BR
RESISTOR DE 220 OHM
PROJETO 2

RESISTOR DE 10 KILOHM

14 ANIGÁP
PROJETO 2

PROJETO: ACENDENDO 3 LED's

Descubra neste projeto: pinos digitais


inputs e outputs, seu primeiro programa e
variáveis.

TEMPO: 45 minutos

NÍVEL:

Agora que você já tem uma certa base de


eletricidade, é hora de usar seu Arduino para
começar a controlar as coisas. Neste projeto, você
irá montar algo que poderá ter sido parte de uma
interface de espaçonave de filme de ficção
científica da década de 70.

Você irá montar um painel de controle com um


botão e luzes que acendem quando você pressiona
o interruptor. Um LED verde irá acender se você
apertar o botão.

Quando o Arduino receber um sinal do botão, a


luz verde irá desligar e outras 2 luzes começarão a
piscar.

Os pinos digitais do Arduino podem ler apenas


24 ANIGÁP

dois estados: quando há tensão em um pino de


entrada e quando não há. Esse tipo de entrada é
normalmente chamado de digital (ou, às vezes,
binário, para dois estados).

FLAVIOBABOS.COM.BR
PROJETO 2

Esses estados são comumente referidos como


HIGH e LOW.

HIGH é o mesmo que dizer "há tensão aqui!" e


LOW significa "não há tensão neste pino!". Quando
você usa um pino OUTPUT HIGH com um comando
chamado digitalWrite (), está ativando-o.

Além disso, se você medir a tensão entre o pino e


o GND você obterá 5 volts. Quando você atribui a
um pino OUTPUT LOW, significa que você está
desligando-o.

Os pinos digitais do Arduino podem atuar como


entradas (INPUTS) e saídas (OUTPUTS). No seu
código, você os configurará dependendo do que
você deseja que a função deles seja.

Quando os pinos são OUTPUTS, você pode ligar


componentes como LEDs. Se você configurar os
pinos como INPUTS, poderá verificar se um
interruptor está sendo pressionado ou não.

Para essa configuração de INPUT você irá usar o


pino 2. Nós não usamos os pinos 0 e 1 pois eles são
usados pelo Arduino para se comunicar com o
computador.
34 ANIGÁP

Montando o circuito

FLAVIOBABOS.COM.BR
PROJETO 2

Montagem do projeto

44 ANIGÁP

Montagem esquemática do projeto

FLAVIOBABOS.COM.BR
PROJETO 2

1) Conecte sua protoboard aos 5V


do Arduino e ao pino GND, assim
como no projeto anterior.

2) Insira dois LEDs


vermelhos e um LED verde
na protoboard. Conecte o
catodo (perna curta) de
cada LED ao GND através
de um resistor de 220
ohms. Conecte o anodo
(perna longa) do LED
verde ao pino 3. Conecte
os anodos dos LEDs
vermelhos aos pinos 4 e 5,
respectivamente.

3) Insira o interruptor na
protoboard, como fez no exemplo
do projeto anterior. Conecte um
lado ao power e o outro lado ao
pino digital 2 do Arduino. Você
54 ANIGÁP

também precisará adicionar um


resistor de 10k ohm do GND ao
pino do switch que se conecta no
Arduino.

FLAVIOBABOS.COM.BR
PROJETO 2

O CÓDIGO
Antes de começar...

Todo programa do Arduino tem duas funções


principais. As funções são partes de um programa
de computador que executa comandos específicos.
As funções têm nomes exclusivos e são "chamadas"
quando necessário. As principais e essenciais em
qualquer código em um programa Arduino são
chamadas de setup () e loop ().

Essas funções precisam ser declaradas, o que


significa que você precisa dizer ao Arduino o que
essas funções farão: setup () e loop ().

64 ANIGÁP

FLAVIOBABOS.COM.BR
PROJETO 2

Nele, você criará uma variável antes de obter na


parte principal do programa. Variáveis são nomes
que você fornece para serem armazenados na
memória do Arduino, para que você possa
acompanhar o que está acontecendo. Esses valores
podem mudar dependendo das instruções que der
ao seu programa.

Os nomes de variáveis devem ser descritivos de


qualquer valor que estejam armazenando. Por
exemplo, uma variável chamada estadobotao
informa que amarzena o estado de um switch.

Feito isso, selecione a placa correta e a porta


USB correta com as duas próximas instruções:

74 ANIGÁP

Selecione a placa correta


FLAVIOBABOS.COM.BR
PROJETO 2

Selecione porta USB correta

ENFIM, BORA PROGRAMAR?


int estadobotao = 0; //declare a variável inteira de leitura do botão

void setup() {

pinMode(3,OUTPUT); //diga ao arduino que os pinos das LEDs são de saída:


'OUTPUT'
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
84 ANIGÁP

pinMode(2, INPUT); //agora para o botão, será de entrada: 'INPUT'


//será 'INPUT' para que o arduino faça a leitura do estado do
botão
}

void loop() {
estadobotao = digitalRead(2); //a variável 'estadobotao' recebe o estado da porta
digital 2

FLAVIOBABOS.COM.BR
PROJETO 2

if (estadobotao == LOW){ // se o botão não estiver pressionado

digitalWrite(3, HIGH); // acende o LED da porta 3


digitalWrite(4, LOW); // apaga o LED da porta 4
digitalWrite(5, LOW); // apaga o LED da porta 5
}

else{ // se estiver pressionado

digitalWrite(3, LOW); // apaga o LED da porta 3


digitalWrite(4, LOW); // apaga o LED da porta 4
digitalWrite(5, HIGH); // acende o LED da porta 5

delay(250); // espera 0.250 segundos


digitalWrite(4, HIGH); // acende o led da porta 4
digitalWrite(5, LOW); //apaga o led da porta 5
delay(250); //espera mais 0.250 segundos
}

O código explicado passo a passo

int estadobotao = 0;

Para criar uma variável, você precisa


declarar de que tipo ela será. A variável que
declarar como int irá guardar um número
(também chamado de inteiro); isso significa ser
94 ANIGÁP

qualquer valor sem um ponto decimal. A


declaração da variável como em toda
instrução deve terminar com um ponto e uma
vírgula (;).

FLAVIOBABOS.COM.BR
PROJETO 2

void setup() {

pinMode(3,OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(2, INPUT);
}

CONFIGURE A FUNCIONALIDADE DOS


PINOS! O setup() roda uma vez, quando o
Arduino é inciado/ligado. É aqui que você
configura os pinos digitais para ou serem
inputs ou outputs usando a função pinMode().
Os pinos onde LED’s são conectados são
chamados OUTPUT e o botão/switch será
declarado como INPUT.

void loop() {
estadobotao = digitalRead(2);

CRIE UMA FUNÇÃO DE LOOP! O loop()


roda repetitivamente após o setup() tiver sido
executado. É na função loop() onde você irá
verificar a tensão nos inputs, e ligar ou
desligar os outputs. Para verificar a tensão em
um input digital, usa-se a função
digitalRead() que verifica a voltagem do pino
05 ANIGÁP

escolhido. Para saber qual pino verificar,


digitalRead() aguarda por um argumento.

Os argumentos são informações que você


passa para funções anteriormente declaradas,

FLAVIOBABOS.COM.BR
PROJETO 2

dizendo a elas como elas devem executar o


código. Por exemplo, digitalRead () precisa de
um argumento: qual pino checar.

No seu programa, digitalRead () irá


verificar o estado do pino 2 e armazenar o
valor na variável estadodobotao. Caso não
haja tensão no pino quando a função
digitalRead () é chamada, será atribuida à
variável estadodobotao HIGH (ou 1). Se não há
tensão no pino, será atribuído LOW ao
estadodobotao (ou 0).

if (estadobotao == LOW){

A CONDIÇÃO IF: no código, você utiliza


a palavra if (se, em inglês) para verificar o
estado de algo. Essa declaração if em
programação faz uma comparação entre dois
fatores, e determina se a comparação é
verdadeira ou se é falsa. Feito isso, será
tomada uma ação de acordo com o que você
pedir para fazer após a condição.
15 ANIGÁP

Além disso, é usado o sinal == em


programação para quesito de comparação. Se
você usar apenas um sinal, será igualado um
valor ao invés de compará-lo.

FLAVIOBABOS.COM.BR
PROJETO 2

digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}

CONSTRUA SUA NAVE ESPACIAL:


digitalWrite() é o comando que permite que
você mande 5V ou 0V para um pino output.
Essa função leva em consideração dois
argumentos: qual pino controlar, e qual valor
determiniar para aquele pino, HIGH ou LOW.
Se você quer ligar o LED vermelho e desligar o
LED verde dentro da sua condição if(), seu
código se parecerá com o exemplo desse
projeto 2.

else{
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);

delay(250);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
delay(250);
}

}
25 ANIGÁP

Até o momento, o arduino já sabe o que


fazer quando o botão não está pressionado.
Portanto, defina agora o que deve acontecer
quando o botão for pressionado. A condição if

FLAVIOBABOS.COM.BR
PROJETO 2

tem uma opção chamada else (senão, em


inglês) que permite que algo aconteça se a
condição original não for obedecida. Neste
caso, escreva um código para uma condição
HIGH (1) após o else.

Para que os LED’s vermelhos pisquem


quando o botão for pressionado, você terá que
ligar e desligar as luzes no else que você
acabou de escrever. Para isso, mude o código
para ficar igual ao exemplo dado neste
projeto.

Agora seu programa irá acender apenas o


LED verde quando o botão estiver
pressionado!

Após ajustar os LED’s para um determinado


estado HIGH/LOW, iremos fazer com que o
Arduino pause por um momento. Se você não
quiser esperar, as luzes irão acender e apagar
tão rapidamente que você nem perceberá. Isso
porque a função loop () é processada muitas
vezes por segundo, e os LED’s irão apagar e
ligar sem que nós percebêssemos.

Para resolver esse problema usamos a


35 ANIGÁP

função delay (). Ela permite que você dê uma


pausa na execução de qualquer coisa por um
período de tempo. delay () tem seu argumento
de tempo na escala de milisegundos, ou seja,
1000 milisegundos equivale a 1 segundo. Um
delay (250) representa ¼ de segundo.

FLAVIOBABOS.COM.BR
PROJETO 2

Observe!

Uma vez que seu Arduino estiver programado,


você irá ver a luz verde que está nele ligar.
Quando você pressionar o botão, as luzes
vermelhas começarão a piscar, e a luz verde irá
desligar.

Tente mudar o tempo das funções delay() e note


o que acontece com as luzes e como a resposta do
sistema muda dependendo da velocidade do piscar
das luzes.

Quando você insere uma função delay() no seu


programa, ele interrompe todas as outras
funcionalidades e nenhuma leitura de sensor irá
ocorrer antes que o período de tempo estipulado
por você passe.

Desafio

Como você faria para que os LEDs vermelhos


piscassem quando o programa iniciar?
45 ANIGÁP

Como você pode criar uma interface maior ou


mais complexa para suas aventuras
interestelares com LEDs e switches?

FLAVIOBABOS.COM.BR
PROJETO 2

Recaptulando...

Neste projeto, você criou seu primeiro programa


Arduino para controlar o comportamento de alguns
LEDs com base em um botão/switch.

Você usou variáveis, uma instrução if () ... else e


funções para ler o estado de uma entrada e
controlar saídas.

Fazendo a leitura das cores dos


resistores

Os valores dos resistores são marcados usando


faixas coloridas, de acordo com um código
desenvolvido na década de 1920, quando era muito
difícil escrever números em objetos tão pequenos.

Cada cor corresponde a um número, como você


vê na tabela da próxima página. Cada resistor
possui 4 ou 5 bandas. No tipo de 4 bandas, as duas
primeiras indicam os dois primeiros dígitos do valor
enquanto o terceiro indica o número de zeros que se
seguem (tecnicamente representa a potência de
dez).
55 ANIGÁP

A última banda especifica a tolerância. No


exemplo a seguir, o amearelo indica que o valor do
resistor pode ser 10k ohm mais ou menos 5%.

FLAVIOBABOS.COM.BR
PROJETO 2

@BABOSENGENHARIA

4 bandas

5 bandas
220 Ω 560Ω 4.7kΩ

4 bandas
65 ANIGÁP

5 bandas
1kΩ 10kΩ 1MΩ 10MΩ

FLAVIOBABOS.COM.BR
SUMÁRIO

PROJETO 3
SENSOR DE TEMPERATURA
RESISTOR DE 220 OHM

75 ANIGÁP
LED

COMPONENTES UTILIZADOS

FLAVIOBABOS.COM.BR
PROJETO 3

PROJETO: MEDIDOR DE TEMPERATURA

Descubra neste projeto: entrada analógica e


uso do monitor serial.

TEMPO: 45 minutos
Montado nos
projetos 1 e 2.
NÍVEL:

Embora os interruptores e botões sejam ótimos,


há muito mais no mundo físico do que ligar e
desligar. Por mais que o Arduino seja uma
ferramenta digital, é possível obter informações de
sensores analógicos para medir coisas como
temperatura ou luz.

Para fazer isso, você usará o conversor


analógico-digital (CAD ou ADC, em inglês) do
Arduino. Os pinos analógicos A0-A5 podem
reportar um valor entre 0-1023, que é mapeado
para uma faixa de 0 a 5 volts.
Você usará um sensor de temperatura
para medir a temperatura da pele. Este
componente gera uma tensão variável,
dependendo da temperatura em que ele
se encontra. Ele possui três pinos: um
85 ANIGÁP

que se conecta ao terra, outro que se


conecta ao power e um terceiro que
gera uma tensão variável para o seu
Arduino.
No sketch deste projeto, você lerá a saída do
sensor e a utilizará para ligar e desligar os LED's,
FLAVIOBABOS.COM.BR
PROJETO 3

indicando a mudança de temperatura. Existem


vários modelos diferentes de sensor de
temperatura. Este modelo, o TMP36, é útil porque
gera uma tensão que muda diretamente
proporcional à temperatura em graus Celsius.

A IDE do Arduino vem com uma ferramenta


chamada monitor serial que permite que você veja
os resultados do microcontrolador. Usando o
monitor serial, você pode obter informações sobre o
status dos sensores e ter uma idéia do que está
acontecendo no seu circuito durante a execução do
código.

Montando o circuito

95 ANIGÁP

Montagem dos componentes do projeto

FLAVIOBABOS.COM.BR
PROJETO 3

Montagem esquemática do projeto

1) Assim como você fez nos


projetos anteriores, conecte sua
protoboard no Arduino para ter
corrente fluindo pelo circuito.

2) Coloque o TMP36 na protoboard


06 ANIGÁP

com a parte arredondada voltada


para fora do Arduino (a ordem dos
pinos é importante!), como
mostrado na montagem. Conecte o
pino esquerdo do lado plano ao
power e o pino direito ao GND.
FLAVIOBABOS.COM.BR
PROJETO 3

Conecte o pino central ao pino A0


no seu Arduino. Este é o pino de
entrada analógica 0.

3) Conecte o cátodo (perna curta)


de cada um dos LEDs em um
resistor de 220 ohms. Conecte os
ânodos dos LEDs aos pinos 2 a 4
do Arduino. Estes serão os
indicadores para o projeto.

BORA PROGRAMAR?

const int sensorTMP = A0; //declare a variável de leitura do sensor


const float tempPadrao = 20.0; //declare a temperatura ambiente do lugar em que
//estiver

void setup() {

Serial.begin (9600); //inicializa a comunicação serial

for (int leds = 2; leds<5; leds++){ //este for lê as portas em que todos os leds
//estão conectados

pinMode(leds, OUTPUT); //declara os leds como output


digitalWrite(leds, LOW); //deixa os leds apagados por enquanto
}
}
16 ANIGÁP

void loop() {
int valorSensor = analogRead(sensorTMP); //variável que faz a leitura do sensor

Serial.print("Valor do sensor: "); //mostra no monitor serial o valor lido


Serial. print(valorSensor);

FLAVIOBABOS.COM.BR
PROJETO 3

float tensao = (valorSensor/1024.0)*5.0; //conversao da leitura do sensor em


//tensão V
Serial.print(", Tensao (V): "); //mostra no monitor serial a tensão lida
Serial.print(tensao);

Serial.print(", graus Celsius: "); //mostra no monitor serial os graus lidos


float temperatura = (tensao)*100; //variável que faz a conversão para graus C
Serial.println(temperatura);

if(temperatura < tempPadrao){ //se a temperatura lida for inferior que 20 °C


digitalWrite(2, LOW); //apaga led da porta 2
digitalWrite(3, LOW); //apaga led da porta 3
digitalWrite(4, LOW); //apaga led da porta 4

//se a temperatura lida estiver entre 22 ºC e 24 ºC


}else if(temperatura >= tempPadrao+2 && temperatura < tempPadrao+4){
digitalWrite(2, HIGH); //acende led da porta 2
digitalWrite(3, LOW); //apaga led da porta 3
digitalWrite(4, LOW); //apaga led da porta 4

//se a temperatura lida estiver entre 24 ºC e 26 ºC


}else if(temperatura >= tempPadrao+4 && temperatura < tempPadrao+6){
digitalWrite(2, HIGH); //acende led da porta 2
digitalWrite(3, HIGH); //acende led da porta 3
digitalWrite(4, LOW); //apaga led da porta 4

//se a temperatura lida for maior do que 26 ºC


}else if(temperatura >= tempPadrao+6){
digitalWrite(2, HIGH); //acende led da porta 2
digitalWrite(3, HIGH); //acende led da porta 3
digitalWrite(4, HIGH); //acende led da porta 4
}
26 ANIGÁP

delay(1);
}

Código explicado passo a passo

FLAVIOBABOS.COM.BR
PROJETO 3

const int sensorTMP = A0;


const float tempPadrao = 20.0;

AS CONSTANTES DO CÓDIGO: as
variáveis const int são diferentes de int. Se
você deseja que a variável seja apenas de
leitura, use const. Se precisar gravar outros
números ao longo do código, use a variável do
tipo int. Por exemplo, os números dos pinos
raramente devem ser alterados. Portanto, eles
geralmente devem ser const.

Outra coisa que vale a pena notar é que,


se você usar "const", se a variável for somente
leitura, o compilador poderá fazer otimizações,
o que inclui a não alocação de armazenamento
de dados para a variável.

Em nosso código, precisamos nomear a


entrada analógica para fácil referência e criar
outra constante para identificar a variação de
temperatura em graus. A cada 2 graus que
subir, um LED acende. Já a variável
temperatura está sendo armazenada como um
número de ponto flutuante. Esse tipo de
número é um decimal e é usado para números
que podem ser expressos como frações.
36 ANIGÁP

void setup() {

Serial.begin (9600);

INICIANDO COMUNICAÇÃO SERIAL: O


comando Serial.begin() inicia uma conexão

FLAVIOBABOS.COM.BR
PROJETO 3

entre o Arduino e o computador, para que


você possa ler os valores da entrada
analógica na tela do seu computador. O
argumento 9600 é a velocidade na qual o
Arduino se comunicará, ou seja, 9600 bits por
segundo.
Você usará o monitor serial da IDE do
Arduino para visualizar as informações que
desejar serem vistas do seu microcontrolador.
Quando você abrir o monitor serial da IDE,
verifique se a taxa de transmissão é de 9600.

for (int leds = 2; leds<5; leds++){


pinMode(leds, OUTPUT);
digitalWrite(leds, LOW);
}
}

DECLARANDO OS PINOS DIGITAIS: Use


um for () para definir alguns pinos como
saídas. Esses são os pinos aos quais você
conectou os LEDs anteriormente. Em vez de
dar nomes exclusivos e digitar a função
pinMode () de cada um, você pode usar um
loop for () para percorrer todos eles
rapidamente. Esse é um truque útil se você
tiver um grande número de componentes
semelhantes que deseja repetir em um
46 ANIGÁP

programa. Diga ao loop for () para percorrer


os pinos 2 a 4 sequencialmente.

Também, como ilustrado dentro do for (),


você pode criar variáveis como é o caso int
leds = 2.
FLAVIOBABOS.COM.BR
PROJETO 3

void loop() {
int valorSensor = analogRead(sensorTMP);

LENDO A TEMPERATURA DO SENSOR:


No loop (), você usará uma variável local
chamada valorSensor para armazenar a
leitura do seu sensor de temperatura. Para
obter o valor do sensor, escreva a função
analogRead () que usa um argumento: em qual
pino deve receber a leitura de tensão.

Serial.print("Valor do sensor: ");


Serial. print(valorSensor);

ENVIANDO OS VALORES PARA A TELA


DO PC: A função Serial.print () envia
informações do Arduino para o computador
conectado. Você pode ver essas informações
no seu monitor serial. Ao fornecer um
argumento para a função Serial.print (), entre
aspas, ele imprime o texto digitado. Se você
fornecer uma variável como argumento, ele
imprimirá o valor dessa variável.

float tensao = (valorSensor/1024.0)*5.0;


56 ANIGÁP

LENDO A TENSÃO DO SENSOR: Com um


pouco de matemática, é possível descobrir
qual é a tensão real no pino do sensor. A
tensão será um valor entre 0 e 5 volts e terá
uma parte fracionária (por exemplo, pode ser

FLAVIOBABOS.COM.BR
PROJETO 3

2,5 volts). Portanto, você precisará armazená-


la dentro de uma variável de ponto flutuante.
Crie uma variável denominada tensão para
armazenar esse número. Divida valorSensor
por 1024,0 e multiplique por 5,0. O novo
número irá representar a tensão no pino.

Serial.print(", Tensao (V): ");


Serial.print(tensao);

ENVIANDO OS VALORES PARA A TELA


DO PC: Se você examinar o datasheet do
sensor, há informações sobre a faixa da
tensão de saída. Esses datasheets são como
manuais para componentes eletrônicos. Eles
são escritos por engenheiros e especialistas
para detalhar as informações técnicas do
componente.

O datasheet deste sensor explica que


cada 10 milivolts é equivalente a uma mudança
de temperatura de 1º Celsius. Também indica
que o sensor pode ler temperaturas abaixo de
0º.

Por esse motivo, você precisará criar um


deslocamento para valores abaixo de 0°. Se
66 ANIGÁP

você medir a tensão, subtrair 0,5 e multiplicar


por 100, obterá a temperatura exata em graus
Celsius. Armazene esse novo número em uma
variável de ponto flutuante chamada
temperatura.

FLAVIOBABOS.COM.BR
PROJETO 3

Serial.print(", graus Celsius: ");


float temperatura = (tensao)*100;
Serial.println(temperatura);

Agora que você tem a temperatura real,


imprima-a no monitor serial. Como a variável
de temperatura é a última coisa que você
imprimirá nesse loop, você pode usar um
comando um pouco diferente: Serial.println ().
Este comando criará uma nova linha no monitor
serial após o envio do valor. Isso facilita a
leitura das coisas quando elas estão sendo
impressas.

if(temperatura < tempPadrao){


digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);

INSERINDO OS LED’s: Com a temperatura


real, você pode configurar uma instrução if ()
...else para acender os LED’s. Assim, usando a
temperatura do sensor TMP como ponto de
partida, você acende um LED para um
aumento de a cada 2º celsius.

//se a temperatura lida estiver entre 22 ºC e 24 ºC


}else if(temperatura >= tempPadrao+2 && temperatura < tempPadrao+4){
digitalWrite(2, HIGH);
76 ANIGÁP

digitalWrite(3, LOW);
digitalWrite(4, LOW);

LIGANDO UM LED QUANDO ESTIVER


UMA TEMPERATURA BAIXA: O operador &&
significa "e”. Podemos verificar várias

FLAVIOBABOS.COM.BR
PROJETO 3

condições, neste caso se a temperatura estiver


entre 2º e 4º do valor que determinamos, o
primeiro LED irá acender.

//se a temperatura lida estiver entre 24 ºC e 26 ºC


}else if(temperatura >= tempPadrao+4 && temperatura < tempPadrao+6){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);

LIGANDO MAIS UM LED A UMA


TEMPERATURA MÉDIA: Se a temperatura
estiver entre 4º e 6º graus acima da
temperatura que determinamos mais um LED
irá acender (LED da porta digital 3).

//se a temperatura lida for maior do que 26 ºC


}else if(temperatura >= tempPadrao+6){
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
}

LIGANDO OS 3 LED’s EM UMA


TEMPERATURA ALTA: Aqui os 3 LEDs irão
acender se a temperatura subir mais que 6 ºC
da temperatura padrão.

delay(1);
}
86 ANIGÁP

O conversor analógico-digital faz as


leituras muito rapidamente. Portanto, devemos
colocar um pequeno delay () no final do loop
(). Caso não colocarmos esse atraso, os dados
poderão sair errôneos.

FLAVIOBABOS.COM.BR
PROJETO 3

DICA

Com o código carregado no


Arduino, clique no ícone do monitor
serial.

Você deve ver um fluxo de valores, formatado da


seguinte forma:

Valor do sensor: 200, tensão (V): 0,70, graus


Celsius: 17.90

Pressione o sensor colocando os seus dedos em


volta dele enquanto o Arduino estiver conectado no
PC e veja o que acontece com os valores no monitor
serial da IDE.

Observe qual é a temperatura quando o sensor é


deixado ao ar livre e então feche o monitor serial e
altere a constante padrão para temperatura para
um outro valor sem ser os 20 graus Celsius que
determinamos.

Faça o upload do seu código novamente e tente


segurar o sensor nos dedos. À medida que a
temperatura aumenta, os LEDs devem acender um a
96 ANIGÁP

um.

FLAVIOBABOS.COM.BR
LED

RESISTOR DE 220 OHM

COMPONENTES UTILIZADOS
SUMÁRIO

RESISTOR DE 10K OHMS

FLAVIOBABOS.COM.BR
PROJETO 4

FOTO-RESISTOR

07 ANIGÁP
PROJETO 4

PROJETO: LED RGB E SENSOR DE LUZ

Você irá fazer um circuito simples com


alguns botões, um led e um resistor!

Descubra neste projeto: saída analógica e valores


de mapeamento.

TEMPO: 45 minutos
Montado nos
projetos 1, 2 e 3.
NÍVEL:

O Arduino não pode variar a tensão de saída em


seus pinos, apenas pode fornecer 5V. Portanto,
você precisará usar uma técnica chamada
Modulação por Largura de Pulso (PWM, ou Pulse
Width Modulation em inglês) para diminuir o brilho
dos LEDs. O PWM rapidamente liga e desliga o pino
de saída por um período fixo de tempo. A mudança
acontece mais rapidamente do que o olho humano
pode perceber. É semelhante à maneira como os
filmes funcionam, exibindo rapidamente várias
imagens estáticas para criar a ilusão de movimento.

Quando se liga e desliga o pino rapidamente,


acontence que varia-se a tensão. A porcentagem
de tempo em que um pino é HIGH em um período é
17 ANIGÁP

denominado duty cicle. Quando o pino é HIGH na


metade do período e LOW na outra metade, o ciclo
de trabalho ou duty cicle é de 50%. Quando o LED
está aceso com uma luminosidade menor significa
que o ciclo de trabalho está mais baixo.

FLAVIOBABOS.COM.BR
PROJETO 4

O Arduino Uno possui seis pinos


reservados para o PWM (pinos
digitais 3, 5, 6, 9, 10 e 11); eles podem
ser identificados pelo símbolo ~
próximo ao número da porta digital.

Para este projeto, você usará


fotorresistores (sensores que
alteram sua resistência dependendo
da quantidade de luz que os atinge,
também conhecidos como fotocélulas
ou resistores dependentes de luz).
Se você conectar uma extremidade
do resistor ao seu Arduino, poderá
medir a alteração na resistência
verificando a tensão no pino.

Montando o circuito
27 ANIGÁP

Montagem dos componentes do projeto


FLAVIOBABOS.COM.BR
PROJETO 4

Montagem esquemática do projeto

1) Conecte sua protoboard para


que você tenha power e GND nos
dois lados, assim como nos
projetos anteriores.

2) Coloque os três fotorresistores


na protoboard de modo que eles
cruzem a divisão central da
protoboard, como mostra a figura
ao lado. Conecte uma extremidade
37 ANIGÁP

de cada fotorresistor ao positivo


ou power. Do outro lado, conecte
um resistor de 10 kilohm ao GND.
Esse resistor está em série com o
fotorresistor e, juntos, formam um
divisor de tensão.
FLAVIOBABOS.COM.BR
PROJETO 4

A tensão no ponto em que eles se


encontram é proporcional às suas
resistências de acordo com a Lei
de Ohm (consulte o Projeto 1 para
obter mais informações sobre a Lei
de Ohm). A medida que a
resistência do fotorresistor muda
quando a luz o atinge, a tensão
nessa junção também muda. No
mesmo lado do resistor, conecte os
fotorresistores aos pinos de
entrada analógica 0, 1 e 2 com o
fio de conexão.

3) LED: O LED com 4 pernas é um


LED RGB de GND (ou cátodo)
comum. O LED acende em 3 tipos
de cores R-vermelho, G-verde e B-
azul (siglas em inglês). Ao criar
uma diferença de tensão entre o
GND e a tensão que sai dos pinos
PWM do Arduino (que são
conectados aos ânodos através de
resistores de 220 ohm), você fará
com que o LED desapareça entre
suas três cores. Observe qual o
pino mais longo do LED e conecte-
47 ANIGÁP

o ao GND da sua protoboard.


Conecte os outros três pinos aos
pinos digitais 9, 10 e 11 em série
com os 3 resistores de 220 ohm.
Certifique-se de conectar cada fio
de LED ao pino PWM correto, de
acordo com a figura à esquerda.
FLAVIOBABOS.COM.BR
PROJETO 4

BORA PROGRAMAR?

const int LEDverde = 9; //declaração das variáveis de leitura do LED e de


seus conectores nas portas arduino
const int LEDvermelho = 10;
const int LEDazul = 11;

const int SENSORverde = A0; //declaração das variáveis de leitura dos


sensores e suas portas
const int SENSORvermelho = A1;
const int SENSORazul = A2;

int ValorVerde = 0; //variáveis que irão acender os LEDs de acordo com os


valores do sensor
int ValorVermelho = 0;
int ValorAzul = 0;

int ValorSensorVermelho = 0; //variáveis que irão ler os valores dos sensores de


luz
int ValorSensorVerde = 0;
int ValorSensorAzul = 0;

void setup() {
Serial.begin (9600); //inicia o monitor serial

pinMode(LEDverde, OUTPUT); //declara os LEDs como saída


pinMode(LEDvermelho, OUTPUT);
pinMode(LEDazul, OUTPUT);

void loop() {
ValorSensorVermelho = analogRead (SENSORvermelho); //faz a leitura do sensor
que irá emitir a cor vermelha do LED
57 ANIGÁP

delay(5);

ValorSensorVerde = analogRead (SENSORverde); //faz a leitura do sensor


que irá emitir a cor verde do LED
delay(5);

ValorSensorAzul = analogRead (SENSORazul); //faz a leitura do sensor que


irá emitir a cor azul do LED

FLAVIOBABOS.COM.BR
PROJETO 4

Serial.print("Valores do sensor Vermelho: "); //printa na tela os valores analógicos


de cada foto-resistor
Serial.print(ValorSensorVermelho);
Serial.print(" Verde: ");
Serial.print(ValorSensorVerde);
Serial.print(" Azul: ");
Serial.print(ValorSensorAzul);

ValorVermelho = ValorSensorVermelho/4; //converte os valores


analógicos de 0-1023 para valores PWM 0-255
ValorVerde = ValorSensorVerde/4;
ValorAzul = ValorSensorAzul/4;

Serial.print("\t");

Serial.print("Valores PWM Vermelho: "); //printa na tela os valores analógicos


convertidos para PWM
Serial.print(ValorVermelho);
Serial.print(" Verde: ");
Serial.print(ValorVerde);
Serial.print(" Azul: ");
Serial.println(ValorAzul);

analogWrite(LEDvermelho, ValorVermelho); //acende o LED de acordo com a


luminosidade que os foto-resistores detectam
analogWrite(LEDverde, ValorVerde);
analogWrite(LEDazul, ValorAzul);

Código passo a passo

const int LEDverde = 9;


const int LEDvermelho = 10;
67 ANIGÁP

const int LEDazul = 11;

const int SENSORverde = A0;


const int SENSORvermelho = A1;
const int SENSORazul = A2;

CONSTANTES NECESSÁRIAS: Configure


as constantes para os pinos que você estiver
FLAVIOBABOS.COM.BR
PROJETO 4

usando para entrada e saída, para poder


identificar os sensores e diferenciar as cores
do LED. Use const int para definir as variáveis
desse tipo de dado.

int ValorVerde = 0;
int ValorVermelho = 0;
int ValorAzul = 0;

int ValorSensorVermelho = 0;
int ValorSensorVerde = 0;
int ValorSensorAzul = 0;

VARIÁVEIS PARA ARMAZENAR AS


LEITURAS DO SENSOR, BEM COMO O NÍVEL
DE LUZ DE CADA LED: Adicione variáveis para
os valores recebidos do sensor e para os
valores de saída que você usará para apagar
o LED. Você pode usar o tipo de dados int
para todas as variáveis.

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

pinMode(LEDverde, OUTPUT);
pinMode(LEDvermelho, OUTPUT);
pinMode(LEDazul, OUTPUT);
}

DEFINIR O LOCAL DOS PINOS DIGITAIS


77 ANIGÁP

E CONFIGURAR A PORTA SERIAL: Em setup


(), inicie a comunicação serial a 9600 bps.
Assim como no projeto anterior, você usará
isso para ver os valores dos sensores no
monitor serial. Além disso, você poderá ver os
valores mapeados que usará para esmaecer o
FLAVIOBABOS.COM.BR
PROJETO 4

LED. Dessa forma, defina os pinos como


outuputs usando pinMode ().

void loop() {

ValorSensorVermelho = analogRead (SENSORvermelho);


delay(5);

ValorSensorVerde = analogRead (SENSORverde);


delay(5);

ValorSensorAzul = analogRead (SENSORazul);

LENDO O VALOR DE CADA SENSOR DE


LUZ: No loop () leia os valores do sensor em
A0, A1 e A2 com analogRead () e armazene o
valor nas variáveis apropriadas. Coloque um
pequeno delay () entre cada analogRead (),
pois o conversor analógico-digital leva um
milissegundo para fazer seu trabalho.

Serial.print("Valores do sensor Vermelho: ");


Serial.print(ValorSensorVermelho);
Serial.print(" Verde: ");
Serial.print(ValorSensorVerde);
Serial.print(" Azul: ");
Serial.print(ValorSensorAzul);

RELATAR AS LEITURAS DO SENSOR AO


87 ANIGÁP

COMPUTADOR: Imprima os valores do sensor


em uma linha. O "\t" é o equivalente a
pressionar a tecla "tab" do teclado.

FLAVIOBABOS.COM.BR
PROJETO 4

ValorVermelho = ValorSensorVermelho/4;
ValorVerde = ValorSensorVerde/4;
ValorAzul = ValorSensorAzul/4;

CONVERTENDO AS LEITURAS DO
SENSOR: A função para alterar o brilho do
LED via PWM é chamada analogWrite (). Ele
precisa de dois argumentos: o pino para
gravar e um valor entre 0 e 255. Este segundo
número representa o duty cicle ou ciclo de
trabalho que o Arduino irá fornecer ao pino
especificado. Um valor de 255 definirá o pino
HIGH o tempo todo, tornando o LED conectado
o mais brilhante possível. Um valor de 127
ajustará o pino com o HIGH na metade do
tempo do período, tornando o LED mais escuro.
0 ajustaria o pino como LOW o tempo todo,
desligando o LED. Dessa forma, para
converter a leitura do sensor de um valor
entre 0-1023 para um valor entre 0-255
usando analogWrite (), é necessário dividir a
a leitura do sensor por 4.
Serial.print("\t");
Serial.print("Valores PWM Vermelho: "); //printa na tela os valores analógicos
convertidos para PWM
Serial.print(ValorVermelho);
Serial.print(" Verde: ");
Serial.print(ValorVerde);
97 ANIGÁP

Serial.print(" Azul: ");


Serial.println(ValorAzul);

analogWrite(LEDvermelho, ValorVermelho); //acende o LED de acordo com a


luminosidade que os foto-resistores detectam
analogWrite(LEDverde, ValorVerde);
analogWrite(LEDazul, ValorAzul);
}

FLAVIOBABOS.COM.BR
PROJETO 4

ENVIE OS NÍVEIS DE LUZ CALCULADOS


PARA O MONITOR SERIAL PRINTAR NA TELA
E DEFINA A INTENSIDADE DE LUZ NO LED.

*Você irá perceber que a saída no fotorresistor não


varia de 0 a 1023. Tudo bem para este projeto, mas
para uma explicação mais detalhada de como
calibrar para o intervalo que você estiver lendo,
consulte o Projeto 6.

DICA

Depois de programar e conectar o seu Arduino,


abra o monitor serial. O LED provavelmente será de
uma cor esbranquiçada, dependendo da cor
predominante da luz no ambiente que estiver.
Observe os valores provenientes dos sensores no
monitor serial. Se você estiver em um ambiente com
uma iluminação estável, o número provavelmente
será bastante consistente.

Diminua a intensidade de luz onde estiver e veja


o que acontece com os valores dos sensores. Com
uma lanterna, ilumine cada um dos sensores
individualmente e observe como os valores mudam
08 ANIGÁP

no monitor serial e observe como a cor do LED


muda. Quando os fotorresistores são cobertos com
um papel colorido, eles reagem apenas à luz de um
determinado comprimento de onda. Isso lhe dará a
oportunidade de alterar cada uma das cores
independentemente.
FLAVIOBABOS.COM.BR
LED

COMPONENTES UTILIZADOS
SUMÁRIO

FLAVIOBABOS.COM.BR
SERVO MOTOR
PROJETO 5

ENGRENAGEM ARDUINO

CAPACITOR DE 100µF
18 ANIGÁP
PROJETO 5

PROJETO: ACIONANDO O SERVO


MOTOR

Você irá aprender a como programar e


controlar um servo motor.

Descubra neste projeto: mapeamento de valores,


servomotores, utilização de bibliotecas internas.

TEMPO: 1 hora
Montado nos
projetos 1, 2, 3 e 4.
NÍVEL:

Os servomotores são um tipo


especial de motor que não gira em
círculo, mas se move para uma
posição específica. Eles geralmente
rodam 180 graus (metade de um
círculo).

Semelhante à maneira como você


usou pulsos para PWM e um LED no
Projeto 4 – LED RGB, os
servomotores aguardam um número
de pulsos que lhes dizem em que
ângulo se mover. Os pulsos sempre
chegam nos mesmos intervalos de
tempo, mas a largura varia entre
28 ANIGÁP

1000 e 2000 microssegundos. Embora


seja pssível escrever um código para
gerar esses pulsos, o software
Arduino vem com uma biblioteca que
permite controlar facilmente o motor.

FLAVIOBABOS.COM.BR
PROJETO 5

Como o servo gira apenas 180 graus e sua


entrada analógica varia de 0 a 1023, você
precisará usar uma função chamada map () para
alterar a escala dos valores provenientes do
potenciômetro.

Uma das grandes contribuições da comunidade


Arduino são pessoas talentosas que ampliam sua
funcionalidade por meio de software adicional. Por
causa disso, existem bibliotecas para uma ampla
variedade de sensores e atuadores e outros
dispositivos que os usuários contribuíram para a
comunidade.

Uma biblioteca de software expande a


funcionalidade de um ambiente de programação.
Aliás, a IDE já vem com várias bibliotecas úteis
para trabalhar com hardware ou dados.

Sendo assim, para este projeto usamos uma das


bibliotecas que foi projetada para auxiliar o
controle de servomotores. Você irá importa-la para
dentro da sua IDE e todas as suas funcionalidades
já estarão disponíveis para você.
38 ANIGÁP

Montagem do circuito

FLAVIOBABOS.COM.BR
PROJETO 5

Montagem dos componentes do projeto 48 ANIGÁP

Montagem esquemática do projeto


FLAVIOBABOS.COM.BR
PROJETO 5

1) Conecte Vin - 5V e GND na sua


protoboard a partir do Arduino.

2) Coloque um potenciômetro na
protoboard e conecte um lado a 5V
e o outro ao GND. Um potenciômetro
é um tipo de divisor de tensão. Ao
girar o botão, você altera a
proporção da tensão entre o pino do
meio e a potência. Você pode ler
essa alteração em uma entrada
analógica. Conecte o pino do meio
ao pino analógico 0. Isso controlará
a posição do seu servo motor.

3) O servo tem três fios saindo dele.


Um é o power (vermelho), um é GND
(preto) e o terceiro (amarelo) é a
linha de controle que receberá
informações do Arduino. Conecte os
5V ao fio vermelho, aterre o fio
preto e o fio amarelo conecte-o ao
pino 9 do arduino.
58 ANIGÁP

FLAVIOBABOS.COM.BR
PROJETO 5

Seu servo motor é fornecido com


conectores fêmea, portanto, você
precisará adicionar pinos de
cabeçalho/header pins para
conectá-lo à protoboard.

4) Quando um servo motor começa


a se mover, ele consome mais
corrente do que se já estivesse em
movimento. Isso causa um pico na
tensão da sua placa. Ao colocar um
capacitor de 100uf no POWER e no
GND, ao lado dos conectores
macho, como mostrado na figura de
montagem do projeto, você pode suavizar
quaisquer alterações de tensão que possam
ocorrer. Você também pode colocar um
68 ANIGÁP

capacitor no POWER e no GND, entrando no seu


potenciômetro. Esses são chamados de
capacitores de desacoplamento, porque
reduzem ou desacoplam as alterações causadas
pelos componentes no restante do circuito.

FLAVIOBABOS.COM.BR
PROJETO 5

TEM ALGUMA SUGESTÃO QUE


GOSTARIA QUE ESTIVESSE NA
APOSTILA? MANDE SUA
MENSAGEM CLICANDO AQUI!

NOTE

Depois de programar e ligar o seu Arduino, abra o


monitor serial. Você deve ver um fluxo de valores
semelhante a este:

Valor do potenciometro: 1023, ângulo: 179

Ao girar o potenciômetro, você verá os números


mudarem. Mais importante, você deve ver seu servo
motor mudar para uma nova posição. Observe a
relação entre o valor ValorPot e o ângulo no
monitor serial e a posição do servo. Você deve ver
resultados consistentes ao girar o pot.

O uso de potenciômetros como entradas


analógicas tem uma vantagem em fornecerem uma
78 ANIGÁP

faixa completa de valores entre 0 e 1023. Isso os


torna úteis para testar projetos que usam entrada
analógica.

FLAVIOBABOS.COM.BR
PROJETO 5

ADOTE

O potenciômetro não é o único sensor que você


pode usar para controlar o servo.

Usando a mesma configuração física e um


sensor diferente, que tipo de indicador você
pode criar?

Como isso funcionaria com a temperatura (como


no Projeto 3 do medidor de temperatura)?
88 ANIGÁP

Você poderia dizer a hora do dia com um


fotorresistor?

Como os valores de mapeamento entram em jogo


com esses tipos de sensores?

FLAVIOBABOS.COM.BR
SUMÁRIO

PROJETO 6 RESISTOR DE 10K OHMS

FOTO-RESISTOR
BUZZER

98 ANIGÁP

COMPONENTES UTILIZADOS

FLAVIOBABOS.COM.BR
PROJETO 6

PROJETO: SPEAKER COM BUZZER

Você irá fazer um projeto que integra o


sensor de luz ao emissor de som buzzer.

Descubra neste projeto: produzir som com a função


tone () e calibrar sensores analógicos.

TEMPO: 45 minutos
Montado nos
projetos 1, 2, 3 e 4.
NÍVEL:

Um teremim é um instrumento que emite sons


com base nos movimentos das mãos de um músico
em torno do instrumento. Você provavelmente já
ouviu um em filmes de terror. O teremim detecta
onde as mãos de um artista estão em relação a
duas antenas lendo a mudança capacitiva nelas.

Essas antenas são conectadas a circuitos


analógicos que criam o som. Uma antena controla a
frequência do som e a outra controla o volume.
Embora o Arduino não consiga replicar exatamente
os sons misteriosos deste instrumento, é possível
imitá-los usando a função tone (). A figura da
próxima página mostra a diferença entre os pulsos
emitidos por analogWrite () e tone (). Isso permite
09 ANIGÁP

que um transdutor como um alto-falante (chamado


de piezzo ou buzzer) se mova para frente e para
trás em velocidades diferentes para emitir o som.

FLAVIOBABOS.COM.BR
PROJETO 6

Período
PWM 50: analogWrite(50)

Período
PWM 200: analogWrite(200)

Período
TONE 440: tone
TEMPO: 45 (9, 440)
minutos

NÍVEL:

Período
TONE 880: tone (9, 880)

10 milisegundos

Observe como o sinal é baixo na maioria


das vezes, mas a frequência é a mesma
do PWM 200.

Observe como a tensão é alta na maioria


das vezes, mas a frequência é a mesma
do PWM 50.
19 ANIGÁP

O duty cicle é de 50% (ligado metade do


tempo, desligado na outra metade do
tempo), mas a frequência muda.

Mesmo duty cicle que o Tone 440; mas


duas vezes a frequência.
FLAVIOBABOS.COM.BR
PROJETO 6

Em vez de detectar a capacitância com o


Arduino, você usará um fotorresistor para
detectar a quantidade de luz. Ao passar as mãos
sobre o sensor, você mudará a quantidade de luz
que cai na superfície do fotorresistor, como fez no
Projeto 4. A mudança na tensão no pino analógico
determinará qual frequência será reproduzida.

Você conectará os fotorresistores ao Arduino


usando um circuito divisor de tensão, como você
também fez no Projeto 4. Você provavelmente
notou no projeto anterior que quando você lê esse
circuito usando analogRead (), suas leituras não
variam de 0 a 1023. O resistor fixo conectado ao
GND limita a extremidade baixa da faixa e o brilho
da sua luz limita a extremidade alta. Em vez de
optar por um intervalo limitado, você calibrará as
leituras do sensor, obtendo os valores alto e baixo,
mapeando-as para frequências sonoras usando a
função map () para obter o máximo de alcance
possível do seu limite. Isso trará um benefício
adicional de ajustar as leituras do sensor sempre
que você mover seu circuito para um novo
ambiente, como uma sala com diferentes condições
de luz.
29 ANIGÁP

Um buzzer é um pequeno
elemento que vibra quando
recebe eletricidade. A
vibração desloca o ar ao
redor, criando ondas sonoras.

FLAVIOBABOS.COM.BR
PROJETO 6

Montando o circuito

39 ANIGÁP

Montagem dos componentes do projeto

FLAVIOBABOS.COM.BR
PROJETO 6

Montagem esquemática do projeto

Teremins tradicionais podem controlar a


frequência e o volume do som. Neste exemplo, você
poderá controlar apenas a frequência. Enquanto
você não pode controlar o volume através do
Arduino, é possível alterar o nível de tensão que
49 ANIGÁP

chega ao alto-falante manualmente.

O que acontece se você colocar um


potenciômetro em série com o pino 8 e o buzzer?

E quanto a outro fotorresistor?

FLAVIOBABOS.COM.BR
PROJETO 6

1) Na sua protoboard, conecte as


linhas externas do arduino no power
e no GND.

2) Pegue seu buzzer e conecte uma


extremidade ao GND e a outra no
pino digital 8 do Arduino

3) Coloque o seu fotorresistor na


protoboard, conectando uma
extremidade aos 5V. Conecte a
outra extremidade no pino analógico
0 do Arduino e aterre através de um
resistor de 10 kilohm. Esse circuito é
igual ao circuito divisor de tensão
no Projeto 4.

O código

int ValorSensor; //variável de leitura do sensor


int sensorBAIXO = 1023; //variável para calibrar o valor de low
int sensorALTO = 0; //variável para calibrar o valor de high

const int led = 13; //variável que identifica o LED da placa e sua porta
59 ANIGÁP

void setup() {

pinMode(led, OUTPUT); //define o LED como OUTPUT


digitalWrite(led, HIGH); //liga o LED

while (millis() < 5000){ //calibração do sensor 5 segundos após o programa


começar a rodar
}

FLAVIOBABOS.COM.BR
PROJETO 6

ValorSensor = analogRead(A0); //grava o valor máximo do sensor


if (ValorSensor > sensorALTO){ //se valor do sensor for maior que valor high
sensorALTO = ValorSensor; //recebe valor máximo
}
if (ValorSensor < sensorBAIXO){ //se o valor do sensor for menor que low
sensorBAIXO = ValorSensor; //recebe valor mínimo
}
}

digitalWrite (led, LOW); //desliga o LED sinalizando o fim da calibração

void loop() {

ValorSensor = analogRead (A0); //lê o input do sensor em A0 e armazena o valor


na variável ValorSensor

int bipe = map(ValorSensor, sensorBAIXO, sensorALTO, 50, 4000); //mapeia o


valor obtido em frequências para o buzzer

tone(8, bipe, 20); //tocando o buzzer que está na porta 8, com frequência obtida
pela variável bipe e tocando a cada 20 ms

delay(10); //tempo de 10 ms de espera

Código passo a passo

int ValorSensor;
int sensorBAIXO = 1023;
int sensorALTO = 0;
69 ANIGÁP

CRIANDO VARIÁVEIS PARA CALIBRAR


O SENSOR: Crie uma variável para armazenar
o valor analogRead () do fotorresistor. Em
seguida, crie variáveis para os valores alto e
baixo. Você definirá o valor inicial na variável
sensorBAIXO como 1023 e definirá o valor da
FLAVIOBABOS.COM.BR
PROJETO 6

variável sensorALTO como 0. Quando você


executar o programa pela primeira vez,
comparará esses números com as leituras do
sensor para encontrar os valores máximos e os
valores mínimos.

const int led = 13;

NOMEIE UMA CONSTANTE PARA


CALIBRAÇÃO: Crie uma constante chamada
LED. Você usará isso como um indicador de
que seu sensor concluiu a calibração. Para
este projeto, use o LED integrado que já vem
conectado ao pino 13 da placa.

void setup() {

pinMode(led, OUTPUT);
digitalWrite(led, HIGH);

DEFINA A DIREÇÃO DO PINO DIGITAL E


LIGUE-O: No setup (), altere o pinMode () do
led para OUTPUT para ligar a luz da placa
Arduino.

while (millis() < 5000){


79 ANIGÁP

USE A FUNÇÃO WHILE () PARA


CALIBRAÇÃO: As próximas etapas calibrarão
os valores máximo e mínimo do sensor. Você
usará uma instrução while () para executar um
loop por 5 segundos. Loops while () são
executados até que uma determinada condição
FLAVIOBABOS.COM.BR
PROJETO 6

seja atendida. Nesse caso, você usará a


função millis () para certificar que ficará
executando até determinado tempo. Essa
função representa o tempo que o Arduino está
em execução desde quando foi ligado ou foi
reinicado.

ValorSensor = analogRead(A0);
if (ValorSensor > sensorALTO){
sensorALTO = ValorSensor;
}
if (ValorSensor < sensorBAIXO){
sensorBAIXO = ValorSensor;
}
}

COMPARE OS VALORES DO SENSOR


PARA CALIBRAÇÃO: No loop, você lerá o
valor do sensor; se o valor for menor que
sensorBAIXO (inicialmente 1023), você
atualizará essa variável. Se for maior que
sensorALTO (inicialmente 0), a variável será
atualizada.

digitalWrite (led, LOW);

INDICAÇÃO QUE A CALIBRAÇÃO


89 ANIGÁP

FINALIZOU-SE: Após 5 segundos, o loop


while () terminará desligando o LED acoplado
ao pino 13. Você usará os valores alto e baixo
do sensor recém-registrados para dimensionar
a frequência na parte principal do seu
programa.

FLAVIOBABOS.COM.BR
PROJETO 6

void loop() {
ValorSensor = analogRead (A0);

LEIA E ARMAZENE O VALOR DO


SENSOR: No loop (), leia o valor da porta
analógica A0 e armazene-o na variável
ValorSensor.
int bipe = map(ValorSensor, sensorBAIXO, sensorALTO, 50, 4000);

MAPEIE O VALOR DO SENSOR PARA


UMA FREQUÊNCIA EQUIVALENTE: Crie uma
variável chamada bipe. O valor da afinação
será mapeado a partir do ValorSensor. Use
sensorBAIXO e sensorALTO como limites para
os valores recebidos. Para valores iniciais de
saída, tente de 50 a 4000. Esses números
definem o intervalo de frequências que o
Arduino irá gerar.

tone(8, bipe, 20);

delay(10);

TOQUE NA FREQUÊNCIA GERADA: Em


seguida, escreva a função tone () para
reproduzir os sons. São necessários três
argumentos: em qual pino tocar o som (neste
99 ANIGÁP

caso, pino 8), em que frequência tocar


(determinado pela variável de afinação bipe) e
por quanto tempo tocar a nota (tente 20
milissegundos para testar). Em seguida,
escreva um delay () por 10 milissegundos para
dar tempo ao som para tocar.
FLAVIOBABOS.COM.BR
PROJETO 6

NOTE

Quando você liga o Arduino pela primeira vez,


há uma janela de 5 segundos para calibrar o sensor.
Enquanto há essa calibração, mova sua mão para
cima e para baixo sobre o fotorresistor, alterando a
quantidade de luz que chega nele. Quanto mais
você replicar os movimentos que espera usar ao
tocar o instrumento, melhor será a calibração.

Após 5 segundos, a calibração estará concluída e


o LED no Arduino se apagará. Quando isso
acontecer, você irá ouvir um barulho vindo do
buzzer! À medida que a quantidade de luz que cai
sobre o sensor muda, também deve mudar a
frequência que o componente toca.

001 ANIGÁP

FLAVIOBABOS.COM.BR
BUZZER

BOTÃO

COMPONENTES UTILIZADOS
SUMÁRIO

FLAVIOBABOS.COM.BR
RESISTOR DE 10 KILOHM
PROJETO 7

RESISTOR DE 1 MEGAOHM

RESISTOR DE 220 OHM


101 ANIGÁP
PROJETO 7

PROJETO: MINI TECLADO MUSICAL

Com 4 resistores e 4 botões você irá


construir um protótipo de teclado.

Descubra neste projeto: escadas resistentes e


matrizes.

TEMPO: 45 minutos
Montado nos
projetos 1, 2, 3, 4 e 6
NÍVEL:

Embora seja possível associar cada botão a


diferentes tons musicais na programação, faremos
diferente neste projeto. Você irá aprender a
construir algo chamado escada de resistor.

Esta é uma maneira de ler vários interruptores


usando uma única entrada analógica. É uma técnica
útil se você tiver poucas entradas digitais. Sendo
assim, conectará vários interruptores em paralelo
no analógico da porta A0 do Arduino.

A maioria desses interruptores serão conectados


no positivo através de um resistor. Quando você
pressionar cada botão, um nível de tensão
201 ANIGÁP

diferente vai para o pino de entrada analógica. Se


você pressionar dois botões ao mesmo tempo,
obterá uma entrada única com base na relação
entre os dois resistores em paralelo. Observe a
montagem e o esquema elétrico do projeto na
página seguinte.

FLAVIOBABOS.COM.BR
PROJETO 7

Montagem dos componentes do projeto

301 ANIGÁP

Esquema elétrico do projeto


FLAVIOBABOS.COM.BR
PROJETO 7

1) Conecte sua protoboard ao


POWER e ao GND, como nos
projetos anteriores. Além disso,
conecte uma extremidade do buzzer
ao terra, enquanto que a outra
extremidade do componente será
conectada ao pino 8 do seu Arduino.

2) Coloque seus interruptores na


protoboard, como mostrado no
circuito ao lado.

A disposição dos resistores e


interruptores alimentando uma
entrada analógica é chamada de
escada de resistor. Conecte o
primeiro interruptor diretamente
ao power. Conecte o segundo,
terceiro e quarto botões para serem
alimentados através de um resistor
de 220 ohm, 10 kilohm e 1 megohm,
respectivamente.

Conecte todas as saídas dos


interruptores em uma única junção.
Conecte esta junção ao terra com
401 ANIGÁP

um resistor de 10 kilohm e, além


disso, conecte-o ao Analog In 0 do
Arduino. No final, cada um desses
resistores irão atuar como um divisor
de tensão.

FLAVIOBABOS.COM.BR
PROJETO 7

BORA PROGRAMAR?

Neste programa, você precisará manter uma lista


de frequências que deseja tocar quando você
pressionar cada um dos seus botões. Você pode
começar com as frequências médias dó, ré, mi e fá
(262Hz, 294Hz, 330Hz e 349Hz). Para fazer isso,
você precisará de um novo tipo de variável
chamada de array ou de matriz.

Um array é uma maneira de armazenar diferentes


valores que se relacionam, como as frequências de
uma escala musical usando apenas uma variável.
Além disso, arrays são uma ferramenta eficiente
para você acessar informações rapidamente.

Dessa forma, para declarar uma variável desse


tipo, comece como você faria com um int ou um
float qualquer mas, insira um par de colchetes
após: []. Sendo assim, os elementos que desejar
inserir ficarão dentro dos colchetes.

Para ler ou alterar os elementos da matriz, faça


referência ao elemento individual usando o nome
da matriz e, em seguida, o índice do item que você
deseja endereçar. O índice refere-se à ordem dos
itens que aparecem quando a matriz é criada. O
501 ANIGÁP

primeiro item na matriz é o item 0, o segundo é o


item 1 e assim por diante.

FLAVIOBABOS.COM.BR
PROJETO 7

Então, vamos ao programa...

int notas[ ] = {262,294,330,349};


//frequências das notas tocadas

void setup (){


Serial.begin (9600); //inicializando monitor serial
}

void loop (){


int valorTeclado = analogRead(A0);
//variável que recebe a leitura feita dos botões

Serial.println(valorTeclado);
//printa valor lido

if (valorTeclado == 1023){
//se o valor analógico for igual a 1023
tone(8, notas[0]);
//toca o primeiro elemento da matriz - frequencia 262
}

else if(valorTeclado >= 990 && valorTeclado <= 1010){


//se o valor analógico estiver entre 990 e 1010
tone(8, notas[1]);
//toca o segundo elemento da matriz - frequencia 294
}

else if(valorTeclado >= 505 && valorTeclado <= 980){


//se o valor analógico estiver entre 505 e 980
tone(8, notas[2]);
//toca o terceiro elemento da matriz - frequencia 330
}
601 ANIGÁP

else if(valorTeclado >= 5 && valorTeclado <= 505){


//se o valor analógico estiver entre 5 e 505
tone(8, notas[3]);
//toca o quarto elemento da matriz - frequencia 349
}

FLAVIOBABOS.COM.BR
PROJETO 7

else{
//se nenhum botão for pressionado
noTone(8);
//não toca nada
}
}

Código passo a passo

int notas[ ] = {262,294,330,349};

CRIANDO UM ARRAY DE FREQUÊNCIAS:


Configure um conjunto de quatro notas usando
as frequências listadas acima. Torne essa
matriz uma variável global, declarando-a
antes do setup ().

void setup (){


Serial.begin (9600);
}

INICIALIZANDO A COMUNICAÇÃO
SERIAL: No seu setup (), inicie a comunicação
serial com o computador.

void loop (){


int valorTeclado = analogRead(A0);
701 ANIGÁP

Serial.println(valorTeclado);

LENDO O VALOR ANALÓGICO E


PRINTANDO-O NO MONITOR SERIAL: No
loop (), declare uma variável local para
armazenar o valor lido no pino A0. Como cada
botão possui um resistor diferente associado,
FLAVIOBABOS.COM.BR
PROJETO 7

os valores de saída de tensão dos pequenos


interruptores também serão distintos. Para ver
esses valores, adicione a linha Serial.println
(valorTeclado) para ver no serial monitor.

if (valorTeclado == 1023){
tone(8, notas[0]);
}

INSTRUÇÃO IF () ...ELSE PARA


DETERMINAR QUAL NOTA TOCAR: Usando
uma instrução if () ...else, você consegue
atribuir cada valor a um tom diferente. Os
valores incluídos no programa do projeto são
valores aproximados para esses tamanhos de
resistores. Como todos os resistores têm
alguma tolerância a erros, eles podem não
funcionar exatamente para você. Dessa forma,
use as informações do monitor serial para
ajustar esses valores conforme necessário.

else if(valorTeclado >= 990 && valorTeclado <= 1010){


tone(8, notas[1]);
}

else if(valorTeclado >= 505 && valorTeclado <= 980){


tone(8, notas[2]);
}
801 ANIGÁP

else if(valorTeclado >= 5 && valorTeclado <= 505){


tone(8, notas[3]);
}

TOCANDO AS NOTAS: Essa etapa do


código é que, de fato, irá determinar, com
base nos valores coletados na porta analógica,
FLAVIOBABOS.COM.BR
PROJETO 7

qual nota tocar.

Para isso, após cada instrução if (),


escreva a função tone (). O programa irá
fazer referência à matriz para determinar qual
frequência tocar.

Sendo assim se o valor da porta A0


corresponder à alguma condição estabelecida
dentro do elseif (), você consegue dizer ao
Arduino para tocar um tom. É possível que seu
buzzer fique um pouco “barulhento” e que os
valores flutuem um pouco enquanto pressiona-
se os botões. Mas, para diminuir essa
variação, podemos inserir um pequeno
intervalo ao usarmos a simbologia "&&" para
validar várias instruções de leitura da porta
digital.

else{
noTone(8);
}
}

PARAR DE TOCAR AS NOTAS: Somente


uma frequência pode ser tocada no seu
buzzer. Sendo assim, se pressionarmos vários
901 ANIGÁP

botões, iremos ouvir apenas um som. Para


parar de tocar notas quando não há nenhum
botão sendo pressionado, escreva a função
noTone (), fornecendo o número do pino
digital que o buzzer estiver conectado.

FLAVIOBABOS.COM.BR
PROJETO 7

SE ESTIVER GOSTANDO DA APOSTILA, VENHA


CONHECER MAIS PROJETOS EM MEU SITE DE
ARDUINO CLICANDO AQUI!

Note e Adote

Se seus resistores possuírem os valores próximos


aos valores do projeto que te apresentei, você
deverá ouvir alguns sons do piezzo quando os
botões forem pressionados.

Caso contrário, verifique o monitor serial para


certificar se cada um dos botões está em um
intervalo que corresponde as notas da instrução if
() ... else. Se você estiver ouvindo um som que se
apresenta de forma inconstante, tente aumentar o
alcance um pouco mais, por exemplo.

Além disso, pressione vários botões ao mesmo


tempo e veja que tipo de valores que você obtém
no monitor serial. Use esses novos valores para
acionar ainda mais sons. Experimente com
diferentes frequências para expandir sua produção
musical. Além disso, você pode encontrar
011 ANIGÁP

frequências de notas musicais na página do


arduino.

arduino.cc/frequencies

FLAVIOBABOS.COM.BR
RESISTOR DE 10KΩ

MOSFET
DIODO 1N4007

MOTOR DC BOTÃO

COMPONENTES UTILIZADOS
SUMÁRIO

FLAVIOBABOS.COM.BR
PROJETO 8

BATERIA DE 9V

111 ANIGÁP
PROJETO 8

PROJETO: CONTROLE DE MOTOR DC

Você irá aprender a fazer o acionamento


de um motor DC.

Descubra neste projeto: transistores, cargas de


alta corrente e alta tensão.

TEMPO: 45 minutos
Montado nos
projetos 1, 2, 3 e 4.
NÍVEL:

Controlar motores com um Arduino é mais


complicado do que apenas controlar LEDs por
algumas razões. Primeiro, os motores exigem mais
corrente do que os pinos de saída do Arduino
podem fornecer e, segundo, os motores podem
gerar sua própria corrente através de um processo
chamado de indução, que pode danificar seu
circuito se você não inserir um diodo.

Além disso, mover coisas requer muito mais


energia do que simplesmente ligar um LED.
Ademais, os motores normalmente exigem mais
corrente do que o Arduino pode fornecer além de
que, motores mais potentes também exigem uma
211 ANIGÁP

tensão mais alta.

Esses componentes consomem muita corrente


quando são ligados e consomem mais ainda se
precisarem carregar algo ou mover algum
mecanismo. Infelizmente, o Arduino consegue for-

FLAVIOBABOS.COM.BR
PROJETO 8

necer apenas 40 miliamperes (mA) através de seus


pinos digitais, muito menos do que o que a maioria
dos motores exigem para funcionar.

Os transistores são elementos


que permitem controlar fontes
de energia de alta corrente e
alta tensão a partir da saída
de baixa corrente do Arduino.

Existem muitos tipos diferentes, mas eles


funcionam com o mesmo princípio. Você pode
pensar neles como interruptores digitais. Quando
você fornece tensão ao pino chamado de base, ele
fecha o circuito entre os outros dois pinos,
chamados de coletor e de emissor. Dessa forma,
você pode ligar e desligar um motor de corrente/
tensão mais altos com o seu Arduino sem
complicações.

Os motores são um tipo de


dispositivo indutivo. A indução
é um processo pelo qual uma
corrente elétrica variável em
um fio pode gerar um campo
magnético variável ao redor do
fio. Quando um motor recebe
311 ANIGÁP

eletricidade, uma bobina firme


dentro do compartimento de
cobre cria um campo magnético.
Esse campo faz com que o eixo do lado de fora
da caixa metálica do motor gire.

FLAVIOBABOS.COM.BR
PROJETO 8

O inverso também pode acontecer: um motor


pode gerar eletricidade quando o eixo é
rotacionado. Te desafio a fazer o seguinte: tente
conectar um LED nos dois polos de um motor e gire
seu eixo com a mão.

Se nada acontecer, gire o eixo para o outro lado


e o LED deverá acender. Essa é uma maneira de
criar um pequeno gerador a partir do seu motor.

Mas, no nosso circuito do projeto 8, quando você


parar de fornecer energia a um motor, ele
continuará girando, devido sua inércia,
consequentemente, ao girar, ele irá fornecer uma
tensão na direção oposta do que a corrente que lhe
foi fornecida.

É possível ver esse efeito ao ligar o motor em um


LED. Essa tensão reversa, chamada de força
eletromotriz inversa, pode danificar seu
transistor. Por esse motivo, você deve colocar um
diodo em paralelo com o motor, para que a tensão
de retorno passe pelo diodo e, assim, ele permita
apenas que a eletricidade flua em uma direção,
protegendo o restante do circuito.

Observe a montagem do circuito que está na


411 ANIGÁP

imagem da próxima página bem como a montagem


esquemática do circuito.

FLAVIOBABOS.COM.BR
PROJETO 8

Montagem dos componentes do projeto

511 ANIGÁP

Esquema elétrico do projeto


FLAVIOBABOS.COM.BR
PROJETO 8

1) Conecte o power e o GND na


sua protoboard através do
Arduino.

2) Adicione um interruptor à placa,


conectando um lado no power e o
outro lado no pino digital 2 do
Arduino. Adicione um resistor pull-
down de 10 kilohm ao terra no pino
de saída do botão.

3) Ao usar circuitos com tensões


diferentes, é necessário conectar
seus aterramentos juntos para
fornecer um aterramento comum.
Dessa forma, conecte o terra da
bateria ao terra do seu Arduino e
conecte o encaixe da bateria de
9V na sua protoboard.

4) Insira o transistor na
611 ANIGÁP

protoboard. Note a posição na


montagem pois a ordem de
conexão dos fios importa. Observe
que a aba de metal do transistor
está voltada para a bateria.

FLAVIOBABOS.COM.BR
PROJETO 8

Colocado o transistor, conecte o


pino digital 9 ao pino esquerdo do
transistor. Este pino é chamado de
coletor. Conecte um fio do motor
ao pino do meio do transistor. Este
pino é chamado de base. Quando
o Arduino mandar tensão ao
coletor, será feita uma conexão
entre este pino e o terceiro pino, o
chamado de emissor. Esse último,
conecte-o ao terra.

5) O último componente a ser


adicionado é o diodo. Observe que
ele possui uma faixa em uma de
suas extremidades, ou seja, ele é
polarizado e deve ser inserido na
protoboard da seguinte maneira: a
extremidade com a faixa
conectada no positivo e a outra
extremidade conectada na base do
transistor (pino do meio). Dessa
forma, o diodo ajudará a impedir
que qualquer tensão gerada pelo
motor volte ao circuito. Lembre-se
de que a tensão inversa fluirá na
711 ANIGÁP

direção oposta à tensão fornecida.

FLAVIOBABOS.COM.BR
PROJETO 8

Bora programar?

//Variáveis do projeto
const int botao = 4;
const int motor = 9;
int estadobotao;

void setup() {

//Declarando os pinos como saída e entrada


pinMode(motor, OUTPUT);
pinMode(botao, INPUT);

void loop() {
estadobotao = analogRead(botao); //leitura do estado do botão

if (estadobotao == HIGH){ //se estiver pressionado


digitalWrite(motor, HIGH); //liga-se o motor
}

else { //se não estiver pressionado


digitalWrite(motor, LOW); //o motor fica desligado
}
}

Código passo a passo

const int botao = 4;


const int motor = 9;
int estadobotao;
811 ANIGÁP

NOMEIE AS CONSTANTES E VARIÁVEIS:


O código é notavelmente semelhante ao
código usado pela primeira vez para ligar um
LED. Mas, antes de tudo, é necessário
configurar algumas constantes para os pinos
do botão e do motor e uma variável chamada
FLAVIOBABOS.COM.BR
PROJETO 8

estadobotao para manter o valor do


interruptor.

void setup() {
pinMode(motor, OUTPUT);
pinMode(botao, INPUT);
}

DECLARE AS PORTAS COMO SAÍDAS E


ENTRADAS: No seu void setup (), use
o pinMode () para declarar o motor como
OUTPUT e o pino do interruptor como INPUT.

void setup() {
pinMode(motor, OUTPUT);
pinMode(botao, INPUT);
}

LENDO O ESTADO DO BOTÃO: Se o


interruptor for pressionado, o Arduino irá
mandar um sinal ao transistor e este irá ligar o
motor. Se o mesmo não for pressionado, o
motor ficará parado. Sendo assim, quando
estiver em HIGH, o transistor será ativado,
completando o circuito do motor. Enquanto
que, quando estiver em LOW, o motor não irá
girar.
911 ANIGÁP

FLAVIOBABOS.COM.BR
PROJETO 8

Faça você mesmo

Transistores são dispositivos de estado sólido,


eles não têm partes móveis. Por esse motivo, você
pode ativá-los e desativá-los rapidamente. Tente
conectar um potenciômetro a uma entrada
analógica e use isso para o pino PWM que controla
o transistor. O que você acha que acontecerá com
a velocidade do motor se você variar a tensão que
ele estiver recebendo?

Note

Os motores requerem consideração especial ao


serem controlados por um microcontrolador.
Normalmente, o microcontrolador não pode
fornecer corrente e / ou tensão suficientes para
alimentar um motor. Por esse motivo, você usa
transistores para fazer interface entre os dois.
Também é inteligente usar diodos para evitar danos
ao seu circuito.
021 ANIGÁP

FLAVIOBABOS.COM.BR
POTÊNCIOMETRO

BOTÃO

RESISTOR DE 10KOHMS

COMPONENTES UTILIZADOS
SUMÁRIO

FLAVIOBABOS.COM.BR
RESISTOR DE 220OHMS
PROJETO 9

DISPLAY LCD
1211 ANIGÁP
PROJETO 9

PROJETO: LIGANDO UM DISPLAY LCD

Você irá montar um circuito interativo


usando o LCD e alguns outros componentes.

Descubra neste projeto: display LCD, instrução


switch/case e random ().

TEMPO: 1 hora
Montado nos
projetos 1, 2 e 3.
NÍVEL:

Montaremos, neste projeto, um circuito de forma


que você possa chamar outra pessoa para interagir
com o sistema criado. O objetivo é que o usuário
faça algumas perguntas e use o LCD para fornecer
as respostas. Pode parecer algo simples, mas você
irá aprender mais afundo algumas lógicas de
programação e irá usar um componente muito
interessante: o LCD.

O LCD pode ser usado para exibir caracteres


alfanuméricos. O exemplo que irei te apresentar
aqui possui 16 colunas e 2 linhas, para um total de
32 caracteres.
221 ANIGÁP

Há muitas conexões neste tipo de placa e


basicamente todos esses pinos são usados para
energizar o componente para comunicar com o
Arduino, para que você saiba o que escrever na
tela. No entanto, você não precisará conectar
todos esses pinos no Arduino.

FLAVIOBABOS.COM.BR
PROJETO 9

Modelo do LCD que será usado no projeto e sua


pinagem

Usaremos um outro componente


também: o interruptor de inclinação ou
tilt switch. Ele funciona como um
interruptor regular, pois é um sensor liga
/ desliga. O que torna os interruptores
de inclinação únicos é que eles detectam
a orientação. Normalmente eles têm uma
pequena cavidade dentro da carcaça
que possui uma bola de metal. Quando
inclinada da maneira correta, a bola rola
para um lado da cavidade e conecta os
dois fios do componente, fechando a
chave. Você o usará aqui como uma
entrada digital.
321 ANIGÁP

Passe para a próxima página para verificar a


montagem dos componentes e a montagem
esquemática do projeto.

FLAVIOBABOS.COM.BR
PROJETO 9

Montagem dos componentes do projeto

Montagem do esquema elétrico do projeto


421 ANIGÁP

O circuito não é excessivamente complexo. No


entanto, usamos muitos fios neste projeto. Dessa
forma, garanta que todas as conexões entre os
componentes serão feitas da forma correta.

FLAVIOBABOS.COM.BR
PROJETO 9

1) Conecte o power e o GND na


sua protoboard.

2) Coloque o tilt na protoboard e


conecte um lado ao 5V. Conecte o
outro ao GND juntamente a um
resistor de 10 kilohms e ao pino
digital 6 do seu Arduino.

521 ANIGÁP

3) O LCD possui diversos pinos: o de seleção de


registro (RS) que controla onde os caracteres irão
aparecer na tela, o de leitura / gravação (R / W)
que coloca a tela no modo de leitura ou gravação e
o pino enable (EN) que informa ao LCD que ele está

FLAVIOBABOS.COM.BR
PROJETO 9

recebendo um comando e os pinos (D0-D7) são


usados para enviar caracteres para a tela. Por fim,
para controlar o contraste do display, você irá usar
um potenciômetro.

Os dois pinos externos do LCD (Vss e LED-)


precisam ser conectados ao GND. Além disso,
também conecte ao GND o pino R / W. O papel
deste último pino é colocar a tela no modo de
gravação. Já, a fonte de alimentação do LCD (Vcc)
deve se conectar diretamente ao 5V. O pino LED +
do display se conecta ao power através de um
resistor de 220 ohm.

É importante denotar que a biblioteca


LiquidCrystal já vem na IDE com a escrita de todos
esses pinos que nos ajuda no processo de exibir os
caracteres.

Conecte: porta digital 2 do Arduino no LCD D7,


porta digital 3 no LCD D6, porta digital 4 no LCD
D5 e a porta digital 5 no LCD D4. Esses são os
pinos de dados que informam ao display qual
caractere exibir.

Conecte o pino EN na porta digital 11 no seu


Arduino. Enquanto isso, conecte o RS do LCD ao
621 ANIGÁP

pino 12. Esse pino permite gravar no LCD.

Por último, insira o potenciômetro na protoboard,


conectando seus extremos ao power e ao GND e
conectando o pino central ao V0 do LCD. Isso
permitirá que você altere o contraste da tela ao
girar o potenciômetro.
FLAVIOBABOS.COM.BR
PROJETO 9

Bora programar?

// inclua a biblioteca do LCD


#include <LiquidCrystal.h>

// inicializa a biblioteca com os números dos pinos em sequência


LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// constante determinada para o interruptor tilt


const int tilt = 6;

// variável para armazenar o valor lido do tilt


int estadoatual = 0;

// variável para identificar o valor lido no tilt


int estadoanterior = 0;

// a variable to choose which reply from the crystal ball


int resposta;

void setup() {
// determina o número de colunas e linhas do LCD
lcd.begin(16, 2);

// determina o tilt como um input para o Arduino


pinMode(tilt, INPUT);

// manda uma mensagem ao LCD


lcd.print("Pergunte ao: ");
// colocando o cursor na coluna 0, linha 1
lcd.setCursor(0, 1);

// manda a próxima mensagem para a segunda linha


lcd.print("Display LCD!");
721 ANIGÁP

void loop() {
// checa o estado do tilt
estadoatual = digitalRead(tilt);

FLAVIOBABOS.COM.BR
PROJETO 9

// comparando o estado anterior do botão com o estado real em que ele se


encontra
if (estadoatual != estadoanterior) {
// se o estado anterior mudou de HIGH para LOW o Arduino saberá que o tilt
// foi inclinado de um lado para o outro
if (estadoatual == LOW) {
// aleatoriamente escolhe uma resposta
resposta = random(8);
// limpando o display antes de uma outra resposta
lcd.clear();
// coloque o cursor na columa 0 e linha 0
lcd.setCursor(0, 0);
// mandando outro texto
lcd.print("O LCD diz:");
// movendo o cursor para a 2ª linha
lcd.setCursor(0, 1);

// escolhendo o que dizer ao usuário baseado em uma resposta aleatória


switch (resposta) {
case 0:
lcd.print("Sim");
break;

case 1:
lcd.print("Provavel");
break;

case 2:
lcd.print("Certamente");
break;

case 3:
lcd.print("Acho que sim");
break;
821 ANIGÁP

case 4:
lcd.print("Incerto");
break;

case 5:
lcd.print("Pergunte denovo");
break;

FLAVIOBABOS.COM.BR
PROJETO 9

case 6:
lcd.print("Em duvida");
break;

case 7:
lcd.print("Nao");
break;
}
}
}
// salva o estado atual do tilt como o último estado
estadoanterior = estadoatual;
}

Código passo a passo

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

INCLUA A BIBLIOTECA DO PROJETO:


Primeiro, você precisa importar a biblioteca
LiquidCrystal. Em seguida, você inicializará a
biblioteca, um pouco semelhante à maneira
como fez com a biblioteca Servo, dizendo
quais pinos ele usará para se comunicar.

const int tilt = 6;


int estadoatual = 0;
921 ANIGÁP

int estadoanterior = 0;
int resposta;

Agora que você configurou a biblioteca, é


hora de criar algumas variáveis e constantes.
Crie uma constante para guardar o pino do
tilt, uma variável para o estado atual do tilt,
FLAVIOBABOS.COM.BR
PROJETO 9

uma variável para o estado anterior do mesmo


e mais uma para escolher qual resposta o
display mostrará.

void setup() {

lcd.begin(16, 2);
pinMode(tilt, INPUT);

PRINTANDO SUA 1ª LINHA: Configure o


pino do tilt como entrada com pinMode () em
seu setup (). Inicie a biblioteca do LCD e diga
qual é o tipo de LCD que está usando. No
nosso caso, é o display de 16x2.
lcd.print("Pergunte ao: ");

MOVENDO O CURSOR: Agora é hora de


escrever uma pequena tela introdutória para o
usuário. Use a função print () para gravar na
tela do LCD. Assim, você irá escrever as
palavras "Pergunte ao: " na linha superior do
display.
lcd.setCursor(0, 1);
lcd.print("Display LCD!");
}

Não devemos nos esquecer que o cursor


031 ANIGÁP

estará automaticamente no início da linha


superior e para escrever para a próxima linha,
você precisará informar ao display para onde
mover o cursor. Para isso, use as coordenadas
da primeira coluna e da segunda linha: (0,1)
(lembre-se de que os computadores são zero
FLAVIOBABOS.COM.BR
PROJETO 9

indexados e (0,0) representa a primeira coluna


e a primeira linha). Use a função lcd.setCursor
() para mover o cursor para o local apropriado
e informe para escrever "Display LCD!".
Agora, quando você iniciar o programa, estará
escrito "Pergunte ao: Display LCD!" na sua
tela.

void loop() {

estadoatual = digitalRead(tilt);

Partindo para o loop (), iremos primeiro


verificar o estado do tilt atual e guardar esse
estado na variável estadoatual.

if (estadoatual != estadoanterior) {
if (estadoatual == LOW) {
resposta = random(8);

ESCOLHENDO UMA RESPOSTA ALEA-


TÓRIA: Use uma condição if () para
determinar se o tilt está em uma posição
diferente da que estava anteriormente. Se for
diferente do que era antes e, se atualmente
estiver como LOW, será hora de escolher uma
resposta aleatória.

lcd.clear();
131 ANIGÁP

lcd.setCursor(0, 0);
lcd.print("O LCD diz:");
lcd.setCursor(0, 1);

Feito isso, limpe a tela com a função


lcd.clear (). Isso também move o cursor de
volta para a posição (0,0), ou seja, para a pri-
FLAVIOBABOS.COM.BR
PROJETO 9

meira coluna e primeira linha do LCD. Imprima


a linha “O LCD diz:” e mova o cursor para a
saída.
switch (resposta) {
case 0:
lcd.print("Sim");
break;
.
.
.
case 7:
lcd.print("Nao");
break;
}
}
}

PREVENDO AS RESPOSTAS: A instrução


switch () executa diferentes partes do código,
dependendo do valor que você atribuir. Cada
um desses diferentes pedaços de código é
chamado de case. Já a instrução switch ()
verifica o valor de resposta da variável e
apresenta para cada case uma instrução de
código a ser executada.

Vamos escrever um código bem parecido


para cada instrução, mas, cada print no LCD
será diferente. Por exemplo, no case 0, o
código printa "Sim". Já para o case 1, será
231 ANIGÁP

printado “Provável”, e assim por diante.

Observe que após a função lcd.print (),


vem escrito outro comando: break. Sua função
é dizer ao Arduino onde está o final do case.

FLAVIOBABOS.COM.BR
PROJETO 9

Quando chega nessa instrução, o código


pula para o final da instrução do switch ().
Além do mais, para que tenhamos uma
variedade de prints no LCD, recomendo que
você crie um total de 8 instruções de case
onde, quatro das respostas serão positivas,
duas serão negativas e as duas finais
solicitarão que você tente novamente.

estadoanterior = estadoatual;
}

A última coisa a se fazer no seu loop () é


atribuir o valor do estadoatual à variável
estadoanterior. Isso permite usar as
alterações sofridas no tilt para que na próxima
vez, seja executado uma nova ordem de
respostas.

Agora é com você!

Tente adicionar seus próprios dizeres às


instruções print (), mas lembre-se do fato de que
existem apenas 16 caracteres a serem usados por
linha. Você também pode tentar adicionar mais
331 ANIGÁP

respostas. Certifique-se de que ao adicionar case


adicionais, adcionar o número de opções que
preencherão aleatoriamente a variável de resposta
random (x).

FLAVIOBABOS.COM.BR
PROJETO 9

Está curtindo os Projetos com Arduino da


Apostila? Então Aprenda a Criar Seus
Próprios Projetos de Automação e
Robótica AGORA:

Sobre os LCD's

Os LCDs funcionam alterando as propriedades


elétricas de um líquido que está sob o vidro
polarizado. O vidro permite apenas a passagem de
431 ANIGÁP

certos tipos de luz. Quando o líquido entre o vidro


é carregado, ele começa a formar um estado semi-
sólido. Esse novo estado corre em uma direção
diferente do vidro polarizado, impedindo a
passagem da luz, criando os caracteres que você
vê na tela.
FLAVIOBABOS.COM.BR
POTÊNCIOMETRO

BOTÃO
DIODO 1N4007

CAPACITOR 100uF

COMPONENTES UTILIZADOS
SUMÁRIO

FLAVIOBABOS.COM.BR
RESISTOR DE 10KOHMS
PROJETO 10

RESISTOR DE 220OHMS
PIEZZO ELÉTRICO

RESISTOR DE 1 MOHM
531 ANIGÁP
PROJETO 10

PROJETO: FECHADURA ELÉTRICA


Faça seu próprio mecanismo de bloqueio
secreto para manter seus pertences
guardados em segurança!

Descubra neste projeto: input com um piezzo e


escreva suas próprias funções.

TEMPO: 1 hora
Montado nos
projetos 1, 2, 3, 4 e 5.
NÍVEL:

O dispositivo de som chamado piezzo, além de


emitir sons, também pode ser usado como um
dispositivo de input/entrada. Quando conectado
aos 5V, o sensor pode detectar vibrações que
podem ser lidas pelas entradas analógicas do
Arduino. No entanto, você precisará conectar no
GND um resistor de alto valor (como 1 megohm)
como referência para que o circuito funcione bem.

Quando o piezzo for pressionado contra uma


superfície sólida que pode vibrar, como uma mesa
de madeira, o seu Arduino pode sentir a
intensidade de uma batida. Ao usar essa
informação, você pode verificar se o número de
631 ANIGÁP

batidas está em um intervalo aceitável ou não.

Dessa forma, no código, você pode acompanhar


o número de batidas e ver se elas correspondem às
suas configurações. Além disso, o interruptor irá
bloquear o motor no lugar.

FLAVIOBABOS.COM.BR
PROJETO 10

Os LEDs que você inserir irão fornecem o status:


o LED vermelho indica que a caixa está bloqueada,
o LED verde indica que a caixa está desbloqueada
e o LED amarelo informa se uma batida válida foi
recebida.

Você também escreverá sua própria função que


informará se uma batida é muito alta ou muito
suave. Escrever sua própria função ajuda a
economizar tempo de programação reutilizando o
código em vez de escrevê-lo várias vezes.

Tais funções podem receber argumentos e re-


tornar valores. Nesse caso, você atribuirá a uma
função o volume da batida. Se a batida estiver na
faixa certa, você incrementará uma variável.

Como dito anteriormente, você pode usar o


circuito que irá montar como uma ferramenta para
bloquear algo. Se você tiver uma caixa de madeira
ou papelão em que possa fazer furos, use o servo
motor para abrir e fechar uma trava, impedindo
que as pessoas peguem suas coisas.

Acompanhe a próxima página para fazer a


montagem dos componentes do projeto e entender
o esquema elétrico do mesmo.
731 ANIGÁP

FLAVIOBABOS.COM.BR
PROJETO 10

Montagem dos componentes do projeto

831 ANIGÁP

Montagem do esquema elétrico do projeto


FLAVIOBABOS.COM.BR
PROJETO 10

1) Conecte o positivo e o GND nos


dois lados da protoboard.

2) Coloque o botão na placa e um


lado dele você conecta aos 5V e o
outro lado, conecte ao resistor de
10kohms e ao GND. Nessa mesma
linha de conexão do resistor,
conecte o pino digital 2 do Arduino
no botão.

3) Prenda os fios do buzzer na


protoboard e anexe um fio ao
power. Se o seu componente não
indicar polaridade, você pode
conectá-lo de qualquer maneira
sem se preocupar com a ordem dos
fios. O outro pino que ficou
sobrando você conecta na porta
analógica 0 do seu Arduino. Além
931 ANIGÁP

disso, insira um resistor de 1


megohm entre o GND e o fio que
tinha ficado sobrando. Vale
lembrar que resistências mais
baixas tornarão o buzzer menos
sensível a vibrações.
FLAVIOBABOS.COM.BR
PROJETO 10

Bora programar? (não se assuste, o código é um


pouco maior mas não é difícil de aprender sua
lógica)
// importe a biblioteca
#include <Servo.h>

// crie uma instância para a biblioteca do Servo


Servo servo;

const int piezzo = A0; // pino em que o piezzo está conectado


const int botao = 2; // pino no qual o botão está conectado
const int lamarelo = 3; // pino do led amarelo
const int lverde = 4; // pino do led verde
const int lvermelho = 5; // pino do led vermelho

// variável para o valor do piezzo


int valorbatida;
// variável para o valor do botão
int valorbotao;

// variáveis para usar como limites HIGH e LOW do valor das batidas
const int batidabaixa = 10;
const int batidaalta = 100;

// variável para indicar se bateu no objeto ou não


bool trancado = false;
// quantidade de batidas que foram feitas
int numerobatidas = 0;

void setup() {
// insira o servo no pino 9
servo.attach(9);

// faça dos leds componentes OUTPUTS


pinMode(lamarelo, OUTPUT);
041 ANIGÁP

pinMode(lverde, OUTPUT);
pinMode(lvermelho, OUTPUT);

// faça do botão um input


pinMode(botao, INPUT);

// inicia a comunicação serial a 9600bps


Serial.begin(9600);

FLAVIOBABOS.COM.BR
PROJETO 10

// liga o led verde


digitalWrite(lverde, HIGH);

// move o servo para uma posição destravada


servo.write(0);

// printando no monitor serial


Serial.println("A caixa está aberta!");
}

void loop() {

// se a caixa estiver destrancada


if (trancado == false) {

// leia o valor do botao


valorbotao = digitalRead(botao);

// se o botao estiver pressionado, tranca a caixa


if (valorbotao == HIGH) {
// defina a variável trancado como verdadeira
trancado = true;

// mudando a condição dos leds


digitalWrite(lverde, LOW);
digitalWrite(lvermelho, HIGH);

// movendo o servo para trancar a caixa


servo.write(90);

// printando o estado atual no monitor serial


Serial.println("A caixa está trancada: ");

// esperando o servo mover para a posição


delay(1000);
}
141 ANIGÁP

// se a caixa estiver trancada


if (trancado == true) {

// verificando o valor do piezzo


valorbatida = analogRead(piezzo);

FLAVIOBABOS.COM.BR
PROJETO 10

// se não há batidas suficientes


if (numerobatidas < 3 && valorbatida > 0) {

// verifica se a batida está dentro do alcance


if (validacao(valorbatida) == true) {

// incremento para o número das batidas válidas


numerobatidas++;
}

// printando o valor das batidas


Serial.print(3 - numerobatidas);
Serial.println(" Batidas insuficientes");
}

// se há apenas 3 batidas
if (numerobatidas >= 3) {
// destrave a caixa
trancado = false;

// movendo o servo para a posição destravada


servo.write(0);

// delay para o servo se mover


delay(20);

// mudando a condição dos leds


digitalWrite(lverde, HIGH);
digitalWrite(lvermelho, LOW);
Serial.println("A caixa está destrancada!");

numerobatidas = 0;
}
}
}
241 ANIGÁP

// essa função determina se a quantidade de batidas está dentro do alcance max e


min
bool validacao(int valor) {

// se o valor das batidas estiverem entre o máximo e o mínimo


if (valor > batidabaixa && valor < batidaalta) {

FLAVIOBABOS.COM.BR
PROJETO 10

// acende o led amarelo


digitalWrite(lamarelo, HIGH);
delay(50);
digitalWrite(lamarelo, LOW);
// printa na tela o status
Serial.print("Valor de batida válida ");
Serial.println(valor);
// retorna o valor
return true;
}

// se a batida não estiver dentro do alcance


else {
// printe o resultado
Serial.print("Valor incorreto da batida ");
Serial.println(valor);

// retorna como falso


return false;
}
}

Agora, vamos entender o código, passo a passo!

#include <Servo.h>

Servo servo;

BIBLIOTECA DO SERVO: Assim como no


Projeto 5, você precisará importar a biblioteca
do servo e criar um objeto para ele para
341 ANIGÁP

podermos usar o motor.

FLAVIOBABOS.COM.BR
PROJETO 10

const int buzzer = A0;


const int botao = 2;
const int lamarelo = 3;
const int lverde = 4;
const int lvermelho = 5;

CONSTANTES ÚTEIS: Crie constantes para


posteriormente nomear suas entradas e saídas.

int valorbatida;
int valorbotao;

VARIÁVEIS PARA MANTER OS VALORES


DO BOTÃO E DO PIEZZO: Crie variáveis para
armazenar os valores do seu botão e do piezo.

const int batidabaixa = 10;


const int batidaalta = 100;

LIMIARES DE BATIDA: Configure algumas


constantes para determinar os níveis de batida
máximos e mínimos.

bool trancado = false;


int numerobatidas = 0;

VARIÁVEIS PARA TRANCAR A CAIXA E


PARA O NÚMERO DE BATIDAS: A variável
trancado informará se o bloqueio está
441 ANIGÁP

acionado ou não. Já um booleano é um tipo de


dados que só pode ser verdadeiro (1) ou falso
(0). Primeiramente, você deve começar com o
mecanismo em false, ou seja, desbloqueado.
Por fim, a última variável global conterá o
número de batidas válidas que você deu.

FLAVIOBABOS.COM.BR
PROJETO 10

void setup() {
servo.attach(9);
pinMode(lamarelo, OUTPUT);
pinMode(lverde, OUTPUT);
pinMode(lvermelho, OUTPUT);
pinMode(botao, INPUT);
Serial.begin(9600);

DEFINIR O LOCAL DOS PINOS DIGITAIS


E INICIALIZAR O OBJETO SERVO E A PORTA
SERIAL: Em seu setup (), conecte o servo ao
pino 9 e defina os pinos dos LED's como
outputs e os pinos do interruptor como inputs.

digitalWrite(lverde, HIGH);
servo.write(0);
Serial.println("A caixa está aberta!");
}

DESTRANCAR: Inicialize a comunicação


serial com o computador para poder monitorar
a intensidade da batida, qual é o estado atual
da trava e quantas batidas a mais você
precisa dar. Ligue o LED verde, mova o servo
para a posição destravada e imprima o status
atual no monitor serial, indicando que o
circuito está na posição destravada.

void loop() {
if (trancado == false) {
541 ANIGÁP

valorbotao = digitalRead(botao);

VERIFICANDO O BOTÃO: No loop (), você


primeiro verifica se a caixa está bloqueada ou
não. Isso determinará o que acontecerá no
restante do programa. Dessa forma, se estiver
bloqueado, leia o status do botão.
FLAVIOBABOS.COM.BR
PROJETO 10

if (valorbotao == HIGH) {
trancado = true;
digitalWrite(lverde, LOW);
digitalWrite(lvermelho, HIGH);
servo.write(90);
Serial.println("A caixa está trancada: ");
delay(1000);
}
}

TRANCAR: Se a chave estiver fechada (se


você estiver pressionando), altere a variável
bloqueada para true, indicando que a trava
está ativada. Desligue o LED verde e o LED
vermelho. É um aviso útil para informar o
status do bloqueio caso você não usufrua do
monitor serial no momento. Mova o servo para
a posição travada e imprima uma mensagem no
monitor serial indicando que a caixa está
travada agora. Adicione um delay () para que
o bloqueio tenha tempo suficiente para ser
processado.

if (trancado == true) {

// verificando o valor do piezzo


valorbatida = analogRead(piezzo);

VERIFICANDO O SENSOR DE BATIDA: Se


a variável bloqueada for verdadeira e a trava
641 ANIGÁP

estiver ativada, leia o valor da vibração do


piezzo e armazene-o em valorbatida.

FLAVIOBABOS.COM.BR
PROJETO 10

if (numerobatidas < 3 && valorbatida > 0) {


if (validacao(valorbatida) == true) {
numerobatidas++;
}
Serial.print(3 - numerobatidas);
Serial.println(" Batidas insuficientes");
}

CONTANDO APENAS BATIDAS VÁLIDAS:


A próxima instrução verifica se você tem
menos de três batidas válidas e se há alguma
vibração no sensor. Se ambos forem
verdadeiros, verifique se essa batida atual é
válida ou não e aumente a variável
numerobatidas. É aqui que você chama sua
função personalizada validacao (). Você
escreverá a função assim que terminar o loop
(), e ao escrever a função, nela iremos
perguntar se essa é uma batida válida.
Portanto, dentro dos parênteses escreva o
valorbatida como argumento. Depois de
verificar sua função, imprima o número de
batidas ainda necessárias.

if (numerobatidas >= 3) {
trancado = false;
servo.write(0);
delay(20);
digitalWrite(lverde, HIGH);
digitalWrite(lvermelho, LOW);
741 ANIGÁP

Serial.println("A caixa está destrancada!");


numerobatidas = 0;
}
}
}

DESTRANCAR: Verifique se você tem três

FLAVIOBABOS.COM.BR
PROJETO 10

ou mais batidas válidas. Se for true, altere a


variável bloqueada para false e mova o servo
para a posição destravada. Aguarde alguns
milissegundos para que ele comece a se mover
e altere o status dos LEDs verde e vermelho.
Imprima uma mensagem de status no monitor
serial, indicando que a caixa está
desbloqueada.

Feche a instrução else e o loop () com um


par de colchetes.

bool validacao(int valor) {

DEFININDO UMA FUNÇÃO PARA


VERIFICAR A VALIDAÇÃO DA BATIDA:
Agora é hora de escrever a função validação
(). Ao escrever suas próprias funções, é
necessário indicar se ela retornará um valor ou
não. Se não quiser retornar um valor, você a
declara como tipo void, semelhante às funções
loop () e setup (). Se quiser retornar um valor,
você deve declarar qual o tipo (int, long,
float, etc.). Nesse caso, você está verificando
se uma batida é válida (true) ou não (false).
Para isso, declare a função como tipo
booleano.
841 ANIGÁP

Essa função específica verifica um número


(sua variável valorbatida) para ver se ela é
válida ou não. Para passar essa variável para
a função, você cria um parâmetro nomeado
quando declara a função.
FLAVIOBABOS.COM.BR
PROJETO 10

if (valor > batidabaixa && valor < batidaalta) {

VALIDANDO A BATIDA: Em sua função,


sempre que você se referir ao valor, ele usará
qualquer número que receber como argumento
no programa principal. Para isso, o argumento
usado será a variável definida como
valorbatida. Verifique se o valor é maior que
seu toque silencioso (batidabaixa) e menor
que seu toque alto (batidaalta).

digitalWrite(lamarelo, HIGH);
delay(50);
digitalWrite(lamarelo, LOW);
Serial.print("Valor de batida válida ");
Serial.println(valor);

INDICANDO QUE A BATIDA É VÁLIDA:


Se o valor estiver entre esses dois valores, é
uma batida válida. Com isso, o LED amarelo
piscará uma vez e imprimirá o valor da batida
no monitor serial.

return true;
}

RETORNANDO ‘TRUE’ NA FUNÇÃO: Para


que o programa principal saiba qual é o
941 ANIGÁP

resultado da comparação, use o comando


return. Você usa o comando return, que
também finaliza a função: uma vez executada,
será retornado ao programa principal.

FLAVIOBABOS.COM.BR
PROJETO 10

else {
Serial.print("Valor incorreto da batida ");
Serial.println(valor);

return false;
}
}

INDICANDO BATIDA INVÁLIDA; FUNÇÃO


RETORNA ‘FALSE’: Se o valor estiver muito
baixo ou muito alto, imprima-o no monitor
serial e retorne false.

Note

Quando você conectar o circuito ao seu Arduino


pela primeira vez, abra o monitor serial. Você deve
ver o LED verde acender e o servo se mover para a
posição destravada. O monitor serial deve imprimir
"A caixa está destravada!". Você provavelmente
ouvirá o piezo dar um pequeno "clique" quando ele
receber energia.

Tente bater de forma suave e depois com mais


força para ver que tipo de intensidade na batida
aciona sua função. Você saberá que está
funcionando quando o LED amarelo piscar e o
monitor serial informar que você tem uma batida
051 ANIGÁP

válida com seu valor.

Ele também informará o número de batidas


necessárias antes de desbloquear a caixa. Depois
que você atingir o número certo de batidas, a luz
vermelha se apagará, a luz verde acenderá, o ser -

FLAVIOBABOS.COM.BR
PROJETO 10

vo se moverá 90 graus e o monitor serial informará


que a trava está desativada.

Adote

Os valores para sua batida ideal podem variar


dos valores mostrados aqui no projeto. Isso
depende de várias variáveis diferentes, como o
tipo de superfície à qual o sensor está conectado e
a robustez de sua fixação. Usando o monitor serial
e o exemplo AnalogInSerialOut na IDE do Arduino,
encontre um valor de batida apropriado para sua
configuração. Você pode encontrar uma explicação
detalhada desse exemplo aqui:

arduino.cc/analogtoserial

Se você mover o projeto para uma caixa,


precisará fazer furos para os LEDs e para a chave.
Você também precisará fazer uma trava para o
servo motor girar. Provavelmente também será útil
ter um orifício para passar o cabo USB e descobrir
como o seu novo ambiente é sensível às batidas.

Pode ser necessário reorganizar sua protoboard


e o Arduino, ou soldar os LEDs e alternar para
torná-los acessíveis ao exterior do seu gabinete. Se
você nunca soldou antes, peça a alguém com
151 ANIGÁP

experiência para ajudá-lo ou tente praticar com


algum pedaço de arame antes de tentar com outro
dispositivo neste projeto. Acesse abaixo para uma
boa explicação de como soldar.

arduino.cc/soldering
FLAVIOBABOS.COM.BR
PROJETO 10

Saiba disso

Escrever suas próprias funções não apenas


permite controlar o fluxo do seu código com mais
facilidade, como também ajuda a mantê-lo legível à
medida que seus projetos se tornam cada vez
maiores. Com o tempo, à medida que você escreve
mais código, você pode achar que possui um
grande número de funções que pode reutilizar em
diferentes projetos, tornando o processo mais
rápido e exclusivo ao seu estilo de programação.

Implemente seu código

Este exemplo simplesmente conta o número certo


de batidas, não importa quanto tempo leve. Você
pode criar um exemplo mais complexo usando um
cronômetro com millis (). Use o cronômetro para
identificar se as batidas acontecem em um período
específico de tempo.

Você não está limitado (a) a simplesmente


encontrar batidas em um intervalo específico. Você
pode procurar padrões complexos de batidas com
2511 ANIGÁP

base na quantidade de vibração e tempo juntos.

Existem vários exemplos on-line que falam sobre


como fazer isso, pesquise "Arduino knock lock"
para descobrir mais exemplos desse tipo de projeto.

FLAVIOBABOS.COM.BR
PARABÉNS SE VOCÊ CHEGOU ATÉ AQUI!

Significa que você realmente quer aprender sobre


Arduino e tudo o que essa plataforma tem a
oferecer.

Além disso, eu garanto que você deseja sair do


ponto A (onde você está) para alcançar um objetivo,
o ponto B.

Porém, você não sabe ao certo como percorrer esse


caminho.

Algo dentro de você sabe que você está destinado


a alcançar feitos maiores, objetivos maiores, sonhos
maiores.

Mas você tem medo. Ansiedade. Falta de


conhecimento sobre Arduino, Programação,
Automação...

Esses são os fatores que impedem você de alcançar


seus maiores sonhos e objetivos.

Agora, imagine se você tivesse em mãos um mapa.


Um verdadeiro guia que mostrasse em detalhes o
passo-a-passo para te levar do ponto A ao ponto B.
3511 ANIGÁP

Um guia recheado com conhecimento, com atalhos


para andar mais rápido e com dicas para evitar os
maiores perigos nesse caminho.

E, como um passe de mágica, o seu medo, a


ansiedade e a falta de conhecimento, se transfor-
FLAVIOBABOS.COM.BR
mam em confiança, energia e sabedoria para trilhar
essa jornada para mudar sua vida.

Você tem agora apenas duas decisões: Continuar


parado observando seus sonhos e objetivos ficarem
cada vez mais distantes...

Ou decidir lutar pelo que é seu por direito.


Percorrer esse caminho para atingir seu sucesso e
viver a vida que você sempre sonhou.

Talvez seja aprimorar suas habilidades com


Arduino, aprender a programar de fato, criar coisas
que as pessoas ao seu redor irão ficar admiradas de
suas invenções...

E eu te pergunto: você não tem medo do que pode


acontecer com você daqui a um tempo caso não
comece a buscar esse conhecimento agora?

Daqui a 2 anos, qual será seu projeto que vai te


dar mais orgulho?

Terá conquistado um nível alto em programação


que você tanto quer?

Vai construir projetos profissionais?


4511 ANIGÁP

Vai trabalhar construindo automações?

Sim! Está na hora de você escolher alcançar seu


objetivo, está na hora de escolher o caminho certo
a ser seguido que vai te ajudar a chegar lá mais
rápido.
FLAVIOBABOS.COM.BR
QUERO SEGUIR ESSE CAMINHO GARANTINDO
MINHA VAGA NO CURSO DE ARDUINO

Esse curso que que você está tendo a chance de


acessar foi desenvolvido pelo Flávio Guimarães
depois de mais de 20 anos trabalhando com
desenvolvimento de projetos e mais de 100 mil reais
investidos em conhecimento e especializações.

Dentro do Treinamento você vai se aprofundar e


irá se especializar em Arduino de uma vez por
todas e isso te poupará dezenas de horas de suor
desnecessário que você teria procurando artigos e
vídeos desconexos na internet.

Até quando você vai só ficar imaginando como


seria se desse certo?

Até quando você vai continuar copiando códigos


de outras pessoas?

Até quando vai deixar de dar vida às suas ideias


por falta de conhecimento?

E pode ficar tranquilo que não vou te cobrar nem


perto de tudo que o Flávio gastou para estruturar o
método.
551 ANIGÁP

Já pensou se você fosse precisar investir mais de


100 mil reais em especializações, graduações e
consultorias para descobrir a melhor maneira de
aprender Arduino, Eletrônica e Programação que o
Flávio ensina em seu Curso de Arduino?

FLAVIOBABOS.COM.BR
Não precisa, pois, na verdade, você irá acessar
tudo isso por 12xR$67,00.

Se você parar para pensar, isso é menos que você


gasta comendo uma pizza no mês...

Tá afim de deixar uma pizza de lado e começar a


investir em algo que pode realmente mudar sua vida?

NÃO QUERO PERDER ESSA CHANCE

Lembrando que você não corre risco nenhum.

Afinal, caso entre para o Treinamento e se


arrependa, tem 7 dias de garantia absoluta de
satisfação.

Basta um e-mail e devolvemos 100% do seu dinheiro.

GARANTA AQUI O
TREINAMENTO COMPLETO
651 ANIGÁP

FLAVIOBABOS.COM.BR

Você também pode gostar