Professional Documents
Culture Documents
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 .................................................................................................................................................... 30
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 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.
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.
permitir o desenvolvimento do software, de envi-lo placa para que possa ser executado e de
interagir com a placa Arduino.
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.
Agora clique em Upload/Carregar para que o programa seja transferido para seu Arduino.
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.
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.
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:
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:
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.
14 Apostila Arduino Bsico Vol.1
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.
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.
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
SADAS DIGITAIS 15
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.
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.
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;
}
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.
// 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.
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.
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.
O segundo o delay. O comando delay cria uma pausa no algoritmo pelo tempo
determinado em milissegundos (1 segundo igual a 1000 milissegundos).
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
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.
Figura 11 - Circuito da experincia 2
SADAS DIGITAIS 19
LEVANDO AO FORNO
Agora temos que carregar o programa no Arduino. Caso voc tenha carregado outro
programa ou ainda no fez o exemplo 1 e seu Arduino ainda no 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 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.
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
Figura 12 - Resistor
mxima de 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 >
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.
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.
Na segunda linha temos o pino 2, definido pela constante buttonPin, sendo configurado
como uma entrada digital.
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);
24 Apostila Arduino Bsico Vol.1
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:
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
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
N de latas de leite
leite condensado, ser invivel fazer uma condensado >= 1?
cobertura de brigadeiro. Dessa forma, o nmero
de latas de leite condensado disponveis deve ser
Se for: Faa a Se no for : no
maior ou igual a 1 latas para que seja vivel fazer cobertura de faa a cobertura
brigadeiro de bigadeiro
essa cobertura.
ENTRADAS DIGITAIS 25
Operadores de Comparao
== Igual
!= Diferente
< Menor
> Maior
<= Menor e igual
>= Maior e igual
26 Apostila Arduino Bsico Vol.1
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
ENTRADA ANALGICA 27
nome de programa_entrada_anologica.
Com o seu programa salvo, escreva nele o cdigo conforme escrito abaixo.
// 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
DIVISOR DE TENSO
Quando temos n resistncia associadas em srie temos o nome de divisor de tenso. Em um
28 Apostila Arduino Bsico Vol.1
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.
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.
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
ENTRADA ANALGICA 29
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 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.
30 Apostila Arduino Bsico Vol.1
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.
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:
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.
PWM 31
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 24 - Circuito da experincia 5
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
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.
32 Apostila Arduino Bsico Vol.1
EXPERIMENTANDO O PRATO
Se tudo der certo, conforme girarmos o potencimetro, a intensidade de luz emitida pelo
LED diminuir ou aumentar.
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.
Figura 25 - Circuito da experincia 6
34 Apostila Arduino Bsico Vol.1
LEVANDO AO FORNO
Conecte seu Arduino ao computador e abra a IDE Arduino. No menu Tools, certifique-se
que a porta serial (serial port) 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.
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;
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.
36 Apostila Arduino Bsico Vol.1
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
38 Apostila Arduino Bsico Vol.1
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);