Arduino e aplicaes Nesta segunda parte do mdulo, estudaremos os seguintes tpicos: - PWM no Arduino; - Uso de Macros; - Condicionais principais; - Funes etras !interrupes"#
Arduino e aplicaes $ntendedo a PWM - Pulse-width modulation (PWM) ou Modulao por largura de pulso uma tcnica para obter um sinal analgico por meios digitais; - Consiste em manipular a rao c!clica (dut"-c"cle) de um sinal de sa!da# para controlar motores ou outros componentes; - $s pinos utiliados para isso so os %ue tem o s!mbolo &'( ou os pinos )#*#+#,#-. e -- da /rduino 0no1 Arduino e aplicaes $ntendedo a PWM Arduino e aplicaes $ntendedo a PWM Como utili%ar& - Primeiro preciso estudar a 2uno analogWrite e sobre como a3ustar o 4ut"-c"cle; - / 2uno /nalogWrite usada para de2inir uma sa!da analgica atra5s dos pinos digitais; - 6ssa 2uno utilia a 5ariao do dut"-c"cle; - $ 5alor do dut"-c"cle 5aria de . 7 8**# onde . e%ui5ale a . e 8** e%ui5ale 7 -..9 do 5alor do ciclo1 Arduino e aplicaes 'alores do (ut)-c)cle Arduino e aplicaes $ntendedo a PWM $emplos: analogWrite!*ed+, ,-"; .. *ed ir/ ligar com +,012olts analogWrite!*ed+, +3+"; .. *ed ir/ ligar com 4,5-2olts analogWrite!*ed+, 011"; .. *ed ir/ ligar com 1 2olts
Arduino e aplicaes 6:erc!cio resol5ido; <igar um led na /rduino utiliando PWM de2inindo somente -#8* 5olts de sa!da1 =esoluo; const int <ed- > --; ??de2inimos um led para receber o 5alor de pino -- 5oid setup() @ pinMode(<ed-# $0AP0A); ??de2inimos o pino como sa!da para o <ed B 5oid loop() @ analogWrite(<ed-# +C); ?? 5alor de sa!da para o pino -- dela"(+.); B
Arduino e aplicaes *$M67AN(89 - / 2uno Pwm usada %uando %ueremos utiliar uma sa!da digital para &simular( uma sa!da analgica; - D 5ai 2uncionar nos pinos %ue ti5erem o s!mbolo &'( antes do nEmero do pino; - F cdigo utiliaremos sempre o comando &/nalogWrite( acompanhando o pino e o 5alor de dut"- cicle %ue %ueremos na sa!da pwm1
Arduino e aplicaes 6:erc!cio; 0tilie as + sa!das PWM para controlar + leds com 5alores de sa!da di2erentes1
Arduino e aplicaes 4ica; Para ter maior preciso nos 5alores# utilie ®ras de )( para determinar os 5alores de sa!da1 $ recurso do Pwm pode ligar <eds sem utiliar resistores para limitar a 5oltagem1 Aenso de 2uncionamento dos <eds; Para ligar um <ed 5erde; *5 e%ui5ale a 8** do ciclo 8185 e%ui5alerG G H Arduino e aplicaes CGlculo *5 ----------- 8** 8185 ---------- : *: > 8**18#8 I > 8** 1 8#8 * I > --8 <ogo para o <ed 5erde acender com 818 5olts# colocamos no cdigo; analogWrite( <ed# --8);
Arduino e aplicaes 6:perimento; Criar um programa no /rduino utiliando Pwm para controlar um motor# 5ariando os 5alores de dut"-c"cle para se obter 5elocidades di2erentes1 Arduino e aplicaes Utili%ando PWM com a :un;o <one - /inda com a tcnica de PWM# podemos 2aer a ligao de um buer e utiliar a 2uno A$F6 do /rduino; - / 2uno Aone reprodu atra5s de um determinado 5alor de 2re%uJncia# alguma (ou todas) as K notas musicais# uma por 5e; - Cada nota musica admite uma 2re%uJncia dada em Lert1 Arduino e aplicaes Utili%ando PWM com a :un;o <one / seguir a 2re%uJncia de cada nota musical; 4 M 8+8 = - 8,C Mi - )). NG - )C, Dol - ),8 <G - CC. Di - C,C Arduino e aplicaes Utili%ando PWM com a :un;o <one Fo 5oid loop() a 2uno tone similar 7 2uno analogWrite1 6scre5emos a 2uno e entre parJnteses colocamos o nEmero do pino e o 5alor %ue %ueremos; tone(pino# 5alor); ??o 5alor 2re%uJncia dada em hert de cada nota1 Fo 2inal de e:ecuo# podemos utiliar a 2uno noAone# para encerrar a e:ecuo das notas1 u Arduino e aplicaes Macros - Macro# por de2inio# nada mais do %ue uma substituio para strings1 6m outras pala5ras# um determinado elemento %ue pode assumir alguns 5alores; - 6m linguagem C as macros podem ser do tipo $b3eto ou Nuno; - 0ma macro do tipo $b3eto# usada para dar nome 7 constantes; - 0ma macro do tipo Nuno responsG5el por de2inir 2unOes (aritmticas ou no) antes da e:ecuo de um programa; Arduino e aplicaes Macros - =epresentamos as macros atra5s da direti5a =de:ine, sempre com o s!mbolo P; 6:emplos; - Macro tipo $b3eto; Pde2ine / -. ??neste e:emplo &/( recebe o 5alor -.; - Macro tipo Nuno; Pde2ine D$M/(a#b) ((a)Q(b)) ??o elemento D$M/ receberG o 5alor de a Qb; Arduino e aplicaes Macros - / estrutura de uma Macro serG ento; Pde2ine RnomeSdaSconstanteT R5alorSatribu!doT - Fa utiliao de uma macro# usamos sempre letras maiEsculas; 6:; Pde2ine PUF$- -8 ?? 5alor pino - recebe -8 (ou o pino -8 nomeado como primeiro pino); - Vuando utiliamos Pde2ine# no colocamos o &;( no 2inal da declarao;
Arduino e aplicaes Macros - Fa plata2orma /rduino# as macros tem como principal 2uno# a de2inio dos pinos; 6:; Pde2ine PUFS<64 -8 Pde2ine PUFSW$A -- <embre-seX - Fo utilie &ponto e 5irgula( nas macros; - 0tilie as letras maiEsculas para discriminar as macros; Arduino e aplicaes Macro > Const Arduino e aplicaes Macro > Const - Macro 4es5antagem; $cupa mais espao na memria do controlador# logo pode ter sua e:ecuo um pouco mais lenta; Yantagem; Nacilita no processo de &debugging( (mtodo para reduir erros em um programa)1 Arduino e aplicaes Macro > Const - Const 4es5antagem; 4i2iculta o processo de &debugging( em um programa; Yantagem; $cupa menos espao na memria do controlador# logo tem sua e:ecuo mais rGpida1 Arduino e aplicaes $erc?cios: -) Naa um programa para acender leds# utiliando macros1 8) =e2aa o cdigo do e:perimento com <dr e leds# utiliando macros1 Arduino e aplicaes Condicionais Fo /rduino utiliamos as mesmas condicionais usuais da linguagem C; Condicionais mais utiliadas; - U2111else; - while; - do111While; - 2or1 Arduino e aplicaes i:###else 6n5ol5e em geral# 8 possibilidades# se uma delas no 2or 5erdadeira# a outra conse%uentemente serG; 6strutura; i2 RcondioT @ RcomandoT B else @ RcomandoT B Arduino e aplicaes i:###else 6:emplo; i2 (5alorDensor R> C..) @ digitalWrite(<edS-# LUZL); B else @ digitalWrite(<edS-#<$W); B Arduino e aplicaes @Aile 6ssa condicional estabelece uma condio inicial para alguma instruo acontecer1 6strutura; while RcondioT @ RcomandoT B Arduino e aplicaes @Aile 6:emplos; while (5alorDensor R> C..) @ digitalWrite( <edS-# <$W); B Arduino e aplicaes @Aile 6:emplos; while (contador R -..) @ contador > contador Q-; B Arduino e aplicaes do###@Aile 6stabelece uma instruo %ue ocorre en%uanto uma condio estG sendo satis2eita1 6strutura; do @ RcomandoT B while RcondioT Arduino e aplicaes do###@Aile 6:emplos; do @ digitalWrite(PinSmotor# LUZL); B while (5alorMotor R *.);
Arduino e aplicaes do###@Aile 6:emplos; do @ cont > cont Q -; B while (cont R 8..);
Arduino e aplicaes do###@Aile Cuidado9 / condicional do111while a BNCCA %ue recebe ponto e 5irgula aps o Eltimo parJntese1 do @ cont > cont Q -; B while (cont R 8..);
Arduino e aplicaes :or 6sse operador condicional# reEne basicamente 5Grios comandos em sua estrutura# por essa rao# um dos mais utiliados1 6strutura; 2or(RpreparaoT; RcondioT; RalcanceT) @ RcomandoT B
Arduino e aplicaes :or 6:emplos; 2or(:>. ; :R-..; :>:Q-) @ digitalWrite(PinSmotor# LUZL); B <embrando %ue em C# podemos substituir &: > : Q -( por &:QQ(1 /s duas 2ormas so corretas e e%ui5alentes1
Arduino e aplicaes :or 6:emplos; 2or(:>. ; :R-..; :QQ) @ digitalWrite(PinSmotor# LUZL); B
Arduino e aplicaes $erc?cios -1 0tilie o comando while para manter ligado um motor durante -. ciclos de contagem; 81 =e2aa o e:erc!cio - utiliando o comando 2or; )1 Naa um cdigo para controlar um motor e um led# %ue de5em ligar alternadamente (en%uanto um esti5er ligado o outro tem %ue estar desligado); C1 0tilie os comandos i2111else e 2or para implementar um seguidor de linha com um <dr e um motor1
Arduino e aplicaes Funes etras Do 2unOes 2ora do &loop( do /rduino# %ue podem ser utiliadas como interrupOes ou para au:iliar na e:ecuo de instruOes1 Vual%uer 2uno e:tra# de5e ser criada sempre acompanhada da direti5a &5oid( e de5e ser tratada como uma 2uno nati5a 7 plata2orma /rduino1 Vuando 2or utiliada# de5e ser designada apenas pelo nome seguido de parJnteses e ponto e 5irgula &();(1
Arduino e aplicaes Funes etras 6:emplos; 5oid loop() @ i2 (5alorDensor R C..) @ apaga<eds(); digitalWrite(<ed-# LUZL); B
5oid apaga<eds() @ digitalWrite(<ed-# <$W); digitalWrite(<ed8# <$W); digitalWrite(<ed)# <$W); B
Arduino e aplicaes Funes etras Fote %ue no e:emplo anterior# a 2uno 2oi criada para manter todos os leds sempre apagados# porm a condicional &i2( ordena %ue o primeiro led este3a aceso1 Como a prioridade de uma condicional maior do %ue de uma 2uno e:tra# o primeiro led irG acender# 3G os demais continuam com a mesma &ordem( de permanecerem desligados1 Prioridade Condicional D Prioridade Fun;o $tra Arduino e aplicaes $erc?cio: -1 Crie uma 2uno e:tra para manter ) motores desligados e aps um determinado per!odo de tempo cada um deles de5e ligar em se%uencia com os demais desligados1 Arduino e aplicaes Contato; michel1r1machado[gmail1com