Ap apostila arduino-rev4

1,882
-1

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,882
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
143
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Ap apostila arduino-rev4

  1. 1. 2
  2. 2. Sum´rio a1 Conceitos b´sicos a 7 1.1 O Projeto Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2 Instala¸˜o do software . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3 Primeiro projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.3.1 C´lculos de resistˆncia . a e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.3.2 Alimenta¸˜o do circuito ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.4 Bibliotecas e shields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.5 Integra¸˜o com o PC . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.6 Portas anal´gicas e digitais . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.6.1 Portas digitais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.6.2 Portas anal´gicas . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Fundamentos de Eletrˆnicao 21 2.1 Resistores e Lei de Ohm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.1.1 Resistores em s´rie . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.1.2 Resistores em paralelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.1.3 C´digo de cores . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.1.4 Divisor de tens˜o . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.2 Capacitores e indutores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.2.1 Capacitores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.2.2 Indutores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.3 Diodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.4 Transistores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.4.1 Utiliza¸˜o de transistores com ca rel´s e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.4.2 Ponte-H . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Eletrˆnica Digital o 29 3.1 Introdu¸˜o . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.2 Portas l´gicas . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.2.1 Tabela-verdade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.2.2 Representa¸˜o das opera¸˜es ca co . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.2.3 Fun¸˜es l´gicas compostas . . co o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Fazendo barulho com o Arduino 335 Armazenando na EEPROM 35 3
  3. 3. 4 ´ SUMARIO
  4. 4. 5
  5. 5. 6 ´ SUMARIOPref´cio aEssa apostila ´ destinada aos alunos que realizaram o Curso de Arduino1 , tendo como premissa explicar em mais edetalhes temas abordados em aula para que os alunos n˜o se preocupem com anota¸˜es durante os experimentos. a co Seu conte´do (com exce¸˜o das fotos de terceiros, devidamente citadas) est´ dispon´ atrav´s da licen¸a u ca a ıvel e cCreative Commons Atribui¸˜o-Uso n˜o-comercial-Compartilhamento pela mesma licen¸a 3.0 Un- ca a cported, que est´ dispon´ nas formas compacta e completa nos seguintes endere¸os: a ıvel c http://creativecommons.org/licenses/by-nc-sa/3.0/deed.pt_BR http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode Caso possua corre¸˜es, sugest˜es ou mesmo queira contribuir escrevendo essa apostila, sinta-se livre para co oentrar em contato – terei um imenso prazer em receber sua contribui¸˜o! caDownloadEssa apostila est´ dispon´ para download atrav´s do site do Curso de Arduino1 . Acesse o site para verificar a ıvel enovas vers˜es no seguinte endere¸o: o c http://www.CursoDeArduino.com.br/apostilaO Autor ´ Alvaro Justen, tamb´m conhecido como “Turicas”, ´ o criador do Curso e e de Arduino1 e autor dessa apostila. F˜ de carteirinha de software livre a (usu´rio h´ mais de 12 anos), sempre participa de eventos (palestrando a a ou organizando) e grupos de usu´rios, al´m de contribuir com o de- a e senvolvimento de diversos projetos. Foi respons´vel pela cria¸˜o do a ca grupo de usu´rios de Arduino do Rio de Janeiro2 , onde s˜o realizados a a encontros mensais para discutir sobre a plataforma. Est´ finalizando sua gradua¸˜o em Engenharia de Telecomunica- a ca ¸˜es pela Universidade Federal Fluminense (Niter´i/RJ), onde j´ de- co o a senvolveu diversas atividades de pesquisa, ensino e extens˜o (muitas a ligadas ao Arduino); ´ programador Python3 , tendo criado e contri- e bu´ com diversos projetos nessa linguagem; entusiasta de metodolo- ıdo gias ageis e Coding Dojo4 , sendo o respons´vel por trazer a pr´tica a ´ a a Niter´i. o ´ Alvaro atualmente possui uma empresa que ministra cursos de Ar- duino por todo o Brasil e desenvolve projetos utilizando a plataforma para diversas empresas. Al´m disso, desenvolve bibliotecas abertas e para o Arduino e publica artigos com dicas e projetos em seu blog.Contato • E-mail: alvaro@CursoDeArduino.com.br • Blog: http://blog.justen.eng.br/ • Twitter: http://twitter.com/turicas • Telefone: +55 21 9898-0141 1 http://www.CursoDeArduino.com.br/ 2 http://ArduInRio.cc/ 3 http://www.python.org/ 4 http://dojorio.org/
  6. 6. Cap´ ıtulo 1Conceitos b´sicos a 7
  7. 7. 8 CAP´ ´ ITULO 1. CONCEITOS BASICOS1.1 O Projeto ArduinoArduino1 ´ um projeto que engloba software e hardware e tem como objetivo fornecer uma plataforma f´cil e apara prototipa¸˜o de projetos interativos, utilizando um microcontrolador. Ele faz parte do que chamamos de cacomputa¸˜o f´ ca ısica: ´rea da computa¸˜o em que o software interage diretamente com o hardware, tornando a caposs´ integra¸˜o f´cil com sensores, motores e outros dispositivos eletrˆnicos. ıvel ca a o A parte de hardware do projeto, uma placa que cabe na palma da m˜o, ´ um computador como qualquer a eoutro: possui microprocessador, mem´ria RAM, mem´ria flash (para guardar o software), temporizadores, o ocontadores, dentre outras funcionalidades. Atualmente, o projeto est´ na vers˜o Uno, por´m muitos Arduinos a a eencontrados hoje s˜o da vers˜o Duemilanove (2009, em italiano), que possui um clock de 16MHz, 2kB de a amem´ria RAM, 32kB de mem´ria flash, 14 portas digitais e 6 entradas anal´gicas. o o o Figura 1.1: Foto do hardware de um Arduino Duemilanove A principal diferen¸a entre um Arduino e um computador convencional ´ que, al´m ter menor porte (tanto c e eno tamanho quanto no poder de processamento), o Arduino utiliza dispositivos diferentes para entrada e sa´ ıdaem geral. Por exemplo: em um PC utilizamos teclado e mouse como dispositivos de entrada e monitores eimpressoras como dispositivos de sa´ ıda; j´ em projetos com o Arduino os dispositivos de entrada e sa´ s˜o a ıda acircuitos el´tricos/eletrˆnicos. e o Como a interface do Arduino com outros dispositivos est´ mais perto do meio f´ a ısico que a de um PC,podemos ler dados de sensores (temperatura, luz, press˜o etc.) e controlar outros circuitos (lˆmpadas, motores, a aeletrodom´sticos etc.), dentre outras coisas que n˜o conseguir´ e a ıamos diretamente com um PC. A grande diferen¸a ccom rela¸˜o ao uso desses dispositivos, no caso do Arduino, ´ que, na maior parte das vezes, n´s mesmos ca e oconstru´ımos os circuitos que s˜o utilizados, ou seja, n˜o estamos limitados apenas a produtos existentes no a amercado: o limite ´ dado por nosso conhecimento e criatividade! e O melhor de tudo nesse projeto ´ que seu software, hardware e documenta¸˜o s˜o abertos. O software ´ livre e ca a e(GNU GPL2 ), o hardware ´ totalmente especificado (basta entrar no site e baixar os esquemas) e a documenta¸˜o e caest´ dispon´ a ıvel em Creative Commons3 – os usu´rios podem colaborar (seja escrevendo documenta¸˜o, seja a catraduzindo) atrav´s da wiki! e 1 http://www.arduino.cc/ 2 http://www.gnu.org/licenses/gpl.html 3 http://creativecommons.org/licenses/
  8. 8. ¸˜1.2. INSTALACAO DO SOFTWARE 91.2 Instala¸˜o do software caPara criar um projeto com o Arduino, basta comprar uma placa Arduino (utilizaremos o Arduino Duemilanovecomo exmplo) – que custa em torno de US$30 no exterior e por volta de R$100 no Brasil –, fazer download dainterface integrada de desenvolvimento (IDE)4 e ligar a placa ` porta USB do PC. a Como qualquer computador, o Arduino precisa de um software para executar comandos. Esse softwareser´ desenvolvido na Arduino IDE em nosso PC, utilizando a linguagem C++. Ap´s escrever o c´digo, o a o ocompilaremos e ent˜o faremos o envio da vers˜o compilada ` mem´ria flash do Arduino, atrav´s da porta USB. a a a o eA partir do momento que o software ´ gravado no Arduino n˜o precisamos mais do PC: o Arduino, como ´ um e a ecomputador independente, conseguir´ sozinho executar o software que criamos, desde que seja ligado a uma afonte de energia. Antes de iniciar nosso projeto precisamos ent˜o instalar a IDE. Vamos l´: a a • Ubuntu GNU/Linux 10.10: Basta executar em um terminal: sudo aptitude install arduino ou procurar pelo pacote “arduino” no Synaptic (menu Sistema → Administra¸˜o → Gerenciador de pacotes ca Synaptic). • Ubuntu GNU/Linux (anterior a 10.10): Consulte a p´gina de instala¸˜o do Arduino em Ubuntu5 . a ca • Outras distribui¸˜es GNU/Linux: Consulte a p´gina de instala¸˜o em outras distribui¸˜es GNU/Linux6 . co a ca co • Microsoft Windows: Consulte a p´gina de instala¸˜o para as variadas vers˜es do Microsoft Windows7 . a ca o • Apple Mac OS X: Consulte a p´gina de instala¸˜o para o Mac OS X8 . a ca Ap´s a instala¸˜o, abra a IDE (no Ubuntu GNU/Linux ela estar´ dispon´ no menu Aplicativos → Ele- o ca a ıveltrˆnica → Arduino IDE ). A seguinte tela ser´ mostrada: o a 4 http://arduino.cc/en/Main/Software 5 http://www.arduino.cc/playground/Linux/Ubuntu 6 http://www.arduino.cc/playground/Learning/Linux 7 http://www.arduino.cc/en/Guide/Windows 8 http://www.arduino.cc/en/Guide/MacOSX
  9. 9. 10 CAP´ ´ ITULO 1. CONCEITOS BASICOS Figura 1.2: Arduino IDE vers˜o 0018 rodando no Ubuntu GNU/Linux 10.10 a1.3 Primeiro projetoQuando ensinamos linguagens de programa¸˜o novas, geralmente o primeiro exemplo ´ um hello world. Como ca eo Arduino n˜o vem por padr˜o com um display, nosso primeiro exemplo ser´ fazer um LED piscar – e por isso a a aser´ chamado blink. Nosso LED ficar´ aceso durante um segundo e apagado durante outro segundo e ent˜o a a arecome¸ar´ o ciclo. Abra a IDE e digite o seguinte c´digo: c a o void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); } Chamamos um c´digo feito para Arduino de sketch e o salvamos em um arquivo com a extens˜o .pde. Com o anosso sketch pronto, bastar´ conectar o Arduino na porta USB e clicar no bot˜o upload (segundo, da direita a apara a esquerda – destacado na figura acima). Ap´s o processo, ser´ vista a mensagem Done uploading na IDE o ae ent˜o o sketch estar´ rodando no Arduino, ou seja, o LED acender´ e apagar´, de 1 em 1 segundo. Vamos a a a aagora ` explica¸˜o do processo: a ca
  10. 10. 1.3. PRIMEIRO PROJETO 11 O Arduino possui 14 portas digitais, que podemos utilizar como entrada ou sa´ ıda. Nesse caso, vamos utilizara porta de n´mero 13 como sa´ u ıda, dessa forma, podemos controlar quando a porta ficar´ com 5V ou quando aficar´ com 0V – internamente o Arduino possui um LED conectado ` porta 13 e, por isso, teremos como “ver” a anosso software funcionando. Para que nosso software funcione corretamente no Arduino, precisamos criar duas fun¸˜es espec´ co ıficas: setupe loop. A fun¸˜o setup ´ executada assim que o Arduino d´ boot, j´ a fun¸˜o loop fica sendo executada ca e a a cacontinuamente (em loop) at´ que o Arduino seja desligado. Como as portas digitais s˜o de entrada ou sa´ e a ıda,definimos ent˜o dentro da fun¸˜o setup que a nossa porta 13 ´ uma porta de sa´ – fazemos isso atrav´s da a ca e ıda echamada ` fun¸ao pinMode, que j´ vem na biblioteca padr˜o do Arduino. a c˜ a a Depois de configurarmos corretamente a porta 13 como sa´ ıda, precisamos acender e apagar o LED queest´ conectado a ela. Para alterar a tens˜o na porta, utilizamos a fun¸˜o digitalWrite (que tamb´m est´ na a a ca e abiblioteca padr˜o do Arduino); passamos para essa fun¸˜o a porta que queremos alterar a tens˜o e o novo valor a ca ade tens˜o (HIGH = 5V, LOW = 0V). Depois das chamadas para acender e apagar o LED, chamamos a fun¸˜o a cadelay passando o parˆmetro 1000 – o que essa fun¸˜o faz ´ esperar um tempo em milisegundos para ent˜o a ca e aexecutar a pr´xima instru¸˜o. o ca Deve-se ressaltar que a IDE Arduino inclui automaticamente todas as bibliotecas que utilizamos. Se vocˆ eest´ acostumado com C/C++, note que n˜o precisamos digitar as diretivas include para arquivos como o a astdlib.h, por exemplo. Tudo ´ feito de forma autom´tica para facilitar o desenvolvimento do projeto! e a Como o Arduino j´ vem com um LED internamente conectado ` porta 13, n˜o precisaremos de circuitos a a aexternos para que esse projeto funcione, ou seja, bastar´ fazer upload daquele c´digo e j´ teremos o resultado a o aesperado: (a) LED apagado (b) LED aceso Figura 1.3: Arduino Duemilanove rodando o exemplo Blink Por´m, se quisermos acender um LED externo ` placa, podemos conect´-lo diretamente ` porta 13. Podemos e a a autilizar um LED de 5mm que acende com 2,5V. O problema, nesse caso, se d´ por conta da porta digital: ela aassume ou a tens˜o 0V, ou a tens˜o 5V – e caso coloquemos 5V no LED ele ir´ queimar. a a a Para solucionar esse problema precisamos ligar algum outro componente que seja respons´vel por dividir aparte dessa tens˜o com o LED, para que ele n˜o queime, ent˜o utilizaremos um resistor. Portanto, ligamos um a a aresistor de 120Ω em s´rie com o LED, o resistor ` porta 13 e o LED ` porta GND – ground ou terra –, como e a ana Figura 1.4.
  11. 11. 12 CAP´ ´ ITULO 1. CONCEITOS BASICOS Figura 1.4: Utilizando um LED externo para o exemplo Blink N˜o precisamos fazer nenhuma altera¸˜o no software para que esse circuito funcione: basta ligar o Arduino a cana porta USB do computador, para que o computador dˆ energia ao circuito, e ent˜o veremos o LED externo e apiscar juntamente com o LED interno. Em vez do LED, poder´ ıamos controlar outros componentes, comomotores, eletrodom´sticos etc. e1.3.1 C´lculos de resistˆncia a ePara chegar ao valor de 120Ω acima, precisei fazer algumas contas (e arredondamentos). Vamos aprender agoraa calcular o valor dos resistores que precisamos utilizar. Se precisarmos acender um LED verde, que ´ alimentado ecom tens˜o de 2,2V e corrente de 20mA atrav´s do Arduino, precisaremos de um resistor, como j´ vimos, j´ que a e a ao Arduino s´ consegue fornecer ou 0V ou 5V. Colocaremos o resistor em s´rie com o LED, e com isso podemos o econcluir que: • A tens˜o total (soma das tens˜es no resistor e no LED) ser´ de 5V, ou seja: VLED + VR = 5V a o a • A corrente total que passa pelo resistor e pelo LED ´ igual, ou seja, 20mA, ou seja: ILED = IR = 20mA e • Precisamos colocar uma tens˜o de 2,2V no LED, ou seja: VLED = 2, 2V aSabendo desses detalhes, podemos concluir que a tens˜o no resistor ser´ de: VR = 5V − VLED ∴ VR = a a5V − 2, 2V ⇒ VR = 2, 8V . Como IR = 20mA e VR = 2, 8V , podemos calcular o valor da resistˆncia R do eresistor que iremos utilizar atrav´s da Lei de Ohm: e V = RI 2,8VAssim, temos: 2, 8V = R0, 020A ∴ R = 0,020A ⇒ R = 140Ω Depois de feito o c´lculo, podemos generalizar com a seguinte f´rmula: a o Vf onte − VLED R= IR Para o LED verde, precisamos de um resistor de 140Ω, por´m n˜o existem resistores com esse valor para e avenda – os valores s˜o pr´-definidos9 . Dada essa situa¸˜o, temos duas alternativas: a e ca • Utilizar um resistor de maior resistˆncia e limitar mais a corrente (que far´ com que o LED brilhe menos); e a ou • Associar dois ou mais resistores em s´rie ou paralelo para conseguir o valor. e Geralmente escolhemos um resistor de valor pr´ximo, j´ que uma altera¸˜o pequena de corrente n˜o causar´ o a ca a adanos ao dispositivo, por´m em alguns casos precisaremos combinar resistores de valores diferentes para conseguir eo valor equivalente – esse tema ser´ explicado em mais detalhes no pr´ximo cap´ a o ıtulo. 9 Saiba mais em http://www2.eletronica.org/hack-s-dicas/valores-comerciais-para-resistores-capacitores-e-indutores/
  12. 12. 1.4. BIBLIOTECAS E SHIELDS 131.3.2 Alimenta¸˜o do circuito caInternamente, o circuito do Arduino ´ alimentado com uma tens˜o de 5V. Quando ligamos o Arduino em uma e aporta USB do PC, o pr´prio PC, atrav´s do cabo USB, alimenta o Arduino. Por´m nem sempre temos um o e ePC por perto; para esses casos, podemos utilizar uma outra fonte de energia de 5V (a fonte deve ser ligadadiretamente nos pinos 5V e GND do Arduino). Como n˜o possu´ a ımos pilhas/baterias em abundˆncia no mercado com tens˜o de 5V, fica complicado alimentar a aum Arduino dessa forma alternativa – se tivermos uma tomada de 127/220VAC por perto, poder´ ıamos ligaruma fonte AC/DC (essas sim, existem aos montes). Para resolver esse problema, o Arduino possui um reguladorde tens˜o que aceita tens˜es de 7 a 12V (na verdade, ele consegue funcionar com tens˜es entre 6 e 20V, apesar a o ode n˜o ser recomendado). Com o regulador de tens˜o podemos combinar pilhas em s´rie, utilizar uma bateria a a ede 9V ou mesmo baterias de carros, motos e no-breaks (12V).Figura 1.5: Arduino alimentado por uma bateria de 9VRetirado de http://www.arduino.cc/playground/Learning/9VBatteryAdapter1.4 Bibliotecas e shieldsAssim como a IDE j´ vem com diversas fun¸˜es pr´-definidas, o Arduino possui outras bibliotecas para controle a co ede servomotores, displays LCD, gera¸˜o de audio, recep¸˜o de sinais de sensores e outros dispositivos (como ca ´ cateclado PS/2), dentre muitas outras coisas! E quem pensa que essa estensibilidade toda se restringe ` parte de asoftware est´ muito enganado: o Arduino possui o que chamamos de shields, que s˜o placas que se acoplam ` a a aplaca original, agregando funcionalidades ` mesma. a Existem shields dos mais variados tipos, para as mais diversas fun¸˜es. Alguns servem como entrada, outros cocomo sa´ıda, e ainda outros como entrada e sa´ ıda. Com os shields conseguimos, por exemplo, fazer o Arduinose comunicar numa rede Ethernet, ou ainda transmitir dados para qualquer dispositivo via Bluetooth, Wi-Fiou Zigbee. Existem shields com circuitos integrados prontos para controlarmos motores sem que precisemosnos preocupar com complica¸˜es eletrˆnicas envolvidas, outros possuem leitor de cart˜o SD, acelerˆmetro, co o a oGPS e diversos outros sensores que podem gerar dados importantes para o software que est´ rodando no amicrocontrolador.
  13. 13. 14 CAP´ ´ ITULO 1. CONCEITOS BASICOS Figura 1.6: Arduino Duemilanove com shield Ethernet Existem tamb´m outros shields mais elaborados, que s˜o sistemas completos. Um deles, por exemplo, cria e auma plataforma para desenvolvimento de jogos no Arduino: o Video Game Shield10 , que possui uma sa´ RCA ıdae duas entradas para controles Numchuck do Nintendo Wii. Al´m do hardware, existe uma biblioteca para eser utilizada em conjunto, que j´ possui v´rias fun¸˜es pr´-programadas para fazermos desenhos na televis˜o e a a co e acapturar os dados dos movimentos nos controles.1.5 Integra¸˜o com o PC caApesar de o Arduino ser um computador independente, em alguns casos podemos nos aproveitar de um PC porperto e explorar outra funcionalidade muito boa do projeto: o Arduino consegue conversar com o computadoratrav´s da porta USB. Isso nos permite desenvolver um software que roda no PC e se comunica com o software eque roda no Arduino, o que nos abre um mar de possibilidades! Podemos, por exemplo, criar um software emPython11 que recebe os dados de um sensor, via USB (atrav´s do Arduino), e envia para algum banco de dados ena Internet – assim teremos, de certa forma, nosso Arduino online, enviando dados para o mundo, atrav´s de eum PC! Existem in´meros projetos interessantes que fazem interface entre linguagens de programa¸˜o e o Arduino u ca– existem implementa¸˜es para Python, Ruby, Java, C, dentre outras linguagens. E n˜o para por a´ al´m de o co a ı: esoftware que roda no PC receber dados, ele pode tamb´m enviar dados, controlando o Arduino! Dessa forma, epodemos, por exemplo, receber dados da Web e enviar comandos ao Arduino, baseados nesses dados. Um exemplo de aplica¸˜o que utiliza a porta USB para comunica¸˜o do Arduino com o PC ´ o projeto ca ca eArduinoscope12 , que tem como finalidade criar um oscilosc´pio, onde podemos ver em tempo real, no PC, ogr´ficos das tens˜es que est˜o ligadas `s portas anal´gicas do Arduino. Outro exemplo ´ um projeto que criei, a o a a o eonde controlo um carrinho atrav´s de Wi-Fi, o Turiquinhas13 . e Fica a dica para quem quer come¸ar um projeto Arduino assistido por computador de maneira f´cil: vale a c apena estudar um protocolo de comunica¸˜o e controle chamado Firmata14 , cuja implementa¸˜o est´ dispon´ ca ca a ıvel 10 http://www.wayneandlayne.com/projects/video-game-shield/ 11 http://www.python.org/ 12 http://code.google.com/p/arduinoscope/ 13 http://www.justen.eng.br/Turiquinhas 14 http://www.firmata.org/
  14. 14. ´1.6. PORTAS ANALOGICAS E DIGITAIS 15para v´rias linguagens (e j´ vem por padr˜o um exemplo na IDE do Arduino). Ele facilita o processo de a a aaquisi¸˜o de dados e controle da placa. ca Al´m das op¸˜es citadas acima, existe uma linguagem chamada Processing15 , parecid´ e co ıssima com a linguagemque utilizamos no Arduino, que consegue se comunicar com o Arduino via USB e ´ utilizada para criar imagens, eanima¸˜es e intera¸˜es no PC, a partir dos dados vindos da comunica¸˜o com o Arduino. co co ca1.6 Portas anal´gicas e digitais oO Arduino possui dois tipos de portas de entrada: anal´gicas e digitais. Al´m disso, as portas digitais tamb´m o e eservem como portas de sa´ıda, funcionando com dois tipos b´sicos de sa´ a ıda: sa´ digital comum e sa´ PWM ıda ıda– o PWM pode ser utilizado para simular uma sa´ anal´gica, dentre outras coisas. ıda o1.6.1 Portas digitaisUtilizamos as portas digitais quando precisamos trabalhar com valores bem definidos de tens˜o. Apesar de nem asempre ser verdade, geralmente trabalhamos com valores digitais bin´rios, ou seja, projetamos sistemas que autilizam apenas dois valores bem definidos de tens˜o. Existem sistemas tern´rios, quatern´rios, mas focaremos a a ano bin´rio, j´ que ´ esse o utilizado pelo Arduino. a a e Como o sistema ´ bin´rio, temos que ter apenas duas tens˜es. S˜o elas: 0V e 5V. Dessa forma, as portas e a o adigitais do Arduino podem trabalhar apenas com essas duas tens˜es – e o software que desenvolveremos poder´ o arequisitar ao microcontrolador do Arduino que: • Coloque uma determinada porta em 0V; • Coloque uma determinada porta em 5V; • Leia o valor de uma determinada porta (ter´ 0V ou 5V como resposta). a O Arduino Duemilanove possui 14 portas digitais que est˜o destacadas na figura a seguir: a Figura 1.7: Portas digitais do Arduino, de 13 a 0 Apesar de ser poss´ıvel, n˜o ´ recomend´vel utilizar as portas 0 e 1 pois elas est˜o diretamente ligadas ao a e a asistema de comunica¸˜o do Arduino (pinos RX e TX – recep¸˜o e transmiss˜o, respectivamente) e, por isso, ca ca aseu uso pode conflitar com o upload do software. Caso queira utiliz´-las, certifique-se de desconectar quaisquer acircuitos conectados a ela no momento do upload. Utilizaremos as fun¸˜es digitalRead e digitalWrite para ler e escrever, respectivamente, nas portas di- cogitais. A fun¸˜o digitalWrite j´ foi exemplificada em nosso exemplo Blink, onde acendemos e apagamos um ca aLED ao alternar a tens˜o da porta 13 entre 5V e 0V, com intervalo de 1 segundo. Para exemplificar a fun¸˜o a cadigitalRead utilizaremos um bot˜o, como no diagrama a seguir: a 15 http://www.processing.org/
  15. 15. 16 CAP´ ´ ITULO 1. CONCEITOS BASICOS Figura 1.8: Esquema el´trico ligando um bot˜o ao Arduino e a Montado o circuito acima, vamos programar o Arduino com o seguinte c´digo: o #define BOTAO 2 #define LED 13 void setup() { pinMode(LED, OUTPUT); pinMode(BOTAO, INPUT); } void loop() { if (digitalRead(BOTAO) == HIGH) { digitalWrite(LED, LOW); } else { digitalWrite(LED, HIGH); } } A fun¸˜o digitalRead nos retorna o valor correspondente ` tens˜o que est´ na porta que passamos entre ca a a aparenteses. Em nosso exemplo, utilizamos a porta BOTAO (que na verdade ´ uma constante, definida atrav´s da e ediretiva #define), cujo valor ´ 2. O valor retornado ´ uma constante, mapeado da seguinte forma: e e • HIGH, caso a tens˜o na porta seja 5V; a • LOW, caso a tens˜o na porta seja 0V; a O que o programa faz, ent˜o, ´ apagar o LED caso o bot˜o esteja pressionado e acendˆ-lo caso n˜o esteja. a e a e aFica como exerc´ entender o c´digo a seguir, que ´ uma otimiza¸˜o do anterior e possui mesma funcionalidade: ıcio o e ca #define BOTAO 2 #define LED 13 void setup() { pinMode(LED, OUTPUT); pinMode(BOTAO, INPUT); }
  16. 16. ´1.6. PORTAS ANALOGICAS E DIGITAIS 17 void loop() { digitalWrite(LED, !digitalRead(BOTAO)); } Dica: o caractere “!”, em linguagem C, significa not e tem como finalidade negar a express˜o que segue ` a asua direita.PWMPWM significa Modula¸˜o por Largura de Pulso (Pulse-Width Modulation, do Inglˆs) e consiste em manipu- ca elarmos a raz˜o c´ a ıclica de um sinal (conhecida do Inglˆs como duty cycle) a fim de transportar informa¸˜o ou e cacontrolar a potˆncia de algum outro circuito. Basicamente, teremos um sinal digital que oscila entre 0V e 5V ecom determinada frequˆncia (o Arduino trabalha com um padr˜o perto de 500Hz) – funciona como se fosse um e aclock, por´m os tempos em que o sinal permanece em 0V e 5V podem ser diferentes. Duty cycle ´ a raz˜o do e e atempo em que o sinal permanece em 5V sobre o tempo total de uma oscila¸˜o. A Figura 1.9 ilustra melhor esse caconceito: Figura 1.9: Sinal PWM com duty cycle de 25% Assim, temos: x x duty cycle = = x+y T O que controlamos atrav´s de software ´ justamente a duty cycle, ou seja, o percentual de tempo em que e eo sinal fica em 5V. Dessa forma, podemos utilizar essa t´cnica para limitar a potˆncia de algum circuito. Por e eexemplo, considere que um LED L1 seja alimentado o tempo inteiro por um sinal constante de 5V; j´ o LED L2 a´ alimentado pelo sinal PWM acima (duty cycle de 25%). Atrav´s de um c´lculo simples de potˆncia podemose e a enotar que o LED L2 consumir´ apenas 25% da potˆncia do primeiro. a e Infelizmente, por limita¸˜es de hardware, o Arduino n˜o possui PWM em todas as portas digitais: apenas co aas portas 3, 5, 6, 9, 10 e 11 s˜o privilegiadas e podem utilizar esse recurso. Para exemplificar o uso de controle ade potˆncia de um circuito utilizando PWM vamos utilizar um LED em s´rie com um resistor ligados ` porta e e a11 (o circuito ´ o mesmo do experimento Blink, s´ vamos mudar a porta) e o seguinte c´digo: e o o #define LED 11 void setup() { pinMode(LED, OUTPUT); } void loop() { for (int i = 0; i < 255; i++) { analogWrite(LED, i); delay(30); } } Na fun¸˜o loop acima temos um la¸o for, que conta de 0 a 255 (armazenando o valor do contador na vari´vel ca c ai), chamando a fun¸˜o analogWrite (passando como parˆmetros a porta do LED (11) e i) e esperando por 30 ca amilisegundos a cada itera¸˜o. ca
  17. 17. 18 CAP´ ´ ITULO 1. CONCEITOS BASICOS A fun¸˜o analogWrite (apesar de estarmos utilizando uma porta digital) ´ respons´vel pelo PWM e recebe ca e acomo parˆmetros a porta e um valor entre 0 e 255 – esse valor corresponde ao duty cycle, onde 0 corresponde aa 0% e 255 a 100%. Quando vocˆ rodar o c´digo perceber´ que o LED acende de maneira mais suave – cada e o aetapa de luminosidade diferente corresponde a uma itera¸˜o do for. Fica como exerc´ para o leitor modificar ca ıcioo programa para que o LED, al´m de acender, tamb´m apague suavemente. :-) e e1.6.2 Portas anal´gicas oAl´m das portas digitais o Arduino possui as portas anal´gicas. Ao contr´rio das portas digitais, as portas e o aanal´gicas s˜o apenas de entrada e nelas podemos ter como entrada infinitos valores de tens˜o (delimitados o a ana faixa de 0V a 5V). Como os conversores anal´gico-digitais (ADC – analog-digital converter, do Inglˆs) do o eArduino possuem 10 bits de precis˜o, a precis˜o das medi¸˜es de tens˜o no Arduino ´ de por volta de 0,005V a a co a eou 5mV. Figura 1.10: Portas anal´gicas do Arduino, de 0 a 5 o Como os nomes de fun¸˜es no Arduino s˜o bastante intuitivos, utilizamos a fun¸˜o analogRead para ler co a cavalores anal´gicos – ao chamar a fun¸˜o passamos como argumento o n´mero da porta que desejamos ler (de o ca u0 a 5). Como exemplo vamos regular a luminosidade de nosso LED (utilizando PWM) atrav´s da quantidade ede luz detectada por um resistor dependente de luz (ou LDR – light dependent resistor, do Inglˆs). Monte o ecircuito segundo a figura 1.11.
  18. 18. ´1.6. PORTAS ANALOGICAS E DIGITAIS 19 Figura 1.11: Circuito com LDR e LED Como os conversores anal´gico-digital possuem 10 bits de precis˜o, a fun¸˜o analogRead nos devolve um o a cavalor entre 0 e 1023, onde 0 corresponde a uma leitura de 0V na porta anal´gica e 1023 corresponde a 5V (para ovalores intermedi´rios, basta fazer uma regra de trˆs simples, de maneira an´loga com o PWM). Vamos carregar a e aem nosso Arduino o seguinte c´digo: o #define LED 11 #define LDR 5 void setup() { pinMode(LED, OUTPUT); } void loop() { int leitura = analogRead(LDR); int valorPWM = - 0.25 * leitura + 255; analogWrite(LED, valorPWM); } Os valores 0.25 e 255 da linha que definem a vari´vel valorPWM devem ser calibrados conforme ilumina¸˜o do a caambiente, resistores utilizados e luminosidade desejada. Para o c´digo acima, teremos o seguinte comportamento odo valor que colocamos na porta PWM a partir dos valores lidos na porta anal´gica: o
  19. 19. 20 CAP´ ´ ITULO 1. CONCEITOS BASICOS Figura 1.12: Gr´fico da fun¸˜o PWM versus leitura anal´gica a ca o Ficam trˆs exerc´ e ıcios: • Aprenda a utilizar um potenciˆmetro e o utilize para regular o brilho do LED, em vez do LDR; o • Volte o LDR para seu lugar anterior e utilize o potenciˆmetro para configurar os valores 0.25 e 255; o • Leia o datasheet do circuito integrado LM35 e monte um circuito parecido com o anterior, por´m sens´ e ıvel a temperatura (e n˜o mais a luz). a
  20. 20. Cap´ ıtulo 2Fundamentos de Eletrˆnica o 21
  21. 21. 22 CAP´ ˆ ITULO 2. FUNDAMENTOS DE ELETRONICA2.1 Resistores e Lei de OhmResistores s˜o dispositivos utilizados com a finalidade de transformar energia el´trica em energia t´rmica e/ou a e elimitar a corrente el´trica em um circuito. Como o pr´prio nome sugere, eles tˆm como fun¸˜o oferecer uma e o e caresistˆncia ` passagem da corrente el´trica – medimos essa resistˆncia atrav´s da unidade Ω (ohm). e a e e e Por consequˆncia, eles causam uma queda de tens˜o na regi˜o do circuito onde se encontram – muitas vezes e a aacabamos utilizando esse efeito para conseguirmos tens˜es intermedi´rias, caso as fontes de tens˜o do circuito o a an˜o consigam fornecˆ-las. Sabendo-se a tens˜o e corrente em um resistor, podemos calcular sua resistˆncia a e a eatrav´s da f´rmula: e o V R= I Por sua vez, a resistˆncia pode ser calculada atrav´s das caracter´ e e ısticas do material resistivo: ρL R= A Onde ρ ´ a resistividade do material, L ´ seu comprimento e A sua ´rea, ou seja, a resistˆncia ´ proporcional e e a e eao comprimento e indiretamente proporcional ` ´rea. aa Se, para um determinado circuito, V e I tˆm uma rela¸˜o linear, ou seja, R ´ constante para in´meros e ca e uvalores de V e I, ent˜o chamamos o material (que possui resistˆncia R) de ˆhmico. a e o2.1.1 Resistores em s´rie eSe possuirmos resistores em s´rie em determinado circuito, podemos calcular a resistˆncia equivalente do mesmo e esomando-se as resistˆncias, atrav´s da f´rmula: e e o Req = R1 + R2 + ... + Rn Figura 2.1: Resistores em s´rie e Retirado de http://en.wikipedia.org/wiki/Resistor2.1.2 Resistores em paraleloCaso os resistores estejam em paralelo, a resistˆncia equivalente ser´ o inverso da soma dos inversos das resis- e atˆncias, como na f´rmula a seguir: e o 1 1 1 1 = + + ... + Req R1 R2 Rn Figura 2.2: Resistores em paralelo Retirado de http://en.wikipedia.org/wiki/Resistor
  22. 22. 2.2. CAPACITORES E INDUTORES 232.1.3 C´digo de cores oOs resistores possuem um c´digo de cores que nos permite identificar qual sua resistˆncia. Para isso, mapeamos o eas cores das diversas faixas do resistor e utilizamos a seguinte f´rmula: o R = (10a + b) · 10c ± t, onde a, b e c s˜o as primeiras faixas e t a ultima faixa (geralmente prata ou dourada), que representa a a ´tolerˆncia. a Figura 2.3: C´digo de cores o Retirado de http://pt.wikipedia.org/wiki/Resistor2.1.4 Divisor de tens˜o aComo citado acima, resistores criam uma queda de tens˜o na regi˜o do circuito em que est˜o. Utilizando esse a a aefeito, podemos criar o que chamamos de divisores de tens˜o1 : circuitos com resistores que, aplicada uma tens˜o, a atˆm como sa´ uma fra¸˜o (da´ o nome divisores) dessa tens˜o de entrada. e ıda ca ı a Figura 2.4: Circuito divisor de tens˜o a A partir do circuito acima, temos que: R2 Vout = · Vin R1 + R2 Esse recurso ´ bastante util quando precisamos medir um tens˜o maior do que nossos circuitos conseguem. e ´ aPor exemplo: se quisermos medir uma tens˜o que varia de 9 a 12V no Arduino precisaremos coloc´-la na faixa a ade 0 a 5V, j´ que as portas anal´gicas do Arduino trabalham nessa faixa menor. Para isso, poder´ a o ıamos utilizarum divisor de tens˜o cujos valores de resistˆncia resultassem em Vout = V3n . Dessa forma, os valores lidos em a e iVout seriam de 3 a 4V. Por´m, aten¸˜o: caso precisemos conectar resistores ou outros circuitos resistivos no pino Vout , o c´lculo das e ca atens˜es muda e Vout passa a depender das novas resistˆncias do circuito. o e2.2 Capacitores e indutoresApesar de n˜o estudarmos a fundo esses dois elementos b´sicos de circuitos, eles podem ser importantes no a adesenvolvimento de futuros projetos. Basicamente, capacitores e indutores armazenam energia (pense como 1 http://pt.wikipedia.org/wiki/Divisor de tens˜o a
  23. 23. 24 CAP´ ˆ ITULO 2. FUNDAMENTOS DE ELETRONICAuma bateria em que vocˆ carrega e descarrega de tempos em tempos, por´m com capacidade bem limitada) e e es˜o bastante utilizados em filtros de sinais, estabilizadores de tens˜o, circuitos ressonantes (como transmissores a ae receptores de r´dio), dentre outros. a2.2.1 CapacitoresOs capacitores s˜o componentes que armazenam energia em forma de campo el´trico. S˜o formados por duas a e aplacas met´licas com um diel´trico (isolante) no meio. A unidade de medida ´ o Farad (F), por´m como 1 Farad a e e e´ algo bem grande, comumente encontramos capacitores na casa dos mF (miliFarad), µF (microFarad) e pFe(picoFarad). Figura 2.5: Capacitor eletrol´ ıtico bastante comum no mercado Figura 2.6: Representa¸˜o de um capacitor em circuito el´trico ca e2.2.2 IndutoresOs indutores s˜o componentes que armazenam energia em forma de campo magn´tico. Geralmente s˜o formados a e apor bobinas (fio enrolado) com um condutor no meio. A unidade de medida ´ o Henry (H). e Figura 2.7: Indutores de v´rios tipos, comuns no mercado a
  24. 24. 2.3. DIODOS 25 Figura 2.8: Representa¸˜o de um indutor em circuito el´trico ca e2.3 DiodosDiodos s˜o componentes que tˆm a capacidade de conduzir corrente el´trica em uma dire¸˜o e bloque´-la em a e e ca aoutra – esse comportamento ´ chamado de retifica¸˜o e pode ser utilizado para converter corrente alternada e ca(CA ou AC – alternating current, do Inglˆs –, a energia que temos em nossas tomadas) em corrente cont´ e ınua(CC ou DC – direct current, do Inglˆs –, a forma como as baterias nos fornecem energia). Outros usos de diodo es˜o prote¸˜o de circuitos (contra corrente reversa) e extra¸˜o de modula¸˜o de sinais (por exemplo, para uso a ca ca caem circuitos de comunica¸˜o sem fio). caFigura 2.9: Foto de um diodo comum no mercado – a faixa menor (cinza, para esse diodo) corresponde aoterminal negativo Figura 2.10: Representa¸˜o de um diodo em circuito el´trico ca e O diodo conduzir´ corrente el´trica caso a tens˜o em seu terminal positivo (+) seja maior que a tens˜o em a e a aseu terminal negativo (−), ou seja, funcionar´ como um curto-circuito. Caso contr´rio, ele funcionar´ como a a a a a ´circuito aberto (n˜o conduzir´). E importante notar que para diodos reais existe uma queda de tens˜o de 0,7V aem sua jun¸˜o P-N e, com isso, a tens˜o do lado positivo precisa ser maior que a tens˜o negativa + 0,7V para ca a aque ele conduza.2.4 TransistoresTransistores s˜o dispositivos semicondutores usados como amplificadores ou chaveadores. Sua entrada ´ uma a ecorrente/tens˜o que altera a corrente/tens˜o de sa´ a a ıda. Os transistores s˜o a base de todos os circuitos integrados ae placas modernos – alguns, como os microprocessadores, possuem milh˜es deles. o Para nossos estudos, iremos focar nos transistores de estrutura bipolar de jun¸˜o (ou BJT, Bipolar Junction caTransistor, do Inglˆs) com polaridade NPN e PNP, por´m existem outros tipos, como os FETs. e e
  25. 25. 26 CAP´ ˆ ITULO 2. FUNDAMENTOS DE ELETRONICA (a) NPN (b) PNP Figura 2.11: S´ ımbolos de transistores BJT em circuito el´trico e Os transistores possuem trˆs terminais: base, coletor e emissor. E suas principais equa¸˜es caracter´ e co ısticass˜o: a IC + IB = IE IC = βIB ,onde β ´ uma constante (tamb´m referida como hF E ) caracter´ e e ıstica do transistor (fator de amplifica¸˜o). ca A segunda equa¸˜o nos evidencia o poder de amplifica¸˜o de um transistor: dependendo da corrente que ca cacolocarmos na base (corrente IB ), ele permitir´ maior ou menor corrente no coletor (corrente IC ). a No mercado encontramos transistores NPN e PNP com v´rios encapsulamentos diferentes. Alguns comuns as˜o o 2N2904 (NPN) e 2N3906 (PNP). a Figura 2.12: Componente 2N3904: transistor NPN com encapsulamento TO-922.4.1 Utiliza¸˜o de transistores com rel´s ca eRel´s s˜o componentes uteis quando precisamos isolar eletronicamente um circuito de controle de um circuito e a ´de potˆncia. Se quisermos, por exemplo, acender uma lˆmpada incandescente (que utiliza corrente alternada) e aatrav´s do Arduino, podemos utilizar um rel´: o Arduino controlar´ o rel´, que ent˜o far´ a conex˜o (ou n˜o) da e e a e a a a alˆmpada com a tomada. Existem rel´s mecˆnicos e de estado s´lido (SSD ou Solid-state relay, do Inglˆs), por´m a e a o e eiremos utilizar um rel´ mecˆnico em nosso exemplo, por ser mais barato e f´cil de se encontrar no mercado. e a a Como rel´s possuem correntes de ativa¸˜o maiores que as portas digitais do Arduino conseguem suprir, e caprecisamos amplificar a corrente que sai das portas digitais do Arduino para que ela seja capaz de acionar o rel´ e– e isso faremos utilizando um transistor NPN. Utilizando um rel´ acionado por 5V, um transistor NPN (2N3904) e dois resistores (10Ω para o rel´ e e e470Ω para a base do transistor) podemos utilizar o circuito a seguir para controlar qualquer carga de correntealternada – basta ligar a carga `s sa´ a ıdas do rel´, que n˜o est˜o indicadas no diagrama: e a a
  26. 26. 2.4. TRANSISTORES 27 Figura 2.13: Circuito para ligar um rel´ (controlado por transistor) no Arduino e Fica como exerc´ para o leitor verificar como seria o uso de um transistor PNP. ıcio2.4.2 Ponte-HEm alguns projetos precisamos inverter a tens˜o de entrada de determinado circuito. Por exemplo: os motores ade corrente cont´ ınua giram para um lado caso apliquemos tens˜o positiva em seu terminal esquerdo e negativa aem seu terminal direito. Por´m, para fazˆ-los girar em sentido contr´rio, precisamos aplicar tens˜o negativa em e e a aseu terminal esquerdo e positiva em seu terminal direito. Podemos implementar circuitos que fazem essa invers˜o de tens˜o a partir de 4 transistores funcionando a acomo chave. Esse tipo de circuito se chama ponte-H por conta da disposi¸˜o dos transistores com rela¸˜o ao ca camotor, como pode ser visto no diagrama a seguir: Figura 2.14: Diagrama de uma ponte-H
  27. 27. 28 CAP´ ˆ ITULO 2. FUNDAMENTOS DE ELETRONICA Quando fechamos as chaves S1 e S4, o terminal esquerdo do motor recebe tens˜o positiva e o terminal adireito recebe tens˜o negativa. J´ quando fechamos as chaves S2 e S3, o terminal esquerdo do motor recebe a atens˜o negativa e o terminal direito recebe tens˜o positiva. O que precisamos fazer ´ substituir as chaves por a a etransistores, para ent˜o podermos controlar o sentido de rota¸˜o do motor atrav´s do Arduino. a ca e A seguir temos um circuito bastante completo de ponte-H que utiliza diodos de prote¸˜o e acopladores cao´pticos para dar mais seguran¸a ` solu¸˜o como um todo: c a caFigura 2.15: Esquema de uma ponte-H com transistoresRetirado de http://www.mcmanis.com/chuck/robotics/tutorial/h-bridge/ Para quem n˜o quer ter trabalho montando o circuito, existe a op¸˜o de comprar um circuito integrado a capronto com a ponte-H – uma das op¸˜es ´ o L293D. co ePWM e ponte-H para controle de velocidadeComo com PWM conseguimos controlar a quantidade de potˆncia que ser´ entregue a um circuito, caso utilize- e amos PWM como entrada do controle de uma ponte-H, podemos limitar a quantidade de potˆncia entregue ao emotor e, com isso, controlar sua velocidade.
  28. 28. Cap´ ıtulo 3Eletrˆnica Digital o 29
  29. 29. 30 CAP´ ˆ ITULO 3. ELETRONICA DIGITAL3.1 Introdu¸˜o caDizemos que um circuito ´ digital quando suas entradas e sa´ e ıdas trabalham com sinais digitais, ou seja, sinaiscom valores bem definidos. Geralmente esses circuitos trabalham apenas com dois valores e, por isso, chamamosesses sistemas de digitais bin´rios. a Quando estamos falando de circuitos digitais, estamos falando de transporte de informa¸˜o. E como temos casomente dois valores poss´ ıveis de tens˜o, teremos toda a informa¸˜o codificada em bin´rio – chamamos cada a ca ainforma¸˜o bin´ria de bit (d´ ca a ıgito bin´rio ou binary digit, do Inglˆs) e os representamos por 0 e 1. a e Dessa forma, se nossos circuitos trabalham com tens˜es de 0V e 5V, dizemos que 0V equivale ao bit 0 e 5V oequivale ao bit 1 – agora passamos a falar de bits (informa¸˜o) em vez de tens˜es, ou seja, estamos pensando ca ouma camada acima.3.2 Portas l´gicas oAssim como na Matem´tica possu´ a ımos opera¸˜es b´sicas como soma, subtra¸˜o, multiplica¸˜o e divis˜o, na co a ca ca aaritm´tica bin´ria temos opera¸˜es que podemos fazer com nossos bits. Para simplificar, vamos tratar as e a coopera¸˜es com uma ou duas entradas, apenas uma sa´ co ıda, tratar o bit 0 como sinˆnimo de falso e o bit 1 como osinˆnimo de verdadeiro. Dessa forma, temos as seguintes opera¸˜es: o co • AND: opera¸˜o que resulta em bit 1 somente quando os dois bits de entrada s˜o 1 (ou seja, s´ resulta ca a o em “verdadeiro” se somente o primeiro e o segundo bit forem “verdadeiros”.); • OR: opera¸˜o que resulta em 1 quando pelo menos uma das entradas ´ 1 (ou seja, resulta em “verdadeiro” ca e quando o primeiro ou o segundo bit forem “verdadeiros”.); • NOT: opera¸˜o que resulta na invers˜o do bit de entrada; ca a • XOR: tamb´m chamade de exclusive or (“ou exclusivo”), essa opera¸˜o s´ resulta em bit 1 quando somente e ca o um dos bits de entrada ´ 1. e O circuito abaixo exemplifica a cria¸˜o de uma porta do tipo AND: ca Figura 3.1: Porta l´gica AND criada a partir de diodos e resistor o3.2.1 Tabela-verdadePara um n´mero finito de entradas podemos aplicar as opera¸˜es l´gicas em todos os poss´ u co o ıveis valores dessaentrada e obter todos os poss´ ıveis resultados da opera¸˜o/fun¸˜o l´gica. Chama-se tabela-verdade a tabela que ca ca olista todas essas possibilidades. Para as fun¸˜es l´gicas acima, quando temos duas entradas temos um total de 4 poss´ co o ıveis combina¸˜es de coentradas diferentes (o n´mero de combina¸˜es bin´rias ´ sempre 2n´mero de entradas ) e as seguintes tabelas: u co a e u
  30. 30. ´3.2. PORTAS LOGICAS 31 A B A AND B A B A OR B A B A XOR B 0 0 0 0 0 0 A NOT A 0 0 0 0 1 0 0 1 1 0 1 0 1 1 1 0 0 1 0 1 1 0 1 0 1 1 1 1 1 1 1 (c) Opera¸ao NOT c˜ 1 1 0 (a) Opera¸˜o AND ca (b) Opera¸ao OR c˜ (d) Opera¸˜o XOR ca Figura 3.2: Tabelas-verdade das opera¸˜es l´gicas b´sicas co o a Al´m das opera¸˜es b´sicas, temos as nega¸˜es nas mesmas, como NAND, NOR e XNOR. Para saber a e co a cotabela-verdade dessas, basta negar a sa´ da tabela verdade das outras opera¸˜es (AND, OR e XOR, respec- ıda cotivamente).3.2.2 Representa¸˜o das opera¸oes ca c˜As opera¸˜es l´gicas citadas acima podem ser representadas em circuitos pelos seguintes s´ co o ımbolos: (a) NOT (b) AND (c) NAND (d) OR (e) NOR (f) XOR (g) XNOR Figura 3.3: S´ ımbolos das opera¸˜es l´gicas co o Al´m disso, podem ser escritas por extenso: e Opera¸˜o ca Representa¸˜o ca NOT A A A AND B A+B A NAND B A+B A OR B A·B A NOR B A·B A XOR B A⊕B A XNOR B A⊕B3.2.3 Fun¸˜es l´gicas compostas co oAssim como na Matem´tica, podemos fazer composi¸˜es das fun¸˜es l´gicas b´sicas para obter novas fun¸˜es a co co o a co(compostas). A fun¸˜o XOR, por exemplo, pode ser obtida atrav´s da composi¸˜o das fun¸˜es NOT, AND e ca e ca coOR: A⊕B =A·B+A·B ou Figura 3.4: Diagrama da fun¸˜o composta XOR ca
  31. 31. 32 CAP´ ˆ ITULO 3. ELETRONICA DIGITAL A partir de fun¸˜es l´gicas compostas e t´cnicas como realimenta¸˜o conseguimos criar dispositivos mais co o e cacomplexos como latches, flip-flops, coders/decoders, mux/demux, dentre outros. Esses dispositivos s˜o a base apara criar circuitos l´gicos de alto n´ o ıvel, por exemplo: com alguns flip-flops conseguimos criar registradores,que podem evoluir para mem´rias e fazer parte do circuito de um microprocessador. o
  32. 32. Cap´ ıtulo 4Fazendo barulho com o Arduino 33
  33. 33. 34 CAP´ ITULO 4. FAZENDO BARULHO COM O ARDUINO Para quem gosta de fazer m´sica, o Arduino possui uma fun¸˜o pronta para criar uma onda quadrada na u cafrequˆncia e no tempo desejados. Apesar de serem notas simples e a onda ser quadrada, adicionando circuitos eextras (para filtros e distor¸˜es) e um pouco de criatividade, conseguimos criar sons legais para nossos projetos. co A fun¸˜o que faz esse trabalho ´ chamada tone. Vamos criar um projeto-exemplo ligando um buzzer – ca ecomponente que reproduz sons de acordo com as varia¸˜es de tens˜o em seus terminais – para tocar nosso som co ada seguinte forma: Figura 4.1: Circuito com buzzer Utilizaremos o seguinte c´digo: o #define BUZZER 9 int notas[] = { 524, 588, 660, 699, 785, 881, 989 }; void setup() { pinMode(BUZZER, OUTPUT); } void loop() { for (int i = 0; i < 7; i++) { tone(BUZZER, notas[i], 1000); delay(1000); } delay(1000); } Al´m do la¸o for, utilizamos tamb´m um vetor de inteiros chamado notas. Um vetor nada mais ´ que um e c e elocal onde armazenamos v´rias vari´veis de mesmo tipo. Os vetores s˜o indexados e para acessar cada item a a aguardado neles utilizamos ´ındices que variam de 0 a n − 1, onde n ´ o n´mero total de elementos. No exemplo e uacima, utilizamos a vari´vel i para percorrer o vetor e, por isso, para acessar os elementos utilizamos i. a Os segredos do c´digo acima s˜o: o a • Saber a frequˆncia das notas1 e e • Saber utilizar a fun¸˜o tone. A fun¸˜o tone recebe trˆs parˆmetros, respectivamente: pino (precisa ser ca ca e a um pino que tenha suporte a PWM), frequˆncia da nota e dura¸˜o do som em milissegundos. e ca 1 Saiba mais em http://pt.wikipedia.org/wiki/S´rie harmˆnica (m´sica) e o u
  34. 34. Cap´ ıtulo 5Armazenando na EEPROM 35
  35. 35. 36 CAP´ ITULO 5. ARMAZENANDO NA EEPROM EEPROM (Electrically Erasable Programmable Read-Only Memory, do Inglˆs) ´ um tipo de mem´ria n˜o e e o avol´til, ou seja, que n˜o se apaga ao retirarmos energia de seu circuito (o que n˜o ´ verdade para as mem´rias a a a e odo tipo RAM, por exemplo). O ATMega328, microcontrolador presente no Arduino Duemilanove, possui umcircuito EEPROM integrado de 1024 bytes (ou 1KiB) – em outras vers˜es do Arduino, como o Mega (que usa oATMega1280 ou ATMega2560, dependendo do modelo), a EEPROM pode chegar at´ 4KiB. e Ter o circuito EEPROM integrado significa que nosso software pode armazenar 1KiB de dados que n˜o aser˜o perdidos (mesmo que desliguemos o Arduino da fonte de alimenta¸˜o) – funciona como se fosse um a camicro-pendrive. Para utilizar a EEPROM n˜o precisamos de circuitos adicionais: precisamos apenas utilizar a abiblioteca EEPROM.h. Por´m, para nosso exemplo, vamos ligar um LED na porta 11 e utilizar o seguinte c´digo: e o #include <EEPROM.h> #define LED 11 void setup() { for (int i = 0; i < 16; i++) { EEPROM.write(i, i * i); } } void loop() { for (int i = 0; i < 16; i++) { byte leitura = EEPROM.read(i); analogWrite(LED, leitura); delay(50); } delay(1000); } A diretiva #include diz ao compilador que queremos incluir a biblioteca EEPROM.h – isso quer dizer que,al´m do c´digo que digitamos, utilizaremos um c´digo j´ criado pela equipe do Arduino para facilitar a utiliza¸˜o e o o a cada EEPROM. O exemplo nada mais faz que escrever 16 bytes na EEPROM (na fun¸˜o setup), ler um por um cae configurar o valor lido como sa´ PWM da porta 11 (na fun¸˜o loop). ıda ca A fun¸˜o de escrita, EEPROM.write, recebe dois parˆmetros: o endere¸o onde ela vai escrever (um valor entre ca a c0 e 1023, no caso do Arduino Duemilanove com ATMega328) e o byte que escreveremos nesse local, j´ a fun¸˜o a caEEPROM.read recebe apenas um parˆmetro (o endere¸o de onde ela far´ a leitura) e nos retorna o valor lido na a c amem´ria (um byte). o

×