Beruflich Dokumente
Kultur Dokumente
*paraprogramadores
JosdeFigueiredo(autor)
SulenCamargo(reviso)
Apresentao
Oqueoarduino?
Figura1
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.
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.
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.
Ohmsonomedadoaunidadedemedidaderesistncia.
Semforosimples
Nesteexemplovamosprogramarumsimplessemforo.
Circuito:
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)
}
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
}
}
}
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)
}
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.
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:
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)
}
}
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:
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)
}
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:
Cdigo:
bytesensorLRD=A0
intvalLido
voidsetup(){
Serial.begin(9600)
}
voidloop(){
valLido=analogRead(sensorLDR)
Serial.println(valLido)
delay(500)
}
Lendoumpotencimetro
Nesta experincia, vamos fazer a leitura da variao causada por um
potencimetro.
Circuito:
Cdigo:
bytepoten=A0
intvalLido
voidsetup(){
Serial.begin(9600)
}
voidloop(){
valLido=analogRead(poten)
Serial.print(valLido,DEC)
delay(500)
}
Oquemaispoderiaserfeitoparamelhorarocdigoacima?
Lendoatemperatura
Nesta experincia vamos usar um sensor de temperatura bastante
simplesefcildemanipular.
Circuito:
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.
WEBTRONICO.
Blog
Projetos
eletrnicos.
Disponvel
em:
<http://blog.webtronico.com>.Acessoem:29out.2013.