Vous êtes sur la page 1sur 75

Universidade Federal de Campina Grande - UFCG

Centro de Engenharia Eletrica e Informatica - CEEI


Departamento de Engenharia Eletrica - DEE
Programa de Educacao Tutorial - PET

Minicurso

Introducao a Plataforma Arduino

Autores: Barbara Nicoly Menezes de Oliveira (PET-Eletrica-UFCG)


Emilly Rennale Freitas de Melo (PET-Eletrica-UFCG)
Giuseppe Di Giuseppe Deininger (PET-Eletrica-UFCG)
Jose Wemerson Farias Lima (PET-Eletrica-UFCG)
Saul Borges Nobre (PET-Eletrica-UFCG)

Tutor: Wamberto Jose Lira de Queiroz

1a Edicao
Campina Grande, Setembro de 2016
Introducao a Plataforma Arduino
PET Eletrica
Autores: Barbara Nicoly Menezes de Oliveira
Emilly Rennale Freitas de Melo
Giuseppe Di Giuseppe Deininger
Jose Wemerson Farias Lima
Saul Borges Nobre

2
Sumario

1 Introducao 5
1.1 A plataforma Arduino . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.2 Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.1.3 Instalando Arduino . . . . . . . . . . . . . . . . . . . . . . 14

2 Iniciando 19
2.1 Organizando seu Sketch . . . . . . . . . . . . . . . . . . . . . . . 19
2.2 A IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3 Anatomia de um sketch . . . . . . . . . . . . . . . . . . . . . . . 22
2.3.1 Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.3.2 O loop infinito . . . . . . . . . . . . . . . . . . . . . . . . 22
2.3.3 Comentando o codigo . . . . . . . . . . . . . . . . . . . . 23
2.4 Diferencas entre Analogico e Digital . . . . . . . . . . . . . . . . 25
2.5 Funcoes basicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.5.1 Funcao Serial . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.5.2 Funcoes de entrada e sada digitais . . . . . . . . . . . . . 27
2.5.3 Funcoes de entrada e sada analogicas . . . . . . . . . . . 31
2.5.4 Funcao de sada PWM . . . . . . . . . . . . . . . . . . . . 40

3 Bibliotecas 43
3.1 Biblioteca Essencial . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.2 Biblioteca Padrao . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.3 Biblioteca de Terceiros . . . . . . . . . . . . . . . . . . . . . . . . 44
3.4 Instalando uma nova biblioteca . . . . . . . . . . . . . . . . . . . 45
3.5 Shields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.5.1 Shields de motor . . . . . . . . . . . . . . . . . . . . . . . 46
3.5.2 Shields de Ethernet e Wi-fi . . . . . . . . . . . . . . . . . 47
3.5.3 Shields de Prototipagem . . . . . . . . . . . . . . . . . . . 48

4 Input e Output Avancados 51


4.1 Sensores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.1.1 Detectando Objetos com ultrasom . . . . . . . . . . . . . 51
4.1.2 Fazendo o sketches para deteccao de objetos . . . . . . . . 52

3
Introducao a Plataforma Arduino
Sumario PET Eletrica

4.1.3 Detectando objetos com infravermelho . . . . . . . . . . . 53


4.1.4 Sketch para deteccao de presenca por infravermelho . . . 53
4.2 Controlando um LED com PWM . . . . . . . . . . . . . . . . . . 55
4.3 Monitor serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.4 Motores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.4.1 Motores DC . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.4.2 Motores de passo . . . . . . . . . . . . . . . . . . . . . . . 65
4.4.3 Motores servos . . . . . . . . . . . . . . . . . . . . . . . . 68

5 Anexos 73
5.1 Informacoes tecnicas do Arduino UNO . . . . . . . . . . . . . . . 73
5.2 Comunicacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.2.1 Plataforma Bluetooth do Arduino . . . . . . . . . . . . . 73
5.2.2 Fazendo a montagem com a conexao Bluetooth . . . . . . 74

4
Captulo 1

Introducao

A plataforma Arduino se tornou a paixao de muitos estudantes de Engenharia


Eletrica por varios motivos. O Arduino abriu as portas para uma era de codigos
compartilhados, hardware a precos acessveis e de pessoas fazendo sozinhas seus
proprios equipamentos. Nada melhor para aqueles que gostam de colocar a
mao na massade verdade - tambem conhecidos como engenheiros.
Estamos vivendo uma verdadeira revolucao, e para fazer parte dela, conhecer
bem o Arduino e, com certeza, um pre-requisito. Assim, trazemos o texto de um
artigo publicado na 63a edicao do Jornal PET Eletrica (ISSN: 2316-5863), nao
apenas para apresenta-los a essa revolucao, mas, sobretudo, para convida-los.

A Revolucao do Open Source e do Movimento Do it Yourself

Por Emilly Rennale Freitas de Melo

Em 2010, Tim Berners Lee, o criador da internet, afirmou que en-


quanto existir informacoes em rede, pessoas as irao utilizar para fazer coi-
sas incrveis, como nunca poderamos imaginar. Na internet se encontra
praticamente tudo que precisamos, desde para a diversao ate ferramentas
que facilitam o trabalho de cada dia. Entretanto, algo bem mais interes-
sante acontece quando estes dois mundos aparentemente distantes colidem:
quando a diversao e motor para o trabalho. Esta e uma epoca em que
usuarios, encorajados pela alta disponibilidade de informacoes, cada vez
mais se tornam tambem produtores do proprio conteudo.
Para explicar melhor, comecarei com uma simples pergunta: quem in-
ventou a mountain bike? Pela teoria economica tradicional, a invencao seria
creditada provavelmente para alguma grande empresa, que teria os recursos
necessarios para a criacao. Outra resposta seria que este tipo de bicicleta
veio de um genio solitario em sua garagem, que do nada teria tido a ideia.
Mas nao, nenhuma destas e a resposta. A mountain bike veio de usuarios,

5
Introducao a Plataforma Arduino
PET Eletrica

particularmente um grupo de jovens da California; frustrados pelo desem-


penho das bicicletas de corrida tradicionais, que eram bastante pesadas e
grandes , comecaram a mudar pequenos aspectos destas bikes, ate que, por
uma mistura de varias ideias, surgiu a mountain bike.
Hoje, cerca de 30 anos depois da invencao, sao inumeras as empresas
que fabricam mountain bikes, de forma que as vendas relacionadas a este
tipo de bicicleta correspondem por 65% das vendas no ramo na America, o
que vale cerca de 58 bilhoes de dolares.
Essa categoria foi completamente criada por consumidores e nao seria
desenvolvida pelo mercado porque esse nao seria capaz de ver a necessidade.
Nao teria o incentivo para inovar como aqueles jovens californianos. Eles
tinham o incentivo, as ideias e as ferramentas para fazer o que queriam. E,
em uma explosao coletiva de criatividade, fizeram.
A partir disso, comecou o contraste entre o que se aprende tradicio-
nalmente sobre o conceito de criatividade e sobre o que ela realmente e.
Geralmente, ainda somos levados a ideia de que a criatividade esta relacio-
nada a pessoas especiais, em lugares especiais, tendo pensamentos especiais,
que entao apresentarao seu novo produto para os consumidores dizerem seu
sim ou nao para a invencao. Os consumidores sao passivos. Essa e a ideia
de criatividade.
Mas como no caso das mountain bikes, o mundo esta repleto de situacoes
que evidenciam que a criatividade, na verdade, tem sempre se mostrado
como altamente colaborativa e interativa. Por exemplo, na criacao do SMS
(short message service), seus criadores nao faziam ideia de qual seria seu
proposito. Somente quando essa tecnologia chegou as maos dos adolescentes
que eles criaram seu uso. Cada vez mais, inventores nao sao capazes de
dizer todas as aplicacoes do que desenvolveram, pois sao criadas com o uso
cotidiano, em colaboracao com os usuarios. Temos a mania de pensar que
uma grande invencao e algo somente relacionado com o momento especfico
da criacao, quando na realidade, a maioria da criatividade e cumulativa e
colaborativa; como a Wikipedia, que se desenvolve por um longo perodo.
Dessa forma, a criatividade colaborativa tem caracterizado uma das mai-
ores revolucoes que estamos passando. Pense na situacao : um pai quer dar
ao seu filho um carrinho de brinquedo. Mas ele precisa ir a uma loja compra-
lo? Nao. Basta ele fazer um download do arquivo do carrinho da internet
e o imprimir em sua impressora 3D. Essa ideia de que e possvel manufa-
turar objetos digitalmente com esses tipos de maquinas e o que a revista
The Economist definiu como a Terceira Revolucao Industrial. Todavia, nao
e somente o fato de poder construir produtos dessa forma que interessa,
mas sim o porque que podemos, como argumenta o engenheiro eletricista
italiano Massimo Banzi.
Ele afirmou que ha outra grande revolucao acontecendo, a qual lida
com hardware de codigo aberto (open source hardware) e com o movimento
Maker (Makers movement), porque ate a impressora que faz o carrinho e

6
Introducao a Plataforma Arduino
PET Eletrica

open source, desde os arquivos de construcao, ao hardware, software e as


instrucoes. Como tambem, em virtude de que isso e parte de uma grande
comunidade em que milhares de pessoas estao realmente construindo essas
impressora em um ritmo que permite muitas inovacoes pois tudo e open
source. Voce nao precisa da autorizacao de ninguem para criar algo bom.
Outro aspecto interessante e o motivo da impressora ser open source.
Seu principal funcionamento e permitido pelo uso do Arduino, um projeto
em que Massimo vem trabalhando nos ultimos nove anos, juntamente com
amigos: dois americanos, dois italianos e um espanhol. Em grupo, eles
desenvolveram as placas Arduino com o proposito de ser algo simples para
uso de seres humanos, ser algo que pudesse interagir conosco, que fosse facil
de entender e que todos pudessem ter acesso, sendo assim, open source.
Com Arduino, e possivel criar diversos projetos mesmo que voce nao
seja um engenheiro, e e esse o objetivo. Ate criancas sao capazes de fazer
projetos com Arduino e e realmente assustador ver suas capacidades uma
vez que a sao dadas as ferramentas.
O Arduino em si tem diversos componentes que individualmente podem
ser difceis para uma crianca de doze anos entender ou mesmo alguem de
fora da area de criacao tecnologica, mas ele consegue unir todas as funci-
onalidades em algo que o usuario pode utilizar para criar experiencias dos
mais diferentes nveis e, sobretudo, de forma rapida e eficiente.
Em situacoes como essa, ha companhias que fazem suas proprias versoes
de Arduino para mercados especficos, de modo que ha cerca de 150 va-
riacoes de Arduino no momento. Como os que sao feitos pela empresa
Adafruit, dirigida por uma mulher chamada Limor Fried, tambem conhe-
cida como Ladyada, uma das heronas do movimento de hardware open
source e do movimento Maker.
Limor Fried e engenheira eletricista formada pelo MIT, ja desenvolveu
diversos dispositivos e e a administradora da Adafruit Industries, em Nova
York, uma companhia que faz kits de eletronica open source para os se-
guidores do movimento DIY - Do it Yourself ou em portugues, Faca
voce mesmo. Mas nao e somente por isso que ela ja foi capa da renomada
revista de tecnologia Wired. Alguns outros motivos sao:

Ela criou o Tweet-a-Watt, que combina um medidor de tensao com


um Arduino e um modulo wireless Xbee, capaz de enviar informacoes
sobre seu consumo de eletricidade pelo Twitter.

Ela e uma dentre um pequeno numero de pessoas responsaveis pela


revolucao do Arduino nos Estados Unidos da America.

Ela e lder do movimento open source hardware, o qual em breve se


unira ao open source software como um fenomeno de escala mundial
que reinventara tudo desde modelos de negocios ate a invencao em si.

7
Introducao a Plataforma Arduino
PET Eletrica

Ela organizou um evento para hackear o Microsoft Kinect. O premio


de $ 3000,00 foi ganho em somente tres dias.
Ela controla uma maquina chamada Pick-and-place, que e um robo
capaz de montar circuitos diretamente em placas.
A Adafruit tem um dos melhores open source blogs de eletronica.
Ela desenvolveu uma das primeiras companhias de eletronica liderada
por uma comunidade. Na Adafruit, os foruns vem em primeiro lugar,
em que as vozes dos fundadores tomam a frente e o foco.
Seu gato se chama MOSFET, acronimo para metal-oxide-
semiconductor field-effect transistor.
Ao falar sobre o movimento DIY e o Open Source, Limor afirma que
o compartilhamento de arquivos e apenas o acelerador. No passado, era
possvel ler sobre os projetos de outras pessoas e os assistir pela televisao.
Sempre havia essa grande separacao entre o indivduo e o que era feito.
Contudo, hoje pode-se escolher livremente entre as tecnologias existentes e
o trabalho de outras pessoas para desenvolver um projeto pessoal. Limor
nao acha que isso seria algum tipo de trapaca ou fraude, ela acredita que
as pessoas estao realmente aprendendo. Mas se tem que entender o que
realmente deve ser feito. Ela diz que nao se pode somente reproduzir aquilo
que ja foi criado, o codigo e aberto por um motivo: para que possa ser
aperfeicoado. Como ela disse, voce tem que fazer algo mais legal, melhor,
mais brilhante, mais rapido e, claro, mais inteligente.
Existem diversos websites realmente bons nos quais as pessoas podem
compartilhar seus projetos, como o Instructables, iFixit, Etsy, Make, Hack
a Day e o proprio da Adafruit. Assim, aqueles que eram acostumados a
trabalhar sozinhos agora tem de fato uma comunidade para compartilhar
projetos bem sucedidos como tambem suas duvidas. E possvel aprender
de tudo, desde uma receita de bolo.
Inumeros projetos foram desenvolvidos gracas ao movimento DIY e a
revolucao Open Source, como um pequeno modelo de helicoptero, um qua-
dricoptero que, antes tecnologia militar, hoje e open source e comecou a ser
utilizado para transportar materiais entre vilas na Africa, fato que talvez
nao fosse possvel se nao fosse algo facil de encontrar, de utilizar e princi-
palmente, se nao fosse disponvel a todos. Outro trabalho e um dispositivo
chamado Botanicalls, que trata-se de um Arduino associado com um modulo
wi-fi em uma planta, o qual e capaz de fazer medicoes sobre o bem-estar
da planta, que por meio de uma conta do Twitter permite uma interacao
com o vegetal. Este comecaria a dizer esta realmente quente! ou estou
com sede, seria como se tivesse dado uma personalidade a sua planta.
E interessante falar tambem de um dispositivo desenvolvido por um
garoto de 14 anos do Chile, que fez um sistema detector de terremotos e

8
Introducao a Plataforma Arduino
PET Eletrica

publica os resultados no Twitter. Ele tem mais de 280 000 seguidores. Com
somente 14 anos, antecipou em um ano um projeto governamental.
Quando o acidente de Fukushima aconteceu, muitas pessoas no Japao
perceberam que grande parte das informacoes disponibilizadas pelo governo
com relacao aos nveis de radiacao nao eram de fato abertas e confiaveis.
Assim, eles criaram um contador Geiger juntamente com um Arduino e
uma interface de rede, espalhando cerca de 100 unidades dele pelo Japao, a
fim de que analisassem as condicoes locais e enviassem as informacoes para
o website Cosm em tempo real.
Ha tambem projetos feitos a nvel de diversao, como um que, pela analise
do feed do Twitter de uma famlia, e possvel determinar onde cada membro
esta, e com isso fez-se um relogio com Arduino como o da famlia Weasley
dos filmes de Harry Potter. E tudo necessario para fazer este relogio se
encontra online.
Um ultimo projeto importante de ser aludido e o Ardusat, que esteve
recentemente no Kickstarter. Trata-se de um satelite que realmente vai
para o espaco e e completamente open source, controlado por Arduino e
diversos sensores. Logo, se voce sabe usar um Arduino, voce pode realmente
desenvolver experimentos e carrega-los ao satelite, que realizaria testes no
espaco.
Sao por projetos como esses que se evidencia a importancia da revolucao
dita por Massimo Banzi e Limor Fried. As pessoas finalmente estao mais
confortaveis com a ideia de construir e hackear aquilo que precisam,
mesmo quando elas nao se identificam como criadoras - makers. O im-
pacto e tao forte e crescente que se estima que em dez anos, nos pases
desenvolvidos, as escolas tenham aulas de robotica mecatronica com tanta
importancia como se tem as de matematica.
Nao obstante tantos benefcios, pode-se questionar sobre as mudancas no
consumo, uma vez que as pessoas estao comecando a ter que escolher entre
produtos de manufatura tradicional ou por aqueles feitos pela manufatura
maker. O fato e que todos querem tecnologia bastante especializada, o que
nao e disponibilizado por grandes empresas, mas que agora sao capazes
de ter. Quando alguem faz um aparelho para si mesmo e o disponibiliza
para comunidade, nao e incomum que outras diversas pessoas tambem se
identifiquem e gostem do que foi criado. Nao e mais necessario se submeter
a tudo aquilo imposto por grandes companhias, os consumidores terao mais
escolhas feitas por pessoas parecidas com eles. No entanto, nao e uma
producao em larga escala a ponto de tentar produzir a nvel de mercado,
mas sim uma manufatura suficiente para suprir as necessidades de uma
pequena comunidade.
A revolucao do Open Source e do movimento Do it Yourself, portanto,
vai muito alem da Engenharia Eletrica e da Ciencia da Computacao: esta
mudando vidas. Afinal, dissera Limor Fried:
Nos fazemos Ciencia e nao temos ideia para que ela servira ate que

9
Introducao a Plataforma Arduino
PET Eletrica

alguem eventualmente descubra algo e diga, uau, isso vai ser util para a
eletricidade talvez sera como a tecnologia verde. Nos nao temos ideia.
Sera estranho e surpreendente, e nos estaremos chocados, mas sera fasci-
nante.

10
Introducao a Plataforma Arduino
1.1. A plataforma Arduino PET Eletrica

1.1 A plataforma Arduino


Ha pouco tempo, pouco mais de uma decada, trabalhar com hardware sig-
nificava construir circuitos desde o comeco, usando centenas de diferentes com-
ponentes como resistores, capacitores, indutores, transistores, diodos etc. Cada
circuito era fabricado para uma aplicacao especfica e realizar modificacoes era
algo bastante complicado pela necessidade de cortar fios, desfazer conexoes sol-
dadas, dentre outras acoes que poderiam danificar todo um projeto. Com o
surgimento das tecnologias digitais e dos microprocessadores, essas aplicacoes
que antes eram implementadas com fios passaram a ser substitudas por soft-
ware, o qual e significativamente melhor de ser modificado do que o hardware.
Assim, um Arduino e composto de duas partes principais:

A Placa Arduino: hardware utilizado para a construcao de objetos;


O Ambiente de Desenvolvimento Integrado (IDE - Integrated Development
Enviroment): o software utilizado para criar um sketch (rascunho) a ser
carregado na placa Arduino. O sketch diz a placa o que fazer.

1.1.1 Hardware
A placa Arduino e um pequeno microcontrolador: circuito e chip principal.
Esse chip, que e o computador do Arduino, e de baixa performance comparado
a um computador convencional, mas e bem mais economico e muito util para
desenvolver dispositivos interessantes. No caso do Arduino Uno, o tipo mais
comum de Arduino, esse chip e o Atmega328.
Ha uma variedade de plataformas Arduino, todas baseadas em um chip mi-
croprocessador de 8 bits Atmel AVR. A primeira placa era baseada na Atmega8,
de velocidade de 16 MHz, com 8 Kb de memoria flash. Outras recentes versoes
de Arduino, como o Duemilanove e Uno, usam o Atmega328 com 32 Kb de
memoria flash e podem alternar automaticamente entre as fontes de alimentacao
do USB e CC. Ja a ultima versao e o Arduino Leonardo, que se destaca dos
outros pelo fato do chip responsavel pela conexao USB ser o mesmo que tambem
controla as outras atividades desempenhadas pela placa, enquanto ate os tipos
anteriores, cada placa tinha dois chips, sendo um especfico para o controle da
conexao USB, o Atmega16U2, e o outro seria o Atmega328, que nao processa
USB.
Assim, no Arduino Leonardo, os designers de microcontroladores finalmente
conseguiram desenvolver um unico chip capaz de controlar tanto o USB como
as demais aplicacoes do Arduino, resultando no ATmega32U4. Ja ha outros
Arduinos que utilizam do ATmega32U4, como o Arduino Yun, Arduino Esplora
e o robo Arduino. Para projetos que necessitam de mais memoria, ha como
opcoes os Arduino Mega1280 com 128 Kb de memoria ou o Arduino Mega2560,
mais recente, com 256Kb de memoria.
As placas Arduino tem 14 pinos digitais, em que cada um pode ser confi-
gurado como input ou output, e ha seis entradas analogicas. Alem disso, seis
dos pinos digitais podem ser programados para uma sada PWM (pulse with

11
Introducao a Plataforma Arduino
1.1. A plataforma Arduino PET Eletrica

modulation). Uma grande variedade de protocolos de comunicacao estao dis-


ponveis, incluindo serial, serial de interface periferica (serial peripheral interface
bus, SPI) e I2C/TWI. Includos em cada placa como atributos padroes ainda ha
um cabecalho de circuito interno de programacao serial (in-circuit serial pro-
gramming, ICSP) e um botao de reset. Para maior funcionalidade, ha placas
chamadas shields, que expandem as funcoes basicas do Arduino e podem ser
colocadas uma sobre a outra para adicionar ainda mais funcionalidade.
De modo geral, sobre como os pinos sao organizados:

14 pinos digitais de entrada e sada (pinos 0-13: Esses pinos podem ser
tanto de sada como de entrada. Entradas sao usadas para ler informacoes
de sensores, enquanto sadas controlam atuadores. No sketch e especifi-
cado qual o tipo desejado (entrada ou sada). Entradas digitais podem ler
apenas um dentre dois valores e sadas digitais lancam tambem um dentre
dois valores (High e Low).

6 pinos analogicos de entrada (pinos 0-5): Os pinos de entrada analogica


sao usados para ler medidas de tensao de sensores analogicos. Em con-
traste com as entradas digitais, que podem distinguir entre somente dois
nveis (High e Low), entradas analogicas podem medir 1 024 diferentes
nveis de tensao.

6 pinos analogicos de sada (pinos 3, 5, 6, 9, 10 e 11): Esses sao, na


realidade, seis dos pinos digitais que podem desempenhar uma terceira
funcao: promover sadas analogicas. Como com os pinos de digitais, e
necessario especificar o que o pino deve ser (entrada ou sada) no sketch.

Quanto a alimentacao da placa, ela pode ser feita pela porta USB de um
computador, um carregador USB ou um adaptador AC (recomenda-se 9 volts,
2.1 mm de ponta, centro positivo). Sempre que energia esteja sendo fornecida
ao socket de alimentacao, o Arduino a utilizara. Caso nao seja alimentado dessa
forma, o Arduino utilizara a energia promovida pela conexao USB. Por questoes
de seguranca, aconselha-se alimentar a placa tanto pelo socket de energia como
pelo USB.

Arduino UNO
Em 25 de setembro de 2010, O jantar esta servido era o ttulo do blog
que anunciava o Arduino Uno e Arduino Mega2560. Uno significa um em
italiano e foi escolhido como marco no lancamento do Software Arduino 1.0,
a IDE. As placas Arduino e a versao 1.0 da IDE foram as referencias para
as versoes de Arduino seguintes. A placa UNO e a primeira de uma serie de
Arduinos com USB e modelo de referencia para a plataforma Arduino.
A maior diferenca entre o Uno e seus precessores e a inclusao do Atmega8U2,
microcontrolador programado como um conversor USB-serial, no lugar do ul-
trapassado FTDI, usado nas versoes anteriores. O Atmega8U2 pode ser repro-
gramado para dispor o Arduino como qualquer outro dispositivo USB, como um

12
Introducao a Plataforma Arduino
1.1. A plataforma Arduino PET Eletrica

mouse, teclado ou joystick. Outra diferenca e que o Uno e mais confiavel por
garantir a placa 3.3 volts, o que ajuda a manter a estabilidade de alguns shields
que apresentaram problemas no passado. A Figura 1.1 mostra o Arduino UNO.

Figura 1.1: Arduino UNO layout e pinos.

O Uno tem um polifuso resetavel que protege a porta USB do computador


de ter uma sobrecarga de corrente. Apesar da maioria dos computadores pro-
videnciar sua propria protecao interna, o fuso do Uno age como uma camada
extra de protecao. Se mais de 500mA sao aplicados em uma porta USB, o
fuso automaticamente interrompe a conexao ate que o curto ou sobrecarga seja
retirada.
A placa pode operar com uma fonte externa de 6 a 20 volts. Se aplicados
menos de 7V, o pino de 5V pode alimentar com menos de 5V e a placa pode
ficar instavel. Se usados mais de 12V, o regulador de tensao pode sobreaquecer
e danificar a placa. Assim, a variacao recomendada e de 7 a 20 volts. Para
entender melhor sobre a alimentacao, e interessante conhecer mais sobre seus
pinos:

Vin - A tensao de entrada para o Uno quando a placa esta usando uma
fonte externa. Pode-se aplicar uma tensao por esse pino ou, caso aplica-se
uma tensao externa pela power jack, esta pode ser acessada por este pino.
3.3V - Uma tensao de 3.3V, gerada pelo regulador, e promovida pela placa.
O maximo de corrente que se necessita e de 50mA.
GND - Sao pinos de aterramento (ground pins).
IOREF - Este pino no Uno garante uma tensao de referencia com a qual
o microcontrolador opera. Um shield propriamente configurado pode ler
a tensao no IOREF e selecionar a fonte de alimentacao apropriada ou
habilitar os tradutores de tensao de sada para trabalharem com 5V ou
3.3V.

13
Introducao a Plataforma Arduino
1.1. A plataforma Arduino PET Eletrica

O Arduino UNO e a melhor placa para iniciantes. Voce pode trabalhar com
o UNO sem se preocupar bastante em fazer algo errado. O pior dos casos e ter
de trocar o chip principal por alguns reais e comecar tudo de novo. Para mais
caractersticas tecnicas, veja o Anexo X.

1.1.2 Software
O Ambiente de Desenvolvimento Integrado (Integrated Development Envi-
ronment, IDE) do Arduino providencia tudo o que e necessario para programar
o Arduino, como tambem inclui programas de exemplo que demonstram como
conectar e se comunicar com dispositivos comuns, coo LEDs, LCDs e senso-
res. A linguagem utilizada e a Processing, uma vez que e considerada bastante
simples, podendo ser amplamente utilizada por estudantes de areas nao ape-
nas da engenharia, como de artes e desing. E esse era o objetivo. Ao fazer
um programa, ou sketch, e carrega-lo (upload) na placa, o codigo e tradu-
zido para linguagem C e entao passa por um compilador, que, por fim, leva
o codigo para a linguagem de maquina. O software responsavel por todo esse
processo, IDE Arduino, como o hardware, e open source e pode ser baixado
no site http://arduino.cc/en/Main/Software. Necessita-se apenas atentar se a
versao a baixar e a propcia para o seu sistema. Sao disponibilizadas versoes
para Windows, Mac OS X e Linux.

1.1.3 Instalando Arduino


Para programar a placa Arduino, deve-se primeiramente instalar a IDE, pelo
download a versao apropriada do software do site https://www.arduino.cc/en/
Main/Software. Ha versoes para Windows, Mac OS e Linux, mas, neste mini-
curso, o arquivo utilizado sera o para Windows.

Instalando a IDE: Windows

O arquivo baixado contem ambos o programa Arduino como tambem os


drivers que permitem o Arduino ser conectado com o seu computador via USB.
Quando o download do arquivo terminar, abra o instalador. A licensa sera mos-
trada. Leia-a e, caso concorde, clique no botao Eu concordo. Em seguida, sera
dada uma lista de componentes a serem instalados e, por default, todos estarao
selecionados. Mantenha todos selecionados e clique em Proximo. Nesta parte,
deve-se escolher uma pasta de instalacao e o instalador ira propor uma pasta
default para isso. A menos que por algum motivo superior seja necessario nao
aceitar essa opcao, aceite a pasta default e clique em Instalar. O instalador
mostrara o progresso ao longo da extracao e instalacao de arquivos. Uma vez
que todos os arquivos estao instalados, uma janela ira aparecer na tela reque-
rindo permissao para instalar os drivers. Clique em Instalar. Por fim, quando
o instalador concluir, clique em Fechar para terminar.

14
Introducao a Plataforma Arduino
1.1. A plataforma Arduino PET Eletrica

Figura 1.2: Download do Software Arduino.

Configurando os Drivers: Windows


Com a IDE instalada, conecte seu Arduino Uno ao seu computador pela via
USB. A LED verde PWR na placa deve estar ligada, enquanto a LED amarela
L deve estar piscando. Aparecera uma notificacao sobre a identificacao de novo
hardware e o Windows deve instalar os drivers automaticamente.
Em casos de o Windows falhar em localizar os drivers corretos, deve-se rea-
lizar manualmente a instalacao desses drivers, mostrando onde cada driver esta
localizado. O aplicativo ira perguntar primeiramente se o usuario quer veri-
ficar se ha alguma atualizacao. Clique em Nao e escolha Proximo. Na
proxima tela, escolha Instalar de uma lista ou localizacao especfica e clique
em Proximo. Entao, selecione o arquivo de drivers do Arduino Uno, chamado
ArduinoUNO.inf, localizado na pasta Drivers do Arduino Software (e nao do
subdiretorio de drivers USB FTDI). O Windows terminara a instalacao.

Identificacao de Portas: Windows


Antes de comecar a utilizar a Arduino IDE, e preciso selecionar qual o tipo
de Arduino que ira se trabalhar e tambem selecionar a porta pela qual ele sera
conectado.
Para escolher a porta, abra a Arduino IDE e no menu de Ferramentas (Tools)
selecione Porta Serial. Ficara visvel uma ou mais portas denominadas COM
com diferentes numeros. Anote quais numeros estao disponveis. Em seguida,
desconecte o Arduino do seu computador e observe a lista de portas novamente,
percebendo quais desapareceram (talvez seja necessario sair e voltar para o
menu de ferramentas, a fim de este ser atualizado). Uma vez que se sabe qual

15
Introducao a Plataforma Arduino
1.1. A plataforma Arduino PET Eletrica

porta COM esta relacionada com o Arduino, deve-se selecionar a porta no menu
Ferramentas Porta Serial na IDE do Arduino.

Figura 1.3: Selecionando a Porta.

Finalmente, basta apenas verificar se a IDE esta configurada para o seu tipo
de placa. No menu de Ferramentas, na IDE Arduino, selecione Board e clique
em Arduino Uno (ou outro nome do tipo de placa a trabalhar).

Figura 1.4: Selecionando a Placa.

Caso mesmo com os procedimentos anteriores nao se consiga identificar a


porta, conecte seu Arduino Uno pelo cabo USB e abra o Gerente de Dispositivos
(Device Manager). Procure pelo Arduino na lista Portas(COM & LPT). O
Arduino aparecera como Arduino UNO e sera acompanhado de um nome como
COM7, conforme mostrado na Figura 1.5.
E relevante ressaltar que em algumas maquinas Windows, as portas COM de

16
Introducao a Plataforma Arduino
1.1. A plataforma Arduino PET Eletrica

Figura 1.5: Gerenciador de dispositivos: Windows.

numeros maiores que 9 podem apresentar alguns problemas quando o Arduino


esta tentando se comunicar com elas. Se isso acontecer, pode-se convencer o
Windows a atribuir uma porta de numero menor para o Arduino, liberando-
a temporariamente para o uso do Arduino. Para isso, abra o Gerenciador de
Dispositivos e veja a lista de Portas (COM e LPT). Encontre um dispositivo
serial que nao esteja sendo usado no momento que seja de uma porta COM9 ou
menor. Clique com o botao direito do mouse e escolha Propriedades. Entao,
selecione Configuracao de Portas e clique em Avancado. Coloque o numero
da porta COM como COM10 ou maior e clique OK. Clique em OK novamente
para fechar a caixa de Propriedades. Em seguida, faca o mesmo com a Porta
USB serial que representa Arduino, mudando o numero da porta COM para 9
ou menor (COM 9 ou menor).

17
Introducao a Plataforma Arduino
1.1. A plataforma Arduino PET Eletrica

18
Captulo 2

Iniciando

2.1 Organizando seu Sketch


Para estabelecer uma comunicacao com o Arduino e tornar possvel uma
futura execucao do projeto almejado, o primeiro passo e certificar-se que seu
sketch funciona.
Uma vez que os procedimentos da secao tenham sido realizados, proximo
passo e clicar no botao Verificar na IDE, logo apos o desenvolvimento do
programa, para que o IDE aponte possveis erros nas linhas de codigo. Caso
contrario, o mesmo esta pronto para ser carregado no Arduino, entao basta
clicar no botao Carregar. Observe a Figura 2.1.

Figura 2.1: (a) Botao Verificar. (b) Botao Carregar.

2.2 A IDE
A IDE fornece tudo o que voce precisa para escrever e carregar sketches
(programas) no Arduino.
Quando a IDE e carregada pela primeira vez, ela abre um sketch em branco;
para esse, e dado automaticamente um nome temporario com uma data de
referencia. O nome pode ser alterado pelo programador ao salvar o sketch. A
Figura 2.2 mostra a IDE que contem um sketch.
A barra de tarefas ao longo do topo do editor principal tem as seguintes
funcoes:

19
Introducao a Plataforma Arduino
2.2. A IDE PET Eletrica

Figura 2.2: Sketch com as especificacoes dos botoes.

Verificar Verifica sketches em busca de erros (os erros sao apresentados


na parte inferior da tela);

Carregar Verifica o codigo em busca de erros antes de carregar o sketch


para o Arduino;

Novo Abre um novo sketch;

Abrir Abre uma lista de sketches salvos previamente e exemplos de


sketches;

Salvar Salva o sketch e solicita um nome;

Monitor Serial Abre o monitor serial em uma nova janela.

Na parte inferior da tela principal existem duas janelas. A primeira fornece


informacoes de status e comentarios; a segunda fornece informacoes quando voce
esta verificando e carregando sketches. Qualquer erro de codigo tambem sera
reportado nela.
O editor de codigo adicionalmente verifica a combinacao das chaves, , usadas
para designar blocos de codigo, executa o realce de sintaxe e automaticamente
endenta o seu codigo para facilitar a leitura.

20
Introducao a Plataforma Arduino
2.2. A IDE PET Eletrica

Uma outra atribuicao bastante importante da IDE e o monitor serial,


responsavel por monitorar os dados entre o Arduino e o sistema do computador
central por meio do cabo USB conectado. O Arduino pode enviar informacoes
utilizando codigo e pode tambem recebe-las.

Figura 2.3: Monitor serial mostrando valores de aceleracao dos eixos de um


motor.

A parte superior da janela do monitor serial e usada para enviar dados ao


Arduino. Voce pode, por exemplo, usa-la para enviar comandos de controle ao
Arduino, para girar um servomotor a um numero variavel de graus ou para abrir
e fechar uma chave. A parte principal da janela mostra os dados de sada do
Arduino. Isso pode ser usado para verificar a sada de um GPS ou para executar
outro monitoramento de sinal.
O motor serial e muito util para depuracao do codigo ao ligar o Arduino ao
sistema do computador que executa o software que entao interage de alguma
maneira com o Arduino; voce pode usar o monitor serial para verificar se o
Arduino esta gerando os dados corretamente no formato esperado. No monitor
serial, voce tambem pode definir a taxa de transmissao usada para a comu-
nicacao, a rolagem automatica de texto e a forma de termino de linha que e
anexada aos dados enviados ao Arduino.

Por fim, o que o IDE realmente faz com o seu codigo? Quando voce pressiona
o botao carregar, ele verifica o codigo procurando erros e executa algumas
traducoes mnimas para converter o sketch para um C++ valido. O codigo e
entao compilado, o que significa que e convertido numa forma de linguagem que
pode ser entendida pelo Arduino. O arquivo resultante e combinado com as
bibliotecas padroes do Arduino antes de ser carregado no seu hardware.

21
Introducao a Plataforma Arduino
2.3. Anatomia de um sketch PET Eletrica

2.3 Anatomia de um sketch


Um sketch tpico consiste de duas partes ou rotinas: a primeira e a rotina
de inicializacao chamada setup, e a segunda e a rotina chamada loop, que ge-
ralmente contem o corpo principal do codigo.

2.3.1 Setup
Tarefas basicas que voce deve fazer no setup incluem a inicializacao dos pi-
nos digitais definindo-os como INPUT ou OUTPUT e definicao da taxa
de transmissao para a comunicacao serial.

Sketch 1.1 A funcao setup

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

O codigo de setup no Sketch 1.1 configura o pino 13 como uma sada e a co-
municacao serial a uma taxa de transmissao de 9.600 bps (bits por segundo). O
void antes do setup apenas significa que a funcao nao retorna um valor. Mesmo
que voce nao tenha algo a configurar, a rotina e ainda requerida ou um erro sera
gerado ao verificar ou carregar um sketch. Apenas digite uma funcao vazia com
um comentario no codigo:

void setup(){
//nada para configurar
}

2.3.2 O loop infinito


O Arduino roda continuamente em uma rotina de loop ate que alguma
condicao seja satisfeita, ou o Arduino seja desligado. O Sketch seguinte mostra
o loop para um LED intermitente.

Sketch 1.2 A funcao loop como exemplo para piscar um LED

22
Introducao a Plataforma Arduino
2.3. Anatomia de um sketch PET Eletrica

void loop(){

digitalWrite(13,HIGH); // acende o LED

delay(1000); // delay de 1000 milissegundos ou 1 segundo

digitalWrite(13,LOW);

delay(1000); // Apaga o LED

Nesse caso, o Arduino fica em loop repetidamente, acendendo o LED por


um segundo e apagando por um segundo, e continua ate que o Arduino seja
desligado.

2.3.3 Comentando o codigo


Pense que voce acabou de escrever um codigo bem longo para seu Arduino
realizar uma tarefa genial. Agora imagine que, seis meses depois, alguem mais
esta lendo seu trabalho e encontra o seu sketch, mas nao consegue descobrir o
que ele faz ou como funciona. Uma simples descricao ajudaria imensamente. E
nesses momentos quando comentarios no seu codigo se tornam inestimaveis.
Existem duas maneiras de colocar comentarios em um sketch: como uma
unica linha ou como um bloco. Uma unica linha tem barras duplas (//) ao
incio da linha. Isso diz ao compilador que aquele conteudo e apenas um co-
mentario e pode ser ignorado. Se voce deseja adicionar um bloco de codigos
como um comentario, inicie o bloco com /* e termine com */.

// Este e um comentario de linha unica


/* E este e um bloco de comentario
em algumas linhas */

Onde voce deve colocar os comentarios? E recomendavel que cada sketch


possua um bloco de comentarios no topo ou um cabecalho do sketch, dando uma
descricao do que o sketch faz, indicando quem o escreveu, a data e o numero da
versao. O proximo Sketch mostra um exemplo de cabecalho.

Sketch 1.3 Exemplo de codigo de cabecalho

23
Introducao a Plataforma Arduino
2.3. Anatomia de um sketch PET Eletrica

/*

Codigo para piscar um LED

Autor: Martin Evans

Data de criac~
ao: 1 de Setembro de 2009

Vers~
ao 1.0 */

Comentarios de linha unica espalhados por todo o sketch permitirao que voce
veja rapidamente o que as partes individuais do codigo fazem. Voce nao precisa
comentar cada parte do codigo, somente lugares onde acha que ajudaria alguem
a entender o codigo no futuro. Provavelmente e melhor ter muitos comentarios
do que poucos. O Sketch seguinte mostra alguns comentarios de codigos tpicos.

Sketch 1.4 Exemplo de comentarios de codigos

void setup() {

Serial.begin(9600);

//imprime o ttulo com quebra de linha ao final

Serial.println("ASCII Table ~ Character Map");

// primeiro ASCIIcharacter visvel ! e o numero 33:

int thisByte = 33;

/* voc^
e pode tambem escrever caracteres ASCII em aspas simples.

Por exemplo. ! e o mesmo que 33, ent~


ao voc^
e pode tambem usar
este:
int thisByte = !; */
}

24
Introducao a Plataforma Arduino
2.4. Diferencas entre Analogico e Digital PET Eletrica

2.4 Diferencas entre Analogico e Digital


No mundo digital, tudo possui dois estados; uma chave so pode estar ligada
ou desligada, um LED pode estar aceso ou nao, voce esta acordado ou dormindo.
Tais estados podem ser descritos de diferentes maneiras, como uns ou zeros,
ligado ou desligado, alto ou baixo. O pino digital do Arduino trabalha da
mesma forma; quando ajustado para sada, ele e de 0 ou 5 volts, com a tensao 0
sendo zero logico e 5 volts sendo um logico. Em contrapartida, no mundo
analogico as coisas possuem um intervalo de valores. As musicas possuem notas
que abrangem uma gama de valores, por exemplo. Um carro acelera atraves de
uma gama de velocidades, uma onda senoidal flui suavemente entre os valores
maximo e mnimo, e a temperatura entre maxima e mnima.
Nos frequentemente queremos explorar o mundo analogico, e o Arduino
(Uno) possui seis entradas que podem ajudar com isso. Mas, como o Arduino
e um dispositivo digital, e necessario converter o sinal de entrada a uma repre-
sentacao digital. Isso e feito com um conversor analogico-para-digital (ADC ou
A/D). Um conversor A/D quantifica o valor analogico conforme a quantidade
de bits da sua resolucao. A resolucao (R) de um conversor A/D e dada pela
seguinte expressao:

Vref
R= 2n ,

onde: Vref e a tensao de referencia do conversor A/D, e n e o numero de bits


do conversor.
A tabela 1 mostra a resolucao, a faixa de tensao e os pinos usados para
entrada e sada analogica para o Arduino Uno e o Mega.

Tabela 2.1: Resolucoes analogicas do Arduino e pinos de entrada e sada


analogicas.

Entrada analogica Sada analogica


Resolucao 10 bits (0 a 1023) 8 bits (0 a 254)
Faixa de Tensao 0 a 5 volts 0 a 5 volts
Pinos do Arduino Uno A0 a A5 Pinos digitais: 3, 5, 6, 9, 10, 11
Pinos do Arduino Mega A0 a A15 Pinos digitais: 2 ao 13

2.5 Funcoes basicas


As Funcoes Basicas constituem um conjunto de funcoes internas do software
do Arduino para a manipulacao de entradas e sadas digitais e analogicas, assim
como para manipulacoes de bits, operacoes matematicas, comunicacao, entre
outras.

25
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

2.5.1 Funcao Serial


Outra funcao importante de ser destacada aqui e a Func~ ao Serial.Ela esta
relacionada com a rapidez da comuncacao dos dados entre o Arduino e outros
dispositivos pela porta serial, utilizando o conector USB femea do tipo A. E
tambem por meio desse conector que o Arduino recebe uma alimentacao de 5
volts diretamente da fonte de alimentacao.
Dentro da funcao serial, a funcao Serial.begin(taxa) habilita a porta
serial e fixa as taxas de transmissao e recepcao em bits por segundo (bps) entre
o computador e o Arduino. Exemplo:

Serial.begin(9600);

Nesse exemplo, a funcao fixa a taxa de comunicacao em 9600 bps. Os pinos


digitais 0 e 1 nao podem ser utilizados como entrada ou como sada de dados
quando a porta serial e habilitada por essa funcao.

Nota: Essa funcao vai sempre dentro da funcao setup( ).

Ja a funcao Serial.end( ); Desabilita a porta serial para permitir o uso


dos pinos digitais 0 e 1 para entrada ou sada de dados. Ela sempre deve ser
escrita dentro da funcao setup( ), assim como a Serial.begin( ).
A Serial.available( ); retorna o numero de bytes disponveis para
leitura no buffer da porta serial. O valor 0 e retornado quando nao ha nenhuma
informacao para ser resgatada na porta serial. Exemplo:

int total = Serial.available( );

Aqui a variavel inteira total vai guardar o numero de caracteres que estao
disponveis para leitura na porta serial.
A funcao Serial.read( ) le o primeiro byte que esta no buffer da porta
serial. O valor (-1) e retornado quando nao ha nenhuma informacao para ser
resgatada na porta serial. Exemplo:

int valor = Serial.read( );

Aqui a variavel inteira valor vai guardar o primeiro byte (caracter) que
esta disponvel para leitura na porta serial.
Tem-se tambem a funcao Serial.print(valor, formato), que envia para
a porta serial um caracter ASCII, que pode ser capturado por um terminal de
comunicacao. O segundo parametro e opcional e especifica com quantas casas
decimais ou com que base numerica vai ser o numero transmitido. Exemplo:

Serial.print(1.23456); //transmite 1.23(default)


Serial.print(1.23456,3); //transmite 1.234
Serial.print(\Hello World!"); //transmite a frase(string)

26
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

Serial.print(A); //transmite o caracter A


Serial.print(A, BIN); //transmite 01000001
Serial.print(A, OCT); //transmite o octal 101
Serial.print(A, HEX); //transmite o hexa 41
Serial.print(A, DEC); //transmite o decimal 65

Por fim, temos a funcao Serial.println(valor,formato). Como a


anterior, essa funcao envia para a porta serial um caracter ASCII com os
mesmos parametros opcionais de formato, porem acrescenta ao final da
transmissao o caracter Carriage Return (retorno ao inicio da linha) e o caracter
New Line (mudanca para proxima linha).

Programa Teste 1

Para trabalhar melhor os comandos apresentados, implemente nosso pri-


meiro Programa Teste!

void setup( ){
Serial.begin(9600); //inicia a porta serial em 9600 bps
}
void loop( ){
Serial.print(\Retorno de available( ): \); //envia frase
//ao terminal
Serial.println(Serial.available()); //transmite total de
//bytes disponveis
delay(1000); //pausa 1s
Serial.print(\Retorno de read( ): \); //envia frase
Serial.println(Serial.read()); //transmite o primeiro byte
//disponvel na porta
delay(1000);
}

2.5.2 Funcoes de entrada e sada digitais


A primeira delas e a pinMode(pino, modo), utilizada para estabelecer
a direcao do fluxo de informacoes em qualquer dos 14 pinos digitais. Dois
parametros devem ser passados a funcao: o primeiro indica qual pino vai ser
usado; o segundo, se esse pino vai ser de entrada (input) ou se vai ser de sada
(output) das informacoes a serem tratadas. Exemplo:

pinMode(2, OUTPUT);

Nesse exemplo, o pino 2 e selecionado para transmitir informacoes do

27
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

Arduino para um circuito externo qualquer, ou seja, o pino 2 e definido como


um pino de sada. Para configurar esse pino como entrada, o segundo parametro
dessa funcao deve ser INPUT.

Nota: Essa funcao sempre deve ser escrita na funcao setup().

Uma vez configurado um certo pino como entrada com a funcao pinMode(),
a informacao presente nesse pino pode ser lida com a funcao digitalRead() e
armazenada em uma variavel qualquer. Exemplo:

int chave = digitalRead(3);

Nesse exemplo a variavel inteira chave guarda o estado logico (verda-


deiro/falso) presente no pino digital 3.
Para enviar um nvel logico para qualquer pino digital do Arduino utiliza-se
a funcao digitalWrite(pino, valor) . Dois parametros sao requeridos:
o numero do pino e o estado logico (HIGH/LOW) em que esse pino deve
permanecer. Exemplo:

digitalWrite(2, HIGH);

Aqui, uma tensao de 5 volts e colocada no pino 2. Para inverter o nvel


logico para esse pino, o segundo parametro deve ser LOW.

Nota: E necessario configurar previamente o pino como output com a funcao


pinMode().

Programa Teste 2: Hello World Blinking LED

Na maioria das linguagens de programacao, o primeiro programa que voce


aprende a escrever e aquele que imprime Ola mundo(Hello World) na tela
do computador. Como uma placa Arduino nao tem tela/ecran, em vez disso
fazemos um LED piscar.
As placas Arduino sao projetadas de forma a facilitar o piscar de um LED
com o uso do pino digital numero 13. Algumas placas (tal como a Diecimila e a
LilyPad) ate ja vem com o LED instalado. Na maioria das outras (tal como a
Mini e a BT), ha um resistor de 1 kohms no pino 13, o que lhe permite conectar
o LED diretamente a ele. (Para conectar um LED a outro pino digital, deve-se
usar um resistor externo.)
Os LEDs estao disponveis em uma gama de cores, mas o LED conectado ao
pino 13 do Arduino e normalmente verde. O LED acende quando uma corrente
e aplicada a ele, entao voce pode usar o pino 13 como uma chave. Quando voce
a ligar, ela acendera o LED, e quando voce a desligar, ela apagara o LED.
Inicie a IDE do Arduino e copie o codigo seguinte:

28
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}

Voce esta atribuindo o pino digital 13 como uma sada e, em seguida, voce
entra em um loop no qual algum codigo muda o pino 13 para HIGH ou LOW
durante um segundo. O valor do atraso e dado em milissegundos, entao mil
milissegundos lhe da um atraso de tempo de um segundo.

Programa Teste 3: New Blinking LED

Por serem dispositivos eletronicos, os LEDs tem polaridade, isto e, eles


apenas acendem se voce orientar os seus terminais corretamente. O terminal
mais longo (anodo) e o positivo e que vai conectado ao pino 13. O terminal
mais curto (catodo) conecta-se ao GND; o bulbo do LED normalmente tera
um pequeno chanfro achatado indicando esse terminal. Se o LED nao acender,
tente inverter os terminais (voce nao danificara o LED se liga-lo invertido por
curto perodo).
Ao inves de usar o LED do proprio Arduino, escolha um LED de sua pre-
ferencia e siga a imagem do circuito abaixo e conecte o dispositivo a placa,
atentando para sua polaridade. Em seguida, utilize o codigo abaixo e veja o que
acontece.

Figura 2.4: Circuito

O codigo:

29
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

/*LED piscante

* Liga e desliga um LED conectado a um pino digital em


intervalos de 2 segundos. Idealmente usa-se o pino 13 da placa
do Arduino porque ele ja possui um resistor ligado a ele.
* Criado em 1 de Junho 2005
* copyleft 2005 DojoDave <http://www.0j0.org>
* http://arduino.berlios.de
* H. Barragan para a placa de e/s Wiring */

int ledPin = 13; // LED conectado ao pino digital 13

void setup(){
pinMode(ledPin, OUTPUT); // configura pino digital como sada
}

void loop()
{
digitalWrite(ledPin, HIGH); // liga o LED
delay(1000); // temporiza 1 segundo
digitalWrite(ledPin, LOW); // desliga o LED
delay(1000); // aguarda mais um segundo
}

Obs: Agora tente modificar os valores para o delay!

Note que, mesmo em um programa simples ja foram implementadas funcoes


frequentemente utilizadas, como: digitalWrite( ), delay( ) e pinMode( ). Ja
descritas no material.

Programa Teste 3

No programa abaixo, as tres funcoes trabalhadas sao utilizadas para acender


um LED no pino 2 toda vez que uma chave, normalmente aberta, no pino 3 for
pressionada.

void setup() {
pinMode(2,OUTPUT); //LED no pino 2 como sada

30
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

pinMode(3,INPUT); //chave no pino 3 como entrada


}
void loop() {
int chave = digitalRead(3); //variavel chave guarda
//estado do pino 3
digitalWrite(2,chave); //estado de chave e passado para
//pino 2
}

O codigo dentro da funcao loop() acima poderia ser simplificado da


seguinte forma:

void loop() {
digitalWrite(2, digitalRead(3)); //led (pino2) acende se a
// chave (pino3) for pressionada.
}

Pense em um circuito para esse codigo, monte e teste!

2.5.3 Funcoes de entrada e sada analogicas


Sao funcoes que abstraem a configuracao dos registradores de configuracao
do conversor A/D e selecionam o canal conforme o pino passado como
parametro.Para essas funcoes sao utilizados os pinos analogicos e nao precisam
ser previamente configurados com a funcao pinMode().
A funcao analogReference(tipo)Configura a referencia de tensao para a
conversao analogica/digital, usando esse valor como o maximo para a entrada
analogica. Elas nao retornam valores. Seus tipos possveis de configuracao sao:

DEFAULT: a tensao padrao para conversao e a tensao de alimentacao da


placa. 5 Volts para placas alimentadas com 5 V e 3.3 Volts para placas
alimentadas com 3.3 V;

INTERNAL1V1: referencia de 1,1V, apenas no Arduino mega;

INTERNAL2V56: referencia interna de 5,6 V, apenas no Arduino mega;

EXTERNAL: Referencia de tensao aplicada no pino AREF (valor entre 0


e 5V).

Ja a funcao analogRead(pino) le o nvel analogico presente no pino


indicado pelo parametro entre parenteses e, apos a conversao para o seu
equivalente em bits, guarda-o em uma variavel determinada pelo programador.

31
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

Exemplo:

int sensor = analogRead(A0);

Aqui a variavel inteira sensor vai armazenar a tensao analogica convertida


para digital presente no pino A0. Essa informacao vai ser um valor inteiro
entre 0 (para 0V no pino) e 1023 (se 5V no pino). Uma tensao de 2,5 volts no
pino A0 vai fazer a variavel sensor guardar o valor inteiro 512.

Nota: Os pinos analogicos sao reconhecidos pela linguagem C do Arduino


tanto como A0 a A5, como 14 a 19. Assim, a mesma expressao acima pode ser
escrita tambem como: int sensor = analogRead(14).
Uma observacao importante a respeito desses pinos analogicos, e de
que eles podem ser configurados como pinos digitais pela funcao pinMode(
), aumentando assim o numero destes pinos para 20. Assim, a expressao
pinMode(14, OUTPUT); transforma o pino analogico A0 em pino de sada
digital como qualquer outro presente nas duas barras de pinos digitais.

Para iniciar a aplicacao do estudo das funcoes analogicas, a maneira mais


simples e rapida e ligando um potenciometro a uma entrada analogica. Po-
tenciometros sao resistores variaveis, encontrados em todas as formas e todos
os tamanhos.
Se voce tem um aparelho de som com controle de volume rotativo, e provavel
que sja baseado no giro de um potenciometro. Apesar das diferentes formas e
dos diversos tamanhos, todos eles possuem alguns meios de variar a resistencia,
de modo linear ou logartmico.
No Programa Teste a seguir vamos ler os valores de um potenciometro.

Programa Teste 4: Utilizando um Potenciometro

Veja o circuito abaixo. Conectamos tres fios a placa Arduino. O primeiro vai
do terra a partir do terminal esquerdo do potenciometro (ele possui geralmente
tres terminais). O segundo fio vai dos 5 volts ao terminal direito. O terceiro e
ultimo fio vai da entrada analogica A5 ao terminal central do potenciometro de
acordo com o circuito da figura 5.3.
Se girarmos o cursor do potenciometro, alteramos a resistencia em cada
lado do contato eletrico que vai conectado ao terminal central do botao. Isso
provoca a mudanca na proximidade do terminal central aos 5 volts ou ao terra,
o que implica numa mudanca no valor analogico de entrada. Quando o cursor
for levado ate o final da escala, teremos por exemplo zero volts a ser fornecido
ao pino de entrada do Arduino e, assim, ao le-lo obteremos 0. Quando giramos
o cursor ate o outro extremo da escala, havera 5 volts a ser fornecido ao pino
do Arduino e, ao le-lo, teremos 1023. Em qualquer posicao intermediaria do
cursor, teremos um valor entre 0 e 1023, que sera proporcional a tensao eletrica
sendo aplicada ao pino do Arduino.

32
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

Materiais:

Arduino UNO;

Potenciometro de 10k .

Circuito:

Figura 2.5: Circuito - Programa Teste 4.

Codigo:

int sensorPin = A0;


int sensorValue = 0;
void setup() {
Serial.begin(9600);
}
void loop(){
sensorValue = analogRead(sensorPin);
Serial.print(\Sensor = \);
Serial.println(sensorValue, DEC);
delay(10);
}

Nao e preciso configurar o sensorPin como uma entrada durante a rotina de


configuracao porque todos os pinos de entrada analogica estao configurados por
definicao para serem entradas. A variavel sensorValue armazena o valor lido
pela funcao analogRead, a qual retorna um numero entre 0 e 1023 inclusive, e
com 0 representando 0 volts e 1023 representando 5 volts.
O atraso de 10 milissegundos entre cada leitura da ao Arduino ADC
tempo para se estabelecer e capturar uma leitura precisa. O DEC na linha
Serial.println(sensorValue, DEC); instrui a funcao println para gerar dados

33
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

de sada na base decimal. Outras opcoes incluem HEX(hexadecimal), BIN


(binario)e OCT (octal).
Nota:Para visualizar o valor recebido pelo potenciometro e necessario abrir o
Serial Monitor.

Programa Teste 5: Unindo conhecimento

Ja foi mostrado como acender um LED, bem como utilizar um po-


tenciometro com Arduino. E se unirmos esses dois aprendizados para controlar
o brilho de um LED com o potenciometro? E isso o que o codigo sugerido
abaixo da a possibilidade de fazer, de acordo com o circuito ilustrado na Figura
2.6.

Materiais:

1 LED Vermelho;
1 Resistor de 220;
I potenciometro 10k;

1 Arduino Uno.

Circuito:

Figura 2.6: Circuito - Programa Teste 5.

34
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

Codigo:

int potPin = 2; //selecione o pino de entrada do


//potenci^
ometro
int ledPin = 13; //selecione o pino do LED
int val = 0; //variavel que guarda o valor proveniente do
//sensor

void setup(){

pinMode(ledPin, OUTPUT); // declarar o pino ledPin como sada


}

void loop() {
val = analogRead(potPin); // ler o valor do potenci^
ometro
digitalWrite(ledPin, HIGH); // ligar o ledPin
delay(val); // pausar o programa por algum tempo
digitalWrite(ledPin, LOW); // desligar o ledPin
delay(val); // pausar o programa por algum tempo
}

Programa Teste 6: Utilizando um transdutor piezoeletrico - Projeto


Toc-Toc

A palavra piezoeletricidade significa eletricidade resultante de


pressao.Assim, um dispositivo piezoeletrico e um dispositivo que gera tensao
quando e fisicamente deformado por uma vibracao, onda sonora ou deformacao
mecanica. Da mesma forma, quando voce coloca uma tensao em um piezo, ele
vibra e cria um tom. Piezos podem ser utilizados tanto para fazer como detectar
tons.
Uma aplicacao tpica para ele com Arduino e a utilizacao como sensor de
batidas. Quando o transdutor e pressionado ou batido, o Arduino detecta isso
e executa a acao requerida, seja acender um LED ou produzir um tom a partir
de um alto-falante. Por outro lado, quando uma carga eletrica e aplicada a um
transdutor piezoeletrico, ele distorce ou altera a forma de onda. Se for aplicada
uma tensao variavel em determinada frequencia, o movimento do transdutor
pode produzir um som ou uma nota musical.
Dispositivos sonares, os quais possuem em seu interior um transdutor piezo
eletrico, emitem um sinal sonoro e escutam um eco. Isso faz lembrar o classico
som de ping em filmes submarinos. O tempo que leva para o ping retornar
da uma indicacao do quao longe um alvo esta.

35
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

No exemplo que se segue, ligamos o elemento piezoeletrico ao pino analogico


0, o qual nos apresenta a funcao de ler um valor entre 0 e 5 volts e nao somente
HIGH ou LOW. Um outro aspecto a ser lembrado e que esses dispositivos tem
polaridade, sendo que normalmente possuem os seus terminais coloridos de ver-
melho (+) e preto (-). O terminal vermelho vai ligado a entrada analogica do
Arduino e o preto, ao GND. Alem disso, e necessario conectar um resistor na
faixa dos megaohms em paralelo ao elemento piezoeletrico.
O codigo de exemplo capturara o bater da porta e, caso seja mais intenso
que um certo limiar, o Arduino enviara a frase Toc-tocpara o computador
via porta serial.

Nota:Para visualizar o texto, voce pode usar o Arduino serial monitor.

Materiais:

1 Resistor de 1M;

1 Transdutor piezoeletrico;

1 Arduino Uno.

Circuito:

Figura 2.7: Circuito - Programa Teste 6.

36
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

Esquema:

Figura 2.8: Esquema - Programa Teste 6.

Codigo:

/*Toc-toc
* por DojoDave <http://www.0j0.org>
*
* Programa que usa um elemento piezoeletrico como se
* fosse um sensor de batidas a porta.
*
* Basicamente temos que escutar a um pino analogico e
* detectar se o sinal ultrapassa um certo limiar. Escreve-se
* "Toc-toc" a porta serial nesse caso e altera-se o estado
* do LED no pino 13.
*
* http://www.arduino.cc/en/Tutorial/Knock
*/

int ledPin = 13; //LED conectado ao pino 13 de controle


int knockSensor = 0; //sensor de batidas ligado ao pino
//analogico 0
byte val = 0; //variavel a guardar o valor lido do pino
//do sensor
int statePin = LOW; //variavel a guardar o ultimo estado do

37
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

//LED
int THRESHOLD = 100; //valor limiar que decide quando o som
//detectado e uma batida

void setup() {
pinMode(ledPin, OUTPUT); //declarar o ledPin como sada
Serial.begin(9600); //usar a porta serial
}

void loop() {
val = analogRead(knockSensor); //ler o sensor e
//guarda-lo em "val"
if (val >= THRESHOLD) {
statePin = !statePin; //mudar o estado de ledPin
digitalWrite(ledPin, statePin); //liga ou desliga o LED
Serial.println("Toc-toc"); //envia a frase
//"Toc-toc" ao computador
delay(10); //pequena espera para evitar
//sobrecarga na sada serial
}
}

Programa Teste 7: Projeto com Alto-falante adicionado

Materiais:

1 Resistor de 1M;

1 Resistor de 1k;

1 Transdutor piezoeletrico;

1 Diodo zener de 0.5W 5V1 (nos usamos o BZX55C5V);

1 Alto-Falante de 0.8;

1 Arduino Uno.

Circuito:

38
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

Figura 2.9: Circuito - Programa Teste 7.

Esquema:

Figura 2.10: Esquema - Programa Teste 7.

IMPORTANTE SABER: Diodos: sao dispositivos de dois terminais que


possuem resistencia baixa ao fluxo de corrente em uma direcao e resistencia alta
(idealmente infinita) na outra. Diodos zener sao um tipo especial de diodo que
e desenvolvido para permitir que a corrente flua em qualquer direcao, uma vez
que sua tencao de ruptura for excedida.
O diodo zener precisa ser conectado da maneira correta para que ele proteja
a entrada analogica do Arduino de quaisquer tensoes que excedam 5 volts. Con-
vencionalmente, o catodo ou negativo do diodo, geralmente marcado com uma
faixa preta, deve ser conectado ao GND, mas nesse caso o mesmo sera invertido
e conectado ao contrario, de modo que o catodo seja ligado ao lado positivo do
circuito. Com isso quaisquer tensoes acima de 5.1 volts romperao a resistencia
do diodo e curto-circuitara a tensao do GND, protegendo a entrada do Arduino.
Codigo:

39
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

int sensorPin = 0;
int sensorValue = 0;
int threshold = 200;
int toneDuration = 40;//Denota por quanto tempo um tom e
//emitido em milissegundos
int toneFrequency = 262; //Ajusta a frequ^
encia do tom sendo
//emitido em Hertz
int speakerPin = 8; //Define o pino ao qual o alto-falante e
//conectado

void setup() {
}
void loop(){
sensorValue = analogRead(sensorPin);
if(sensorValue > threshold){
tone(speakerPin, toneFrequency, toneDuration);
}
}

Obs.: Neste sketch esta sendo uma das bibliotecas embutidas do Arduino:
tone. A qual pode receber tres argumento: tone(pin, frequency, duration). Se
o parametro duration nao for definido, o tom sera emitido ate que um comando
noTone seja enviado a ele: noTone(pin).

2.5.4 Funcao de sada PWM


O Arduino pode gerar tensoes analogicas em 6 de seus 14 pinos digitais com
a funcao analogWrite(pino, valor). Essa funcao escreve um valor pseudo-
analogicousando o conceito de modulacao por largura de pulso (pulse width
modulation - PWM) para viabilizar a sada de um pino PWM.
Dois parametros devem ser passados a funcao: o primeiro indica em qual
pino sera gerada a tensao; o segundo determina a amplitude dessa tensao (o
valor do duty cycle). Esse ultimo parametro e guardado em 8 bits, de modo
que esse valor deve estar entre 0 (0% de duty cycle) e 255 (100% de duty cycle)
e deve ter valores entre 0 (para 0V) e 255 (para 5V). Exemplo:

analogWrite(10, 128);

Com esses parametros, uma tensao analogica de 2,5V vai aparecer no pino
10. E valido dizer tambem que nao e necessario configurar um pino PWM
como sada com a funcao pinMode() quando se chama a funcao analogWrite().

Nota: Modulacao por Largura de Pulsos, ou PWM (Pulse Width Modu-

40
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

lation), e uma tecnica usada para gerar tensoes analogicas a partir de uma
sequencia de pulsos digitais e sera melhor abordada na secao Inputs e Outputs
avancados.

A funcao analogWrite() nao tem relacao com os pinos analogicos ou com a


funcao analogRead().

Programa Teste 8

O codigo a seguir le uma tensao CC no pino analogico A5(pino 19) e envia


esse valor digitalizado para controlar o brilho de um led no pino PWM 10.

void setup(){} //essa func~


ao pode ficar vazia se n~
ao houver
//configurac~
oes.
void loop() {
analogWrite(10, analogRead(A5/4));//convers~ao(0-1023 para 0-255)
// pela divis~
ao por 4.
}

41
Introducao a Plataforma Arduino
2.5. Funcoes basicas PET Eletrica

42
Captulo 3

Bibliotecas

A capacidade de realizacao de projetos utilizando o Arduino vai muito alem


do que foi apresentado no captulo anterior, no qual um contato inicial com
suas funcionalidades basicas foi apresentado. E possvel conectar o Arduino a
outros dispositivos ou/e equipamentos, utilizando-se das bibliotecas de software
ou Shields de hardware.
Por exemplo, se voce estivesse desejando desenvolver um robo capaz de de-
tectar objetos em seu caminho e realizar manobras para desviar dos mesmos, a
escolha do Arduino para tal projeto seria perfeitamente adequada, senao obvia.
Existem bibliotecas de software e shields de hardware que podem habilitar o Ar-
duino a controlar motores, conectar-se a sensores infravermelhos ou ultrassonicos
que detectam objetos e comunicam-se via Wi-Fi.
Essa e outra grande diversidade de aplicacoes sao realizadas de forma satis-
fatoria ao potencializarmos as funcoes que o Arduino pode executar aplicando
com sabedoria ferramentas disponveis justamente para o desenvolvedor, conhe-
cer as bibliotecas e um primeiro passo essencial.
Uma biblioteca e um pedaco de software que voce inclui em seu sketch e
fornece algum tipo de funcionalidade. Por exemplo, ha uma biblioteca de Cristal
Lquido que, quando includa em seu sketch, tornara possvel a comunicacao com
alguns displays de LDC. Uma biblioteca e frequentemente usada muitas vezes em
varios projetos. As bibliotecas Arduino sao uma boa maneira de compartilhar
codigos como drivers ou funcoes.
Existem tres tipos diferentes de bibliotecas do Arduino: essencial (core),
padrao e a de terceiros.

3.1 Biblioteca Essencial


Construda dentro da IDE do Arduino, a biblioteca essencial e fundamental
para tornar o Arduino um grande dispositivo. A maioria dos projetos le dados
de entrada ou escreve dados de sada, e a biblioteca essencial torna simples a
execucao dessas tarefas comuns. Por exemplo, para ler um valor de um pino di-

43
Introducao a Plataforma Arduino
3.2. Biblioteca Padrao PET Eletrica

gital, voce precisa apenas usar o digitalRead. Outras funcoes comuns incluem
digitalWrite e analogRead.

3.2 Biblioteca Padrao


As bibliotecas padrao, diferente das essenciais, precisam ser includas explicita-
mente em seus sketches. Isso e possvel atraves da instrucao include no topo do
sketch. Por exemplo, se voce deseja incluir a biblioteca LiquidCrystal, a qual
e usada para mostrar dados em uma tela LCD, coloca-se o seguinte no topo do
sketch:
#include <LiquidCrystal.h>

Nota: O nome da biblioteca e delimitado por sinais de maior e menor: <


e >. Tambem a linha nao termina com ponto e vrgula (;), como e usual.
As bibliotecas padrao distribuem-se nas seguintes secoes:

Biblioteca ArduinoTestSuite;

Biblioteca EEPROM;

Biblioteca SD;

Biblioteca Ethernet;

Biblioteca Firmata;

Biblioteca LiquidCrystal;

Biblioteca Stepper;

Biblioteca Servo;

Biblioteca SPI;

Biblioteca Wire;

Biblioteca SoftwareSerial.

3.3 Biblioteca de Terceiros


Sao as bibliotecas disponibilizadas por usuarios do Arduino, mas nao estao dis-
tribudas como padrao com a IDE do Arduino. Muitas delas sao facilmente
encontradas no website principal do Arduino. Algumas sao extensoes das bibli-
otecas padrao, com consequencia de uma pequena oferta, no que diz respeito
ao acrescimo de funcoes. Outras bibliotecas de terceiros sao projetadas para
trabalhar com dispositivos em particular, tais como controladores de jogos.

44
Introducao a Plataforma Arduino
3.4. Instalando uma nova biblioteca PET Eletrica

3.4 Instalando uma nova biblioteca


Bibliotecas que nao sao distribudas com a IDE (bibliotecas de terceiros) neces-
sitam ser instaladas para que suas funcoes possam ser utilizadas em seu projeto.
Adicionar uma dessas bibliotecas requer o cumprimento de alguns passos:
Baixar a biblioteca, normalmente um arquivo zip.
Instale-a no IDE do Arduino copiando os arquivos descompactados a sua
pasta padrao das bibliotecas do sketch. Se a pasta das bibliotecas nao
existir, e necessario cria-la.
Se o IDE ja tiver iniciado, sera necessario reinicia-lo, para so entao a
biblioteca tornar-se disponvel para o codigo.
A partir do cumprimento das sequencias anteriores, adicione a biblioteca
ao seu sketch selecionando Sketch > Incluir Biblioteca, como mostrado na
Figura 3.1.

Figura 3.1: Incluindo Bibliotecas de Terceiros.

Uma vez importada para um sketch, todas as funcoes da biblioteca estao


disponveis para o mesmo. E interessante observar o quao importante e a ma-
nipulacao correta das bibliotecas para o desenvolvimento de um projeto, pois

45
Introducao a Plataforma Arduino
3.5. Shields PET Eletrica

as mesmas potencializam o que se almeja desenvolver permitindo ao Arduino


interfacear (eu pesquisei e essa palavra existe rs) com muitos outros dispositivos
e perifericos.
Nota: Uma vez que uma biblioteca e adicionada a IDE, ela estara disponvel
para o uso com projetos futuros, assim como as bibliotecas padrao.

3.5 Shields
Um dos fatores determinantes para a enorme versatilidade e popularidade da
plataforma Arduino sao os shields (escudos, em portugues). Shields sao placas
de hardware plugaveis que se conectam em um Arduino. Essas placas podem
conter displays de LCD, sensores, modulos de comunicacao ou reles, por exem-
plo. Muitos deles possuem seus proprios conectores, podendo ser empilhados
uns sobre os outros. Para extrair o maximo que um shield pode oferecer, na
maioria dos casos e necessario o uso de bibliotecas adicionais, sendo essas dis-
ponibilizadas pelo desenvolvedor ou fabricante do shield. E possvel adquirir
shields ja montados no mercado, ou desenvolver um do zero, para um projeto
especfico.
Alguns dos Shields mais comuns disponveis sao:

Shields de motor;

Shields de Ethernet e Wi-fi;

Shields de prototipagem .

3.5.1 Shields de motor


Com o Arduino, e possvel construir dispositivos que possuem atuadores
mecanicos e ate mesmo robos. Para isso, necessita-se adicionar ao Arduino
a eletronica adequada para ele poder controlar motores e fornecer a energia
necessaria para funcionarem. Uma maneira simples de fazer isso e utilizar um
shield para motores.
Shields de motor sao normalmente usados para controlar pequenos motores
DC. Eles sao suficientemente poderosos para serem usados tambem com motores
de passo e servomotores.
Da marca Arduino, tem-se o Arduino Motor Shield, que possui a
eletronica necessaria para comandar diversos tipos de motores e outras cargas
indutivas como solenoides e reles. Ele permite controlar a velocidade e a direcao
dos motores de maneira independente e ainda medir o quanto de corrente cada
um deles esta consumindo. Alternativas ao motor shield oficial podem ser en-
contradas em lojas como a Adafruit e a SparkFun. Dois bons exemplos sao o
Adafruit Motor \ Stepper \ Servo Shield for Arduino V2 e o Adafruit
16-Channel 12-bit PWM \ Servo Shield.

46
Introducao a Plataforma Arduino
3.5. Shields PET Eletrica

Figura 3.2: Adafruit Motor/Stepper/Servo Shield for Arduino V2.

3.5.2 Shields de Ethernet e Wi-fi

Um dos maiores atrativos da plataforma Arduino e o fato de que e possvel


desenvolver projetos de dispositivos conectados. Os shields de conexao permitem
uma serie de opcoes para que seu Arduino fale com o mundo atraves de uma
rede. O Arduino Ethernet Shield, por exemplo, foi especificado para conectar
o Arduino a uma rede local e e provavelmente a maneira mais simples e mais
barata de ligar o Arduino a internet. Nesse caso estamos falando de um shield
oficial, desenhado e suportado pelo time do Arduino. Mas tambem existem
shields de terceiros. Ja apresentamos a biblioteca Ethernet padrao e esse e o
hardware a ser usado.
Se voce esta interessado em shields de comunicacao, outras alternativas sao:
o Arduino WiFi Shield que faz o mesmo que o Ethernet Shield, mas em redes
sem fio; o Arduino GSM Shield que se conecta a rede de telefonia celular; e o
Bluetooth Low Energy (BLE) Shield for Arduino 2.0 que adiciona ao Arduino
a capacidade de conversar com outros dispositivos Bluetooth como iPhones e
iPads.

47
Introducao a Plataforma Arduino
3.5. Shields PET Eletrica

(a) (b)

Figura 3.3: (a) Arduino Ethernet Shield sendo encaixado no Arduino Uno; (b)
Modulo Ethernet Shield.

3.5.3 Shields de Prototipagem

Shields nus ou de prototipagem sao excelentes opcoes para uso em projetos


pessoais. Existem poucas versoes diferentes disponveis; algumas possuem uma
placa de testes integrada, e outras possuem uma area de prototipagem onde
voce pode soldar componentes. Eles permitem que se desenvolvam circuitos que
se encaixam no Arduino como um shield comum. Alem disto, se voce utilizar
um pequeno protoboard, podera fazer testes no circuito sem que seja necessario
soldar todas as pecas. Com isto, os projetos sao desenvolvidos com muito mais
agilidade e menor custo. Eles tambem sao uma boa opcao quando voce desejar
que seu circuito seja integrado ao Arduino como um unico modulo (na forma de
um shield).
Existem varias opcoes de Proto Shields disponveis no mercado. Uma delas o
Arduino Proto Shield, que e o shield de prototipagem oficial. Outras versoes
contem algumas outras facilidades para seu projeto e podem ser encontradas
varias lojas na rede. Alguns bons exemplos sao o Adafruit Proto Shield for
Arduino Kit, o DIY Shield for Arduino (tambem vendido pela Adafruit)
e o SparkFun Arduino ProtoShield Kit.

48
Introducao a Plataforma Arduino
3.5. Shields PET Eletrica

(a) (b)

Figura 3.4: (a) Arduino Proto Shield; (b) Adafruit Proto Shield para o Arduino
Kit.

Por fim, antes de trabalhar com shields, e interessante tomar cuidado com
os seguintes fatores:

Quais pinos sao usados por shields individuais afim de verificar a compa-
tibilidade entre os shields que se deseja utilizar no projeto;
A compatibilidade do shield com o seu Arduino, por exemplo: alguns nao
trabalham com o Arduino Mega ou requerem modificacoes para trabalhar
com ele.

49
Introducao a Plataforma Arduino
3.5. Shields PET Eletrica

50
Captulo 4

Input e Output Avancados

4.1 Sensores
4.1.1 Detectando Objetos com ultrasom
Primeiramente, entenderemos como um sensor ultrassonico funciona. O seu
princpio e o mesmo de um sonar, em que sera emitido um som e depois cap-
tado o seu eco. Com o tempo da resposta desse eco, podemos obter o quao
longe o objeto esta e se existe um objeto em uma determinada regiao a frente
do sensor.
O sensor e composto por componentes separados: um que ira a onda e outro
que ira captar o eco, e mais alguns outros componentes, incluindo um microcon-
trolador, que e responsavel por determinar o tempo que o dispositivo ira levar
entre o envio e recebimento da onda. Esse tempo e proporcional a uma tensao
que e aplicada. Cada sensor ira possuir uma caracterstica diferente depedendo
do fabricante.

Figura 4.1: Modo de funcionamento de um sensor ultrassonico

51
Introducao a Plataforma Arduino
4.1. Sensores PET Eletrica

4.1.2 Fazendo o sketches para deteccao de objetos


Para fazer a proxima montagem sera necessario:
1 Arduino;
1 Sensor Ultrasonico.
Esquema para essa montagem:

Figura 4.2: Esquema de circuito utilizando um sensor ultrassonico.

#include <Ultrasonic.h>

//Define os pinos do Arduino ligados ao Trigger e Echo


#define PINO_TRG 7
#define PINO_ECHO 6

//Inicializa o sensor ultrassonico nos pinos especificados


Ultrasonic ultrasonic(PINO_TRG, PINO_ECHO);

void setup()
{
//Inicializa a serial
Serial.begin(9600);
}

void loop()
{
//Variaveis para guardar os valores em
//cm (cmSec) e polegadas (inMsec)
float cmMsec, inMsec;

//Le os valores do sensor ultrasonico


long microsec = ultrasonic.timing();

52
Introducao a Plataforma Arduino
4.1. Sensores PET Eletrica

//Atribui os valores em cm ou polegadas as variaveis


cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
inMsec = ultrasonic.convert(microsec, Ultrasonic::IN);

//Mostra os valores na serial


Serial.print("Centimetros: ");
Serial.print(cmMsec);
Serial.print(" - Polegadas: ");
Serial.println(inMsec);

//Aguarda 1 segundo e reinicia o processo


delay(1000);
}

4.1.3 Detectando objetos com infravermelho


Muitas vezes nao precisamos da distancia que um objeto se encontra e tambem
nao possumos um sensor ultrassonico para utilizar na montagem, ou tambem
precisamos de sensores menores, e nesses momentos que passamos a usar sen-
sores infravermelho, que sao mais simples e menores. Pode ser ate facilmente
implementado em casa, caso nao tenha ele em um circuito impresso. Senso-
res infravermelho estao presentes no nosso cotidiano, e nem percebemos, por
exemplo, quando uma lampada no corredor do predio ascende sozinha quando
voce esta passando provavelmente um sensor do tipo parallax PIR, que detecta
a alteracao do infravermelho em uma area..
Existem sensores infravermelhos que sao utilizados para medir a distancia
por telemetria, mas esses tipos so serao abordados no anexo dessa apostila
devido a sua complexidade.

4.1.4 Sketch para deteccao de presenca por infravermelho


Para realizar essa montagem sera necessario:

Um arduino;

Um sensor infravermelho, como estar na imagem.

Segue um sketch de modelo de aplicacao do infravermelho.

int LED = 13; // Atribui o pino 13 ao LED

53
Introducao a Plataforma Arduino
4.1. Sensores PET Eletrica

Figura 4.3: Sensor Infravemelho

int SensorIR = 7; // This is our input pin


int Deteccao = HIGH; // HIGH indica que n~
ao ha obstaculo

void setup() {
pinMode(LED, OUTPUT); // Define o LED como sada
pinMode(SensorIR, INPUT); // Define o SensorIR como entrada
Serial.begin(9600);

void loop() {
Deteccao = digitalRead(SensorIR);
if (Deteccao == LOW)
{
Serial.println("OBSTACULO!!, OBSTACULO!!");
digitalWrite(LED, HIGH);
}
else
{
Serial.println("Tudo Limpo");
digitalWrite(LED, LOW);
}
delay(200);
}

Esse codigo e bastante simples, sendo compatvel com a simplicidade do


sensor.

54
Introducao a Plataforma Arduino
4.2. Controlando um LED com PWM PET Eletrica

4.2 Controlando um LED com PWM


Com o conhecimento adquirido ate agora, voce poderia construir uma lampada
interativa que pode ser controlada, e nao apenas faze-la ligar ou desligar, mas
fazer isso de uma forma um pouco mais interessante. Uma das limitacoes dos
exemplos de LED piscando que temos usado ate agora e que voce so pode
deixar a luz no estado ligado ou desligado. Uma lampada interativa precisa ser
regulavel.

Entao, como fazer para obter um brilho intermediario de um LED, digamos


50%? Uma ideia e fazermos com que uma chave seja aberta e fechada rapi-
damente de modo a ficar 50% do tempo aberta e 50% fechada. Isso significa
que, em media, teremos metade do tempo com corrente e metade do tempo
sem corrente. Essa tecnica e chamada de PWM (Pulse Width Modulation), que
significa Modulacao de Largura de Pulso.

Figura 4.4: Larguras de pulso

A montagem a seguir exercita o conceito de PWM para controlar o brilho


de um LED.

Figura 4.5: Circuito.

55
Introducao a Plataforma Arduino
4.3. Monitor serial PET Eletrica

int brilho = 0; //Cria uma variavel para o brilho


int LED = 9; //Define o LED no pino 9

void setup()
{
pinMode ( LED, OUTPUT); //Pino 9 ajustado como sada
analogWrite (LED, 0); //saida inicia com o nivel em zero
}

void loop()
{
if (brilho < 255) //Se o valor de brilho for menor que 255
{
brilho++; //aumenta o valor de brilho em 1; ou 0,4% do
//Dutycicle
analogWrite (LED, brilho); //ajusta a sada do Pino 9 para o
//novo PWM
delay (30); //agurda 30 milisegundos
}
else //se o valor de brilho for maior ou igual a 255
{
brilho = 0; //o valor de brilho vai a zero
analogWrite (LED, brilho); //apaga o LED
delay(30); //Aguarda 30 milisegundos
}
}

4.3 Monitor serial

Podemos enviar dados e comandos do PC para o Arduno, de modo a poder


controlar dispositivos eletronicos a ele conectados.
As placas de Arduino possuem ao menos uma porta serial (UART /
USART), chamada de Serial. Ela realiza comunicacao por meio dos pinos digi-
tais 0 (RX) e 1 (TX), assim como via USB com o PC.
Podemos usar a ferramenta de Monitor Serial presente no IDE para comu-
nicacao com a placa. Para isso, basta clicar no botao Serial Monitor na barra de
ferramentas, e selecionar a taxa de transferencia desejada em bauds (a mesma
que sera inserida no codigo):

56
Introducao a Plataforma Arduino
4.3. Monitor serial PET Eletrica

Figura 4.6: Modo de encontrar o Monitor Serial.

A classe Serial do Arduino possui diversas funcoes para comunicacao, algu-


mas delas listadas na tabela a seguir:

Tabela 4.1: Lista de funcoes do Serial Monitor.

Funcao Descricao
available() Verifica a existencia de dados disponveis para leitura na porta serial
begin() Configura o baud rate da transmissao de dados
end() Encerra a comunicacao serial
println() Semelhante ao print(), porem, pula uma linha apos o envio dos dados
read() Le um caracter recebido pela porta serial
parseInt() Le o primeiro numero do tipo inteiro no buffer da porta serial
parseFloat() Le o primeiro numero do tipo float no buffer da porta serial

Abaixo serao colocados exemplos para algumas das funcoes descritas na


Tabela 4.1:

Exemplo 1:

int cont = 0;

void setup(){
Serial.begin(9600); //Iniciando a comunicac~
ao numa taxa de
//9600 baud
Serial.println("Contagem de loops executados desde o inicio
do codigo");
}

void loop() {

Serial.print("Valor: ");
Serial.println(cont);

delay(500);

cont++;
}

57
Introducao a Plataforma Arduino
4.3. Monitor serial PET Eletrica

Exemplo 2:

int recebido = 0;

void setup(){
Serial.begin(9600); //Iniciando a comunicac~
ao numa taxa de
//9600 baud
Serial.println("Leitura e impress~
ao de valores inteiros
enviados na porta serial");
}

void loop() {

if (Serial.available() > 0)
{
recebido = Serial.parseInt();
Serial.print("Valor recebido: ");
Serial.println(recebido);
}

Exemplo 3:

float recebido = 0;

void setup(){
Serial.begin(9600); //Iniciando a comunicac~
ao numa taxa de
//9600 baud
Serial.println("Leitura e impress~
ao de valores decimais
enviados na porta serial");
}

void loop() {

if (Serial.available() > 0)
{
recebido = Serial.parseFloat();
Serial.print("Valor recebido: ");

58
Introducao a Plataforma Arduino
4.3. Monitor serial PET Eletrica

Serial.println(recebido);
}

Exemplo 4:

char recebido;

void setup(){
Serial.begin(9600); //Iniciando a comunicac~
ao numa taxa de
//9600 baud
Serial.println("Leitura e impress~
ao de caracteres individuais
enviados na porta serial");
}

void loop() {

if (Serial.available() > 0)
{
recebido = Serial.read();
Serial.print("Valor recebido: ");
Serial.println(recebido);
}

Exemplo 5:

char recebido[50];
int cont = 0;

void setup(){
Serial.begin(9600); //Iniciando a comunicac~
ao numa taxa de
//9600 baud
Serial.println("Leitura e impress~
ao de caracteres individuais
enviados na porta serial");
}

59
Introducao a Plataforma Arduino
4.4. Motores PET Eletrica

void loop() {
if (Serial.available() > 0)
{
while (Serial.available() > 0)
{
recebido[cont] = Serial.read();
cont++;
delay(2);
}
Serial.print("Valor recebido: ");
Serial.println(recebido);
}
}

4.4 Motores
Cada um dos pinos da placa Arduino pode apenas ser usado para alimentar dis-
positivos que usam um valor muito baixo de corrente, como um LED. Caso voce
tente conectar algo maior, como um motor ou uma lampada incandescente, o
pino pode parar de funcionar e pode danificar permanentemente o microcontro-
lador, que e a base do Arduino. Para evitar essas situacoes, a corrente atraves
de um pino I/O de um Arduino deve ser limitada a 20 miliamperes.
Esse e um dos conhecimentos basicos necessarios para o sucesso desta secao,
que busca promover mobilidade para seus projetos por meio da apresentacao de
diversas maneiras de controlar os mais utilizados tipos de motores.

4.4.1 Motores DC

Figura 4.7: Exemplo de um motor DC.

Um motor de corrente contnua, CC (ou DC, do ingles direct current), e o


tipo de motor mais comum. Motores DC tem, geralmente, dois terminais, um
positivo e outro negativo. Se voce conectar os dois terminais diretamente em
uma bateria, o motor ira girar. Se voce trocar os terminais, o motor girara

60
Introducao a Plataforma Arduino
4.4. Motores PET Eletrica

na direcao contraria. Esses tipos de motores podem ser encontrados em muitos


dispositivos, como carrinhos de controle remoto e barcos, janelas de carros, DVD
players, ventiladores. Muitos desses podem ser reutilizados com o Arduino.
As tensoes para motores DC pequenos normalmente estao entre 1,5 a 30
Volts. Exceder bastante a tensao recomendada pode levar a queima do motor;
enquanto entregar muito baixa tensao nao levara o motor a se mover.
Como o arduino providencia uma pequena quantidade de corrente - nao
suficiente para alimentar um motor -, voce precisara de uma fonte externa de
energia. Dessa forma, o Arduino tera a tarefa de ligar ou desligar o motor e
tambem de controlar sua velocidade.

Montagem 1: Controlando um motor DC

Nesta montagem, voce ira aprender a controlar um motor DC usando um


Arduino e um transistor. Para isso, sera utilizada uma entrada PWM para
controlar a velocidade do motor ao enviar um numero entre 0 e 255 pelo monitor
serial.
Os componentes utilizados nesta montagem, sao:

1 Motor CC pequeno (6V);

1 Transistor PN 2222;

1 Diodo N4001;

1 Resistor de 270 ohm;

1 Protoboard;

1 Arduino UNO;

Fios.

Uma vez em posse dos componentes, o layout a ser montado e o seguinte:


Na montagem do layout ha dois fatores para prestar mais atencao: verificar
se o transistor esta posicionado corretamente, isto e, se o lado plano do
transistor esta a direita da placa; verificar se a faixa marcada no diodo esta na
direcao da alimentacao de 5V.

Nota: Caso voce nao tenha certeza do quanto de corrente e requerida pelo
seu motor, que pode facilmente requerer 1000mA, mais que uma porta USB
consegue lidar, e aconselhavel alimentar o arduino por uma fonte externa alem
do USB.

61
Introducao a Plataforma Arduino
4.4. Motores PET Eletrica

Figura 4.8: Montagem 1:Controlando um motor DC.

Figura 4.9: Montagem 1:Diagrama.

Importante saber: Transistores


Um pequeno motor DC geralmente utiliza mais potencia do que uma sada de
um Arduino pode promover diretamente. Se tentarmos conectar o motor dire-
tamente em um dos pinos do Arduino, ha uma grande chance de isso danificar
o Arduino. Para lidar essa situacao, um transistor PN2222 pode ser utilizado
como uma chave que trabalha com a pequena corrente da sada digital do Ar-

62
Introducao a Plataforma Arduino
4.4. Motores PET Eletrica

duino e, assim, controlar a corrente maior do motor.

Figura 4.10: Esquema de um transistor.

Um transistor tem tres terminais. A maior parte da corrente passa do coletor


para o emissor, mas isso ira apenas acontecer se uma pequena quantidade de
corrente estiver passando pela conexao da base, a qual e disponibilizada pela
sada digital do Arduino.

Importante saber: PWM e motores


Para controlar a velocidade de um motor DC pode-se utilizar de uma variacao
de tensao a ele aplicada. Quando menor a tensao, menor seria a velocidade, e
quanto maior a tensao, maior a velocidade. Uma maneira de variar a tensao
seria por meio de um potenciometro, que produziria uma resistencia variavel.
Essa e uma maneira simples, porem ineficiente pelo fato do potenciometro
poder ficar muito quente rapidamente, como tambem o proprio motor, quando
funciona a altas tensoes, causando um dano permanente. Uma forma muito
mais adequada e utilizar do metodo de modulacao por largura de pulso (pulse
width modulation - PWM).
Um motor trabalha de modo mais eficiente quando aplica-se a tensao para a
qual foi designado. A modulacao por PWM e o modo mais eficiente de alimentar
um motor e funciona pela aplicacao de uma serie de pulsos de tensao ao motor,
desligando e ligando a tensao para o motor rapidamente.
Para o seu uso no Arduino, a funcao responsavel por produzir uma sada
PWM, como visto no Captulo 2, e a analogWrite. Vale ressaltar que a funcao
analogRead mede um valor analogico de tensao e o converte em um numero di-
gital, usando o conversor Arduino analog-to-digital (ADC); e, assim, nao possui
relacao com tarefas de PWM.
O Arduino produz uma sada como uma serie de pulsos, os quais, quando
associados com os componentes corretos, realizam o controle ideal da velocidade
do motor.
Para utilizar da analogWrite, escreva analogWrite(pino, duty cicle),
em que o duty cicle e o ciclo de atividades, isto e, um valor de 0 a 255, e o

63
Introducao a Plataforma Arduino
4.4. Motores PET Eletrica

pino e um dos identificados como de PWM (3, 5, 6, 9,10 ou 11, em uma placa
Uno tradicional).

Ainda sobre o diagrama da montagem, observa-se que o pino D3 do


Arduino e conectado a um resistor para limitar a corrente fluindo para a base
do transistor. Ja o diodo e conectado entre os terminais do motor pois permite
que a eletricidade flua apenas por uma direcao, de modo que, quando ocorrer
um pico negativo de tensao, ao desligar o motor, por exemplo, o diodo proteja
o Arduino e o transistor contra esse pico, evitando que sejam atingidos por
qualquer corrente reversa do motor.

Codigo:

1. /*
2. Montagem : Controlando um motor DC
3. */
4.
5.
6. int motorPin = 3;
7.
8. void setup()
9. {
10. pinMode(motorPin, OUTPUT);
11. Serial.begin(9600);
12. while (! Serial);
13. Serial.println("Velocidade de 0 a 255");
14. }
15.
16.
17. void loop()
18. {
19. if (Serial.available())
20. {
21. int speed = Serial.parseInt();
22. if (velocidade >= 0 && velocidade <= 255)
23. {
24. analogWrite(motorPin, velocidade);
25. }
26. }
27. }

64
Introducao a Plataforma Arduino
4.4. Motores PET Eletrica

Lendo o codigo, vemos que o transistor age como uma chave, controlando a
potencia do motor, e o pino 3 do Arduino, chamado no sketch de motorPin,
e utilizado para ligar e desligar o transistor.
Quando o sketch inicia, ele lembra o usuario que, para controlar o motor, e
preciso digitar um valor entre 0 e 255 no Monitor Serial.
Na funcao loop, o comando Serial.parseInte utilizado para ler o valor
colocado no Monitor Serial e converte-lo em uma variavel inteira (int).

4.4.2 Motores de passo


Um motor de passo e um dispositivo electromecanico que converte os impulsos
eletricos em movimentos discretos mecanicos. O eixo de um motor de passo
gira em incrementos discretos quando os impulsos de comando electricos sao
aplicados a ele na sequencia correta.

Figura 4.11: Exemplo de um motor de passo.

A rotacao dos motores tem varias relacoes diretas a estes pulsos de entrada
aplicados. A sequencia dos impulsos aplicados esta diretamente relacionada
com a direcao de rotacao do eixo do motor, a velocidade de rotacao do motor
com a frequencia dos impulsos de entrada e o comprimento de rotacao com
o numero de impulsos de entrada. Ou seja, Para controlar o motor de passo
precisa-se aplicar tensao a cada um a das bobinas em uma sequencia especfica.

Uma das vantagens mais significativas de um motor de passo e a sua


capacidade de ser controlado com precisao num sistema de circuito aberto.
Controle de circuito aberto significa que nenhuma informacao de feedback sobre
a posicao e necessaria. Este tipo de controle elimina a necessidade de caros
sistemas de deteccao, tais como codificadores opticos. Sua posicao e conhecida
simplesmente atraves do controle dos impulsos de entrada.

A maneira mais simples de fazer interface com um motor de passo


unipolar com Arduino e a utilizacao do chip ULN2003A, presente no dri-
ver ULN2003. Este CI contem sete transistores Darlington e e como se

65
Introducao a Plataforma Arduino
4.4. Motores PET Eletrica

houvesse sete transistores TIP120 tudo em um pacote, suportando ate 500


mA por canal e com uma queda de tensao interna de cerca de 1V quando ligado.

Para utilizar o motor com o programa que sera mostrado a seguir, conecte-o
ao Arduino na seguinte sequencia:

IN1 ao pino 8 do Arduino

IN2 ao pino 9 do Arduino


IN3 ao pino 10 do Arduino
IN4 ao pino 11 do Arduino

O esquema a ser montado deve ser o seguinte:

Figura 4.12: Montagem utilizando o motor de passo.

66
Introducao a Plataforma Arduino
4.4. Motores PET Eletrica

Codigo:

#include <Stepper.h>

const int PassosPorVolta = 500;

//Inicializa a biblioteca utilizando as portas de 8 a 11 para


//ligacao ao motor
Stepper myStepper(PassosPorVolta, 8,10,9,11);

void setup()
{
//Determina a velocidade inicial do motor
myStepper.setSpeed(60);
}

void loop()
{
//Gira o motor no sentido horario a 90 graus
for (int i = 0; i<=3; i++)
{
myStepper.step(-512);
delay(500);
}

//Gira o motor no sentido anti-horario a 120 graus


for (int i = 0; i<=2; i++)
{
myStepper.step(682);
delay(500);
}

//Gira o motor no sentido horario, aumentando a


//velocidade gradativamente
for (int i = 10; i<=60; i=i+10)
{
myStepper.setSpeed(i);
myStepper.step(40*i);
}
delay(500);
}

67
Introducao a Plataforma Arduino
4.4. Motores PET Eletrica

4.4.3 Motores servos

Um servomotor tipo RC consiste essencialmente em um motor de corrente


contnua com um circuito de controle de posicao acoplado. Os servomotores
nao dao uma volta completa em seu eixo, eles possuem uma faixa ou de 90 ou
180 graus em seu eixo. Do servomotor sai tres cabos: preto, vermelho e branco
ou amarelo. Os cabos preto e vermelho sao para alimentacao e o branco ou
amarelo e o cabo de controle.

Figura 4.13: Exemplo de um servo motor.

Internamente, para que o servomotor funcione, existe um circuito de controle


que recebe um sinal de controle para que o servomotor se posicione em um
determinado angulo.
A seguir serao mostrados dois codigos para serem utilizados com servo
motores e um esquema de montagem que e referente ao Codigo 2.

68
Introducao a Plataforma Arduino
4.4. Motores PET Eletrica

Figura 4.14: Esquema referente ao Codigo 2.

Codigo 1:

#include <Servo.h>

#define SERVO 6 // Porta Digital 6 PWM

Servo s; // Variavel Servo


int pos; // Posic~
ao do Servo

void setup ()
{
s.attach(SERVO);
Serial.begin(9600);
s.write(0); // Inicia motor na posic~
ao zero
}

void loop()
{
for(pos = 0; pos < 90; pos++)
{
s.write(pos);
delay(15);
}
delay(1000);
for(pos = 90; pos >= 0; pos--)
{
s.write(pos);

69
Introducao a Plataforma Arduino
4.4. Motores PET Eletrica

delay(15);
}
}

Codigo 2:

// Programa : Controlando a posicao de um


servo usando potenciometro

#include <Servo.h>
Servo motor; // Cria um objeto para controle do servo

// Pino analgico do potenciometro


int potpin = A0;
int vel = 0;

// Variavel que armazena o valor lido do potenciometro


int val;

void setup()

// Define que o servo esta ligado a porta 5


myservo.attach(5);

void loop()

// Le o valor do potenciometro (valores entre 0 e 1023)


val = analogRead(potpin);

// Converte o valor pra ser usado no servo (valores entre


//0 e 180)
vel = map(val, 0, 1023, 0, 179);

// Move o eixo do servo, de acordo com o angulo


myservo.write(val);

// Aguarda o servo atingir a posic~


ao
delay(15);

Nota: Talvez seja necessario importar a biblioteca Servo.h, para isso, o

70
Introducao a Plataforma Arduino
4.4. Motores PET Eletrica

caminho deve ser o seguinte: Sketch - Import Library - Servo.

71
Introducao a Plataforma Arduino
4.4. Motores PET Eletrica

72
Captulo 5

Anexos

5.1 Informacoes tecnicas do Arduino UNO


5.2 Comunicacao
O Bluetooth foi pensado como um substituto do cabo para comunicacao serial
entre dispositivos. Ele e destinado para comunicacao proximas, pois seu alcance
e bem pequeno quando comparado a outros tipos de comunicacoes como wi-fi.
Apesar dessa sua limitacao de alcance, ele proporciona velocidade, resolucao e
seguranca para diversas aplicacoes. Como o Bluetooth foi desenvolvido para ser
um meio de comunicacao serial, entao todos os comando e funcoes aplicados a
comunicacao serial tambem podera ser aplicado, ou seja, o codigo continuar o
mesmo, sem necessidade de aprender novas funcoes.

5.2.1 Plataforma Bluetooth do Arduino


A propria empresa Arduino tem sua plataforma com um sistema bluetooth
embutido, chamado de arduinoBT

Figura 5.1: Arduino BT

O ArduinoBT e operacional com no minimo 1.5v, fazendo-se muito com-


pativel para baterias pequenas para cenarios sem fio, ele possui um total de 8
entradas analogicas.

73
Introducao a Plataforma Arduino
5.2. Comunicacao PET Eletrica

NOTA: Nao use o pino 7; ele esta conectado ao pino de reinici-


alizacao e so deve ser usado para restar o modulo.

O projeto pode necessitar de outra platadorma que nao seja da empresa


Arduino, assim tem-se inumeras outras placas com sistema arduino embutido
que foram projetadas por terceiros, mas possuem diversas utlidades e aplicacoes
especifica. Uma das mais populares e a BlueSMiRF line.

5.2.2 Fazendo a montagem com a conexao Bluetooth


Para iniciar a montagem com esse tipo de conexao, e necessario primeiro co-
nectar o modulo ao seu computador. Isso e feito adicionando um dispositivo
bluetooth comum, igual a uma caixa de som, celular,etc; O modulo devera apa-
recer com um nome dele, por exemplo, para o ArduinoBT, ira aparecer o nome
dele. Para terminar comcluir o emparelhamento possivelmente sera solicitado
uma senha, que sera uma senha padrao: 1234.
Agora e so voltar para IDE do Arduino, e comecar a fazer o Sketch. Como
ja foi dito nesse texto a comunicacao via Bluetoofh e uma comunicacao serial,
e assim fazer o skecth nao e tao dificil e so utilizar os mesmo comandos que ja
foram apresentados na seccao 3-Iniciando.

NOTA: O modulo Bluetooth assume o controle das linhas de


TX/TX do Arduino, ele deve seer desligado quando voce estiver
fazendo o carregamento dos sketches ao Arduino atraves do USB.

NOTA: Se voce suspeitar que suas mensagens nao estao sendo


enviadas corretamente, verifique a taxa de transmissao, pois a taxa
do arduino e do seu programa tem que esta iguais.

Segue um exemplo de sketch bem simples que envia para o arduino numeros
randomicos.

int in = 4; //reverente a qual pino do arduino


ira ser utilizado

void setup(){
Serial.begin(115200);// setando a frequ^
encia de comunicac~
ao
}

void loop(){

Serial.print(random(1024));//enviando os numeros aleatorios.


delay(1000);
}

74
Referencias Bibliograficas

[1] BANZI, Massimo, SHILOH, Michael. Primeiros Passos com o Arduino. 2.


ed., 2015.

[2] MONKI, Simon. Programacao com Arduino: comecando com sketchs. Serie
Tekne, 2013.
[3] OLIVEIRA, Claudio Lus Vieira, ZANETTI, Humberto Augusto Prove-
sana. Arduino Descomplicado.1. ed., 2015.

75

Vous aimerez peut-être aussi