Documente Academic
Documente Profesional
Documente Cultură
Esperamos que goste dessa apostila, ela foi feita com carinho pensando em voc.
Divirta-se!!
Atenciosamente,
SUMRIO
1. Sobre a apostila...................................................................................................................................................... 4
2. Introduo ......................................................................................................................................................... 6
6. PWM ............................................................................................................................................................... 29
1. SOBRE A APOSTILA
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.
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:
IDE ARDUINO
Quando tratamos de software na plataforma Arduino, podemos referir-nos ao ambiente de desenvolvimento integrado
8 Apostila Arduino Bsico Vol.1
3. SADAS DIGITAIS
PROGRAMANDO
Abra a Arduino IDE e escreva o seguinte cdigo:
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.
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.
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.
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
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
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.
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.
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
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
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).
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 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
*/
// Variveis
int buttonState = 0; // Varivel para leitura do estado do boto
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
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:
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
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.
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
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.
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.
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
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.
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.
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.
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;
// 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
}
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.
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
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.
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
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
}
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.
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
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.
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);
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.