Você está na página 1de 38

INSTITUTO FEDERAL DE PERNAMBUCO

CAMPUS GARANHUS

Arduino: Entre Fundamentos e Atividades Experimentais

Ministrantes: Eliamare Alves


Yago Monteiro

GARANHUNS
2015

SUMRIO

Sumrio
1

- Arduino ..................................................................................................................... 4

2 Caractersticas Bsicas ........................................................................................ 5


3 Desenvolvimento de Software ......................................................................... 8
3.1 Tpicos em C/C++ ......................................................................................... 8
3.1.1 Tipos de dados ......................................................................................... 9
3.1.2 Operadores .............................................................................................. 10
3.1.3 Estruturas de deciso ......................................................................... 11
3.1.4 Estruturas de repetio e funes ............................................... 12
3.1.5 Funes...................................................................................................... 14
3.2 IDE do Arduino .................................................................................................. 16
4 Experimentos.......................................................................................................... 18
4.1 Portas digitais ................................................................................................ 18

APRESENTAO
Este minicurso tem por objetivo mostrar uma breve introduo sobre
a programao de microcontroladores e o leque de possibilidades que esses
dispositivos abrem para desenvolvimento de projetos de Engenharia de
qualquer nvel de complexidade.
No decorrer do curso, usaremos a plataforma de desenvolvimento
Arduino que dotada de um microcontrolador de programao relativamente
simples alm de ser open-source, ou seja, possui uma srie de bibliotecas de
funes para as mais variadas atividades que podem ser com ele realizadas.
Devido a essas facilidades e tendo em vista que o curso objetiva atingir
os estudantes que nunca manipularam ou no tem ideia do que seja um
microcontrolador, escolhemos o Arduino como objeto de estudo. Alm disso,
esperamos que aps a apresentao desse material, uma parte dos alunos
desenvolvam aplicaes que envolvam a integrao de hardware e software
e com isso, tenham ideia do trabalho que iro executar enquanto engenheiros
eletricistas.

- Arduino

Arduino uma plataforma de prototipagem eletrnica criada com o


objetivo de permitir o desenvolvimento de controle de sistemas interativos,
de baixo custo e acessvel a todos.
A plataforma composta de duas partes: o hardware, que a placa de
circuito contendo o microcontrolador, e o software que o ambiente de
programao.
Um microcontrolador (tambm denominado MCU) um computador
on-chip, que contm processador, memria e perifricos de entrada/sada.
um computador que pode ser programado para funes especficas, em
contraste com outros microprocessadores de propsito geral (como os
utilizados nos PCs). Eles so embarcados no interior de algum outro
dispositivo, no nosso caso o Arduino, para que possam controlar suas funes
ou aes.
Pela prpria definio de computador como um dispositivo capaz de
receber um sinal de entrada, processar e gerar um sinal de sada, um
microcontrolador um dispositivo que, associado a determinado tipo de
sensor consegue interpretar uma grandeza fsica, process-la e acionar algum
dispositivo na sada.
Um ambiente de programao, mais conhecido como IDE (Integrated
Development Environment) uma aplicao que engloba um editor de texto
capaz

de

identificar

sintaxe

de

uma

determinada

linguagem

de

programao, um compilador que transforma o texto em linguagem de


mquina (zeros e uns) e um debugger que um software que auxilia o
desenvolvedor a avaliar o programa que ele est escrevendo.
Alm do hardware, a comunidade Arduino desenvolveu uma IDE para
facilitar o desenvolvimento das aplicaes usando uma verso prpria de
C/C++ e com um grande acervo de bibliotecas de funes para diversos
sensores e aplicaes especficas.

2 Caractersticas Bsicas

Dado que existem diversas verses do Arduino, esclarecer as


caractersticas de todas as placas no o foco do que h de ser feito aqui.
Assim, sero discutidas apenas as caractersticas do Arduino UNO.
O Arduino UNO uma das verses mais populares da plataforma e
dotada de um ATmega328 como processador. Na placa existem 14 pinos de
E/S digitais (6 destas capazes de funcionar como PWM), 6 pinos de E/S
analgicas, um oscilador de 16MHz, conector USB, conector ICSP, conector
de fonte externa e reguladores de tenso para 5V e 3V3 que alimentam o
processador e boa parte dos sensores que podem ser conectados s portas.
Ao contrrio de outras plataformas, o Arduino pode ser programado
diretamente pela interface USB. Em outros dispositivos necessria a
utilizao de um programador conectado a interface JTAG.
Na forma de blocos, podemos esquematizar a placa nos seguintes
blocos:

Apresentando
configurao:

alguns

dos

blocos na

placa,

temos

seguinte

A partir de agora exploraremos cada um desses blocos e suas


caractersticas individuais:
1. Fonte de alimentao: Como o prprio nome sugere, essa parte da placa
de prototipagem responsvel por receber tenses de alimentao entre 5 e
12V e atravs de dispositivos reguladores de tenso, as tenses de entrada
para a alimentao dos dispositivos da placa.
2. CPU: Parte responsvel pelo processamento das entradas e gerao das
sadas do circuito. o controlador propriamente dito, possuindo todas as
partes componentes de um computador. A especificao dos controladores
varia de acordo com a verso da placa. No Arduino UNO, a CPU funciona a
16MHz com 2KB de memria RAM e 32KB de memria flash (memria
secundria).
3. Entradas e sadas: De acordo com o bloco apresentado, o arduino UNO
apresenta dezenove pinos de entrada e sada de dados. Todos podem ser
configurados como entrada e sada de acordo com a vontade do
desenvolvedor.
Os pinos nomeados de A0 a A5 so pinos de entrada analgica/sada
digital, ou seja, so pinos capazes de ler valores de tenso entre 0-5V. Como

uma sada digital um valor entre 0 e 5V, essas entradas tambm podem
ser usadas como entrada/sada digital.
Os pinos de 0 a 13 so pinos de E/S digitais que assim como os pinos
analgicos podem ser configurados tanto para leitura como para escrita
digitais e no podem ser usados. Vale lembrar que os pinos 0 e 1 so usados
para comunicao serial e que, caso voc esteja usando esse recurso, as
portas no estaro disponveis.

3 Desenvolvimento de Software
Agora com alguns conhecimentos bsicos do hardware do Arduino,
falaremos um pouco sobre o desenvolvimento de software.
Os desenvolvedores do Arduino disponibilizam gratuitamente um
ambiente de desenvolvimento integrado (IDE) construdo em JAVA sobre um
compilador gcc (C/C++) que alm de facilitar a manipulao de diversas
bibliotecas de funes especficas do Arduino e ter a funo de realizar upload
do cdigo para a placa, fornece um terminal de comunicao serial no qual
se pode enviar e receber dados da placa.
A

IDE

do

Arduino

pode

ser

baixada

na

pgina

(http://arduino.cc/en/Main/Software) de trs modos diferentes: download do


instalador do programa, download do arquivo comprimido da pasta do
programa (RAR/ZIP) e download do programa e cdigo-fonte, visto que o
ambiente de desenvolvimento open-source. Alm da IDE disponibilizada
pelos

desenvolvedores,

existem

outros

ambientes

com

as

mesmas

caractersticas mas que possuem funcionalidades a mais como no caso do


MariaMole que uma alternativa a IDE padro.
Quanto a linguagem de programao a ser utilizada teremos uma
variante da linguagem C/C++ desenvolvida por pesquisadores do MIT Media
LAB com o objetivo de tornar mais simples o processo de criao de
aplicaes de computao fsica para iniciantes.
Como no foi fixado como pr-requisito, dedicaremos a prxima seo
para tratar de aspectos bsicos da linguagem C/C++ suficientes para
compreender os trechos de cdigo e at criar algum cdigo.

3.1 Tpicos em C/C++


Como foi dito anteriormente, a linguagem de programao usada para
programar o Arduino uma variante de C/C++ que possui a mesma sintaxe,
que o modo como o cdigo escrito antes de ser compilado. Assim,
mostraremos apenas alguns elementos essenciais da linguagem necessrios
para compreenso dos trechos de cdigo, so eles:

Tipos de dados;

Operadores;

estruturas de deciso;

estruturas de repetio e funes.

3.1.1 Tipos de dados


No dia-a-dia tratamos as mais variadas situaes de forma diferente,
seja mudar o vocabulrio quando se conversa com uma autoridade, seja
pagar um lanche no carto de crdito quando o dinheiro chega ao fim. Os
computadores tambm tratam tipos de dados diferentes de forma diferente,
uma palavra diferente de uma letra, que diferente de um nmero inteiro,
que diferente de um numero decimal. Em resumo, cada tipo de
informao armazenada e tratada de um jeito diferente.
Dentre outros tipos de dados, a linguagem C/C++ dotada dos
seguintes tipos: int (nmeros inteiros com sinal), float (nmeros em ponto
flutuante), char (caracteres), boolean (verdadeiro ou falso).

Int Reserva uma locao de memria de pelo menos 4bytes para


uma varivel do tipo inteiro.
Float Reserva uma locao de memria de pelo menos 4bytes para
uma varivel do tipo float (nmeros com virgula)
Char Reserva uma locao de memria de 1byte para uma varivel
do tipo caractere.
Boolean reserva uma locao de memria de 1byte para
armazenar uma varivel do tipo booleano.

Para reservar um espao de memria necessrio pedir ao


compilador declarando uma varivel. Para fazer isso basta escrever o nome
do tipo e o nome da varivel que voc desejar seguido de ;.
Ex.: int numero;
float numero_decimal;

3.1.2 Operadores
A linguagem oferece tambm uma srie de operadores para realizao
de tarefas entre variveis na memria. O quadro a seguir mostra alguns dos
operadores mais usados.
Operador

Funo
Operadores matemticos

Soma dois int ou dois float.

Subtrai dois int ou dois float.

Multiplica dois int ou dois float.

Divide dois int ou dois float.


Operadores de comparao

>

Compara dois valores, se o primeiro


for maior que o segundo retorna
TRUE, caso contrrio, FALSE

<

Compara dois valores, se o primeiro


for menor que o segundo retorna
TRUE, caso contrrio, FALSE

<=

Compara dois valores, se o primeiro


for maior ou igual ao segundo
retorna TRUE, caso contrrio, FALSE

>=

Compara dois valores, se o primeiro


for menor ou igual ao segundo
retorna TRUE, caso contrrio, FALSE

Operador de atribuio, armazena


na varivel a esquerda o valor da
direita.

==

Compara dois valores, se o primeiro


for igual ao segundo retorna TRUE,
caso contrrio, FALSE

!=

Compara dois valores, se o primeiro


for diferente do segundo retorna
TRUE, caso contrrio, FALSE

Operadores lgicos
&&

Operador AND lgico: compara duas


condies,

caso

as

duas

sejam

TRUE, retorna TRUE


||

Operador OR lgico: compara duas


condies, caso uma das duas seja
TRUE, retorna TRUE

Operadores bit a bit


&

AND bit abit: realiza operao AND


entre a varivel da esquerda e da
direita bit a bit

OR bit-a-bit: realiza operao OR


entre a varivel da esquerda e da
direita bit a bit.

3.1.3 Estruturas de deciso


Comuns a toda linguagem de programao, as estruturas de deciso
realizam papel importante no controle de fluxo do programa. As duas
estruturas de deciso so if e else, sempre usadas em pares servem para
dizer ao programa que caso uma condio preestabelecida seja satisfeita, um
trecho de cdigo seja executado e, caso contrrio, seja executado outro
trecho.
Em uma linguagem mais comum essas estruturas servem para dizer
ao programa Se acontecer isso, faa tal coisa, caso no faa essa outra
coisa. Por exemplo: um sensor envia uma mensagem de status com o
nmero 2 indicando que a temperatura ambiente ultrapassou 25C e que
nesse caso se faz necessrio ligar o ar-condicionado da sala para que quando
a temperatura fique abaixo dos 25C. Caso a temperatura esteja abaixo dos
25C, o sensor sempre envia a mensagem com o nmero 3. Desta forma,
temos o seguinte:
Se (mensagem_sensor == 2) ligue o ar-condicionado,

Do contrrio no ligue o ar-condicionado


No exemplo acima, o que foi mostrado chamado de pseudocdigo,
que uma descrio das aes a serem realizadas que independem da
linguagem a ser adotada. Em C/C++, existe uma sintaxe prpria para
estabelecer esse tipo de estrutura:
if(condio){ acao_1;}
else acao_2;

Escrevendo o cdigo em C/C++ do exemplo que demos anteriormente,


temos:
if(mensagem_sensor == 2) {ar(ON);}
else; //no h necessidade de executar nenhuma ao

Caso haja mais de duas aes a serem tomadas, pode-se aninhar as


estruturas usando junto ao else uma outra condio if. Ex.:
if (mensagem_sensor == 2) {ar(ON);}
else if(mensagem_sensor == 4) {ar(OFF);}
//suponha que a mensagem 4 significa que a temperatura est abaixo de
15C
else;

3.1.4 Estruturas de repetio e funes


Assim como as estruturas de deciso, as estruturas de repetio so
parte essencial das linguagens de programao pois estabelecem um controle
de fluxo na execuo do programa e permite a criao de algoritmos que
facilitam (e muito) a vida do desenvolvedor.
Entre outros tipos de estruturas de repetio, apresentaremos as duas
mais usadas junto com alguns exemplos de uso. So elas as estruturas while
e for.
A estrutura while define um lao de repetio que executa um trecho de
cdigo enquanto a condio fixada no seja satisfeita. Em outras palavras, a
execuo do programa fica travada enquanto a condio no satisfeita.

Esse tipo de estrutura mais usada quando no se conhece a


quantidade de passos a serem executados, muito embora possa ser utilizada
quando a informao sobre a quantidade de passos pode ser obtida por meio
de alguma relao. Como exemplo, podemos pensar em um jogo de cara ou
coroa no qual a moeda jogada at que saiam duas coroas consecutivas. Desta
forma temos a seguinte situao:
enquanto ( quantidade de coroas <= 2) jogue a moeda.
Nesse caso, a moeda ser jogada at que a quantidade de coroas seja
menor ou igual a dois. Em C/C++ a sintaxe do comando a seguinte:
while(condio de parada)
{
//Ao a ser executada
};

Reescrevendo o pseudocdigo do exemplo da quantidade de coroas em


C/C++, temos:
int quantidade_coroas = 0;
int resultado_jogada = 0;
while(quantidade_coroas <= 2)
{
Resultado_jogada = Jogar_moeda();
if(resultado_jogada == 1) {quantidade_coroas++;}
}
Quando a quantidade de passos a ser executada conhecida, mais
vantajoso que seja usada a estrutura do tipo for. Diferentemente do while, o
for trabalha com uma condio inicial, um critrio de parada ou finalizao e
uma ao a ser tomada a cada vez que o lao for executado.
Como exemplo podemos tomar a divulgao de notas por um professor
no sistema de controle acadmico da instituio. Dada uma turma com n
alunos, o professor deseja inserir as n notas correspondentes no sistema.
Obviamente, ele ter que executar a tarefa de inserir as notas tantas vezes
quanto n. Logo, a sequncia de aes que ele deve executar a seguinte:
De aluno1 at aluno_n inserir_nota();

Logo, podemos ver as trs condies necessrias para o bom


funcionamento do programa: a comear do aluno1(condio inicial), at o
aluno_n (condio de parada) e um incremento a cada passo dado (passar
para o prximo aluno). A ao de inserir a nota realizada aps checar se a
ltima nota inserida foi a do aluno_n. Caso no tenha sido esse o caso, o cdigo
reexecutado at que a condio seja verdadeira.
A sintaxe do comando a seguinte:
for(condio_inicial; condio de parada; incremento)
{
//conjunto de aes a serem realizadas
};

Convertendo o exemplo em cdigo C/C++, temos o seguinte cdigo:


for (num_aluno = 1; num_aluno< n; num_aluno++)
{
Inserir_nota(alunos[num_aluno]);
};

3.1.5 Funes
Funes so trechos de cdigo que realizam uma determinada ao. A
vantagem de usar funes est em modularizar e reusar cdigos j feitos por
outra pessoa ou at pelo prprio desenvolvedor.
O emprego de funes facilita bastante a compreenso do cdigo e
habilita o desenvolvedor a trabalhar em um nvel de abstrao mais alto, se
preocupando menos com os pormenores da execuo do cdigo.
muito comum que desenvolvedores criem bibliotecas de funes para
executar uma determinada gama de atividades. Os sensores mais comuns no
mercado geralmente tem uma biblioteca de funo feita para realizar a
interao do sensor com determinada plataforma.

Nos exemplos anteriores omitimos o uso de funes propositalmente.


Aes como ler a mensagem do sensor no primeiro exemplo, jogar a moeda e
inserir nota dos alunos esto na forma de funo.
Na prtica, uma funo um trecho de cdigo armazenado em na
memria que pode receber ou no algum tipo de informao, realizar um
determinado procedimento e devolver (ou no) uma resposta. Aos tipos de
informao passadas para uma funo d-se o nome de parmetro e a
informao devolvida tipo de retorno.
Para usar uma funo necessrio que se saiba o numero e tipo de
parmetros que ela recebe e seu tipo de retorno. O exemplo mais bsico que
se pode dar a soma de dois nmeros a e b. A funo que realiza essa tarefa
recebe como parmetro dois inteiros e retorna como resposta um outro inteiro
que a soma dos dois. Antes de escrever a funo soma(), necessrio
estabelecer a sintaxe bsica de uma funo:
tipo_retorno NomeDaFuncao (tipo1 param1, tipo_n param_n)
{
//cdigo aqui
}
Podemos ento definir a funo soma como:

int soma(int a, int b)


{
return a+b;
}
Declarada a funo soma, poderamos usa-la sempre que precisssemos
somar dois inteiros. Obviamente esse um exemplo trivial e aparentemente
no h uma necessidade aparente de usar uma funo para fazer uma tarefa
to simples. Na realidade, o que ocorre que funes geralmente chamam
outras para realizar tarefas mais simples e, dessa forma, cumprir uma ao
bem maior.

3.2 IDE do Arduino


Como j foi mencionado anteriormente, alm da placa programvel, o
Arduino tambm dotado de uma IDE para facilitar o desenvolvimento dos
programas e algumas ferramentas bastante teis como o monitor serial.
A

IDE

do

Arduino

pode

ser

baixada

na

pgina

(http://arduino.cc/en/Main/Software) de trs modos diferentes: download do


instalador do programa, download do arquivo comprimido (RAR/ZIP) e
download do programa e cdigo-fonte.
Alm da IDE disponibilizada pelos desenvolvedores, existem outros
ambientes com as mesmas caractersticas mas que possuem funcionalidades
a mais como no caso do MariaMole que uma alternativa a IDE padro.
Ao abrir o executvel da IDE, ser aberta uma janela como a seguinte:

Na figura acima esto indicados os botes e suas respectivas funes.


Ao clicar em Arquivo>Novo, teremos a seguinte janela:

Lendo rapidamente o cdigo dentro da janela, podemos ver duas


estruturas:

setup() onde sero definidos os parmetros iniciais da placa


tais como especificao dos pinos que sero usados como E/S,
inicializao de parmetros de comunicao serial (velocidade da
comunicao) entre outras.

loop()

basicamente uma estrutura de repetio na qual a

condio de parada sempre falsa, ou seja, uma vez que os


parmetros so configurados em setup() e que o programa entra
em loop() ele ficar travado at que a placa seja reinicializada.
Para cada novo projeto criado, a IDE gera uma pasta com todos os
arquivos necessrios ao projeto, salvando pelo menos um arquivo com a
extenso .INO.

4 Experimentos

Nesta seo sero apresentados alguns experimentos que trabalham


alguns dos conceitos mais importantes para o desenvolvimento de prottipos
usando a plataforma Arduino.

4.1 Portas digitais


O Arduino possui vinte pinos capazes de implementar entrada ou sada
digital, mas o que seria isso? Uma grandeza digital uma grandeza que varia
de forma discreta dentro de um determinado intervalo de tempo.
Em outras palavras, uma grandeza que varia em degraus, ou seja,
tem amplitudes bem definidas para codificar uma determinada medida, como
por exemplo um relgio digital que possui apenas os indicadores de horas e
minutos, nesse caso no possvel ler um horrio com preciso de segundos,
pois no existe um nvel capaz de especificar a quantidade de segundos.
No nosso caso, toda grandeza digital tem apenas dois estados: Ligado e
desligado, HIGH e LOW, 0 e 1. Como sabemos, possvel codificar todo tipo
de informao usando o sistema binrio que, sem nenhuma surpresa, a base
do mundo digital.
Esse primeiro experimento foi dividido em duas partes: escrita e leitura
em portas digitais. A primeira parte do experimento trabalha a escrita de nveis
lgicos em portas digitais de modo a acender um ou mais leds.

4.1.1 Escrita de nveis lgicos em portas digitais


Piscar um led o primeiro programa a ser feito com qualquer
microcontrolador

pois

uma

tarefa

bastante

simples.

Clicando

em

Arquivo>Exemplos>Basic>Blink, uma nova janela ser aberta contendo um


exemplo de cdigo:

Nesse cdigo podemos identificar em setup(), as funes pinMode(),


digitalWrite() e delay(). A seguir ser explicado o que cada uma delas realiza:
pinMode (int pino, int direo) essa funo determina se um pino
funcionar como uma sada (escrita de nvel lgico) ou entrada (leitura
de nvel lgico). A funo recebe como parmetros o pino a ser
configurado e a direo desejada.
digitalWrite(int pino, int nvel_logico ) essa funo determina se
ser aplicado nvel lgico 0 (LOW) ou 1 (HIGH) no pino. Recebe o pino
e o nvel lgico do pino a ser aplicado.
delay (int time_ms) Essa funo pausa a execuo do cdigo por
time_ms milissegundos.
Sabendo o que cada funo realiza, podemos ver que o cdigo executa a
seguinte sequncia de aes: configura a porta como sada (no setup), escreve
nvel alto na porta 13, pausa a execuo, escreve nvel baixo na porta 13 e

pausa novamente, sendo essa ao executada continuamente por estar dentro


do loop.
Ligado a porta 13 do arduino, existe um led soldado placa. Ao fazer
upload do cdigo para a placa, aps cerca de 2s ser possvel ver um led
piscando na placa a cada 1s. Essa velocidade pode ser aumentada modificando
o tempo de pausa da execuo para um valor menor.
O procedimento o mesmo caso se queira ligar mais do que o led soldado
na placa. Vale lembrar que para ligar qualquer componente aos pinos de sada
digital do Arduino necessrio saber se esse componente drenar mais do que
40mA de corrente do pino. Caso isso acontea altamente provvel que ou a
porta ou at todo o arduino queime.
Para resolver o problema de limite mximo de corrente, pensamos da
seguinte forma: Como a sada de tenso em um pino no mximo 5V, caso
coloquemos um resistor de 100 ohms em srie com o pino, a corrente mxima,
dada pela lei de ohm, 50mA que maior do que a mxima suportada. Por
um clculo de aproximao, qualquer resistor maior do que 120 ohms em srie
com um led vai deixar a corrente dentro dos limites mximos.

Alm de ser possvel escrever nveis lgicos diretamente nas portas,


existem determinados tipos de sensores que funcionam usando
interfaces de comunicao digital via SPI ou I2C que so barramentos
aos quais o Arduino possui interface e bibliotecas de funes com tudo
o que necessrio para usa-los.
4.1.2 Leitura de valores digitais em portas digitais
Assim como na escrita, um determinado pino do arduino capaz
de ser configurado para funcionar como um detector de nvel lgico por
um procedimento bem semelhante ao que foi usado para configurar a
escrita.
Clique em Arquivo>Exemplos>Digital>Button. A seguinte janela se
abrir:

A diferena desse cdigo para o do experimento anterior est na


renomeao dos pinos 2 e 13 como buttonPin e ledPin, no segundo
pinMode e no aparecimento da funo digitalRead().
digitalRead(int pino) L o estado lgico do pino e retorna
HIGH caso o pino esteja ligado e LOW caso o pino esteja
desligado.
Portanto a sequncia de aes executadas no programa dentro
do loop : Ler o estado do pino e armazenar na varivel buttonState,

logo aps ler o valor, se buttonState tiver valor HIGH acender o led
ligado na porta 13, caso buttonState tiver valor LOW, apagar o led.
Entendido o cdigo, a parte menos trivial a questo da
montagem do circuito para poder ligar o boto ao circuito. Existem
duas montagens de circuito possveis para esse circuito que utilizam
ou a tcnica de pull-up ou a de pull-down, que consistem em colocar
um resistor ligado do pino de leitura ao VCC (pino de alimentao, 5V)
ou ao terra do circuito (GND) respectivamente.
Optou-se por montar o circuito usando pull-down, ou seja, a
nossa leitura na porta 2 sempre ser LOW at que o boto seja
pressionado. Estando o boto pressionado, a leitura do pino 2 ser
HIGH e o led ser acionado.

4.2 Portas Analgicas


Quando algo falado sobre grandezas analgicas, a primeira
ideia (ou deveria ser) de uma grandeza que varia de forma contnua
no tempo tal como o ponteiro de um relgio deslizando, o que, de fato,
caracteriza uma grandeza analgica.
Semelhantemente ao que foi feito com as portas digitais, a
inteno de trabalhar com grandezas analgicas obter determinados
tipos de dados e operar atuadores de forma eficiente. O nico problema
em

fazer

essas

duas

operaes

que:

sendo

sistema

de

armazenamento digital, como armazenar/retornar informaes de


cunho analgico?
Em algumas portas do Arduino temos dois tipos de dispositivo
eletrnico que foram feitos para realizar essas operaes: O conversor
A/D e seu dual, o conversor D/A.
O conversor A/D realiza a captura de uma informao analgica
com uma determinada resoluo e a codifica em uma quantidade de
bits. Quanto maior a quantidade de bits para armazenar a informao,
mais fiel ser ao sinal de origem.
As portas capazes de fazer uma leitura analgica so as portas
A0 a A5. A elas est conectado um conversor A/D de 10 bits, ou seja,
um conversor A/D capaz de armazenar 1024 nveis de tenso
diferentes. Cada um desses nveis de tenso difere do anterior de
4.88mV, dado que a tenso mxima suportada de 5V (5V/1024
nveis).
As portas capazes de fazer escrita analgica so as portas 3, 5,
6, 9, 10, e 11. A essas portas est associada a capacidade de gerar
sadas digitais moduladas por PWM de 8bits.
A modulao por largura de pulso (Pulse Width Modulation PWM) uma tcnica na que emula uma grandeza analgica usando

mtodos digitais. A tcnica consiste em, dado uma janela de tempo,


variar o tempo que o sinal est com nvel lgico alto, obtendo na sada
uma tenso que uma porcentagem do sinal que passaria toda a janela
de tempo ativo. A essa fatia de tempo que o sinal passa ligado d-se o
nome de duty cycle.
Um duty cycle de 100% significa que na janela de tempo dada,
o sinal permaneceu ligado todo o tempo e a tenso mdia na sada ,
no caso do arduino, 5V. J um duty cycle de 25% implica em uma
tenso mdia de 5V * = 1.25V.
Enquanto havia um conversor A/D de 10bits que conseguia ler
1024 nveis de tenso, a sada PWM s possui 8bits de representao.
Logo, s poder representar valores de 0 a 255, que correspondem a
faixa de duty cycle de 0 a 100%.

4.2.1 Leitura de valores analgicos


Como j foi mencionado, as portas A0 a A5 so capazes de realizar
leituras de nveis de tenso e codifica-las por meio de um conversor A/D de
10 bits. Para verificar a possibilidade de leitura a partir de portas analgicas,
usaremos dois circuitos externos: um potencimetro e um LDR.
Clique em Arquivo>Exemplos>Basics>AnalogReadSerial. A janela que
se abrir deve ser semelhante a essa:

Analisando o trecho de cdigo, temos algumas funes novas:


Serial.Begin(BaudRate) Inicializa a porta serial do Arduino
com um determinado valor de BaudRate.
AnalogRead(int Pino) Faz a leitura analgica do Pino
especificado e devolve o valor correspondente entre 0 e 1023.
Serial.Println(type data) Escreve na porta serial o dado que
foi passado.

A porta serial um dos mtodos usados para comunicar o


Arduino com o computador.
Nesse tipo de porta, os dados so enfileirados em um buffer e
enviados bit por bit pelo cabo de conexo. Para que a informao seja
corretamente processada, o lado que envia dados e o que recebe
devem estar configurados para uma mesma taxa de transferncia
(BaudRate).
A funo Serial.Begin(BaudRate) serve para configurar a porta
serial do arduino para trabalhar em uma determinada taxa de
transferncia. As BaudRates so predefinidas em valores especficos:
300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600,
115200. Tambm possvel configurar outras caractersticas por meio
dessa funo, tal como quantidade de bits de start/stop e bits de
paridade.
Semelhante a digitalRead, analogRead() recebe como parmetro
um pino e devolve o valor lido no pino, que , nesse caso, representa
uma leitura analgica da porta.
Serial.println() imprime o dado passado como parmetro na
porta serial inserindo uma quebra de linha no final. Nesse trecho,
impresso o valor que foi lido na porta e armazenado na varivel
sensorValue.
Para a primeira montagem, ser usado um potencimetro. O
valor dele no importante pois ser usado apenas como um divisor
de tenso.
Um divisor de tenso um circuito que, dado um determinado
valor de tenso de entrada, apresenta na sada uma frao da entrada.

Na figura acima, a sada Vout uma frao de Vin, determinada


pela seguinte relao:
= 2

1 + 2

Um potencimetro um resistor que muda de valor conforme o


cursor deslocado sobre um material resistivo. Na prtica, o terminal
do meio representa o ponto entre dois resistores que tem seu valor
alterado com a variao da posio do cursor.

Portanto, a montagem a ser realizada deve ser a seguinte:

Perceba que o fio vermelho conectado a extremidade do


potencimetro est ligado ao pino 5V, o preto no GND e o fio azul ao
pino central do potencimetro e ao pino A0, do qual a leitura est sendo
feita no cdigo.
Para verificar em tempo real o valor de tenso lido no pino, devese ler os valores que so publicados na porta serial. Para isso, ser
usado o monitor serial que vem integrado na prpria IDE do arduino.
O

monitor

serial

pode

ser

acessado

usando

menu

Ferramentas>Monitor Serial ou usando o atalho Ctrl+Shift+M. A janela


que ser aberta deve ser semelhante a essa:

Variando o cursor do potencimetro, dever ser possvel ver o


valor da leitura (entre 0 e 1023) variando.
Mantendo o mesmo cdigo, ser montado um outro circuito que
ao invs de ler o valor de um potencimetro, l, mesmo que de forma
no-linear, a quantidade de luz no ambiente. Para essa montagem,
usaremos um resistor dependente de luz (LDR).
Um LDR ou foto-resistor um dispositivo que varia sua
resistncia interna de acordo com a quantidade de luz que incide sobre
sua superfcie. Quanto maior a intensidade da luz que incide sobre a
superfcie, menor a resistncia que o dispositivo apresenta a passagem
de corrente eltrica.

Nessa montagem, ser necessrio, alm do LDR um resistor


comum para que seja montado um divisor de tenso. A depender de
onde esteja sendo feita a ligao dos pinos 5V e GND, os valores lidos
podem ser crescentes ou decrescentes. Caso o pino 5V esteja
conectado ao terminal do resistor, a tenso Vout tende a cair quando

houver uma maior incidncia de luz no LDR, pois a leitura est sendo
feita nos terminais do LDR e, dado que ele diminui sua resistncia tanto
quanto a incidncia de luz aumenta, pela lei de Ohm pode-se concluir
que a tenso tambm vai cair. Caso a ligao seja invertida, a leitura
estar sendo feita nos terminais do resistor, logo, o valor lido deve
crescer ao passo que a resistncia do LDR diminui.
A montagem deve ser feita segundo a seguinte figura:

Executando o monitor serial e variando a luz que incide no LDR,


deve-se observar um comportamento semelhante ao que foi observado
quando foi usado o potencimetro.

4.2.2 Escrita de valores analgicos


Para verificar a ao da escrita analgica por meio de PWM, ser usado
o exemplo disponvel na IDE. Clique em Arquivo>Exemplos>Basics>Fade. A
janela que se abrir deve ser semelhante a essa:

Analisando o trecho de cdigo, v-se configurao do pino 9 como sada


e dentro do loop() funo responsvel por realizar uma operao de escrita
analgica:
analogWrite(pino, valor) Essa funo recebe como argumentos o
pino no qual ser escrito um dado analgico e o valor do dado.
Alm de analogWrite, o valor da varivel brightness incrementado do
valor de fadeAmount a cada passagem pelo lao. Aps o incremento,
testado se o valor de brightness 0 OU 255. Se o valor da varivel est
crescendo e chega a 255, o incremento (fadeAmount) tem o sinal trocado e
o lao faz com que esse valor chegue a 0 e ento revertido de novo.

No protoboard, a montagem deve ser feita da seguinte forma:

Feito o upload do cdigo para a placa, espera-se que o led conectado


aumente o brilho at chegar a potncia mxima e ento se apague na mesma
velocidade.
Outra montagem possvel usando esse mesmo esquema envolve a
aplicao do conceito de leitura de portas analgicas apresentado no exemplo
anterior. A proposta usar o valor lido no potencimetro para controlar o
nvel do brilho do led que usamos nesse ltimo exemplo.

O cdigo que executa essa operao est disponvel na pasta de cdigos


disponibilizada na pgina do minicurso.
Uma montagem um pouco mais complexa que pode ser realizada usando
esse mesmo trecho de cdigo o controle de direo e velocidade de
motores.
Para isso, necessrio o uso de um circuito externo que seja capaz de
realizar esse tipo de controle, pois o controle de motores requer uma fonte
de corrente muito alm dos 40mA mximos que so oferecidos por pino no
arduino. Alm disso, motores so cargas indutivas e podem gerar descargas
com tenses altas suficientes para queimar todo o Arduino.
O circuito necessrio para fazer o controle de motores se chama ponte
H e construdo usando transistores como chaves para determinar o sentido
de rotao e PWM para realizar o controle de velocidade.

Como possvel ver na figura, a posio das chaves determina um


sentido para a corrente e, consequentemente, um sentido de rotao para o
motor.
No ser discutido como construir uma ponte H e seus detalhes
tcnicos. Ao invs disso, ser usado o Arduino MotorShield, que uma placa
totalmente compatvel com o Arduino (vendida separadamente) que oferece
todo o circuito necessrio para fazer o controle de motores DC.
Essa placa tem um CI L298D como componente principal. Esse CI
possui duas pontes H construdas de forma integrada. O CI pode ser

comprado separadamente e montado externamente. A vantagem de ter a


placa que ela foi projetada para ter diversos circuitos de proteo a surtos
de tenso e corrente.

A placa tem as devidas indicaes dos lugares onde devem ser


conectados a fonte externa (no necessria mas recomendvel) e os
motores. Alm das conexes visveis, para controlar a direo e velocidade
existem as seguintes conexes:
DIRECTION_A Ligado no pino 12, determina a direo do motor
ligado no canal A. Para determinar a direo, deve-se escrever HIGH
ou LOW nesse pino.
DIRECTION_B Ligado no pino 13, determina a direo do motor
ligado no canal B. Para determinar a direo, deve-se escrever HIGH
ou LOW nesse pino.
PWM_A Ligado no pino 3, responsvel por fazer o controle de
velocidade via PWM do motor conectado no canal A.
PWM_B Ligado no pino 11, responsvel por fazer o controle de
velocidade via PWM do motor conectado no canal B.
Usando a mesma lgica do Led sendo controlado pelo valor lido no
potencimetro,

(PARA FAZER O EXP DO MOTOR EU


PRECISO SABER DO DRIVER QUE ELE TEM
L)

4 Projetos

Referncias

Arduno Homepage. Disponvel em: <http://www.arduino.cc/> Acesso em


maro de 2011.
HERRADOR, R. E., Gua de Usuario de Arduno, 2009. Disponvel em:
<http://www.uco.es/aulasoftwarelibre/wpcontent/uploads/2010/05/Arduino_user_manual_es.pdf> Acesso em maro de
2011.

http://www.vivaolinux.com.br/artigo/Arduino-Visao-Geral?pagina=2

Você também pode gostar