Você está na página 1de 39

2 Apostila Arduino Bsico Vol.

Estamos escrevendo as linhas do futuro, da mudana e da evoluo.

A tecnologia est mudando a forma de o mundo enfrentar as dificuldades. Cada vez


mais as pessoas se conectam atravs da internet para compartilhar conhecimentos e
experincias, expandindo de forma exponencial a inteligncia coletiva. A robtica assume
posio privilegiada nessa evoluo, e queremos fazer parte dessa histria.

Esperamos que goste dessa apostila, ela foi feita com carinho pensando em voc.
Divirta-se!!

Atenciosamente,

Equipe Vida de Silcio


SOBRE A APOSTILA 3

SUMRIO
1. Sobre a apostila...................................................................................................................................................... 4

1.1. O foco dessa apostila .................................................................................................................................... 4

1.2. Ajude-nos a criar um material de primeira ................................................................................................... 4

1.3. Sobre o Autor Allan Mota.......................................................................................................................... 4

1.4. Como fazer a Referncia bibliogrfica ......................................................................................................... 4

1.5. Sobre o Vida de Silcio ................................................................................................................................. 5

2. Introduo ......................................................................................................................................................... 6

2.1. Arduino ......................................................................................................................................................... 6

2.2. O que realmente o Arduino? ...................................................................................................................... 6

3. Sadas Digitais ................................................................................................................................................. 10

3.1. Experincia 1 Blink ................................................................................................................................. 10

3.2. Experincia 2 Usando a Protoboard ......................................................................................................... 18

4. Entradas Digitais ............................................................................................................................................. 20

4.1. Experincia 3 Leitura de botes ............................................................................................................... 20

4.2. Entendendo o Hardware.............................................................................................................................. 22

4.3. Entendendo o Programa .............................................................................................................................. 23

5. Entrada Analgica ........................................................................................................................................... 25

5.1. Experincia 4 Lendo uma entrada analgica ........................................................................................... 25

5.2. Entendendo o Hardware.............................................................................................................................. 26

5.3. Entendendo o programa .............................................................................................................................. 27

6. PWM ............................................................................................................................................................... 29

5.1. Usando a sada PWM .................................................................................................................................. 29

5.2. Experincia 5 Led com controle de intensidade....................................................................................... 29

5.3. Entendendo o programa .............................................................................................................................. 30

6. [EXTRA] Interrupo ..................................................................................................................................... 32

6.1. Experincia 6 Implementando uma interrupo....................................................................................... 32

6.2. Entendendo o Hardware.............................................................................................................................. 33

6.3. Entendendo o programa .............................................................................................................................. 33

7. Apndice - Tabela de consulta ............................................................................................................................. 35


4 Apostila Arduino Bsico Vol.1

1. SOBRE A APOSTILA

1.1. O FOCO DESSA APOSTILA


Nessa apostila voc dar seus primeiros passos dentro do incrvel mundo da robtica usando o nosso grande amigo,
O Arduino.
A nossa inteno que voc aprenda os conceitos e ferramentas mais importantes de forma simples e didtica. Tudo
isso atravs de experincias simples e rpidas.
Dentro dos assuntos abordados aqui esto:
O que Arduino?
Sadas e entradas digitais;
Entradas Analgicas e PWM;
Comunicao serial;
Primeiros passos em programao;
Interrupo.

1.2. AJUDE-NOS A CRIAR UM MATERIAL DE PRIMEIRA


Antes de voc comear a ler essa apostila, te convido para nos ajudar a criar materiais cada vez melhores. Caso tenha
alguma sugesto para as novas apostilas ou encontrou algum erro nesse material, mande um e-mail para
contato@vidadesilicio.com.br. Ficaremos muito felizes em te ouvir.
Caso voc possua vontade, tal como ns, de ajudar a comunidade Arduino e tenha interesse em fazer tutoriais bacanas
ou at nos ajudar a montar uma apostila para dividir seu conhecimento por meio da internet, mande um e-mail para
contato@vidadesilicio.com.br com um tutorial de sua autoria que ficaremos felizes em abrir um espao para voc em
nosso blog.

1.3. SOBRE O AUTOR ALLAN MOTA


Estudante de engenharia eltrica pela Universidade Federal do Espirito Santo e fundador do
Vida de Silcio, sempre fui um amante da cultura do faa voc mesmo. Lembro como
transformava meus brinquedos desmontando, montando e usando peas de outras coisas para
montar algo diferente.
Desde a primeira vez que pensei a respeito da ideia de montar um site de robtica e
automao a minha inteno foi de criar contedo de qualidade e gratuito para que qualquer um pudesse experimentar o
prazer de dar vida ao seu prprio projeto de robtica. Aqui est o resultado, espero que goste!

1.4. COMO FAZER A REFERNCIA BIBLIOGRFICA


Mota, Allan Deangelle. Apostila Arduino Bsico: Vol. 1. Serra ES: Vida de Silcio, 2015.
40p. Apostila.
SOBRE A APOSTILA 5

1.5. SOBRE O VIDA DE SILCIO


Fundada em maro de 2014 com a filosofia de promover a
mudana, o site Vida de Silcio uma empresa que trabalha no ramo
de Robtica e Sistemas Digitais fornecendo produtos de excelente
qualidade de diversas marcas para estudantes, entusiastas, Instituies
de Ensino e Empresas de Tecnologia.
Temos como misso disseminar e promover a eletrnica e a
robtica, vendendo produtos com preos justos e ensinando como us-
los de forma didtica e organizada. Estimulando assim, que mais pessoas exercitem sua criatividade, produzindo
tecnologias que possam mudar o cotidiano da humanidade.
Queremos estar presentes em cada nova ideia, em cada novo desafio e em cada conquista daqueles que promovem a
mudana das mais variadas formas usando como ferramenta a tecnologia.
6 Apostila Arduino Bsico Vol.1

2. INTRODUO

2.1. ARDUINO
H no muito tempo, para se confeccionar um circuito interativo, era necessrio fazer projetos do zero para uma
aplicao especfica. Para se fazer pequenas alteraes nas funcionalidades do circuito era necessrio um estudo crtico e
bastante trabalho.
Com o advento dos microcontroladores, foi possvel que problemas que eram tratados com hardware fossem tratados
usando software de computadores. Dessa forma, um mesmo circuito poderia tomar funes totalmente diferentes,
reprogramando e alterando alguns parmetros do programa.
Mas mesmo assim, trabalhar com microcontroladores no to trivial. Desta forma, em 2005, um grupo de
pesquisadores italianos perceberam a necessidade de criar um dispositivo que possibilitasse a criao de sistemas
autnomos de forma mais simples. O resultado foi o Arduino.
A filosofia era criar uma plataforma que qualquer pessoa pudesse criar um projeto interativo, sem a necessidade de
ter que aprender sobre matrias complexas de engenharia. Dessa forma, qualquer um poderia ser um criador de tecnologia,
no importando idade ou especialidade, apenas algo presente em sobra no ser humano: a criatividade.
O Arduino rapidamente se tornou popular em todo mundo. Hoje temos vrias opes de placas com particularidades
interessantes.

2.2. O QUE REALMENTE O ARDUINO?


No site oficial da Arduino, encontramos a seguinte definio (traduzida):
Arduino uma plataforma open-source de prototipagem eletrnica com hardware e software flexveis e fceis de
usar, destinado a artistas, designers, hobbistas e qualquer pessoa interessada em criar objetos ou ambientes interativos.

Ou seja, o Arduino uma plataforma formada por dois componentes: A placa, que o Hardware que usaremos para
construir nossos projetos e a IDE Arduino, que o Software onde escrevemos o que queremos que a placa faa.
A maior vantagem dessa plataforma de desenvolvimento sobre as demais a sua facilidade de sua utilizao: pessoas
que no so da rea tcnica podem aprender o bsico e criar seus prprios projetos em um intervalo de tempo relativamente
curto.
INTRODUO 7

A PLACA ARDUINO
Existem diversas placas Arduino, mas a mais popular o Arduino Uno e ser ela que iremos usar como referncia
nessa apostila. Caso voc tenha outra placa, fique tranquilo, os projetos que iremos montar aqui podem ser montados em
todas as placas. S fique atento para as particularidades de sua Placa.

O ARDUINO UNO
O hardware do Arduino simples, porm muito eficiente. Vamos analisar a partir desse momento o hardware do
Arduino UNO. Ele composto pelos seguintes blocos:

Figura 1 - Arduino Uno


1. Microcontrolador: O crebro do Arduino. Um computador inteiro dentro de um pequeno chip. Este o
dispositivo programvel que roda o cdigo que enviamos placa. No mercado existem vrias opes de marcas
e modelos de microcontroladores. A Arduino optou pelo uso dos chips da ATmel, a linha ATmega. O Arduino
UNO usa o microcontrolador ATmega328.
2. Conector USB: Conecta o Arduino ao computador. por onde o computador e o Arduino se comunicam com
o auxlio de um cabo USB, alm de ser uma opo de alimentao da placa.
3. Pinos de Entrada e Sada: Pinos que podem ser programados para agirem como entradas ou sadas fazendo
com que o Arduino interaja com o meio externo. O Arduino UNO possui 14 portas digitais (I/O), 6 pinos de
entrada analgica e 6 sadas analgicas (PWM).
4. Pinos de Alimentao: Fornecem diversos valores de tenso que podem ser utilizados para energizar os
componentes do seu projeto. Devem ser usados com cuidado, para que no sejam forados a fornecer valores de
corrente superiores ao suportado pela placa.
5. Boto de Reset: Boto que reinicia a placa Arduino.
6. Conversor Serial-USB e LEDs TX/RX: Para que o computador e o microcontrolador conversem, necessrio
que exista um chip que traduza as informaes vindas de um para o outro. Os LEDs TX e RX acendem quando
o Arduino est transmitindo e recebendo dados pela porta serial respectivamente.
7. Conector de Alimentao: Responsvel por receber a energia de alimentao externa, que pode ter uma tenso
de no mnimo 7 Volts e no mximo 20 Volts e uma corrente mnima de 300mA. Recomendamos 9V, com um
pino redondo de 2,1mm e centro positivo. Caso a placa tambm esteja sendo alimentada pelo cabo USB, ele dar
preferncia fonte externa automaticamente.
8. LED de Alimentao: Indica se a placa est energizada.
9. LED Interno: LED conectado ao pino digital 13.

IDE ARDUINO
Quando tratamos de software na plataforma Arduino, podemos referir-nos ao ambiente de desenvolvimento integrado
8 Apostila Arduino Bsico Vol.1

do Arduino e o programa desenvolvido por ns para enviar para a nossa placa.


Uma das grandes vantagens dessa plataforma est no seu ambiente de desenvolvimento, que usa uma linguagem
baseada no C/C++, linguagem bem difundida, usando uma estrutura simples. Mesmo pessoas sem conhecimento algum
em programao conseguem, com pouco estudo, elaborar programas rapidamente.
Para baixar a IDE Arduino acesse o site oficial da Arduino (www.arduino.cc). No site, clique na aba Download.

Figura 2 - Site oficial Arduino


Na pgina Download, procure pela ltima verso do Arduino IDE. No dia em que escrevo essa apostila, a ltima
verso a 1.6.12.
Windows
Primeira Opo: baixar o instalador (Installer) que funciona como qualquer outro instalador de programa.
Segunda Opo: Baixar todos os arquivos da IDE Arduino compactados para Windows (ZIP file), nessa verso basta
baixar e descompactar na pasta que voc desejar, inclusive no seu pen driver ou HD virtual. Eu costumo descompactar
na rea de Trabalho.
Linux
Baixar todos os arquivos da IDE Arduino compactados para Linux (32bit ou 64bit), nessa verso basta baixar e
descompactar na pasta que voc desejar, inclusive no seu pen driver ou HD virtual. Eu costumo descompactar na rea de
Trabalho.

ENTENDENDO A IDE ARDUINO


Em resumo, um programa simples de se utilizar e de entender com bibliotecas que podem ser facilmente encontradas
na internet. As funes da IDE do Arduino so basicamente trs: permitir o desenvolvimento do software, de envi-lo
placa para que possa ser executado e de interagir com a placa Arduino.
INTRODUO 9

Figura 3 - IDE Arduino


10 Apostila Arduino Bsico Vol.1

3. SADAS DIGITAIS

3.1. EXPERINCIA 1 BLINK


Vamos nossa primeira experincia. Nessa experincia iremos fazer o Arduino piscar um LED de um em um segundo.
O Arduino UNO REV3 possui um LED na placa ligado porta digital 13. Com isso, podemos testar o funcionamento
de forma rpida e simples.

PROGRAMANDO
Abra a Arduino IDE e escreva o seguinte cdigo:

int led = 13;

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

void loop() {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}

Agora voc precisa selecionar qual a placa que voc est utilizando. Selecione Tools > Board e ento selecione a placa
que voc est usando. No nosso caso ser o Arduino UNO.

Figura 4 - Escolhendo o Arduino


SADAS DIGITAIS 11

Escolhida a placa, precisamos definir a porta serial que est comunicando com o Arduino. Selecione Tools > Serial
Port e escolha a porta serial correspondente a seu Arduino. No Windows ser algo como COM3 Arduino Uno, no MAC
OS e no Linux ser algo como /dev/tty.usbmnodem.

Figura 5 - Selecionando a porta serial


Agora clique em Upload/Carregar para que o programa seja transferido para seu Arduino.

Figura 6 - Carregando programa


Se tudo foi feito corretamente, o led do pino 13, presente na placa do Arduino UNO, ir piscar intermitentemente a
uma taxa de uma vez por segundo.

Figura 7 - Led conectado ao pino 13


12 Apostila Arduino Bsico Vol.1

GRANDEZAS DIGITAIS E ANALGICAS


Para entendermos o Arduino, necessrio que saibamos diferenciar uma grandeza analgica de uma grandeza digital.
Grandezas digitais so aquelas que no variam continuamente no tempo mas sim em saltos entre valores bem
definidos. Um exemplo so os relgios digitais: apesar do tempo em si variar continuamente, o visor do relgio mostra o
tempo em saltos de um em um segundo. Um relgio desse tipo nunca mostrar 12,5 segundos, pois, para ele, s existem
12 e 13 segundos. Qualquer valor intermedirio no est definido.
Grandezas analgicas so aquelas que, ao contrrio das grandezas digitais, variam continuamente dentro de uma faixa
de valores. O velocmetro de um carro, por exemplo, pode ser considerado analgico, pois o ponteiro gira continuamente
conforme o automvel acelera ou freia. Se o ponteiro girasse em saltos, o velocmetro seria considerado digital.
Outra analogia interessante pode ser feita comparando uma escada com uma rampa: enquanto uma rampa sobe de
forma contnua, assumindo todos os valores de altura entre a base e o topo, a escada sobe em saltos, com apenas alguns
valores de altura definidos entre a base e o topo. A escada representa, portanto, uma grandeza digital, enquanto a rampa
representa uma grandeza analgica. A quantidade de degraus em uma escada define quais posies podemos escolher.
Por exemplo se uma escada tem um degrau em 1,00 m de
altura do solo e o prximo est a 1,50 m ns no podemos
ocultar a posio 1,38 m do solo porque no existe um degrau
l. Quanto mais degraus adicionamos em um intervalo de
altura menor mais perto da rampa nos aproximamos.
Figura 8 Escada vs Rampa
Os circuitos e equipamentos eltricos ditos digitais
trabalham com apenas dois valores de tenso definidos:
Um nvel lgico alto, que no caso do Arduino 5V;
Um nvel lgico baixo, que no caso do Arduino 0V.
Na prtica existem faixas de valores prximos a esses nmeros em que o circuito digital entende como nvel alto ou
baixo. Tambm existe uma faixa intermediria no definida que pode gerar resultados inesperados e que, portanto, deve
ser evitada.
Os circuitos e equipamentos eltricos ditos analgicos trabalham com uma faixa de valores chamada de range:

No Arduino essa faixa de valores (range) vai de 0V a 5V.


As placas Arduino possuem uma clara diviso entre os pinos de entrada e sada digitais/analgicos, porm em algumas
placas como o modelo Arduino Uno qualquer pino pode ser utilizado como entrada ou sada digital.
SADAS DIGITAIS 13

ENTENDENDO O PROGRAMA
Pensando como um computador
Computadores e microcontroladores no possuem uma inteligncia tal como um ser humano ou um animal. Eles so
projetados para resolver problemas a partir de uma lista de tarefas, semelhante a uma receita de bolo.
Dessa forma, para resolver um problema em um computador, tal como fazemos para resolver problemas cotidianos,
fazer um bolo, por exemplo, devemos descrever a soluo de uma forma clara e precisa, por meio de passos a serem
seguidos at que se atinja um resultado esperado.
O nome dessa lista de passos o algoritmo. Um algoritmo um conjunto finito de regras que fornece uma sequncia
de operaes a fim de solucionar um problema.
Veja o exemplo da seguinte receita de bolo:
// RECEITA DE BOLO COMUM DE OVOS
INCIO
Passo 1: Separar os ingredientes
Ingredientes:
2 ovos;
3 xcaras de farinha de trigo;
1 e colher de fermento;
xcara de leite.
1/2 xcaras de acar;
250g de manteiga;

Modo de preparo:
Passo 2: Aquea o forno a 180 graus;
Passo 3: Quebre os ovos e separe as claras da gema;
Passo 4: Bata as claras em neve e as deixe separadas;
Passo 5: Em uma vasilha, bata o acar, a manteiga e as gemas;
Passo 6: Misture a farinha e o leite;
Passo 7: Bata bem, at ficar bem homogneo;
Passo 8: Acrescente o fermento;
Passo 9: Adicione as claras em neve e mexa cuidadosamente;
Passo 10: Unte uma forma com manteiga e farinha de trigo.
Passo 11: Coloque a massa na forma untada
Passo 12: Leve ao forno mdio para assar por aproximadamente 35 minutos ou at que, ao
espetar um palito, esse saia seco;
Passo 13: Aps assado, desligue o forno e deixe o bolo esfriar;
Passo 14: Desenforme e saboreie.
FIM

Essa receita se assemelha aos algoritmos que iremos fazer ao longo dessa apostila. Ele define o que iremos usar,
e depois diz passo a passo o que devemos fazer. Veja que no podemos fazer o passo 4 sem antes fazer o passo 3, nem o
passo 11 sem os passos anteriores. Existe uma ordem a ser seguida para que o bolo fique conforme esperado.
No diferente para o computador, ele precisa de ordens organizadas e coerentes, que ao final da receita resulte na
soluo de seu problema. Alm da ordem de passos, voc deve falar em uma lngua que o computador entenda, no
adianta uma receita em grego para um brasileiro. Para o nosso caso usamos uma linguagem baseada em C++. Tal como
qualquer lngua, ela possui suas regras de como us-la adequadamente. Despois de traduzido o algoritmo para a
linguagem do Arduino, teremos o cdigo-fonte, cdigo de programa ou simplesmente programa. Muitos gostam de
chamar de sketch.

Sempre faa comentrios


Sempre quando escrevemos um programa importante que deixemos notas explicando o seu uso, tanto para que outras
pessoas entendam quanto para ns mesmo.
Muitas vezes fazemos um programa para uma determinada funo achando que s iremos us-lo uma nica vez.
Quando, depois de muito tempo, nos damos conta de que precisaremos dele novamente, j tarde. Por mais que voc seja
bom de memria, muito difcil lembrar de tudo que voc pensou durante a confeco de seu programa.
14 Apostila Arduino Bsico Vol.1

Dessa forma, quando no deixamos notas explicando como o programa funciona, perdemos tempo relendo todo o
programa para entend-lo. Alm disso, caso algum pea seu programa emprestado, se o mesmo no estiver comentado,
ser de difcil entendimento.
Em resumo, um comentrio um texto que ser desconsiderado na hora de rodar o programa, ele no tem valor
nenhum para o Arduino. Na IDE Arduino, os comentrios ficam em tonalidade cinza.
Por isso, temos cdigos especiais na IDE Arduino para comentrios. Lembre-se de sempre us-las. Existem duas
formas de fazer comentrios, podemos comentar um bloco de texto ou podemos apenas comentar uma linha.
Para comentar um bloco de texto devemos definir o comentrio indicando o incio usando /* (barra e asterisco) e o
final usando */ (asterisco e barra).
/* Blink - Pisca um led, de um em um segundo

Este cdigo exemplo de domnio pblico. */

Para comentar uma linha, definimos apenas o incio do comentrio, usando // (duas barras). No necessrio que se
comece um comentrio de linha no incio da linha.
// Existe um LED conectado no pino 13 da maioria dos Arduinos

digitalWrite(led, HIGH); // Liga o LED (HIGH = nvel lgico alto)

s vezes, quando queremos testar o programa ignorando uma linha do cdigo, simplesmente comentamos ela. Dessa
forma ela no ser lida na hora de carregar o programa para o Arduino.
//digitalWrite(led, HIGH); Essa linha no lida pelo Arduino

Variveis
Quando programamos, precisamos continuamente guardar uma informao para usarmos posteriormente. Por
exemplo, caso voc queira somar dois nmeros, voc ter que armazenar o resultado em algum lugar. Esse lugar reservado
se chama varivel.
Neste exemplo o lugar seria x, que recebe o resultado da soma 1+1.
x = 1 + 1; //x recebe 2, que o resultado da soma 1+1

Imagine que a memria do seu Arduino possui muitas gavetas, quando queremos usar uma, devemos dar um
nome a ela e falar qual tipo de contedo ela guardar. Cada gaveta uma varivel.
Ao declarar uma varivel devemos definir qual tipo de contedo ela receber. Para isso voc deve saber com
qual tipo de dado mexer. Em nosso exemplo, x deve ser uma varivel do tipo int, isso porque ela receber um valor
inteiro.

int x; //x uma varivel do tipo inteiro


x = 1 + 1; //x recebe 2, que o resultado da soma 1+1

No Apndice 1 voc pode conferir uma tabela com os principais tipos de variveis e suas particularidades.

Ao criar uma varivel interessante que ela tenha um nome associado informao que ela armazena. Por
exemplo, no lugar x poderamos ter usado o nome soma ou resultado.

Em nosso programa declaramos a varivel do tipo int chamada led que armazena o nmero 13, que o nmero
da porta onde est localizado o LED que pisca com a execuo do programa. Dessa forma, quando escrevemos led em
nosso programa, ele corresponder a 13, que est escrito dentro da varivel.
int led = 13;
SADAS DIGITAIS 15

Funo
Muitas vezes desempenhamos um conjunto de instrues. Por exemplo: pense em uma situao cotidiana,
constantemente precisamos saber qual a hora. Suponhamos que para isso voc desempenhe o seguinte conjunto de
instrues.
Pegue seu celular;
Ligue a tela;
Leia qual a hora;
Desligue a tela;
Guarde o celular;

Para facilitar nossa vida, podemos chamar esse conjunto de instrues por um nome para que sempre que
quisermos saber a hora, no seja preciso descrever todas as instrues necessrias para isso.

void lerHora(){
Pegue seu celular;
Ligue a tela;
Leia qual a hora;
Desligue a tela;
Guarde o celular;
}

Em resumo, funo um bloco de tarefas a serem executadas pelo programa quando solicitada. Agora, quando
escrevemos Lerhora(), estamos chamando o conjunto de instrues correspondentes.
lerHora(); // Excuta o conjunto de instrues da funo lerHora

Toda funo deve ter um nome e um tipo. No caso das duas, o tipo void, isso quer dizer que ela uma funo que
no devolve nenhum valor, e o nome setup e loop, respectivamente. Para sabermos onde comea e termina o bloco de
tarefas de uma funo usamos { para indicar o incio e } para indicar o final.

Funo setup() e funo loop()


No Arduino existem duas funes que so fundamentais ao programa, a setup e a loop. Elas so chamadas
automaticamente pelo microcontrolador quando ligado:
A funo setup executada apenas uma vez ao ligar ou reiniciar sua placa Arduino. Nela colocamos todas as
instrues que queremos que o Arduino execute apenas uma vez. Geralmente, nela que definimos parmetros iniciais
de nosso programa.
// Esta rotina "setup" roda uma vez quando a placa e ligada ou reiniciada
void setup() {
// Configura o pino do led (digital) como sada
pinMode(led, OUTPUT); // led corresponde a 13
}

Nesse exemplo, o nico comando contido na funo setup o pinMode, esse comando muito importante no
uso das entradas e sadas digitais do Arduino. Com esse comando definimos se o pino uma entrada (input) ou uma sada
(output). No nosso caso queremos que o pino 13 seja uma sada.
pinMode(led, OUTPUT); // led corresponde 13

A funo loop executada ciclicamente pelo Arduino. Dessa forma, ao chegar na ltima linha, ele volta para a
primeira. Sendo assim, nessa funo escrevemos as funes que queremos que ocorram continuamente.
// Funo que repete infinitamente quando a placa ligada
void loop() {
digitalWrite(led, HIGH); // Liga o LED (HIGH = nvel lgico alto)
delay(1000); // Espera um segundo
digitalWrite(led, LOW); // Desliga o LED (LOW = nvel lgico baixo)
delay(1000); // Espera um segundo
}
16 Apostila Arduino Bsico Vol.1

Na funo loop temos dois comandos. O primeiro comando, o digitalWrite, define qual o estado de sada, LOW
para nvel lgico baixo (0V) e HIGH para nvel lgico alto (5V) de uma determinada porta, no nosso caso a porta 13
representada pela varivel led. Veja que devemos definir o pino que queremos mexer para depois escolher o estado para
o qual ele deve ir.
digitalWrite(led, HIGH); // Liga o LED (HIGH = nvel lgico alto)

O segundo o delay. O comando delay cria uma pausa no algoritmo pelo tempo determinado em milissegundos
(1 segundo igual a 1000 milissegundos).
delay(1000); // Espera um segundo

Ponto e virgula e chave


Como j explicado, o microcontrolador do Arduino l o cdigo linha por linha, executando instruo por instruo.
Dessa forma, quando escrevemos uma instruo, devemos informar onde ela comea e acaba. Para isso serve o ponto e
vrgula (;).

digitalWrite(led, HIGH); // Liga o LED (HIGH = nivel lgico alto)


delay(1000); // Espera um segundo
SADAS DIGITAIS 17

Veja o exemplo do delay(1000), essa instruo pede para que o Arduino pare por 1 segundo. Para que o Arduino leia
a instruo, entenda e execute, necessrio que ele saiba onde ela comea e onde ela termina. Nesse caso, ela comea
logo aps o ponto e vrgula da linha anterior e acaba no ponto e vrgula da prpria linha.
Para blocos de instrues usamos chaves, aberta { para comear e fechada } para terminar. Um exemplo de bloco
de instrues so as funes.
void setup() {
pinMode(led, OUTPUT);
}

Nesse exemplo o bloco de funo setup comea no colchete aberto e termina no colchete fechado. J a instruo
pinMode comea no colchete aberto e termina no ponto e vrgula.
18 Apostila Arduino Bsico Vol.1

3.2. EXPERINCIA 2 USANDO A PROTOBOARD


Essa experincia ser semelhante anterior com a diferena de que aprenderemos a usar um equipamento fundamental
para quem quer realizar experincias com circuitos eletrnicos.

A PROTOBOARD (MATRIZ DE CONTATOS)


Quando trabalhamos com circuitos eltricos em laboratrio, muitas vezes
usamos a protoboard. Ele tem o intuito de simplificar o processo de estudo e
pesquisa de circuitos eltricos e eletrnicos. Sendo uma matriz de contatos
reutilizvel, evitamos a necessidade de confeccionar uma placa de circuito
impresso e possibilita a fcil alterao do circuito, deixando ele flexvel.
Nas extremidades podemos notar dois barramentos de contatos paralelos
Figura 9 - Circuito impresso
ao formato da
protoboard. No centro temos barramentos perpendiculares com
um pequeno espaamento no meio. A imagem a seguir mostra
como est ordenado os barramentos.
Usando o Arduino, continuamente teremos que montar
circuitos com LEDs, sensores, entre outros. Dessa forma, o uso
de protoboards ser comum no seu dia-a-dia como um
desenvolvedor.
Figura 10 - Protoboard 400 furos
SEPARANDO OS INGREDIENTES
Para essa experincia precisaremos dos seguintes componentes:
1 LED 5mm
1 Resistor 470
Fios Jumpers
1 Protoboard
Arduino Uno ou outro

MISTURANDO OS INGREDIENTES
Agora vamos conectar os componentes do projeto. Para isso monte seu circuito conforme a figura a seguir.
Garanta que seu Arduino esteja desligado
durante a montagem e que o seu LED esteja
conectado corretamente, com a perna mais
longa (Anodo) conectado ao resistor e a perna
menor (catodo) ao GND.

LEVANDO AO FORNO
Agora temos que carregar o programa no
Arduino. Caso voc tenha carregado outro programa ou ainda no fezFigura 11 - Circuito
o exemplo 1 e seuda experincia
Arduino ainda2no esteja com o
programa Blink, volte ao item 2.1.1 e faa o mesmo procedimento da experincia 1, j que usaremos o mesmo programa.
Depois que o Arduino estiver ligado com o programa carregado, o LED deve comear a piscar intermitentemente.

ENTENDENDO O HARDWARE
Quando configuramos um pino como sada digital, tal como a porta 13 nessa experincia, ele pode fornecer 0 ou 5 V
fazendo com que ele drene ou fornea corrente do circuito controlado. O valor mximo dessa corrente varia de placa para
placa, mas, em geral, de 30mA. Essa corrente mais do que suficiente para ligar um LED de alto-brilho e alguns
SADAS DIGITAIS 19

sensores, porm no suficiente para ligar a maioria dos rels e motores. Caso uma corrente maior que o limite, passe
por um pino, este poder ser danificado.

Ao usar um pino como sada tenha cuidado para no drenar mais que o mximo suportado. Caso uma corrente
maior que o limite passe por um pino, este poder ser danificado. No Arduino esse valor costuma ser de 30mA.

Quando precisamos de correntes maiores usamos dispositivos que, a partir da tenso de sada do pino digital do
Arduino, no chaveados para conduzir ou no conduzir a corrente vinda de uma fonte externa. Exemplo:
Transistor (EXTRA);
Rel;
Ponte H (EXTRA)

Resistor
cComponente eletrnico que dificulta a passagem de corrente eltrica. Esta dificuldade
de passagem de corrente denominada resistncia e medida em ohms.
Cada componente e equipamento eletrnico possui uma corrente mxima de
Figura 12 - Resistor
funcionamento, por isso, o uso de resistores essencial. Ele ter o papel de limitar a
corrente mxima do circuito.

LEDs
O LED (Diodo Emissor de Luz) um componente que, quando uma corrente eltrica
passa por ele em um determinado sentido, passa a emitir luz. Por isso o LED tem que estar
no sentido correto no circuito para no ter riscos de queim-lo.

Figura 13 - LED
20 Apostila Arduino Bsico Vol.1

4. ENTRADAS DIGITAIS
No captulo anterior vimos como controlar uma sada digital e fizemos um LED piscar intermitentemente. No entanto,
na vida real, um sistema interativo trabalha processando entradas e atuando atravs de sadas.
Nesse capitulo, iremos aprender como acender um LED (sada) a partir de um boto (entrada).

4.1. EXPERINCIA 3 LEITURA DE BOTES


INGREDIENTES
Boto de presso
Resistor 10k
1 Resistor 470
1 LED 5mm
Fios Jumpers
Protoboard
Arduino Uno ou outro

MISTURANDO OS INGREDIENTES
Agora vamos conectar os componentes do projeto. Para isso monte seu circuito conforme a figura a seguir.
Garanta que seu Arduino esteja desligado durante a montagem, e que o seu LED esteja conectado corretamente, com
a perna mais longa (Anodo) conectado ao resistor e a perna menor (catodo) ao GND.

Figura 14 - Circuito da Experincia 3

LEVANDO AO FORNO
Conecte seu Arduino ao computador e abra a IDE Arduino. No menu Tools, certifique que a porta serial (serial port)
est selecionada e se a placa configurada a que voc est usando (board).

PREPARANDO A COBERTURA
Agora temos que dar vida ao Arduino. Para isso, dentro da IDE Arduino: abra o menu File > Examples > 01. Basics
> Button.
Uma nova janela deve ser aberta com o programa conforme apresentado a seguir. Clique em Upload para que o
programa seja transferido para seu Arduino.
ENTRADAS DIGITAIS 21

/*
Button

Utiliza um boto de presso, conectado ao pino 2, para ligar e


desligar um LED conectado ao pino digital 13.

*/

// Determinamos constantes para os nmeros dos pinos utilizados


const int buttonPin = 2; // Nmero do pino do boto de presso
const int ledPin = 13; // Nmero do pino do led

// Variveis
int buttonState = 0; // Varivel para leitura do estado do boto

// Executa uma vez ao ligar ou reiniciar a placa


void setup() {
pinMode(ledPin, OUTPUT); //Inicializa o pino do LED como sada (OUTPUT)
pinMode(buttonPin, INPUT); // Inicializa o pin do boto como entrada (INPUT)
}

// Executa infinitamente quando liga a placa


void loop() {
// L o estado do boto (HIGH -> +5V -> boto press.) (LOW -> 0V)
buttonState = digitalRead(buttonPin);

// Testa se o boto est pressionado


// Se sim, o estado do boto e alto (HIGH)
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH); // Liga o LED
}
// Seno (Boto no pressionado)
else {
digitalWrite(ledPin, LOW); // Desliga o LED
}
}

EXPERIMENTANDO O PRATO
Caso tenha ocorrido tudo como esperado, quando voc apertar o boto acender o LED embutido na placa, ou o LED
da protoboard caso tenha optado por manter o LED da experincia 2. Quando voc soltar o boto, o LED apagar.
22 Apostila Arduino Bsico Vol.1

4.2. ENTENDENDO O HARDWARE


Quando configuramos um pino como entrada digital ele apresentar uma caracterstica chamada alta impedncia. Isso
significa que uma pequena corrente consegue fazer com que seu estado mude. Podemos usar essa configurao, por
exemplo, para ler botes, fotodiodos entre outros. E a partir do estado lido ou das mudanas desses estados, concluir o
que est acontecendo no mundo externo e ento tomar aes baseadas nessas medidas.

Caso o pino seja configurado como entrada mas no estiver conectado a nada, ele poder alterar seu estado
aleatoriamente por ser afetado pelo rudo eltrico do ambiente.

Para evitar esse problema, podemos utilizar um resistor de pull up ou pull down. Esses resistores faro com que a
tenso em nossa entrada esteja bem definida quando o mesmo no estiver conectado a nada. As figuras mostram trs
ligaes de um boto a um pino do microcontrolador configurado como entrada digital. Para cada caso temos:

Entrada sem pull-up ou pull-down: O estado do pino no estar


bem definido fazendo com que este esteja suscetvel a rudo.

Figura 15 - Entrada sem pull-


down ou pull-up

Pull-down: Neste caso, devido presena do resistor de pull-


down, seu estado est bem definido e ele enxergar GND,
consequentemente definindo seu estado como baixo.

Figura 16- Entrada com pull-


down

Pull-up: Neste caso, devido presena do resistor de pull-


up, seu estado est bem definido e ele enxergar +5 V,
consequentemente definindo seu estado como alto.
Figura 17 - Entrada com pull-up

Na experincia usamos um pul-down. Dessa forma, o pino 2 tem


0V normalmente. S alterando quando algum pressionar o boto,
passando para 5V enquanto pressionado.
ENTRADAS DIGITAIS 23

4.3. ENTENDENDO O PROGRAMA


Boa parte desse programa semelhante ao usado na experincia 1 e 2. Focaremos agora na parte no apresentada
anteriormente.

Constantes
Quando definimos uma varivel que no ir mudar ao longo da execuo do programa, definimos ela como uma
constante.
Um exemplo de varivel constante o nmero dos pinos do Arduino que usaremos, j que eles no mudaro ao longo
do programa.
// Determinamos constantes para os nmeros dos pinos utilizados
const int buttonPin = 2; // Nmero do pino do boto de presso
const int ledPin = 13; // Nmero do pino do led

Comando pinMode
Na funo setup podemos encontrar o comando pinMode. Como j dito na experincia 1, esse comando muito
importante no uso das entradas e sadas digitais do Arduino. Ele responsvel por definir se um pino uma entrada
(INPUT) ou uma sada (OUTPUT).
void setup() {
pinMode(ledPin, OUTPUT); //Inicializa o pino do LED como sada (OUTPUT)
pinMode(buttonPin, INPUT); // Inicializa o pin do boto como entrada (INPUT)
}

Na primeira linha da funo setup de nosso exemplo, temos o pino 13, definido pela constante ledpin, sendo
configurado como sada digital.
pinMode(ledPin, OUTPUT); //Inicializa o pino do LED como sada (OUTPUT)

Na segunda linha temos o pino 2, definido pela constante buttonPin, sendo configurado como uma entrada digital.
pinMode(buttonPin, INPUT); // Inicializa o pin do boto como entrada (INPUT)

Comando digitalRead
Na funo Loop temos o programa que rodar ciclicamente em nosso Arduino. Como desejamos acender um LED a
partir de um boto, primeiramente devemos ler o seu estado. Para isso, usamos o comando digitalRead, que retorna o
valor de estado de uma entrada digital passada como parmetro.
Nesse comando, caso a tenso na entrada digital seja 5V, ele retornar 1, caso seja 0V, retornar 0.
Para usar esse resultado devemos armazen-lo em algum lugar, nada melhor que uma varivel para isso. No exemplo,
armazenaremos o valor do boto na varivel buttonState
No nosso caso, quando o boto estiver pressionado, teremos 5V na porta 2, ou seja, 1 na varivel buttonState.
// Comando que l o estado do boto (HIGH -> +5V -> boto press.) (LOW -> 0V)
buttonState = digitalRead(buttonPin);

Bloco IF
Ao resolver um problema, constantemente teremos que tomar decises lgicas a partir dos resultados coletados.
Vamos voltar receita do bolo. Caso esse bolo seja para uma festa de aniversrio, interessante que se faa uma cobertura,
caso contrrio, podemos deixar o bolo sem cobertura. Veja como ficaria o algoritmo para essa situao:
24 Apostila Arduino Bsico Vol.1

Funo bolo(){
Faa o bolo;
Se o bolo de aniversrio {
Faa uma cobertura;
}Seno
No faa uma cobertura
}
fim

Veja que usamos um parmetro para decidir se iremos ou no


executar uma atividade. Veja o fluxograma a seguir. um bolo de
Aniversrio?

Se no for :
Se for: Faa
No Faa
Cobertura
cobertura
Dessa forma, em nosso exemplo, caso buttonState seja
igual a 1 (boto pressionado), devemos acender o LED, caso buttonState ==1?
contrrio, devemos apaga-lo.

No programa fica assim: Se for: Ligue o Se no for :


LED Desligue o LED

// Testa se o boto est pressionado


// Se sim, o estado do boto e alto (HIGH)
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH); // Liga o LED
}
// Seno (Botao nao pressionado)
else {
digitalWrite(ledPin, LOW); // Desliga o LED
}

Operadores Lgicos
Para usar blocos lgicos, tal como o bloco IF, usaremos operadores lgicos. Os operadores lgicos, junto aos
parmetros, so responsveis por criar as condies de execuo de um bloco lgico.
Voltando ao bolo, caso voc no tenha leite
condensado, ser invivel fazer uma cobertura de brigadeiro. N de latas de leite
condensado >= 1?
Dessa forma, o nmero de latas de leite condensado
disponveis deve ser maior ou igual a 1 latas para que seja
vivel fazer essa cobertura. Se for: Faa a Se no for : no
cobertura de faa a cobertura
brigadeiro de bigadeiro

A condio maior ou igual um operador lgico, veja os


possveis operadores lgicos na tabela a seguir.
Operadores de Comparao
== Igual
!= Diferente
< Menor
> Maior
<= Menor e igual
>= Maior e igual
ENTRADA ANALGICA 25

5. ENTRADA ANALGICA
O uso de entradas digitais limita nossas possibilidades, visto que o mundo analgico. Sendo assim, a leitura de
valores analgicos muitas vezes se faz necessrio.
Nesse captulo, aprenderemos como podemos usar as entradas analgicas das placas Arduino.

5.1. EXPERINCIA 4 LENDO UMA ENTRADA ANALGICA


INGREDIENTES
Potencimetro linear 10k
Fios jumpers
Protoboard

MISTURANDO OS INGREDIENTES
Agora vamos conectar os componentes do projeto. Para isso, monte seu circuito conforme a figura a seguir e garanta
que seu Arduino esteja desligado durante a montagem.

Figura 18 - Circuito da experincia 4

LEVANDO AO FORNO
Conecte seu Arduino ao computador e abra a IDE Arduino. No menu Tools, certifique de que a porta serial (serial
port) est selecionada e que a placa configurada a que voc est usando (board).

PREPARANDO A COBERTURA
Agora vamos implementao do programa. Nesse algoritmo iremos fazer diferente. Voc ter que escrever o
programa tal como escrito abaixo, isso fundamental para que voc acostume com a linguagem e a estrutura da
programao do Arduino.
Para isso, dentro da IDE Arduino: abra o menu File > New ou aperte ctrl+N. Uma nova janela, em branco deve ser
aberta.
Agora devemos dar um nome ao nosso sketch (esse o nome dado aos programas no Arduino), mas podemos chamar
de arquivo de programa ou cdigo. Dessa forma, dentro da IDE Arduino: Abra o menu File e clique em Save. Uma nova
janela ser aberta onde voc escolher onde salvar seu programa e qual ser seu nome. Para facilitar a identificao, d o
nome de programa_entrada_anologica.
Com o seu programa salvo, escreva nele o cdigo conforme escrito abaixo.
26 Apostila Arduino Bsico Vol.1

// Esta funo "setup" roda uma vez quando a placa e ligada ou resetada
unsigned int valorLido;
void setup() {
Serial.begin(9600); //Inicia porta serial e define a velocidade de transmisso
}
// Funo que se repete infinitamente quando a placa ligada
void loop() {
valorLido = analogRead(A0);
Serial.println(valorLido);
delay(1000); // Espera um segundo
}

Depois de escrever o cdigo, clique em Upload para que o programa seja transferido para seu Arduino.

EXPERIMENTANDO O PRATO
Para essa experincia, voc ter que abrir o serial
Monitor que ser melhor explicado mais frente.
Para isso, o serial monitor pode ser aberto pelo cone
mostrado na figura a seguir.
Caso tenha ocorrido tudo como esperado,
conforme voc varie a resistncia do potencimetro,
girando seu eixo, aparecer no serial monitor um
valor de 0 a 1023.
Figura 19 - Monitor serial
5.2. ENTENDENDO O
HARDWARE
POTENCIMETRO E TRIMPOT
Potencimetros e trimpot so resistores variveis e
ajustveis, e por isso so usados para controle analgico de
funcionalidades de alguns aparelhos eletrnicos, tal como o
volume de um aparelho de som.
Eles costumam possuir trs pernas. Dois so ligados s
extremidades da resistncia (A e B) e a terceira a um cursor
que anda de ponta a ponta da resistncia (C).Dessa forma,
podemos usar o resistor entre A e C ou B e C.
Figura 20 - Potencimetro
DIVISOR DE TENSO
Quando temos n resistncia associadas em srie temos o nome de divisor de tenso. Em um circuito divisor de tenso,
temos uma queda de tenso em cada resistncia igual ao produto da resistncia com a corrente do circuito.
Como a corrente do circuito calculada pela diviso da tenso em cima de todos os resistores dividido pela soma dos
resistores, teremos a tenso em cima de um resistor igual a resistncia desse resistor vezes a tenso total dividida pela
soma dos resistores.
O exemplo a seguir mostra como funciona o clculo o para dois resistores.
ENTRADA ANALGICA 27

Figura 21 - Divisor de tenso


Quando usamos um potencimetro, podemos usar a propriedade do divisor de tenso. Sabemos que a tenso total e a
resistncia total so fixas. Dessa forma, o divisor de tenso vai variar com a resistncia A0 e GND.

5.3. ENTENDENDO O PROGRAMA


LENDO DA ENTRADA ANALGICA
A leitura da entrada analgica feita com a funo analogRead, que recebe como parmetro o pino analgico a ser
lido e retorna o valor digital que representa a tenso no pino. Como o conversor analgico-digital do Arduino possui uma
resoluo de 10 bits, o intervalo de tenso de referncia, que no nosso caso 5 V, ser dividido em 1024 pedaos (2^10)
e o valor retornado pela funo ser o valor discreto mais prximo da tenso no pino.
unsigned int valorLido = analogRead(A0);

O cdigo acima l o valor analgico de tenso no pino A0 e guarda o valor digital na varivel valorLido. Supondo
que o pino est com uma tenso de 2V, o valor retornado pela converso ser:
2 x 1024 / 5 = 409,6
O resultado deve ser inteiro para que nosso conversor consiga represent-lo, logo o valor 410 ser escolhido por ser o
degrau mais prximo. Esse valor representa a tenso 2,001953125, inserindo um erro de 0,001953125 em nossa medida
devido a limitao de nossa resoluo.

O uso do comando unsigned na declarao da varivel informa que usaremos apenas nmeros
positivos para essa varivel.

COMUNICAO SERIAL
A comunicao serial amplamente utilizada para comunicar o Arduino com outros dispositivos como mdulos
ZigBee, Bluetooth, entre outros. A comunicao com o computador possvel atravs do conversor serial USB presente
nas placas. A biblioteca padro do Arduino possui algumas funcionalidades para a comunicao serial de modo a facilitar
a utilizao desta funo.

Serial Monitor
A possibilidade de visualizar na tela do computador os dados coletados e processados pelo Arduino fundamental,
visto que um forma rpida e prtica de visualizar esses dados. Para isso, usamos o Serial Monitor.
O Serial Monitor disponibiliza uma interface grfica que facilita a comunicao entre o Arduino e um computador.
Aps selecionarmos a porta serial adequada, o serial monitor pode ser aberto pelo cone no canto superior direito da
janela, onde representado por uma lupa.
Serial.begin(9600); //Inicia porta serial e define a velocidade de transmisso

Enviando Dados
Na maioria das vezes, o envio de dados pela porta serial pode ser feito atravs das funes print e println. A funo
28 Apostila Arduino Bsico Vol.1

print imprime os dados na serial utilizando o cdigo ASCII. Essa funo recebe dois parmetros e retorna a quantidade
de bytes que foram escritos.
Serial.print(var); // Imprime a varivel var
Serial.print(ol);// Imprime o texto ol

O parmetro var recebe o valor a ser impresso. A funo sobrecarregada de modo a ser capaz de receber qualquer
tipo padro (char, int, long, float etc).
Quando o texto estiver entre aspas, isso simboliza que voc deseja imprimir um texto. Caso contrrio, voc deseja
imprimir uma varivel.
A funo println imprime o valor desejado semelhantemente a funo print, porm imprime na sequncia os caracteres
\r e \n de modo que crie uma nova linha.
PWM 29

6. PWM
PWM (Pulse Width Modulation Modulao por Largura de
Pulso) uma tcnica para obter resultados analgicos por meios
digitais. Essa tcnica consiste na gerao de uma onda quadrada em
uma frequncia muita alta em que pode ser controlada a porcentagem
do tempo em que a onda permanece em nvel lgico alto. Esse tempo
chamado de Duty Cycle e sua alterao provoca mudana no valor
mdio da onda, indo desde 0V (0% de Duty Cycle) a 5V (100% de
Duty Cycle) no caso do Arduino.

Figura 22 - Sinal PWM

O duty cycle a razo do tempo em que o sinal permanece na


tenso mxima (5V no Arduino) sobre o tempo total de oscilao,
como est ilustrado na figura abaixo:

Figura 23 - Duty cycle


Duty Cycle (%) = (x/x+y)*100% = (x/T)*100%
Vmdio = Vmax*Duty Cycle(%)
O valor do Duty Cycle usado pelo Arduino um inteiro armazenado em 8 bits, de forma que seu valor vai de 0 (0%)
a 255 (100%).

5.1. USANDO A SADA PWM


Para escrever um sinal na sada PWM utiliza-se a funo analogWrite, que recebe como parmetros o pino PWM e o
valor do duty cycle, respectivamente. Esse ltimo parmetro guardado em 8 bits, de modo que esse valor deve estar
entre 0 (0% de duty cycle) e 255 (100% de duty cycle).
analogWrite(9,127);//Escreve no pino 9 um sinal PWM com 50% de duty cycle
//(50% de 255=127)
analogWrite(10,64);//Escreve no pino 10 um sinal PWM com 25% de duty cycle
//(25% de 255=64)

Variando o duty cycle altera-se tambm o valor mdio da onda, de modo que o efeito prtico obtido com o PWM em
algumas aplicaes um sinal com amplitude constante e de valor igual ao valor mdio da onda. Isso permite que se
possa, por exemplo, controlar a intensidade do brilho de um LED, ou a velocidade de um motor de corrente contnua.

5.2. EXPERINCIA 5 LED COM CONTROLE DE INTENSIDADE


INGREDIENTES
Potencimetro linear 10k
LED 5mm
Resistor 470
Fios jumpers
30 Apostila Arduino Bsico Vol.1

Protoboard
Arduino Uno ou outro

MISTURANDO OS INGREDIENTES
Agora vamos conectar os componentes do projeto.
Para isso, monte seu circuito conforme a figura a seguir.
Garanta que seu Arduino esteja desligado durante a
montagem e que o seu LED esteja conectado
corretamente, com a perna mais longa (Anodo)
conectado ao resistor e a perna menor (catodo) ao GND.

LEVANDO AO FORNO Figura 24 - Circuito da experincia 5


Conecte seu Arduino ao computador e abra
a IDE Arduino. No menu Tools, certifique que a porta serial (serial port) est selecionada e se a placa configurada a que
voc est usando (board).

PREPARANDO A COBERTURA
Crie um programa (sketch) e salve com o nome de programa_pwm. Com o seu programa salvo, escreva nele o
cdigo conforme escrito abaixo.
// Daremos um nome ao pino que est conectado o LED
int led = 11;

unsigned int valorLido;


unsigned int pwm;

// Esta funo "setup" roda uma vez quando a placa e ligada ou resetada
void setup() {
pinMode(led, OUTPUT); // Configura o pino do led (digital) como sada
}

// Funo que se repete infinitamente quando a placa ligada


void loop() {
valorLido = analogRead(A0); // valor entre 0 e 1024
pwm = map(valorLido, 0, 1023, 0, 255); // Mudana de escala
analogWrite(led,pwm);//Escreve no led um sinal PWM proporcional ao valorLido
}

Depois de escrever o cdigo, clique em Upload para que o programa seja transferido para seu Arduino.

EXPERIMENTANDO O PRATO
Se tudo der certo, conforme girarmos o potencimetro, a intensidade de luz emitida pelo LED diminuir ou aumentar.

5.3. ENTENDENDO O PROGRAMA


Como j explicado no incio do captulo, o PWM pode ser usado para simular uma sada analgica. Variando um sinal
de sada de PWM de 0 a 255, estamos variando o Duty Cycle, que por sua vez, resulta numa sada de 0V a 5V.
Como a intensidade de luz no LED est diretamente ligada quantidade de corrente que passa por ele e essa corrente
proporcional a tenso do resistor em srie com o LED, conforme variamos a tenso do pino 11 atravs do PWM,
alteramos a intensidade de luz emitida pelo LED.
valorLido = analogRead(A0); // valor entre 0 e 1024

Para variarmos o PWM, usamos o valor analgico lido no potencimetro e armazenamos na varivel valorLido, que
armazena valores entre 0 e 1023. Porm, para que seja possvel usar essa varivel para controlar o PWM, devemos mudar
sua escala para 0 a 255. Para isso usaremos a funo. Tal funo recebe uma varivel e muda sua escala.
PWM 31

pwm = map(valorLido, 0, 1023, 0, 255); // Mudana de escala

Depois de mudarmos de escala, basta escrevermos o valor de PWM na sada do LED.


analogWrite(led,pwm);//Escreve no led um sinal PWM proporcional ao valorLido
32 Apostila Arduino Bsico Vol.1

6. [EXTRA] INTERRUPO
Imagine que voc esteja fazendo seu bolo e no meio da receita seu telefone toque. Possivelmente voc ir parar o que
est fazendo e ir atender o telefone, assim que encerrar a chamada voc ir retornar ao ponto que parou em sua receita.
Quando estamos executando uma tarefa muitas vezes temos que a interromper para resolver outra tarefa
importante para s depois retornar do ponto que se parou. Isso se chama interrupo e usada com frequncia na
programao de microcontroladores.
Uma interrupo tem dois pontos chaves, so eles:

Condio de interrupo
a condio que indica uma interrupo. Ela avisa ao programa que a hora de executar uma tarefa extraordinria.
No nosso exemplo, essa condio o toque do telefone.

Funo a ser executada


Quando algo indica a interrupo, temos que executar uma lista de instrues referentes a essa interrupo. No
exemplo dado, temos que parar de fazer o bolo e ir atender ao telefone. A funo atender telefone uma funo
extraordinria que s executada pelo fato de ter ocorrido a condio de interrupo, o toque do telefone.
Para aprender como implementar uma interrupo, vamos fazer a experincia 6. Nela voc poder entender melhor
esse conceito de interrupo em um microcontrolador.

6.1. EXPERINCIA 6 IMPLEMENTANDO UMA INTERRUPO


INGREDIENTES
Boto de presso
LED 5mm
Resistor 10k
Resistor 470
Fios Jumpers
Protoboard
Arduino Uno ou outro

MISTURANDO OS INGREDIENTES
Agora vamos conectar os componentes do projeto. Para isso, monte seu circuito conforme a figura a seguir.
Garanta que seu Arduino esteja
desligado durante a montagem e que o seu
LED esteja conectado corretamente, com a
perna mais longa (Anodo) conectado ao
resistor e a perna menor (catodo) ao GND.

LEVANDO AO FORNO
Conecte seu Arduino ao computador e
abra a IDE Arduino. No menu Tools,
certifique-se que a porta serial (serial port) Figura 25 - Circuito da experincia 6

est selecionada e que a placa configurada a que voc est usando (board).

PREPARANDO A COBERTURA
Crie um programa (sketch) e salve com o nome de programa_interrupcao.
Com o seu programa salvo, escreva nele o cdigo conforme escrito abaixo.
[EXTRA] INTERRUPO 33

// Existe um LED conectado no pino 13 da maioria dos Arduinos


// Daremos um nome a este pino:
int led = 13;

void interrupo(){
digitalWrite(led, HIGH); // Liga o LED (HIGH = nvel lgico alto)
delay(5000);
}

// Esta funo "setup" roda uma vez quando a placa e ligada ou resetada
void setup() {
pinMode(led, OUTPUT); // Configura o pino do led (digital) como sada
attachInterrupt(0,interrupcao,RISING); //Configurando a interrupo
}

// Funo que se repete infinitamente quando a placa ligada


void loop() {
digitalWrite(led, HIGH); // Liga o LED (HIGH = nvel lgico alto)
delay(1000); // Espera um segundo
digitalWrite(led, LOW); // Desliga o LED (LOW = nvel lgico baixo)
delay(1000); // Espera um segundo
}

Depois de escrever o cdigo, clique em Upload para que o programa seja transferido para seu Arduino.

EXPERIMENTANDO O PRATO
Caso tenha ocorrido tudo como esperado, o LED deve piscar intermitentemente. Quando voc apertar o boto, o LED
da protoboard permanecer aceso por 5 segundos. Caso voc no pressione o boto novamente, ele voltar a piscar.

6.2. ENTENDENDO O HARDWARE


As placas Arduino possuem pinos que podem desempenhar a funo de entrada de sinal para interrupo externa. No
Arduino UNO so as portas digitais 2 e 3, que para tal funo so nomeadas de INT0 e INT1, respectivamente. Veja a
tabela a seguir com os pinos de cada placa Arduino que possuem essa qualidade.

Board int.0 int.1 int.2 int.3 int.4 int.5


Uno, Ethernet 2 3
Mega2560 2 3 21 20 19 18
Leonardo 3 2 0 1 7
Dessa forma, para que seja possvel o uso da interrupo externa, escolhemos o pino digital 2 (INT0), no qual
conectamos o boto.

6.3. ENTENDENDO O PROGRAMA


Com o conhecimento adquirido at agora, voc j pode entender a maioria dos programas. Dessa forma, iremos nos
ater as novidades.

Configurando a interrupo
Para que o Arduino leia uma interrupo, devemos configur-lo. Para tal usaremos o comando attachInterrupt().
attachInterrupt(INT,FUNO,MODO); //Configurando a interrupo

Como explicado anteriormente, numa interrupo temos dois pontos chaves: a condio da interrupo e a funo
que ser executada. Dessa forma, o comando attachInterrupt usado para informar ao programa esses dados. So eles:
INT: Nmero da porta usada para a interrupo. No Arduino UNO INT 0 corresponde porta digital 2 e INT 1
corresponde porta digital 3;
FUNO: Nome da funo que ser chamada quando ocorre a interrupo;
34 Apostila Arduino Bsico Vol.1

MODO: Define em qual tipo de variao do sinal a interrupo ser disparada. As opes so:
LOW: Dispara a interrupo quando a tenso no pino est em 0V
CHANGE: Dispara sempre que o sinal no pino muda de estado, borda 0V (0) para 5V(1) ou
vice-versa;
RISING: Dispara somente borda de subida, 0v (0) para 5V ( 1);
FALLING: Dispara somente borda de descida, 5V (1) para 0V (0)
Em nosso programa, usaremos esse comando da seguinte forma:
attachInterrupt(0,interrupcao,RISING); //Configurando a interrupo

Portanto, temos como condio de interrupo a mudana de estado de 0V (0) para 5V(1) no pino digital 2 (INT
0) e a funo a ser executa se chama interrupo.

Funo interrupcao()
Como j explicado no captulo 2, funo um bloco de tarefas a serem executadas pelo programa quando solicitada.
void interrupo(){ //Funo executada quando ocorre a interrupo externa
digitalWrite(led, HIGH); // Liga o LED (HIGH = nvel lgico alto)
delay(5000);
}

No nosso caso, a funo ser solicitada quando ocorrer a interrupo. As tarefas a serem executadas sero: acender o
LED e esperar 5 segundos.
APNDICE - TABELA DE CONSULTA 35

7. APNDICE - TABELA DE CONSULTA


Funes Matemticas e de tempo
delay(t) O programa tem uma pausa de t milissegundos
delayMicroseconds(t) O programa tem uma pausa de t microssegundos
millis() Retorna o tempo, em milissegundos, desde que o programa comeou a rodar
randomSeed(referncia) Gera uma referncia para o primeiro nmero aleatrio (Funo setup)
random(min,max) Gera um valor pseudoaleatrio int entre min e mx. (a funo acima necessria)
abs(x) Retorna o mdulo (valor absoluto) do nmero real passado como parmetro
map(valor,min1,max1,min1 Converte um valor inserido em uma faixa de valores para um proporcional em
,max2) uma nova faixa de valores. Mudana de range.
sin(x) Retorna o seno de x(rad)

Entradas Analgicas
anologRead(Pino) L entrada analgica 0-5V transformando em 10 bits (resoluo 4,9mV)
Pinos analgicos podem ser usados como porta digitais usando a funo pinMode(), quando usado
como porta analgica no necessitam de configurao.

Sadas/entradas Digitais e PWM


pinMode(porta,Tipo) Define se a porta ser entrada (TIPO=INPUT) ou sada (TIPO= OUTPUT).
digitalWriter (pino, VL) Coloca 0V (VL =LOW) ou 5V(VL = HIGH) na sada.
digitalRead(pino) L o sinal digital no pino citado.
analogWrite(pino, x) Sada PWM 500Hz ( 0 <= x <=255).
analogWrite(pino, x) Sada PWM 500Hz ( 0 <= x <=255).
tone(pino,frequncia,durao) Gera uma frequncia no pino durante um determinado tempo.
tone(pino,frequncia) Gera uma frequncia no pino
noTone(pino) Cessa a gerao do tom no pino.
Mede a largura em microssegundo de um pulso no pino digital, valor o tipo
pulseIn(pino,valor,espera) de pulso a ser medido (LOW ou HIGH), espera (opcional) faz com que a medida
do pulso s comece aps o tempo em microssegundos especificado.
uma interrupo, ou seja, caso a condio modo ocorra no pino
especificado a funo executada imediatamente.
LOW Dispara a interrupo quando o pino est em 0
attachInterrupt(pino,funo,
CHANGE Dispara sempre q o pino muda de estado (borda 0-> 1 ou
modo)
vice-versa)
RISING Somente borda de subida (0 para 1)
FALLING Somente borda de descida (1 para 0)
36 Apostila Arduino Bsico Vol.1

Variveis
Tipo de dado RAM Intervalo numrico
boolean 1 byte 0 a 1 (FALSE ou TRUE)
int 2 bytes -32.768 a 32.767
unsigned int 2 bytes 0 a 65.535
Word 2 bytes 0 a 65.535
Char 1 byte -128 a 127
usigned char 1 byte 0 a 255
Byte 1 byte 0 a 255
void keyword N/A N/A
Long 4 bytes -2.147.483.648 a 2.147.483.647
Usigned long 4 byte 0 a 4.294.967.295
float 4 byte -3,4028235e+38 a 3,4028235e+38
Double 4 byte -3,4028235e+38 a 3,4028235e+38
string 1 byte + x Sequncia de caracteres
array (vetor) 1byte + x Sequncia de variveis
tipovar nomeMatriz[n de
posies]

Comunicao Serial
Serial.begin(TAXA) Habilita a porta serial e fixa a taxa de transmisso (funo setup)
Serial.end() Desabilita a porta serial para permitir o uso dos pinos digitais
Serial.flush() Libera caracteres que esto na linha serial, deixando-a vazia e pronta para
entradas e sadas.
Serial.available() Retorna o nmero de bytes disponveis para leitura no buffer da porta serial.
Serial.read() L o primeiro byte que est no buffer da porta serial
Serial.print(valor,formato) Envia para a porta serial um caractere ASCII
Serial.println(valor,formato) O mesmo que o anterior, porem pula uma linha

Operadores de Comparao
== Igual
!= Diferente
< Menor
> Maior
>= Maior ou igual
<= Menor ou igual

Operadores Lgicos
&& AND
|| OR
! NOT
APNDICE - TABELA DE CONSULTA 37

Smbolos Compostos
x++ Incrementa x
x-- Decrementa x
x+=y x = x+y
x-=y x = x-y
x*=y x = x*y
x/=y x = x/y
Smbolos
{} Entre as chaves fica o contedo da funo
; Final de um comando/linha
// Linha de comentrio
/* ... */ Comentrio de varias linhas

Funes
Funo Se e Se no
If(condio)
{}
else
{}
Funo Se em cascata
if(condio)
{}
else if(condio 2)
{}
switch(expresso){ Funo Caso
case expresso = x:
Bloco1;
break;
case expresso = y: Bloco2;
break;
default: bloco3
}
while(condio){bloco Funo Enquanto
funes}
Funo Enquanto, ela executada pelo menos uma vez.
do{
bloco de instrues
}
while(condio);

for(var;condio;incremen Funo Para


to){}
Operador ternrio ? caso condio seja verdadeira ele executa o bloco 1, caso
(condio) ? contrario, executa o bloco 2.
bloco1:bloco2; Ex.: y = (x >10)? 15:20; // caso x>10 y=15, caso contrario, y = 20
38 Apostila Arduino Bsico Vol.1

CDIGO DE CORES DOS RESISTORES


APNDICE - TABELA DE CONSULTA 39

Fundada em maro de 2014 com a filosofia de promover a mudana, o site Vida de Silcio uma empresa
que trabalha no ramo de Robtica e Sistemas Digitais fornecendo produtos de excelente qualidade de diversas
marcas para estudantes, entusiastas, Instituies de Ensino e Empresas de Tecnologia.
Temos como misso disseminar e promover a eletrnica e a robtica, vendendo produtos com preos justos
e ensinando como us-los de forma didtica e organizada. Estimulando assim, que mais pessoas exercitem sua
criatividade, produzindo tecnologias que possam mudar o cotidiano da humanidade.
Queremos estar presentes em cada nova ideia, em cada novo desafio e em cada conquista daqueles que
promovem a mudana das mais variadas formas usando como ferramenta a tecnologia.