Sei sulla pagina 1di 65

Introduo plataforma Arduino

v.1.1
outubro/2011
Leonardo Henrique Day de Toledo
Robson Paes Machado

A obra Introduo plataforma Arduino foi licenciada com uma Licena Creative Commons Atribuio - Uso No Comercial - Partilha nos Mesmos Termos 3.0 No Adaptada.
Com base na obra disponvel em www.eaduino.com.br.

INTRODUO AO ARDUINO ...................................................................................................... 1


1.1
1.2
1.3

O QUE O ARDUINO?................................................................................................................... 1
PREPARANDO O AMBIENTE DE PROGRAMAO ARDUINO ............................................................ 4
TESTANDO A PLACA ARDUINO ................................................................................................... 10

NOES DE ELETRICIDADE ................................................................................................... 17


2.1
CORRENTE, TENSO E RESISTNCIA .......................................................................................... 17
2.1.1
Corrente ........................................................................................................................... 17
2.1.2
Tenso .............................................................................................................................. 17
2.1.3
Corrente Contnua x Corrente Alternada......................................................................... 17
2.1.4
Resistncia ....................................................................................................................... 21
2.2
PLACA PARA TESTES .................................................................................................................. 22

ATIVIDADES ................................................................................................................................. 23
3.1
ATIVIDADE 1 - ACENDENDO UM LED ........................................................................................ 24
3.1.1
Resistor............................................................................................................................. 24
3.1.2
LED .................................................................................................................................. 26
3.1.3
O resistor como limitador de corrente ............................................................................. 27
3.1.4
Estrutura de um sketch ..................................................................................................... 30
3.1.5
setup()............................................................................................................................... 30
3.1.6
loop() ................................................................................................................................ 30
3.1.7
Comentrios ..................................................................................................................... 34
3.1.8
setup()............................................................................................................................... 34
3.1.9
loop() ................................................................................................................................ 34
3.1.10
digitalWrite() .................................................................................................................... 35
3.2
ATIVIDADE 2 - PISCA LED ......................................................................................................... 36
3.2.1
Variveis .......................................................................................................................... 37
3.2.2
int ..................................................................................................................................... 38
3.2.3
delay() .............................................................................................................................. 38

ATIVIDADE 3 - CONTROLE DE LUMINOSIDADE DE LEDS ............................................. 39


4.1
4.2
4.3

ATIVIDADE 4 - LIGANDO/DESLIGANDO UM LED ATRAVS DE UMA CHAVE.......... 44


5.1
5.2
5.3
5.4

FOR() ......................................................................................................................................... 41
OPERADORES ............................................................................................................................. 41
ANALOGWRITE() ....................................................................................................................... 42

CHAVE TCTIL .......................................................................................................................... 44


DIGITALREAD() .......................................................................................................................... 47
IF() ............................................................................................................................................. 47
RESISTORES PULL-UP / PULL-DOWN ........................................................................................... 47

ATIVIDADE 5 - CONTROLE DE LUMINOSIDADE DE LED COM LDR............................ 50


6.1
6.2
6.3

LDR .......................................................................................................................................... 50
FLOAT ........................................................................................................................................ 53
ANALOGREAD() ......................................................................................................................... 53

ATIVIDADE 6 - SIMULANDO UM SEMFORO ..................................................................... 54

ATIVIDADE 7 MEDINDO TEMPERATURAS COM NTC ................................................... 57


8.1
8.2
8.3
8.4
8.5
8.6

NTC .......................................................................................................................................... 57
#INCLUDE .................................................................................................................................. 60
DOUBLE ..................................................................................................................................... 60
FUNCTIONS ................................................................................................................................ 60
LOG() ......................................................................................................................................... 61
SERIAL ....................................................................................................................................... 61

CONCLUSO ................................................................................................................................. 63

Introduo plataforma Arduino


www.EADuino.com.br

1
1.1

Introduo ao Arduino
O que o Arduino?

Arduino uma plataforma de hardware e software open source, programvel, que permite
interagir com o mundo fsico (luzes, motores, etc), tanto com programas residentes no prprio
Arduino, quanto utilizando este como interface entre o mundo fsico e um computador ou at
mesmo com a internet.
Open source quer dizer que voc pode copiar, modificar, vender o seu prprio Arduino. A nica
restrio o uso do nome Arduino, que exclusivo da equipe que desenvolveu esta plataforma.
Por isso voc vai encontrar no mercado, os originais Arduino, produzidos na Itlia, e vrios
compatveis, porm com outros nomes e pases de origem como: Freeduino, Severino,
Sanguino, Roboduino, Seeeduino, Program-me e por a vai.
Os originais italianos que mais se destacam so o Duemilanove e o atual Uno.
Arduino Duemilanove

Arduino UNO

Introduo plataforma Arduino


www.EADuino.com.br

Estas verses so populares por sua tima relao custo x benefcio e por sua facilidade de
integrao, um excelente ponto de partida para o hobista iniciante. Estas duas verses so
praticamente iguais. Usam o mesmo microcontrolador da Atmel, o ATmega328p (verses mais
antigas usam o ATmega168), e a mesma disposio dos pinos de entrada e sada, diferindo no
chip que faz a comunicao da placa Arduino com o computador.
Os autores do projeto Arduino pensaram numa forma que qualquer pessoa interessada, pudesse
fazer uso desta tecnologia sem, necessriamente, ser algum que entendesse de eletrnica ou
programao de computadores. Outro ponto de destaque que quando comparado a outras
plataformas semelhantes de desenvolvimento, muito acessvel do ponto de vista financeiro.
Alm disso, seu software de programao gratuto e disponvel para os sistemas Windows,
Linux e MacOS.
Ento podemos entender que a plataforma Arduino composta de uma placa original ou
compatvel (hardware) e um ambiente de desenvolvimento (software).
O fantstico desta plataforma que a comunidade de usurios/desenvolvedores Arduino,
pensam em uma forma simples de ampliar/extender as funcionalidades, acoplando outros
elementos eletrnicos em placas conhecidas como shields. Os shields so literalmente
empilhados no Arduino, criando novas possibilidades de uso. Existem shields que fazem
controle de motores, luzes, tomadas, acesso a internet com e sem fio, etc.

Figura 3 exemplo de Shields

Introduo plataforma Arduino


www.EADuino.com.br

A linguagem de programao do Arduino muito simples. Possui poucos comandos, facilitando


em muito o aprendizado. Programadores experientes na linguagem C, podem extender as
bibliotecas que j fazem parte da linguagem ou mesmo criar novas. As bibliotecas contm
cdigos que tornam a escrita dos programas mais simples, fazendo que os detalhes de
comunicao com o hardware sejam facilitados, deixando de lado o trabalho sujo e pesado.
O ambiente de desenvolvimento do Arduino um software que contm um editor de texto para
escrever o programa, uma rea de mensagens, uma barra com botes para funes mais comuns,
e uma srie de menus. Este software se conecta a placa do Arduino, atravs de um cabo USB, e
transfere o programa para o mesmo. Se voc j usa o Microsoft Office ou OpenOffice ou
qualquer outra aplicao para Microsoft Windows, por exemplo, no ter dificuldades para
operar este ambiente.
Os programas para Arduino so chamados de sketches (esboos).
Quer saber mais sobre a plataforma Arduino? Visite:

http://arduino.cc
http://www2.atmel.com/

Ainda no possui uma placa Arduino? Visite:

http://www.eaduino.com.br

Introduo plataforma Arduino


www.EADuino.com.br

1.2

Preparando o ambiente de programao Arduino

O primeiro passo fazer o download do ambiente de desenvolvimento. V para o seguinte


endereo e selecione o seu ambiente operacional (Windows, Mac ou Linux):

http://arduino.cc/en/Main/Software

Supondo que o seu ambiente seja Microsoft Windows, o arquivo baixado estar compactado no
formato .ZIP. Descompacte, preferencialmente, na raiz do disco C do seu computador.
Exemplo:
O arquivo baixado foi o arduino-0022.zip. Aps descompact-lo voc ter a seguinte estrutura
de pastas na unidade C (no altere a estrutura):

Agora ser necessrio configurar a porta de comunicao do seu computador. Esta a tarefa que
requer um pouco mais de ateno. O exemplo a seguir assume que estamos com um Arduino
Duemilanove ou compatvel em ambiente operacional Microsoft Windows 7. Se a verso do
Microsoft Windows instalado em seu computador for diferente, visite:

http://arduino.cc/en/Guide/Windows

Introduo plataforma Arduino


www.EADuino.com.br

Agora vamos conectar o cabo USB no Arduino e na porta USB do seu computador. Caso seja
primeira vez, o Microsoft Windows identificar um novo dispositivo e tentar instalar os drivers
correspondentes. Se houver falha na instalao, vamos verificar no Gerenciador de Dispositivos.
Clique com o boto direito do mouse em Computador. Selecione Gerenciar ou Propriedades

Clique em Gerenciar, a janela Gerenciamento do computador ser aberta. Clique em Portas


(COM e LPT).

Introduo plataforma Arduino


www.EADuino.com.br

Clique com o boto direito do mouse em USB Serial Port e em seguida clique em
Propriedades.

A janela seguinte ser aberta:

Note o que est escrito em Status do disposito. No exemplo, a configurao est correta, mas
se no for este o seu caso, clique na aba Driver.

Introduo plataforma Arduino


www.EADuino.com.br

Clique no boto Atualizar Driver...

Clique em Procurar software de driver no computador.

Introduo plataforma Arduino


www.EADuino.com.br

Nesta janela, clique no boto Procurar...

Navegue at a pasta onde foi descompactado o arquivo .ZIP do Arduino e selecione a pasta
FTDI USB Drivers. Clique no boto OK.

Introduo plataforma Arduino


www.EADuino.com.br

Clique no boto Avanar. Aguarde a atualizao do driver. O seu Arduino j est quase pronto
para ser explorado!

Introduo plataforma Arduino


www.EADuino.com.br

1.3

Testando a placa Arduino

Agora s falta executar o ambiente de desenvolvimento do Arduino para terminar a


configurao inicial.
V at a pasta onde foi descompactado o Arduino e d um duplo clique em arduino.exe.

Aguarde a tela inicial ser exibida.

10

Introduo plataforma Arduino


www.EADuino.com.br

Pronto, o ambiente foi carregado.

Ainda no o momento para explorarmos todas as funcionalidades deste ambiente. Sero


apresentadas mais adiante no momento oportuno. Por agora, faremos apenas o teste inicial da
placa.

11

Introduo plataforma Arduino


www.EADuino.com.br

Acesse o menu Tools e em seguida o item Board.

O software oferece uma lista de placas Arduinos mais comuns. No nosso exemplo, selecione
Arduino Duemilanove or Nano w/ ATmega328.

12

Introduo plataforma Arduino


www.EADuino.com.br

Acesse o item Serial Port.

Ir aparecer uma lista de portas COM ativas do seu computador. Caso o prximo passo
apresente erros, volte a este item e altere a porta. Porm, se voc passou pelo item 1.2 deste
tutorial, j saber qual porta est associada ao Arduino, no ? Se for preciso, volte ao item e
reveja os procedimentos.

13

Introduo plataforma Arduino


www.EADuino.com.br

Agora chegou o momento de verificarmos se a placa a plataforma (hardware e software) est


corretamente configurada.
Acesse o menu File, selecione Examples, 1.Basics, e Blink.

14

Introduo plataforma Arduino


www.EADuino.com.br

Uma nova janela do ambiente ser aberta e com o sketch Blink.

Como dito anteriormente, no se preocupe neste momento em entender o que est escrito.

Clique no boto em destaque (o que est abaixo do menu Help) e aguarde o sketch ser
transferido para a placa.

15

Introduo plataforma Arduino


www.EADuino.com.br

Se tudo estiver corretamente configurado, na parte inferior da tela voc ver a seguinte
mensagem:

Isto nos diz que o programa foi transferido (Done uploading).


Voc dever ver um LED piscando na sua placa Arduino. No mgica, isto ocorre em todas as
placas compatveis. Se voc no sabe o que um LED, no prximo mdulo explicaremos o que
e para que serve este componente.
Caso no tenha tido sucesso, reveja todo este mdulo.

16

Introduo plataforma Arduino


www.EADuino.com.br

Noes de Eletricidade

2.1

Corrente, Tenso e Resistncia

Antes de experimentarmos o Arduino, vamos ver alguns conceitos bsicos de eletricidade.


2.1.1

Corrente

Para que um dispositivo eltrico/eletrnico funcione, necessrio que uma energia denominada
corrente eltrica, flua atravs deste dispositivo.
A corrente eltrica composta por um fluxo de cargas que circulam entre os plos de um
gerador, passando pelos componentes que formam o nosso dispositivo. O caminho fechado
percorrido pela corrente eltrica conhecido como circuito eltrico.
Os condutores so os elementos que permitem a passagem da corrente eltrica.
A unidade de medida o ampre (A) cujo nome foi uma homenagem ao fsico francs AndrMarie Ampre.
Exemplo: Um circuito eltrico simples

2.1.2

pilha = gerador de energia


fio = condutor
lmpada = dispositivo

Tenso

A fora que empurra as cargas pelo circuito conhecida como tenso. Esta fora aparece pela
diferena de cargas positivas e negativas que h nos plos do gerador.
A unidade de medida o volt (V), homenagem ao fsico italiano Alessandro Volta.

2.1.3

Corrente Contnua x Corrente Alternada

Tomando como exemplo uma pilha, notamos que este gerador possui plos fixos (positivo e
negativo). Sendo assim o fluxo de cargas no muda de direo. Este tipo de corrente
conhecido como corrente contnua (DC direct current), pois a corrente circula pelo nosso
circuito num s sentido.
17

Introduo plataforma Arduino


www.EADuino.com.br

Em um gerador de corrente alternada (AC - alternating current) os plos mudam


constantemente e consequentemente, a direo da corrente. Esta direo muda 60 vezes a cada
segundo. Este nmero de ciclos (positivo e negativo) por segundo chamamos de frequncia e a
unidade de medida o hertz (Hz), homenagem ao fsico alemo Heinrich Hertz. Temos ento
que a tenso da rede tem uma frequncia de 60Hz (no Brasil).

O tipo de corrente que chega em nossas residncias a alternada com uma tenso de 110V ou
220V, muito elevada e ainda de tipo diferente de que precisamos para o Arduino e os Shields.
Por isso usamos uma fonte de no mximo 12V ou uma bateria de 9V para alimentar o Arduino.
Se voc est atento a este tutorial, e temos certeza que est, notou que no mdulo 1 testamos a
placa conectado ao computador e no foi preciso uma fonte externa de energia. Isto ocorre
porque o cabo USB contm uma linha de energia de 5V que retira do seu computador e
alimenta a nossa placa. Porm, haver situaes que a corrente exigida por algum componente
conectado a placa Arduino, como exemplo um motor, ser muito maior que a corrente que a
porta USB do seu computador poder fornecer e a nestas situaes, vamos conectar uma fonte
externa de energia.
Em todas as atividades propostas neste tutorial, no ser necessrio o uso de uma fonte externa.
O consumo dos componentes eletrnicos muito baixo e a porta USB do seu computador dar
conta do recado.
Como podemos adquirir um Arduino de diversos fornecedores, temos que apenas prestar
ateno como a placa est configurada para receber a alimentao: atravs do cabo USB ou de
uma fonte externa. Nas placas originais italianas esta seleo automtica. A placa sente se a
fonte de energia vem do cabo USB ou de uma fonte externa. Se ambos estiverem conectados, a
preferncia ser para fonte externa. Acompanhe as fotos seguintes e veja como reconhecer esta
situao.

18

Introduo plataforma Arduino


www.EADuino.com.br

No Arduino original a seleo da fonte de energia automtica.

Em Arduinos de outros fornecedores pode ser necessrio a seleo manual da fonte de energia.
Compare as duas fotos. Notou a inscrio USB e EXT na placa? A seleo vai indicar se a
energia vem da porta USB ou de uma fonte externa.

19

Introduo plataforma Arduino


www.EADuino.com.br

E por falar em fonte externa, esta poder ser de uma bateria de 9V ou de um transformador
entre 9V e 12V de corrente contnua. O transformador responsvel por converter (reduzir) a
tenso de 110V ou 220V, que est presente nas nossas residncias, para uma tenso compativel
com a entrada na placa do Arduino.

Alimentado por uma bateria de 9V.

Se optar por uma fonte com transformador, utilize uma de boa qualidade.

20

Introduo plataforma Arduino


www.EADuino.com.br

Independente da sua opo, importantssimo saber que, a tenso de uma fonte externa seja de
9V ou 12V, ser reduzida para 5V que a tenso efetivamente aceita pelo Arduino. Lembra
quando falamos sobre o cabo USB? Que havia uma linha de 5V presente no cabo? Pois bem,
este o valor de tenso presente em grande parte dos chamados circuitos digitais, que incluem o
seu computador. Ento, apesar de termos uma faixa aceitvel na entrada da placa (entre 9V e
12V), o que realmente usado 5V. Existe um componente responsvel por esta reduo, que
esta logo ao lado da entrada. Veja no detalhe da foto.

2.1.4

Resistncia

Como vimos anteriormente, os condutores permitem a passagem da corrente eltrica. Porm,


no temos um condutor ideal. Um bom condutor, como o cobre, oferece uma baixa resistncia
(oposio) passagem da corrente eltrica. A resistncia eltrica depende do tipo de material e
de suas dimenses, entre outros fatores. Quanto maior a resistncia encontrada no material
condutor, menor ser a intensidade da corrente eltrica.
A unidade de medida o ohm (), homenagem ao fsico alemo Georg Simon Ohm. Ohm
relacionou as trs grandezas (corrente, tenso e resistncia), ou seja, a relao entre o valor da
tenso (V) aplicada a um material e o valor da corrente (I) que percorre este material representa
a sua resistncia eltrica (R), resultando na primeira Lei de Ohm. Mais adiante usaremos esta
frmula.
R = V
--I

Pronto!Estes so os principais conceitos sobre eletricidade. Nos prximos mdulos, a interao


entre os componentes, a placa Arduino e software de desenvolvimento sero apresentados
sempre com uma atividade prtica.

21

Introduo plataforma Arduino


www.EADuino.com.br

2.2

Placa para testes

Vamos usar em nossas atividades, uma placa para testes conhecida como protoboard ou
breadboard ou ainda de matriz de contatos.
Este recurso muito til para iniciantes e at mesmo para projetistas experientes, pois facilita a
montagem dos circuitos eletrnicos sem a necessidade de solda. Desta forma voc pode
reutilizar estes componentes sem a preocupao de danific-los. Naturalmente para projetos
permanentes este no um recurso recomendvel, mas esta uma histria para outro tutorial.

Nas protoboards, os contatos esto interligados desta maneira:

Nos furos centrais, que so as linhas numeradas de 1 a 28 neste exemplo, estas linhas esto
interligadas ou em curto e nas laterais as linhas tambm esto interligadas, mas toda a linha.

22

Introduo plataforma Arduino


www.EADuino.com.br

Atividades

Ao escrever este tutorial pensamos em algo como aprender fazendo. Os conceitos vo sendo
apresentados e associados a uma atividade prtica. Acreditamos que as pessoas, que no
conhecem a plataforma Arduino e/ou no so da rea de eletrnica e computao, tero a
oportunidade de aprender e usar esta tecnologia. Ao longo das atividades propostas, vamos
suprimindo algumas telas e instrues que j foram explicadas.
Ser necessrio providenciar o seguinte material para poder acompanhar todas as atividades
prticas propostas:

um Arduino compatvel com a verso Duemilanove ou Uno


um cabo USB do tipo A / B
uma breadboard/protoboard pequena
diversos fios jumpers
cinco resistores de 220 ohms
um resistor de 10K ohms
um resistor de 100K ohms
um NTC 10K ohms
um LDR de 10mm
dois LEDs verdes (qualquer tamanho)
dois LEDs vermelhos (qualquer tamanho)
um LED amarelo (qualquer tamanho)
uma chave tctil

Exceto o Arduino, todos os outros componentes so muito fceis de serem encontrados no


mercado de componentes eletrnicos. Visite o site abaixo para sugestes de onde
encontrar/comprar:

http://www.eaduino.com.br

Divirta-se!

23

Introduo plataforma Arduino


www.EADuino.com.br

3.1

Atividade 1 - Acendendo um LED

Nesta atividade voc aprender a reconhecer e usar os seguintes componentes eletrnicos:


o resistor;
o diodo emissor de luz (LED).
3.1.1

Resistor

O resistor o componente utilizado para limitar a passagem da corrente eltrica. Os resistores


so feitos com material condutor de alta resistividade eltrica e dissipam esta energia eltrica na
forma de calor. A unidade de medida o ohm ().
Os resistores, de uso geral, so pequenos e os valores destes componentes esto codificados na
forma de anis coloridos.

O primeiro, segundo e terceiro anis so os nmeros que indicam o valor do componente. O


quarto anel indica o fator (percentual) de tolerncia do componente quanto ao seu valor. Isto
quer dizer que quanto maior for o fator, menor ser a sua preciso.

24

Introduo plataforma Arduino


www.EADuino.com.br

A leitura feita segundo a tabela a seguir:

Cor do anel

Anel 1

Anel 2

Anel 3
(multiplicador)

Anel 4
(tolerncia)

Preto

Marrom

10

1%

Vermelho

100

2%

Laranja

1000

3%

Amarelo

10000

4%

Verde

100000

Azul

10000000

Violeta

Cinza

Branco

Prata

0,01

10%

Dourado

0,1

5%

Com base nesta tabela, voc conseguiria dizer qual o valor/tolerncia deste resistor?

Anel 1 = amarelo
Anel 2 = violeta
Anel 3 = marrom
Anel 4 = dourado
Veja na pgina seguinte.

25

Introduo plataforma Arduino


www.EADuino.com.br

Resultado: 470 com 5% de tolerncia, quer dizer, pode variar para cima ou para baixo em 5%
o valor da resistncia.
Resistores que possuem valores muito altos so expressos pelos seus mltiplos. Os mltiplos do
ohm mais encontrados nos circuitos so: quiloohm (K) e megaohm (M).
Ento, um resistor de 1000 indicado como 1K . muito comum tambm que um resistor
de 4700 seja indicado como 4K7 .
No se preocupe, com o manuseio deste componente voc vai adquirir a prtica da leitura.

3.1.2

LED

O LED (Light Emitting Diode Diodo Emissor de Luz) um componente eletrnico que emite
luz visvel (exceto LEDs infravermelhos e ultravioletas) quando conduz a corrente no sentido
direto, isto significa que um componente que tem que ser ligado corretamente para que
funcione.
O terminal positivo o anodo e o terminal negativo o catodo, representado geralmente nos
circuitos respectivamente pelas letras A e K.
Os LEDs so produzidos nos mais variados tamanhos e formatos. Os mais comuns so os
redondos de 5mm e 3mm. Na foto, temos um no muito comum: o chato.

Nos LEDs, normalmente, podemos identificar visualmente qual o terminal (lead) positivo pelo
seu comprimento mais longo que o negativo. Outra maneira, notar que um lado do componente
chanfrado, indicando o terminal negativo.

26

Introduo plataforma Arduino


www.EADuino.com.br

3.1.3

O resistor como limitador de corrente

Para que um LED comece a conduzir temos que ter uma tenso mnima de aproximadamente
2V. Tenses abaixo deste valor no conseguem fazer o LED funcionar. Quando o LED comea
a conduzir, este apresenta uma resistncia muito baixa e se no limitarmos a corrente que
circula pelo LED, fatalmente o componente ser danificado.
A corrente mxima suportada pelos LEDs est em torno de 50mA. Utilize de 10mA a 20mA
para uma operao segura. Para limitarmos esta corrente usaremos o resistor e o seu valor ser
obtido por uma frmula bem simples (lei de Ohm). O resultado ser em ohms.
Pronto para a primeira atividade?
Verifique se j est com o software Arduino carregado e placa Arduino conectado ao seu
computador via cabo USB.

27

Introduo plataforma Arduino


www.EADuino.com.br

O diagrama abaixo a representao esquemtica do circuito. Se voc no est familiarizado


com esquemas eletrnicos, com a prtica vai ficar mais fcil de interpret-la. Sempre que tiver
dvidas com a interligao dos componentes, recorra ao diagrama.

Primeiro vamos montar o circuito. Separe os seguintes componentes:

um resistor de 220 ohms (vermelho, vermelho e marrom)

um LED vermelho

28

Introduo plataforma Arduino


www.EADuino.com.br

A figura seguinte a uma placa Arduino conectada a protoboard com os respectivos


componentes. Tente associar o esquema anterior com o desenho abaixo.

Tente posicionar a sua placa Arduino e a protoboard conforme o desenho acima.


Coloque os componentes como no desenho. O resistor no tem lado certo para ser ligado. O
terminal mais longo do LED ligado na mesma trilha da outra extremidade do resistor. Por fim
ligue os fios jumpers:

uma ponta do fio laranja vai no pino 9 da placa e a outra ponta na extremidade livre do
resistor.

uma ponta do fio preto vai no pino Gnd da placa e a outra ponta na extremidade livre do
LED.

29

Introduo plataforma Arduino


www.EADuino.com.br

Agora iremos criar o programa que far o LED acender.


Inicie o ambiente de desenvolvimento do Arduino, que a partir de agora chamaremos de IDE
(Integrated Development Environment - ambiente integrado de desenvolvimento). A IDE do
Arduino permite editar, verificar, compilar (traduzir o programa para um formato que o Arduino
entenda) e transferir o programa (sketch) j verificado para a placa.
3.1.4

Estrutura de um sketch

Toda linguagem de programao, inclusive a linguagem do Arduino, possui regras na escrita


(codificao) que devem ser respeitadas. Muita ateno deve ser dada se a palavra reservada da
linguagem possuir caracteres maisculos ou minsculos. Escreva exatamente como descrito.
Como j falamos, no universo Arduino, um programa chamado de sketch. Todo sketch possui
uma estrutura mnima para poder funcionar. Devemos inserir dois blocos ou funes: setup() e
loop().
3.1.5

setup()

Este bloco executado logo aps o inicio do sketch. O que estiver no bloco setup(), executado
apenas uma vez, ou toda vez que o Arduino for reiniciado (pressionando um boto especfico na
placa ou quando da falta de energia).
3.1.6

loop()

Aps a execuo do bloco setup(), o controle do programa vai para o bloco loop() e como o
nome sugere, fica eternamente neste bloco. Aqui, efetivamente, instrumos o Arduino a fazer
o que queremos.
Pronto para iniciar?
Com a IDE do Arduino aberta, digite o cdigo a seguir, exatamente como escrito, respeitando
caractere minsculo ou maisculo e os sinais de pontuao. O texto, para facilitar a leitura,
contm cores e caracteres formatados (negrito e/ou itlico). No leve isto em considerao na
hora de digitar. Aps a execuo do sketch vamos explicar detalhadamente cada linha.
/*
Atividade 1
*/
void setup() {
// configura o pino 9 como saida
pinMode(9, OUTPUT);
}
void loop() {
// envia nivel alto para o pino 9
digitalWrite(9, HIGH);
}
Sketch Atividade 1 - Acendendo um LED

30

Introduo plataforma Arduino


www.EADuino.com.br

Vamos verificar se no h erros de digitao. Na barra de botes do IDE, clique com o boto
esquerdo do mouse no cone como indicado na figura abaixo.

Se no houver erros, no rodap da tela do IDE aparecer:

A informao nos diz que a compilao foi feita e o sketch ocupa 798 bytes.
Caso aparea algum erro, reveja o sketch digitado.

31

Introduo plataforma Arduino


www.EADuino.com.br

Importante! Este boto apenas faz a verificao. O sketch at este momento ainda no foi
transferido para a placa.
Para transferir, clique com o boto esquerdo do mouse no cone como indicado na figura abaixo.

No rodap temos a informao que a aplicao foi transferida (Done uploading).


Caso ocorra algum erro, reveja Semana um para verificar as configuraes da placa.
O resultado esperado que o LED fique aceso.

32

Introduo plataforma Arduino


www.EADuino.com.br

Vamos salvar o sketch. Acesse o menu File e selecione Save As..., escolha uma pasta qualquer
no seu computador e d o nome de atividade1. Clique no boto Salvar.

33

Introduo plataforma Arduino


www.EADuino.com.br

Agora vamos explicar o cdigo.


3.1.7

Comentrios

/*...*/
//
Na linguagem Arduino, estes caracteres indicam que o texto que est entre os caracteres /* e */,
e aps // devem ser ignorados pelo compilador, pois so apenas comentrios inseridos no sketch
e o mais importante que estes comentrios no ocupam espao na memria do Arduino. Ento,
use e abuse de comentrios. Isto nos ajuda a documentar o programa, fazendo com que qualquer
outra pessoa possa entender o propsito do sketch.
3.1.8

setup()

void setup() {
}
Este bloco ou funo, como comentado anteriormente, executado apenas uma vez quando o
sketch iniciado. Podemos entend-lo como um bloco de configurao inicial do nosso
hardware. A palavra void que antecede o nome da funo obrigatria e no ser objeto de
estudo neste tutorial introdutrio.
Importante! Toda funo na linguagem Arduino, comea e termina por abre e fecha chaves.
pinMode( pino , INPUT|OUTPUT )
Este comando indica ao Arduino como queremos que ele atue no nosso circuito. Arduinos
Duemilaenove e Uno, e seus compatveis, utilizam atualmente o microcontrolador
ATMEGA328P. Temos a disposio 14 pinos digitais configurveis como entrada ou sada e 6
pinos analgicos de entrada. Ento a declarao: pinMode(9, OUTPUT); configura o pino 9
como sada.
Importante! Toda declarao na linguagem Arduino termina com ponto e vrgula.
3.1.9

loop()

void loop() {
}
Esta funo executa eternamente os comandos que estiverem no bloco. Este lao s
interrompido se houver falta e posterior retorno de energia ou se voc pressionar o boto reset
presente na placa. Este o bloco que faremos a leitura de sensores, comandaremos luzes,
ligaremos motores, etc.

34

Introduo plataforma Arduino


www.EADuino.com.br

3.1.10 digitalWrite()
digitalWrite( pino , HIGH|LOW )
Esta funo envia um nvel alto (high) ou baixo (low) para o pino informado. Toda a lgica que
comanda o Arduino e os circuitos digitais dada atravs de nveis de tenso que vo indicar
nvel alto ou baixo. Por exemplo: se enviarmos um nvel alto para um pino, teremos neste pino
5V e se enviarmos um nvel baixo, teremos 0V. Ento a declarao: digitalWrite(9,
HIGH); envia para o pino 9 uma tenso de 5V. Isto faz com que o nosso LED acenda!
Voltando ao nosso circuito, podemos calcular a corrente (I) que passa pelo nosso LED.
R = V
--I

Ou
I = V
--R

Antes de aplicarmos a frmula preciso saber que os LEDs apresentam uma queda de tenso
em seus terminais, que variam conforme a cor, tipo e fabricante. De um modo geral, para
aplicaes com o Arduino, podemos assumir um valor mdio de 2V.
Substituindo pelos valores presentes no circuito, temos
I = (5V 2V)
--------220

A corrente que ir passar pelo LED, usando um resistor de 220, ser de 0,013A (ampre) ou
13mA (multiplicamos por 1000 para obter mili ampre).

35

Introduo plataforma Arduino


www.EADuino.com.br

3.2

Atividade 2 - Pisca LED

Nesta atividade usaremos componentes eletrnicos j conhecidos:


o resistor;
o diodo emissor de luz (LED).
Monte o mesmo circuito apresentado na atividade 1 e digite o sketch abaixo.
/*
Atividade 2
*/
int pinoLED = 9;
void setup() {
// configura o pino como saida
pinMode(pinoLED, OUTPUT);
}
void loop() {
// envia nivel alto para o pino
digitalWrite(pinoLED, HIGH);
// aguarda 1 segundo
delay(1000);
// envia nivel baixo para o pino
digitalWrite(pinoLED, LOW);
// aguarda 1 segundo
delay(1000);
}
Sketch Atividade 2 - Pisca LED

Transfira o sketch para a placa (boto Upload).

Dica. Na atividade anterior solicitamos a IDE fazer a verificao (Verify) do sketch e somente
depois transferimos para a placa. Com o tempo, voc poder abreviar este procedimento
optando apenas pelo Upload. Qualquer anormalidade ser indicada no rodap da interface.
Se no houver erros, o LED dever piscar.
Vamos salvar o sketch. Acesse o menu File e selecione Save As..., escolha uma pasta qualquer
no seu computador e d o nome de atividade2. Clique no boto Salvar.

36

Introduo plataforma Arduino


www.EADuino.com.br

Agora vamos explicar o cdigo.


3.2.1

Variveis

<tipo> <nome> = valor


As variveis so locais na memria do microcontrolador para guardar dados enquanto o
sketch estiver sendo executado. Como o nome diz, podemos alterar este dado na hora
que convier. Na linguagem Arduino as variveis possuem um tipo, nome e
opcionalmente o sinal de atribuio (=) e valor, e devem ser declaradas antes do seu
uso.
Na declarao int pinoLED = 9; diz que criamos uma varivel de nome pinoLED do tipo
int (inteiro), cujo valor 9.

Variveis auxiliam muito o programador, permitindo que trabalhemos com dados que
so alterados todo momento. Exemplo: um sensor de temperatura ou um sensor de luz
envia um dado atravs de um pino para o programa, informando o seu valor. Este valor
armazenado em uma varivel para posteriormente fazermos um clculo, acionarmos
um outro dispositivo, imprimirmos o valor na tela do computador, etc.
Algumas sugestes com relao ao nome:

No use apenas um caractere para nomear uma varivel. Exemplo: x


D nomes que faam sentido ao projeto ou o trecho de cdigo que est sendo
desenvolvido. Exemplo: apagarLuz
Cuidado com palavras da lngua inglesa. Voc pode, sem querer, usar um nome
reservado para a linguagem Arduino.

Quanto ao tipo, a seguir apresentaremos os principais tipos (que sero usados neste
tutorial).
A linguagem Arduino muito poderosa e se voc quiser conhecer todos os tipos, visite:
http://www.arduino.cc/en/Reference/HomePage (item Data Types)

37

Introduo plataforma Arduino


www.EADuino.com.br

3.2.2

int

Um tipo int (inteiro) pode manipular nmeros na faixa de -32.768 at 32.767. No sketch, a
declarao est armazenando o inteiro 9 na varivel pinoLED.

No momento voc precisa saber de mais uma coisa. Notou que a declarao da varivel
foi feito fora do bloco setup() e loop()?
Na linguagem Arduino, temos o conceito de escopo (abrangncia) de variveis. De uma
maneira bem simples, quando declaramos variveis fora de qualquer bloco, estas so
chamadas globais e se declaradas dentro de algum bloco, de locais. Quando uma
varivel global declarada, esta pode ser manipulada em qualquer parte do sketch, ao
contrrio das locais, que so apenas vistas dentro do bloco que a criou.
Na declarao pinMode(pinoLED, OUTPUT); pinoLED uma varivel global e por isto
pode ser usada dentro do bloco setup(). Durante a execuo, o Arduino substitui o nome desta
varivel pelo seu valor, no caso 9.
3.2.3

delay()

delay( tempo )
Esta funo pausa a execuo do sketch durante o tempo informado. O parmetro tempo em
mili segundos, ou seja, a declarao delay(1000); pausa a execuo por 1 segundo.
Concluindo. No bloco loop(), o Arduino envia 5V para o pino 9, aguarda 1 segundo e envia 0V
para o pino 9. Com isto temos o efeito de pisca-pisca.

38

Introduo plataforma Arduino


www.EADuino.com.br

Atividade 3 - Controle de Luminosidade de LEDs

Nesta atividade usaremos componentes eletrnicos j conhecidos:


o resistor;
o diodo emissor de luz (LED).
O diagrama abaixo a representao esquemtica do circuito.

Separe os seguintes componentes:

trs resistores de 220 ohms

um LED vermelho

um LED amarelo

um LED verde

39

Introduo plataforma Arduino


www.EADuino.com.br

A figura seguinte a placa Arduino conectada a protoboard com os respectivos componentes.


Tente associar o esquema anterior com o desenho abaixo.

Digite o sketch abaixo e transfira para a placa Arduino.


/*
Atividade 3
*/
int pinoLEDvermelho = 5;
int pinoLEDamarelo = 6;
int pinoLEDverde
= 9;
int brilho;
void setup() {
pinMode(pinoLEDvermelho, OUTPUT);
pinMode(pinoLEDamarelo, OUTPUT);
pinMode(pinoLEDverde, OUTPUT);
}
void loop() {
// aumenta o brilho dos LEDs, incrementando de 5
for( brilho = 0 ; brilho <= 255; brilho = brilho
analogWrite(pinoLEDvermelho, brilho);
analogWrite(pinoLEDamarelo, brilho);
analogWrite(pinoLEDverde, brilho);
// aguarda 30 milisegundos
delay(30);
}
// diminui o brilho dos LEDs, decrementando de 5
for( brilho = 255 ; brilho >= 0; brilho = brilho
analogWrite(pinoLEDvermelho, brilho);
analogWrite(pinoLEDamarelo, brilho);
analogWrite(pinoLEDverde, brilho);
// aguarda 30 milisegundos
delay(30);
}
}

em 5 passos
+ 5) {

em 5 passos
- 5) {

Sketch Atividade 3

40

Introduo plataforma Arduino


www.EADuino.com.br

Salve o sketch com o nome atividade3. O resultado esperado aumentar e diminuir o brilho dos trs
LEDs de forma gradativa.

Aps a declarao das variveis globais, o bloco setup() configura os pinos representados pelas
variveis como sada.
No bloco loop(), usamos uma estrutura de repetio que faro os trs LEDs aumentarem de
brilho e em seguida, uma outra estrutura de repetio faro os trs LEDs diminurem o brilho.

4.1

for()

for( incio ; condio ; incremento ) {


}
A estrutura for uma das mais versteis da linguagem Arduino. As declaraes (dentro deste
bloco) so repetidas at que a condio estabelecida seja verdadeira.
No nosso sketch,
for( brilho = 0 ; brilho <= 255; brilho = brilho + 5) {
}

Atribui o valor 0 para a varivel brilho e enquanto a varivel menor ou igual ao valor 255, o
que est dentro do bloco executado. Ao encontrar fecha chaves, a varivel brilho
incrementada (o seu valor acrescido) de cinco em cinco. Isto repetido at que a varivel
brilho atinja o valor de 255.
E a estrutura,
for( brilho = 255 ; brilho >= 0; brilho = brilho - 5) {
}

Faz o inverso da anterior, a cada passagem a varivel brilho vai sendo decrementada (o seu
valor diminudo) de cinco em cinco at que a varivel brilho atinja o valor 0.
4.2

Operadores

Nesta estrutura tambm vimos algo novo, o operador relacional <= (menor ou igual). A
linguagem Arduino possui os seguintes operadores relacionais:

== (igual a)
!= (diferente)
< (menor que)
> (maior que)
<= (menor ou igual a)
>= (maior ou igual a)

Estes operadores permitem fazermos comparaes entre uma varivel e um valor ou entre
variveis.

41

Introduo plataforma Arduino


www.EADuino.com.br

Importante! Muito cuidado com o operador ==(igual a). No confunda com o sinal = que
indica atribuio. Este um tipo de engano que podemos levar horas para descobrir a razo do
programa no funcionar como esperado.
Aplicamos tambm os operadores aritmticos + (adio) e (subtrao). A linguagem Arduino
possui os seguintes operadores aritmticos:

4.3

+
*
/
%

(adio)
(subtrao)
(multiplicao)
(diviso)
(mdulo resto da diviso)

analogWrite()

analogWrite( pino , valor PWM )


Nas atividades anteriores enviamos um sinal digital (HIGH ou LOW) para um pino atravs da
funo digitalWrite(). Pois bem, esta funo apenas envia um de dois estados possveis: alto ou
baixo que representam respectivamente 5V ou 0V. Porm, nesta atividade, usamos um efeito
conhecido como fade in (a intensidade do brilho vai aumentando) e fade out (a intensidade do
brilho vai diminuindo) e neste caso, no poderamos usar um sinal digital, pois no
conseguiramos o meio termo.
Nestes casos onde precisamos enviar um sinal gradativo para o pino, temos a funo
analogWrite(). Esta funo utiliza uma tcnica conhecida como PWM (pulse width modulation
modulao por largura de pulso). O importante saber por agora que o sinal PWM varia de 0
a 255, sendo que 0 corresponde a 0V e 255 a 5V. Qualquer valor intermedirio vai gerar uma
tenso proporcional a este valor. Exemplos:
Valor PWM
0
64
127
191
255

Volts
0
1,25
2,5
3,75
5

42

Introduo plataforma Arduino


www.EADuino.com.br

No Arduino, no so em todos os pinos que podemos usar o recurso PWM. Nos Arduinos
Duemilanove, UNO e compatveis, somente nos pinos digitais 3, 5, 6, 9, 10 e 11, temos esta
funo.

Ento, nas declaraes


analogWrite(pinoLEDvermelho, brilho);
analogWrite(pinoLEDamarelo, brilho);
analogWrite(pinoLEDverde, brilho);

enviamos para os pinos representados pelas variveis pinoLEDvermelho, pinoLEDamarelo e


pinoLEDverde, o valor contido na varivel brilho, que representa o valor PWM que queremos
escrever no pino.

43

Introduo plataforma Arduino


www.EADuino.com.br

Atividade 4 - Ligando/Desligando um LED atravs de uma chave

Nesta atividade usaremos um novo componente:


chave tctil.
E os j conhecidos:
o resistor;
o LED.
5.1

Chave Tctil

um tipo de chave que, enquanto o boto estiver pressionado, o circuito estar ativo e ao soltar
o boto, o circuito interrompido, ou seja, este tipo de chave no tem trava.

O diagrama abaixo a representao esquemtica do circuito.

44

Introduo plataforma Arduino


www.EADuino.com.br

Separe os seguintes componentes:

um resistor de 220 ohms

um resistor de 10K ohms

um LED verde

uma chave tctil

A figura seguinte a placa Arduino conectada a protoboard com os respectivos componentes.


Tente associar o esquema anterior com o desenho abaixo.

45

Introduo plataforma Arduino


www.EADuino.com.br

Digite o sketch abaixo e transfira para a placa Arduino.

/*
Atividade 4
*/
int pinoBotao = 2;
int pinoLED
= 5;
// variavel para ler o estado do botao (chave tactil)
int estadoBotao = 0;
void setup() {
// configura o pino como saida
pinMode(pinoLED, OUTPUT);
// configura o pino como entrada
pinMode(pinoBotao, INPUT);
}
void loop(){
// le o estado do botao
estadoBotao = digitalRead(pinoBotao);
// verifica se botao foi pressionado
if (estadoBotao == HIGH) {
// se sim, acende o LED
digitalWrite(pinoLED, HIGH);
}
else {
// caso contrario, apaga o LED
digitalWrite(pinoLED, LOW);
}
}
Sketch Atividade 4

Salve o sketch com o nome atividade4. O resultado esperado ao se pressionar o boto, o LED
se acender.
Aps a declarao das variveis globais, o bloco setup() configura os pinos representados pelas
variveis como sada para o LED e como entrada para o boto.
No bloco loop(), usamos uma estrutura condicional que far o teste se o boto foi pressionado.
Se sim, o LED vai acender.

46

Introduo plataforma Arduino


www.EADuino.com.br

5.2

digitalRead()

digitalRead( pino )
Esta funo l o valor presente no pino indicado. A declarao estadoBotao =
digitalRead(pinoBotao); armazena na varivel pinoBotao um de dois estados possveis:
HIGH (5V) ou LOW (0V).

5.3

if()

if( condio verdadeira ) {


}
else {
}
Esta estrutura avalia a condio estabelecida no comando. Caso ela seja verdadeira, isto , se o
resultado da avaliao atender a condio colocada por voc, as declaraes que estiverem
dentro do bloco sero executadas. A estrutura if() possui um elemento auxiliar, opcional, que
a condio contrria a avaliao feita pelo if(), ou seja, se a condio for falsa as declaraes
que estiverem dentro do bloco else sero executadas.
Ento,
if (estadoBotao == HIGH) {
// se sim, acende o LED
digitalWrite(pinoLED, HIGH);
}
else {
// caso contrario, apaga o LED
digitalWrite(pinoLED, LOW);
}

testa se a varivel estadoBotao igual a HIGH. Se sim, coloca nvel alto no pino representado
pela varivel pinoLED, caso contrrio, coloca nvel baixo no pino.
Importante! Ateno mais uma vez ao sinal == que representa o operador de comparao.

5.4

Resistores pull-up / pull-down

Quando voc faz a leitura de um pino e neste pino no h nada conectado, ou seja, no h um
sinal alto ou baixo definido, o microcontrolador fica em um estado conhecido como flutuante.
Nestes casos, para garantir um correto estado na entrada do pino usamos um resistor, que
dependendo da posio em que ligado chamado de pull-up ou pull-down.
Este resistor tem a funo de limitar a corrente que flui pelo circuito.

47

Introduo plataforma Arduino


www.EADuino.com.br

No diagrama abaixo temos um resistor na configurao pull-up.

Sem pressionar o boto, a corrente circula pelo resistor at o pino, garantindo o nvel alto (5V).
Quando o boto pressionado, a corrente desviada para terra e assim garantindo o nvel baixo
(0V) neste mesmo pino.
E se o resistor no existisse? Veja a figura a seguir.

Sem pressionar o boto, temos a mesma situao anterior, nvel alto (5V). Porm, quando o
boto pressionado, a corrente desviada para terra sem limite de corrente, ocorrendo a
situao de curto-circuito.

48

Introduo plataforma Arduino


www.EADuino.com.br

Isto pode provocar o esgotamento da fonte de energia (no caso de uma bateria), aumento da
temperatura nos condutores ou at mesmo danificar o pino do microcontrolador.

O valor do resistor comumente encontrado nos circuitos de 10K ohms.


Na nossa atividade, o resistor est configurado com pull-down apenas para simplificar o sketch
e ter uma situao prxima do nosso cotidiano. Normalmente pressionamos um boto ou
interruptor para acender uma lmpada, no ?!
Nesta situao temos a seguinte configurao: boto pressionado, LED aceso, caso contrrio
LED apagado. Em caso de dvidas, reveja o diagrama desta atividade.

49

Introduo plataforma Arduino


www.EADuino.com.br

Atividade 5 - Controle de luminosidade de LED com LDR

Nesta atividade voc aprender a reconhecer e usar o seguinte componente eletrnico:


O LDR.
E os j conhecidos:
o resistor;
o LED.

6.1

LDR

LDR (Light Dependent Resistor - Resistor Dependente de Luz) um tipo de resistor cuja
resistncia varia conforme a intensidade de luz que incide sobre ele. Quanto maior a
intensidade, menor a resistncia. A resposta do LDR lenta, ou seja, no capaz de detectar
mudanas rpidas da intensidade da luz.

Este componente no requer cuidados especiais. No h polaridade, isto , no possui um lado


certo para lig-lo.

50

Introduo plataforma Arduino


www.EADuino.com.br

O diagrama abaixo a representao esquemtica do circuito.

Separe os seguintes componentes:

um resistor de 220 ohms

um resistor de 100K ohms

um LED vermelho

um LDR

51

Introduo plataforma Arduino


www.EADuino.com.br

A figura seguinte a placa Arduino conectada a protoboard com os respectivos componentes.


Tente associar o esquema anterior com o desenho abaixo.

Digite o sketch abaixo e transfira para a placa Arduino.


/*
Atividade 5
*/
int pinoLED = 9;
int pinoLDR = 0;
float tensaoLida = 0;
int saidaPWM = 0;
void setup()
{
pinMode(pinoLED, OUTPUT);
pinMode(pinoLDR, INPUT);
}
void loop()
{
//--- valor lido sera entre 0 e 1023, cada unidade corresponde a
0.0048828125 volts ou arredondando: 0.0049
tensaoLida = analogRead( pinoLDR ) * 0.0049;
//--- dividindo 5 volts por 255 temos 0.0196 volts para cada unidade
PWM
saidaPWM = 255 - (tensaoLida / 0.0196);
analogWrite( pinoLED, saidaPWM );
}
Sketch Atividade 5

52

Introduo plataforma Arduino


www.EADuino.com.br

Salve o sketch com o nome atividade5. O resultado esperado ser o LED aumentar o brilho ao
diminuir a intensidade de luz sobre o LDR.

6.2

float

At o momento usamos apenas o tipo de dado int. Nesta atividade foi necessrio usar o tipo
float, que permite manipular nmeros em ponto flutuante (ponto decimal). Use somente este
tipo de dado onde nmeros inteiros no se aplicam.
Voc vai entender a necessidade de usar o tipo float na funo analogRead().
6.3

analogRead()

analogRead( pino)
Esta funo l o valor presente no pino indicado. Diferentemente de digitalRead() que l
somente um valor alto ou baixo, analogRead() l um valor de 0 a 1023 que representa
proporcionalmente um valor de tenso, sendo que 0 representa 0V e 1023 representa 5V. Assim,
cada unidade representa 0.004882V (5V dividido por 1024). Em muitas publicaes sobre o
Arduino, o valor est arredondado para 0.0049V. Para manipular valores como este, temos que
usar o tipo de dado float.
Nos Arduinos Duemilanove, UNO e seus compatveis, temos 6 pinos de entrada analgicos. A
resoluo (a grandeza que pode ser medida) destas entradas 10bits. Sabendo que cada bit s
pode possuir um de dois estados, alto e baixo, ento, 2 elevado a 10 resulta em 1024 (0 a 1023).

53

Introduo plataforma Arduino


www.EADuino.com.br

Atividade 6 - Simulando um semforo

Nesta atividade usaremos componentes eletrnicos j conhecidos:


o resistor;
a chave tctil;
o diodo emissor de luz (LED).

O diagrama abaixo a representao esquemtica do circuito.

54

Introduo plataforma Arduino


www.EADuino.com.br

Separe os seguintes componentes:

cinco resistores de 220 ohms

um resistor de 10K ohms

dois LEDs verdes

dois LEDS vermelhos

um LED amarelo

uma chave tctil

A figura seguinte a placa Arduino conectada a protoboard com os respectivos componentes.


Tente associar o esquema anterior com o desenho abaixo.

55

Introduo plataforma Arduino


www.EADuino.com.br

Digite o sketch abaixo e transfira para a placa Arduino.


/*
Atividade 6
*/

int
int
int
int
int
int

pinoLEDvermelho
pinoLEDamarelo
pinoLEDverde
pinoLEDvermelho_pedestre
pinoLEDverde_pedestre
pinoBotao

=
=
=
=
=
=

5;
6;
9;
11;
12;
2;

int estadoBotao = 0;
void setup() {
// pinos de saida

pinMode(pinoLEDvermelho, OUTPUT);
pinMode(pinoLEDamarelo, OUTPUT);
pinMode(pinoLEDverde,
OUTPUT);
pinMode(pinoLEDvermelho_pedestre, OUTPUT);
pinMode(pinoLEDverde_pedestre,
OUTPUT);
// pino de entrada

pinMode(pinoBotao, INPUT);
}
void loop(){
digitalWrite(pinoLEDvermelho_pedestre, HIGH);
digitalWrite(pinoLEDverde, HIGH);
// le o estado do botao

estadoBotao = digitalRead(pinoBotao);
// verifica se botao foi pressionado

if (estadoBotao == HIGH) {
// semaforo veiculos
// aguarda 1 minuto (60000 segundos)

delay(60000);
// apaga LED verde

digitalWrite(pinoLEDverde, LOW);
// acende LED amarelo

digitalWrite(pinoLEDamarelo, HIGH);
// aguarda 15 segundos

delay(15000);
// apaga LED amarelo

digitalWrite(pinoLEDamarelo, LOW);
// acende LED vermelho

digitalWrite(pinoLEDvermelho, HIGH);
// semaforo pedestres
// apaga LED vermelho

digitalWrite(pinoLEDvermelho_pedestre, LOW);
// acende LED verde

digitalWrite(pinoLEDverde_pedestre, HIGH);
// aguarda 30 segundos

delay(30000);
// apaga LED verde

digitalWrite(pinoLEDverde_pedestre, LOW);
// pisca LED vermelho 3 vezes

for( int contador = 0; contador <= 3; contador++ ) {


digitalWrite(pinoLEDvermelho_pedestre, HIGH);

56

Introduo plataforma Arduino


www.EADuino.com.br

delay(500);
digitalWrite(pinoLEDvermelho_pedestre, LOW);
delay(500);
}
// apaga LED vermelho

digitalWrite(pinoLEDvermelho, LOW);
}
}
Sketch Atividade 6

Salve o sketch com o nome atividade6. O resultado esperado ao se pressionar o boto


(pedestre), o sketch aguarda 1 minuto, apaga LED verde, acende LED amarelo, aguarda 15
segundos, apaga LED amarelo, acende LED vermelho e ao atingir esta condio, o LED
vermelho do pedestre apaga e acende LED verde do pedestre. O sketch aguarda 30 segundos,
apaga LED verde do pedestre e o LED vermelho do pedestre comea a piscar.

Atividade 7 Medindo Temperaturas com NTC

Nesta atividade voc aprender a reconhecer e usar o seguinte componente eletrnico:


o NTC.
E o j conhecido:
resistor.

Para encerrarmos este tutorial, propomos uma atividade bem simples em sua montagem, porm
com conceitos que, juntamente com as atividades anteriores, daro a certeza de que o Arduino
uma plataforma simples, disponvel para pessoas sem contato no dia-a-dia com a eletrnica e
computao e capazes de realizar projetos no mundo real.

8.1

NTC

O NTC (Negative Temperature Coefficient Coeficiente Negativo de Temperatura) um


componente eletrnico (termistor) sensvel a temperatura. Conforme a temperatura aumenta,
a sua resistncia diminui.
Alguns tipos de NTC

57

Introduo plataforma Arduino


www.EADuino.com.br

Para um valor mais preciso da temperatura, aplica-se a equao Steinhart-Hart. Para quem
gosta de clculos, visite:

http://en.wikipedia.org/wiki/Steinhart%E2%80%93Hart_equation

Nesta atividade simplificamos esta equao, que est disponvel na ntegra em:

http://www.arduino.cc/playground/ComponentLib/Thermistor2

O diagrama abaixo a representao esquemtica do circuito.

Separe os seguintes componentes:

um resistor de 10K ohms

um NTC de 10K ohms


58

Introduo plataforma Arduino


www.EADuino.com.br

A figura seguinte a placa Arduino conectada a protoboard com os respectivos componentes.


Tente associar o esquema anterior com o desenho abaixo.

Digite o sketch abaixo e transfira para a placa Arduino.


/*
atividade 7
*/
#include <math.h>
int pinoNTC

= 4;

int valorLido = 0;
double termistorNTC(int valorAnalogico) {
double temperatura;
temperatura = log(((10240000/valorAnalogico) - 10000));
temperatura = 1 / (0.001129148 + (0.000234125 * temperatura) +
(0.0000000876741 * temperatura * temperatura * temperatura));
//--- converte Kelvin em Celcius
temperatura = temperatura - 273.15;
return temperatura;
}
void setup() {
pinMode(pinoNTC, INPUT);
Serial.begin(9600);
delay(5000);
}
void loop() {
valorLido = int(termistorNTC(analogRead(pinoNTC)));
Serial.println( valorLido );
delay(1000);
}
Sketch Atividade 7

59

Introduo plataforma Arduino


www.EADuino.com.br

Salve o sketch com o nome atividade7. O resultado esperado ler a temperatura ambiente e
mostr-la no monitor serial da IDE do Arduino. Para isto, ao final da transferncia do programa,
necessrio clicar no boto Serial Monitor como indicado na figura abaixo.

Ao iniciar o sketch, o bloco setup() configura o pino que est ligado o NTC como entrada e
define a velocidade de comunicao com a sada serial. Aguarda 5 segundos e transfere o
controle para o bloco loop(). Este por sua vez chama a funo termistorNTC, passando para
esta funo o valor informado pelo NTC. A funo faz o clculo, convertendo em graus Celcius,
e devolve o valor calculado para a varivel valorLido. Apresenta na tela do monitor serial este
valor, aguarda 1 segundo e re-inicia o ciclo.
Agora vamos explicar as novidades nesta atividade.
8.2

#include

#include <nome do arquivo>


#include uma diretiva da linguagem Arduino que instrui a IDE, no momento de verificar e/ou
transferir o sketch para a placa, de incluir o arquivo indicado. Ento, #include <math.h>
inclui o arquivo math.h no nosso sketch. Nesta atividade usamos a funo matemtica log() e
por no ser algo trivial, como calcular o logaritmo de um nmero por exemplo, muitas outras
funes da linguagem so armazenadas neste tipo de arquivo.

8.3

double

O tipo double, assim como o float, permite manipular nmeros em ponto flutuante (ponto
decimal). At o momento, na linguagem Arduino estes tipos so exatamente iguais. Use
somente onde realmente nmeros inteiros no se aplicam.
8.4

Functions

Este no um tpico novo, mas ainda no havamos comentado. As funes (functions) so


blocos de cdigo que ajudam a estruturar um programa. Em todos os sketches, at por ser
obrigatrio, criamos duas funes: setup() e loop().
Toda funo possui esta estrutura:
<tipo de dado do retorno> <nome da funo> ( <parmetros de entrada> ) {
}
e o comando return quando houver algum dado de retorno.

60

Introduo plataforma Arduino


www.EADuino.com.br

Parece complicado, no?! Ento,


void setup() {
}
indica que a funo setup no retorna dado (void - vazio) e no possui parmetros de entrada ().
Nesta atividade,
double termistorNTC(int valorAnalogico) {
.
.
.
return temperatura;
}
indica que a funo termistorNTC vai retornar um dado do tipo double, e vai receber como
parmetro um dado do tipo int. O retorno do dado do tipo double feito pelo comando return.

8.5

log()

log( nmero )
Esta funo retorna o logaritmo natural do nmero informado.
Obs. Estranhamente at a verso 0022, esta funo no est documentada no site oficial do
Arduino.

8.6

Serial

Este objeto usado para comunicao serial entre a placa Arduino e o computador ou at
mesmo outro dispositivo que aceite comunicao serial. Quando em uso, o Arduino utiliza os
pinos digitais 0 e 1 para a comunicao, portanto no use estes pinos para entrada ou sada.
Alis, voc deve ter notado que quando transferimos o sketch para a placa, dois LEDs
associados a estes pinos piscam. Se no notou, transfira novamente o sketch e repare os LEDs
piscarem.
No nosso caso, a comunicao vai ser feita com o computador. Por isso voc foi orientado ao
final do processo de transferncia do sketch, a clicar no cone indicado na atividade. Lembra?

Bom, voltando ao sketch...


No bloco setup(), Serial.begin(9600); inicia a comunicao com os pinos seriais a uma
61

Introduo plataforma Arduino


www.EADuino.com.br

velocidade de 9600 bps (bits por segundo). Esta a velocidade que a placa Arduino ir enviar
os dados para o computador. Os valores comuns so: 300, 1200, 2400, 4800, 9600, 14400,
19200, 28800, 38400, 57600, ou 115200. Porm, pode-se colocar outro valor caso o dispositivo
com o qual voc quer comunicar exija uma configurao diferente.
J no bloco loop(), Serial.println( valorLido ); exibe no monitor serial, ou envia para
algum dispositivo, o contedo da varivel valorLido.

62

Introduo plataforma Arduino


www.EADuino.com.br

Concluso

Esperamos que voc, no mnimo, tenha se divertido. Vimos uma pequena parte da plataforma
Arduino e h muito ainda o que explorar. No deixe de nos acompanhar em
http://www.eaduino.com.br. Novos tutoriais, cursos e muita informao sobre esta fantstica
plataforma de desenvolvimento.
Muito obrigado.
Equipe EADuino.

63

Potrebbero piacerti anche