Sie sind auf Seite 1von 20

Tutorialbsicodearduino

*paraprogramadores
JosdeFigueiredo(autor)
SulenCamargo(reviso)

Apresentao

Este tutorial est sendo desenvolvido para orientar, de forma


introdutria, o uso do arduino. Nosso pblicoalvo so profissionais de TI, que
jtenhamalgumaexperinciacomalinguagemdeprogramaoC/C++.

Oqueoarduino?

um kit de prototipagem rpida, umaplacadecircuitoseletrnicos,que


foca na automao de dispositivos e sistemas. Para isto a placa possui um
microcontrolador programvel com diversos pinos de entrada e sada, digitais
eanalgicas.
Com o arduino, podese automatizar uma variedade de atividades
eletro/mecnica desde que o arduino esteja devidamente preparado e
equipado para tal. Como por exemplo, podese automatizar a abertura e
fechamento de cortinas conforme determinadas condies ditadas de acordo
comasprefernciasdousurios.
Afigura1mostraaplacadaltimaversodoarduino,aArduinoUNO.

Figura1

Para os profissionais da computao, esta ferramenta se revela de


grande valia, uma vez que umadasformasdeimplementardeformaprtica
e rpida, a Internet das Coisas1 e tambm a computao ubqua/pervasiva,
conceitos estes relacionados a computao distribuda, um fator de alta
relevncianaatualidade.
O arduino tambm contribui para reduo de custos e o desperdcio de
tempoemprojetosdeautomao.
TambmchamadadeIoTInternetofThings

Versesdoarduino

O arduinofornecidoemdiversosformatosquesoescolhidosconforme
as necessidades especficas do usurio. Apresentamos aqui 3 dos modelos
maiscomuns:

ArduinoUNO:
aplacamaisrecentefornecidapelosdesenvolvedores
(dez/2012).sobreestaplacaqueestetutorialestsendobaseado
Arduino MEGA: uma verso mais robusta, tem mais velocidade e
maisportasdeinterfaceamento
Arduino NANO: Verso compacta,comcaractersticasparecidascomas
doUNO.

Outras verses e variaes podem ser encontradas no mercado. Por ser


uma tecnologia de hardware livre2 diferentes verses podem ser criadas por
diferentes desenvolvedores. Expandindo assim as capacidades desta
tecnologia.

CaractersticastcnicasdoarduinoUNO

Alimentao:
Aplacadocircuitopodeserenergizadacomtensesde
7va12v.Istopodeserfeitocombaterias,pilhasoufontesexternasusandoo
plugedealimentaodisponibilizadonaplaca,assimcomoviaUSB.Em
aplicaessimplesusamosalimentaoviaUSB,pormestanopoderser
usadaquandoprecisarmosdacomunicaoserialdoaparelho.
Alimentao:
Aplacatrabalhacomalimentaoentre7ve12v.
Tensodeoperao:
Aplacatrabalha,considerandoousodassadas
PWM3,comtensesde0a5V.
CorrentenospinosdeI/O:
Acorrentemximasuportadaporcada
pinode40mA.Acorrentetotaldekitde150mA.
Memriaflash:
32KBamemriaondegravadooprogramaquefoi
criadodenominadofirmware.
Memriadeexecuo
:

2KB
PinosdeI/O:
14nototal,sendoque6destespodemserconfiguradoscomo
sadasPWM
6pinosdeentradaanalgica(conversorA/D)
1portaserial(pinos0e1)ouportaserialUSB.

Formadetecnologiaemquequalquerdesenvolvedortemacessoasuafonte,tendototal
liberdadeparaexecutarmelhoriase/oumodificaes.
3
PWMPulseWidthModulation.
2

Programaodoarduino
O arduino programado em linguagem C/C++ em uma IDE
dedicada e fornecida pelo prprio arduino. A ferramenta multiplataforma e
trazembutidacompiladoregravador.

EstruturadoprogramafeitoparaarduinonoIDEarduino

Todoprogramatemduasfunesprincipaisqueso:
void setup() executada apenas uma vez na inicializao da
placa (quando esta for ligada). Esta funo frequentemente
usadaparaincializarvariveis,objetosoumtodos.
voidloop()executadasequencialmente,emloopinfinito,apsa
inicalizao.ondenossoprogramafica.

Para um programar necessrio conhecer o hardware e entender como


o programa que iremos criar interage com este hardware. preciso saber
quaispinosligamosusamos,comousamosequandousamos.
Queremos umprogramaqueligueumledentoprecisamossaberonde
oledfoiligado,parapodercodificarusandoaportacerta.

PrimeiroHelloWorld
Um
hello world no arduino pode significar uma infinidade de opes.
Nesta primeira verso vamos fazer oledqueestnaplaca(aoladodopino13
(piscaemcorlaranja).

helloworldv1.ino
byteLed=13

voidsetup(){
pinMode(Led,OUTPUT)
}

voidloop(){
digitalWrite(Led,HIGH)
delay(1000)
digitalWrite(Led,LOW)
delay(1000)
}

SegundoHelloWorld
O circuito:
O circuito mostrado na figura abaixo apresenta um led
comum, ligado a um resistor de 220R entre os pinos 13 e GND. A lgica do
circuitopodeserentendidaassim:osinallgicoaltoe5v(HIGH)saipelopino
13, passa pelo resistor de 220R (limitador de corrente) e passa pelo led se o
sinallgicoforbaixo(LOW),entonadapassapeloledeesteficadesligado.

1. Porque precisamosusarumresisitor?
Nenhumcomponentepodeser
ligado diretamente na placa arduino (e a nenhumoutraplacaeletrnica)
sem um resistorlimitadordecorrente.Esteresistorlimitadordecorrente
impede que o LED puxe mais correntedoqueoarduinopodefornecer.
Se o led for ligado diretamente (sem o resistor), a porta de sada do
arduino (e talvez o prprio arduino) poder ser quimada por excesso
corrente. Esta caracterstica muito importante para garantir a
longevidadedokit,casocontrrio.


2. Um pouco mais sobre corrente
: De forma bem simples, a corrente
eltrica o movimento dos eltrons em um condutor este movimento de
eltrons capaz de produzirtrabalhos,comoligarleds,motores,acionar
dispositivos entre outros. A unidade de medida usada para medir
corrente conhecida por
ampre (simbolo A, tambm encontramos I).
Em circuitos microcontrolados a corrente muito pequena,
frequentementemedidaemmiliamperes(mA).

a. Entendendo o consumo:
Paraqualquercoisafuncionar,preciso
saber quantos Ampres sero consumidos. Por exemplo: uma
lmpada incandescente de 100W (aquelas antigas) precisa de
aproximadamente 0,45A para ligar se ligarmos 3 lampadas em
umcircuitoqualquer,teremosumconsumode3x0,45A=1,3A.

b. Consumo de um LED: Para funcionar, um led precisa de apenas


0,001A (1 mA). Como no arduino, todas as portas lgicas tem
sadade5v,precisamosligaroledcomumresistorde4,7K.
Resistor=Volt/Corrente
Resistor=5V/0,001A=5000ohms4
Resistorcomercial=4,7Kohms
c. LedsnaInternet:
Valeobservarquenainternet,osdiagramasde
ligao de led indicam o uso de resistores de 330 ohms. E
funciona mas com este resistor o led vai ser ligado com uma
corrente de 15mA. Mas porque 15mA se precisamos de apenas
1mA?
O efeito colateral disto a reduo no tempo de vida
til do led e do arduino, alm de matar a bateria mas
rapidamente.
(Corrente=Volts/Resistncia)
5v/330ohms=15mA
d. Sempre consulte o manual de referncia (datasheet) do
componente que voc pretende ligar ao arduino, procure sempre
saber qual a corrente mxima que ele consumir caso contrario
...
Mas e o programa? O programa usado ser o mesmo do exemplo
anterior
helloworldv1.ino observe que o led externo est ligado no pino da
saida13,queomesmocompartilhadopeloleddaplaca.
Posso ligar em outraporta?Sim,podemosligaremoutraportadesde
quesejamrespeitadososlimitesequeaprogramaosejaadequada.

Ohmsonomedadoaunidadedemedidaderesistncia.

Semforosimples
Nesteexemplovamosprogramarumsimplessemforo.

Circuito:

Neste circuito temos 3 leds, cada um sendo limitado por um resistor de


330R. Os leds verde, amarelo e vermelho esto conectados respectivamente,
nas portas 8, 9 e 10. Saber onde esto ligados importante para que
possamosescrevernossocdigo.

Cdigo:
byteledG=8
byteledY=9
byteledR=10

voidsetup(){
pinMode(ledG,OUTPUT)
pinMode(ledY,OUTPUT)
pinMode(ledR,OUTPUT)
}

voidloop(){
digitalWrite(ledR,HIGH)
digitalWrite(ledY,LOW)
digitalWrite(ledG,LOW)
delay(500)

digitalWrite(ledR,LOW)
digitalWrite(ledY,HIGH)
digitalWrite(ledG,LOW)
delay(500)

digitalWrite(ledR,LOW)
digitalWrite(ledY,LOW)
digitalWrite(ledG,HIGH)
delay(500)
}

Nosso cdigo bastante simples, inicializamos variveis de controle dos


leds, que informam o endereo de cada led no arduino na funo setup()
configuramos os endereos dos leds para o modo sada na funo loop()
criamos um ciclo temporizado pela funo delay(500). Esta funo facilita
bastante o controle de tempo para o programador arduino (controle de tempo

SEMPREumdesafioemmicrocontroladores).
delay(1000)refernciapara1s
delay(500)refernciapara0,5s
Enquanto que as funes digitalWrite(pino,estado) alternam os estados
dosledsparaligado(HIGH)oudesligado(LOW).

ControlandoosemforopelaUSB
O arduino UNO trabalha comunicase comocomputadorpelaportaUSB,
tantoparatransmissodofirmwarecomoparacontroledoprograma.
Vamos entocontrolarosemforoenviandodadospelaserial.Oobjetivo
simples:alterarotempodosemforoenviandopelaserial.

Circuito:
Nomuda.

Cdigo:

byteledG=8
byteledY=9
byteledR=10
inttempo=1000
charcmd

voidsetup(){
pinMode(ledG,OUTPUT)
pinMode(ledY,OUTPUT)
pinMode(ledR,OUTPUT)
Serial.begin(9600)
}

voidloop(){
digitalWrite(ledR,HIGH)
digitalWrite(ledY,LOW)
digitalWrite(ledG,LOW)
delay(tempo)

digitalWrite(ledR,LOW)
digitalWrite(ledY,HIGH)
digitalWrite(ledG,LOW)
delay(tempo)

digitalWrite(ledR,LOW)
digitalWrite(ledY,LOW)
digitalWrite(ledG,HIGH)
delay(tempo)

if(Serial.available()>0){
cmd=Serial.read()
switch(cmd){
case'a':

tempo=tempo50

break
case'd':

tempo=tempo50

break
}
}
}

No cdigo acima, temos a introduo da funo Serial, queinicializada


em setup(), setando a configurao para 9600 bps (taxa de transferncia da
serial.
Serial.begin(9600)
A funo Serial.available() detecta se h algo no buffer de entrada da
serial havendo, o contedo lido e armazenado em uma varivel do tipo
char. Esta varivel ento testada, no caso em um switch/case, e uma ao
correspondenteexecutada.


Oquemaispoderiaserfeitoparamelhorarocdigoacima?

Controladocombotes
Para microcontrolar coisas, preciso ler sinais externos, como sensores
ou botes. No exemplo a seguir, dois botes controlam o desligamento e o
desligamentodoleddaplaca.

Circuito:

O circuito da figura 5 mostra dois botes do tipo tctil cada boto est
ligado a um pino de entrada digital do arduino enquanto o boto no est
pressionado, o nvel lgiconopinobaixo(LOWou0v)aopressionaroboto
um nvel lgico alto (HIGH ou 5v) colocado no pino. Alguma funo ser
executadaquandoobotoforpressionado.

Cdigo:

bytebtnOn=7
bytebtnOff=8
byteled=13
booleanflagEstado=LOW

voidsetup(){
pinMode(btnOn,INPUT)
pinMode(btnOff,INPUT)
pinMode(led,OUTPUT)
digitalWrite(led,flagEstado)
}

voidloop(){
if(digitalRead(btnOn)){
flagEstado=HIGH
delay(250)
}
if(digitalRead(btnOff)){
flagEstado=LOW
delay(250)
}
digitalWrite(led,flagEstado)
}

No cdigo acima, temos a introduo da funo de leitura de entrada


digital, que inicializada em setup() com o comando pinMode(pino,INPUT).
INPUT configura uma porta como entrada e posteriormente o comando
digitalRead(porta)irleroestadodestaporta.

O circuito est montado para que as portas estejam sempre em estado


baixo (LOW) passando para alto (HIGH) quando o boto pressionado o
programa monitora os botes e quando detecta que um est em alto troca o
estado da flagEstado produzindo o efeito liga/desliga do led. Evidentemente
poderamos fazer o mesmo usando apenas um boto, bastando adequar o
programa.
Oquemaispoderiaserfeitoparamelhorarocdigoacima?

Sadaanalgica
Antes de prosseguir, necessrio conhcer as diferenas entre os sinais
Digital,AnalgicoePWM.

SinalAnalgico
A natureza analgica tudo ao nosso redor analgico, pois suas
medidas variam infinitamente entre uma medidaeoutra.Ex.som(temosuma
infinidadedeamplitudesdesomentreasfrequnciasAeB.

SinalDigital
Computadores e sistemas informatizados em geral so digitais seus
sinais variam entre um estado e outro. O famoso 0 (nvel lgico baixo) e 1
(nvellgicoalto).Ex.liga/desligadeumled.

A figura 6 mostra a diferena grfica entre os sinais. O sinal digital


compreendido normalmente pelo arduino enquanto que o analgico precisade
umainterfaceespecialmenteprojetadaparafazerumatraduo.

SinalPWMPulseWidthModulation
Modulao por largura de pulso (PWM) um mecanismo usado por
microcontroladores para escrever em uma sada digital um sinal que se
assemelha muito a um sinal analgico. Isto nos permite ter uma emulao
quase perfeita de um sinal analgico. Seu funcionamento baseiase na
velocidade com que um sinal mantido em alto observando a figura 7
podemosterumavisomaisclara.
Considerando uma tenso mxima de 5v, com 20% de PWM teremos
uma tenso de sada de aproximadamente 1v (ver posio da seta na linha
azul) ainda, com 50% de PWM teremos uma tenso de sada de
aproximadamente 2,5v (ver posio da seta na linha azul) com 80% dePWM
teremos uma tenso de sada de aproximadamente 4v(verposiodasetana
linhaazul).
Podemos, desta forma atingir praticamente todos os nveis de tenso
entre0ve5v.

SadaanalgicaPWM
O arduino UNO dotado de 6 sadas PWM que so sadas digitais
especiais, onde podemos emular uma sada analgica. A porta que tem esta
caractersticapodetambmserusadacomosadadigitalconvencional.
Estas portas PWM devem ser usadas sempre que precisamos controlar
um dispositivo analgico (ou que tenha um efeito analgico). Por exemplo um
buzzer (para produzir o som) um motor(paracontrolaravelocidade)umled
(paracontrolarobrilho).

ControlandooBrilhodeumled
Nesteexerccio,vamoscontrolaraintensidadedaluzemitidaporumled
Circuito:

O circuito acima liga um led simples em uma porta PWM, no pino 9 do

arduino.

Cdigo:
byteledPWM=9

voidsetup(){
//nadaparaserfeitoaqui
}

voidloop(){
for(intvalFade=0valFade<=255valFade+=5){
analogWrite(ledPWM,valFade)
delay(100)
}
for(intvalFade=255valFade<=0valFade=5){
analogWrite(ledPWM,valFade)
delay(100)
}
}

O cdigo acima apresenta a funo analogWrite(pino,valor), pino DEVE


ser uma saida PWM e valor deve ser um valor entre 0 e 255(byte).Ocircuito
aplicaoPWMelevaparaasadaatensocorrespondente.

Oquemaispoderiaserfeitoparamelhorarocdigoacima?

Umalarmesimples
O sensor de alarme (conhecido por reed switch) tambm pode ser
configurado no arduino seu funcionamento muito parecido com o de um
boto do tipo tctil apresentado no exemplo anterior, sendo que quando o
sensordetectarquehouveumaaberturaoalarmeirdisparar.
Circuito:

O circuito acima combina umsensorreedswitch,queligadodamesma


forma que um boto ttil e um buzzer(pequenoaltofalante),queligadoem
umasadaPWM.

Cdigo:
bytesensor=5
bytebuzz=9

voidsetup(){
pinMode(sensor,INPUT)
}

voidloop(){
if(digitalRead(sensor)){
disparaAlarme()
}

voiddisparaAlarme(){
analogWrite(buzz,127)
delay(100)
analogWrite(buzz,200)
delay(100)
}

O cdigo acima combina entrada digital com sada PWM. J explorados


em exemplos anteriores. A novidade est no uso de funes externas a ao

loop() e ao seutp(), bastando simplesmente declarar a funo e chamar


dentrodeloop().OusodefunessegueomesmoprincpiodalinguagemC.
Oquemaispoderiaserfeitoparamelhorarocdigoacima?

Entradaanalgica
O arduino pode monitorar sinais analgicos do mundo exterior.
Evidentemente esta entrada deve ser um valor entre 0v e 5v em outras
palavras, no podemos entrar diretamente com um sinal de 50v nos pinos
analgicosseno
Para que o arduino possa compreenderosinalqueestsendoinformado
na entrada, o microcontorlador possui um conversor AD (analgico para
digital)comresoluode10bits.
*Quantomaisbitstiveroconversor,mais
precisasersuamedidadovaloranalgico.

Sensordeluminosidade
Nesta experincia, vamos fazer a leitura da intensidade e luminosidade
emumambienteusandoumcomponentesensvelaestavariao.

Circuito:

O circuito liga um sensor LDR (


light
dependent
resistor)
, alimentado por
5v, com corrente controlada por um resistor de 10KR, na porta 0 (primeira
entradaanalgica).

Cdigo:
bytesensorLRD=A0
intvalLido

voidsetup(){
Serial.begin(9600)
}

voidloop(){
valLido=analogRead(sensorLDR)
Serial.println(valLido)
delay(500)
}

O sensor LDR est ligado de forma a inserir na porta 0 um valor que


varia entre 0v e 5v ao ler o valor na porta 0 este valor passa por uma
converso para digital em umamatrizde10bits.OcomandoanalogRead(pino)
faz a leitura do pino analgico e coloca em uma varivel do tipo inteira a
funoSerial.println(varivavel)mostraestevalorlidonomonitorserial.
Importante ressaltar que o valor lido uma representao da tenso
(analgica) lida no pino 0 no caso no est sendo feita nenhum tipo de
conversodeunidade.
Oquemaispoderiaserfeitoparamelhorarocdigoacima?

Lendoumpotencimetro
Nesta experincia, vamos fazer a leitura da variao causada por um
potencimetro.

Circuito:

O potencimetro do circuito um resitor que varia seu valor entre 0 e


10KR esta variao faz com que a tenso que saia do pino do meio (e que
estligadonaentradaanalgicapino0)varieentre0ve5v.

Cdigo:
bytepoten=A0
intvalLido

voidsetup(){
Serial.begin(9600)
}

voidloop(){
valLido=analogRead(poten)

Serial.print(valLido,DEC)
delay(500)
}

O cdgio bastant simples l o valor analgico no pino 0 e envia pela


serialacadas.

Oquemaispoderiaserfeitoparamelhorarocdigoacima?

Lendoatemperatura
Nesta experincia vamos usar um sensor de temperatura bastante
simplesefcildemanipular.

Circuito:

O sensor de temperatura LM35 provvelmente um dos componentes


mais simples de se conectar ao arduino sua alimentao no precisa de
resistor limitador, bastando ligar diretamente nos pinosde5vegnd.Osdados
lidos so entregues em uma sada analgica com variao de 10mV/ grau

clcius.
Cdigo:
bytelm35=A0
intvalLido
inttemp

voidsetup(){
Serial.begin(9600)
}

voidloop(){
valLido=analogRead(lm35)
Serial.println(valLido)
delay(500)
}

Bibliografia

ARDUINO.
Guia
de
referncia.
Disponvel
em:
<http:
arduino.cc/en/Reference/HomePage>.Acessoem:29out.2013.

ARDUINIZANDO.
Brincando
com
o
Arduino.
Disponvel
em:
<http://arduinizando.blogspot.com.br>.Acessoem:29out.2013.

LABDEGARAGEM. Portal Lab de Garagem (arduino, eletrnica, robotica).


Disponvelem:<http:labdegaragem.com>.Acessoem:29out.2013.

WEBTRONICO.
Blog
Projetos
eletrnicos.
Disponvel
em:
<http://blog.webtronico.com>.Acessoem:29out.2013.

Das könnte Ihnen auch gefallen