Você está na página 1de 36

2

Sumrio a
1 Conceitos bsicos a 1.1 O Projeto Arduino . . . . . . . 1.2 Instalao do software . . . . . ca 1.3 Primeiro projeto . . . . . . . . 1.3.1 Clculos de resistncia . a e 1.3.2 Alimentao do circuito ca 1.4 Bibliotecas e shields . . . . . . 1.5 Integrao com o PC . . . . . . ca 1.6 Portas analgicas e digitais . . o 1.6.1 Portas digitais . . . . . 1.6.2 Portas analgicas . . . . o 7 8 9 10 12 13 13 14 15 15 18 21 22 22 22 23 23 23 24 24 25 25 26 27 29 30 30 30 31 31 33 35

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

2 Fundamentos de Eletrnica o 2.1 Resistores e Lei de Ohm . . . . . . . 2.1.1 Resistores em srie . . . . . . e 2.1.2 Resistores em paralelo . . . . 2.1.3 Cdigo de cores . . . . . . . . o 2.1.4 Divisor de tenso . . . . . . . a 2.2 Capacitores e indutores . . . . . . . 2.2.1 Capacitores . . . . . . . . . . 2.2.2 Indutores . . . . . . . . . . . 2.3 Diodos . . . . . . . . . . . . . . . . . 2.4 Transistores . . . . . . . . . . . . . . 2.4.1 Utilizao de transistores com ca 2.4.2 Ponte-H . . . . . . . . . . . . 3 Eletrnica Digital o 3.1 Introduo . . . . . . . . . . . . . . ca 3.2 Portas lgicas . . . . . . . . . . . . . o 3.2.1 Tabela-verdade . . . . . . . . 3.2.2 Representao das operaes ca co 3.2.3 Funes lgicas compostas . . co o 4 Fazendo barulho com o Arduino 5 Armazenando na EEPROM

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rels e . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

SUMARIO

SUMARIO

Prefcio a
Essa apostila destinada aos alunos que realizaram o Curso de Arduino1 , tendo como premissa explicar em mais e detalhes temas abordados em aula para que os alunos no se preocupem com anotaes durante os experimentos. a co Seu contedo (com exceo das fotos de terceiros, devidamente citadas) est dispon atravs da licena u ca a vel e c Creative Commons Atribuio-Uso no-comercial-Compartilhamento pela mesma licena 3.0 Unca a c ported, que est dispon nas formas compacta e completa nos seguintes endereos: 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 correes, sugestes ou mesmo queira contribuir escrevendo essa apostila, sinta-se livre para co o entrar em contato terei um imenso prazer em receber sua contribuio! ca

Download
Essa apostila est dispon para download atravs do site do Curso de Arduino1 . Acesse o site para vericar a vel e novas verses no seguinte endereo: o c http://www.CursoDeArduino.com.br/apostila

O Autor
Alvaro Justen, tambm conhecido como Turicas, o criador do Curso e e de Arduino1 e autor dessa apostila. F de carteirinha de software livre a (usurio h mais de 12 anos), sempre participa de eventos (palestrando a a ou organizando) e grupos de usurios, alm de contribuir com o dea e senvolvimento de diversos projetos. Foi responsvel pela criao do a ca grupo de usurios de Arduino do Rio de Janeiro2 , onde so realizados a a encontros mensais para discutir sobre a plataforma. Est nalizando sua graduao em Engenharia de Telecomunicaa ca es pela Universidade Federal Fluminense (Niteri/RJ), onde j deco o a senvolveu diversas atividades de pesquisa, ensino e extenso (muitas a ligadas ao Arduino); programador Python3 , tendo criado e contrie bu com diversos projetos nessa linguagem; entusiasta de metodolodo gias ageis e Coding Dojo4 , sendo o responsvel por trazer a prtica a a a Niteri. o Alvaro atualmente possui uma empresa que ministra cursos de Arduino por todo o Brasil e desenvolve projetos utilizando a plataforma para diversas empresas. Alm 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/

Cap tulo 1

Conceitos bsicos a

CAP ITULO 1. CONCEITOS BASICOS

1.1

O Projeto Arduino

Arduino1 um projeto que engloba software e hardware e tem como objetivo fornecer uma plataforma fcil e a para prototipao de projetos interativos, utilizando um microcontrolador. Ele faz parte do que chamamos de ca computao f ca sica: rea da computao em que o software interage diretamente com o hardware, tornando a ca poss integrao fcil com sensores, motores e outros dispositivos eletrnicos. vel ca a o A parte de hardware do projeto, uma placa que cabe na palma da mo, um computador como qualquer a e outro: possui microprocessador, memria RAM, memria ash (para guardar o software), temporizadores, o o contadores, dentre outras funcionalidades. Atualmente, o projeto est na verso Uno, porm muitos Arduinos a a e encontrados hoje so da verso Duemilanove (2009, em italiano), que possui um clock de 16MHz, 2kB de a a memria RAM, 32kB de memria ash, 14 portas digitais e 6 entradas analgicas. o o o

Figura 1.1: Foto do hardware de um Arduino Duemilanove A principal diferena entre um Arduino e um computador convencional que, alm ter menor porte (tanto c e e no tamanho quanto no poder de processamento), o Arduino utiliza dispositivos diferentes para entrada e sa da em geral. Por exemplo: em um PC utilizamos teclado e mouse como dispositivos de entrada e monitores e impressoras como dispositivos de sa da; j em projetos com o Arduino os dispositivos de entrada e sa so a da a circuitos eltricos/eletrnicos. 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, presso etc.) e controlar outros circuitos (lmpadas, motores, a a eletrodomsticos etc.), dentre outras coisas que no conseguir e a amos diretamente com um PC. A grande diferena c com relao ao uso desses dispositivos, no caso do Arduino, que, na maior parte das vezes, ns mesmos ca e o constru mos os circuitos que so utilizados, ou seja, no estamos limitados apenas a produtos existentes no a a mercado: o limite dado por nosso conhecimento e criatividade! e O melhor de tudo nesse projeto que seu software, hardware e documentao so abertos. O software livre e ca a e (GNU GPL2 ), o hardware totalmente especicado (basta entrar no site e baixar os esquemas) e a documentao e ca est dispon a vel em Creative Commons3 os usurios podem colaborar (seja escrevendo documentao, seja a ca traduzindo) atravs da wiki! e
1 http://www.arduino.cc/ 2 http://www.gnu.org/licenses/gpl.html 3 http://creativecommons.org/licenses/

1.2. INSTALACAO DO SOFTWARE

1.2

Instalao do software ca

Para criar um projeto com o Arduino, basta comprar uma placa Arduino (utilizaremos o Arduino Duemilanove como exmplo) que custa em torno de US$30 no exterior e por volta de R$100 no Brasil , fazer download da interface 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 software ser desenvolvido na Arduino IDE em nosso PC, utilizando a linguagem C++. Aps escrever o cdigo, o a o o compilaremos e ento faremos o envio da verso compilada ` memria ash do Arduino, atravs da porta USB. a a a o e A partir do momento que o software gravado no Arduino no precisamos mais do PC: o Arduino, como um e a e computador independente, conseguir sozinho executar o software que criamos, desde que seja ligado a uma a fonte de energia. Antes de iniciar nosso projeto precisamos ento 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 Administrao Gerenciador de pacotes ca Synaptic).

Ubuntu GNU/Linux (anterior a 10.10): Consulte a pgina de instalao do Arduino em Ubuntu5 . a ca

Outras distribuies GNU/Linux: Consulte a pgina de instalao em outras distribuies GNU/Linux6 . co a ca co

Microsoft Windows: Consulte a pgina de instalao para as variadas verses do Microsoft Windows7 . a ca o

Apple Mac OS X: Consulte a pgina de instalao para o Mac OS X8 . a ca

Aps a instalao, abra a IDE (no Ubuntu GNU/Linux ela estar dispon no menu Aplicativos Eleo ca a vel trnica 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

10

CAP ITULO 1. CONCEITOS BASICOS

Figura 1.2: Arduino IDE verso 0018 rodando no Ubuntu GNU/Linux 10.10 a

1.3

Primeiro projeto

Quando ensinamos linguagens de programao novas, geralmente o primeiro exemplo um hello world. Como ca e o Arduino no vem por padro com um display, nosso primeiro exemplo ser fazer um LED piscar e por isso a a a ser chamado blink. Nosso LED car aceso durante um segundo e apagado durante outro segundo e ento a a a recomear o ciclo. Abra a IDE e digite o seguinte cdigo: c a o void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); } Chamamos um cdigo feito para Arduino de sketch e o salvamos em um arquivo com a extenso .pde. Com o a nosso sketch pronto, bastar conectar o Arduino na porta USB e clicar no boto upload (segundo, da direita a a para a esquerda destacado na gura acima). Aps o processo, ser vista a mensagem Done uploading na IDE o a e ento o sketch estar rodando no Arduino, ou seja, o LED acender e apagar, de 1 em 1 segundo. Vamos a a a a agora ` explicao do processo: a ca

1.3. PRIMEIRO PROJETO

11

O Arduino possui 14 portas digitais, que podemos utilizar como entrada ou sa da. Nesse caso, vamos utilizar a porta de nmero 13 como sa u da, dessa forma, podemos controlar quando a porta car com 5V ou quando a car com 0V internamente o Arduino possui um LED conectado ` porta 13 e, por isso, teremos como ver a a nosso software funcionando. Para que nosso software funcione corretamente no Arduino, precisamos criar duas funes espec co cas: setup e loop. A funo setup executada assim que o Arduino d boot, j a funo loop ca sendo executada ca e a a ca continuamente (em loop) at que o Arduino seja desligado. Como as portas digitais so de entrada ou sa e a da, denimos ento dentro da funo setup que a nossa porta 13 uma porta de sa fazemos isso atravs da a ca e da e chamada ` funao pinMode, que j vem na biblioteca padro do Arduino. a c a a Depois de congurarmos corretamente a porta 13 como sa da, precisamos acender e apagar o LED que est conectado a ela. Para alterar a tenso na porta, utilizamos a funo digitalWrite (que tambm est na a a ca e a biblioteca padro do Arduino); passamos para essa funo a porta que queremos alterar a tenso e o novo valor a ca a de tenso (HIGH = 5V, LOW = 0V). Depois das chamadas para acender e apagar o LED, chamamos a funo a ca delay passando o parmetro 1000 o que essa funo faz esperar um tempo em milisegundos para ento a ca e a executar a prxima instruo. o ca Deve-se ressaltar que a IDE Arduino inclui automaticamente todas as bibliotecas que utilizamos. Se voc e est acostumado com C/C++, note que no precisamos digitar as diretivas include para arquivos como o a a stdlib.h, por exemplo. Tudo feito de forma automtica para facilitar o desenvolvimento do projeto! e a Como o Arduino j vem com um LED internamente conectado ` porta 13, no precisaremos de circuitos a a a externos para que esse projeto funcione, ou seja, bastar fazer upload daquele cdigo e j teremos o resultado a o a esperado:

(a) LED apagado

(b) LED aceso

Figura 1.3: Arduino Duemilanove rodando o exemplo Blink

Porm, se quisermos acender um LED externo ` placa, podemos conect-lo diretamente ` porta 13. Podemos e a a a utilizar um LED de 5mm que acende com 2,5V. O problema, nesse caso, se d por conta da porta digital: ela a assume ou a tenso 0V, ou a tenso 5V e caso coloquemos 5V no LED ele ir queimar. a a a Para solucionar esse problema precisamos ligar algum outro componente que seja responsvel por dividir a parte dessa tenso com o LED, para que ele no queime, ento utilizaremos um resistor. Portanto, ligamos um a a a resistor de 120 em srie com o LED, o resistor ` porta 13 e o LED ` porta GND ground ou terra , como e a a na Figura 1.4.

12

CAP ITULO 1. CONCEITOS BASICOS

Figura 1.4: Utilizando um LED externo para o exemplo Blink No precisamos fazer nenhuma alterao no software para que esse circuito funcione: basta ligar o Arduino a ca na porta USB do computador, para que o computador d energia ao circuito, e ento veremos o LED externo e a piscar juntamente com o LED interno. Em vez do LED, poder amos controlar outros componentes, como motores, eletrodomsticos etc. e

1.3.1

Clculos de resistncia a e

Para chegar ao valor de 120 acima, precisei fazer algumas contas (e arredondamentos). Vamos aprender agora a calcular o valor dos resistores que precisamos utilizar. Se precisarmos acender um LED verde, que alimentado e com tenso de 2,2V e corrente de 20mA atravs do Arduino, precisaremos de um resistor, como j vimos, j que a e a a o Arduino s consegue fornecer ou 0V ou 5V. Colocaremos o resistor em srie com o LED, e com isso podemos o e concluir que: A tenso total (soma das tenses 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 tenso de 2,2V no LED, ou seja: VLED = 2, 2V a Sabendo desses detalhes, podemos concluir que a tenso no resistor ser de: VR = 5V VLED VR = a a 5V 2, 2V VR = 2, 8V . Como IR = 20mA e VR = 2, 8V , podemos calcular o valor da resistncia R do e resistor que iremos utilizar atravs da Lei de Ohm: e V = RI
2,8V Assim, temos: 2, 8V = R0, 020A R = 0,020A R = 140 Depois de feito o clculo, podemos generalizar com a seguinte frmula: a o

R=

Vf onte VLED IR

Para o LED verde, precisamos de um resistor de 140, porm no existem resistores com esse valor para e a venda os valores so pr-denidos9 . Dada essa situao, temos duas alternativas: a e ca Utilizar um resistor de maior resistncia e limitar mais a corrente (que far com que o LED brilhe menos); e a ou Associar dois ou mais resistores em srie ou paralelo para conseguir o valor. e Geralmente escolhemos um resistor de valor prximo, j que uma alterao pequena de corrente no causar o a ca a a danos ao dispositivo, porm em alguns casos precisaremos combinar resistores de valores diferentes para conseguir e o valor equivalente esse tema ser explicado em mais detalhes no prximo cap a o tulo.
9 Saiba

mais em http://www2.eletronica.org/hack-s-dicas/valores-comerciais-para-resistores-capacitores-e-indutores/

1.4. BIBLIOTECAS E SHIELDS

13

1.3.2

Alimentao do circuito ca

Internamente, o circuito do Arduino alimentado com uma tenso de 5V. Quando ligamos o Arduino em uma e a porta USB do PC, o prprio PC, atravs do cabo USB, alimenta o Arduino. Porm nem sempre temos um o e e PC por perto; para esses casos, podemos utilizar uma outra fonte de energia de 5V (a fonte deve ser ligada diretamente nos pinos 5V e GND do Arduino). Como no possu a mos pilhas/baterias em abundncia no mercado com tenso de 5V, ca complicado alimentar a a um Arduino dessa forma alternativa se tivermos uma tomada de 127/220VAC por perto, poder amos ligar uma fonte AC/DC (essas sim, existem aos montes). Para resolver esse problema, o Arduino possui um regulador de tenso que aceita tenses de 7 a 12V (na verdade, ele consegue funcionar com tenses entre 6 e 20V, apesar a o o de no ser recomendado). Com o regulador de tenso podemos combinar pilhas em srie, utilizar uma bateria a a e de 9V ou mesmo baterias de carros, motos e no-breaks (12V).

Figura 1.5: Arduino alimentado por uma bateria de 9V Retirado de http://www.arduino.cc/playground/Learning/9VBatteryAdapter

1.4

Bibliotecas e shields

Assim como a IDE j vem com diversas funes pr-denidas, o Arduino possui outras bibliotecas para controle a co e de servomotores, displays LCD, gerao de audio, recepo de sinais de sensores e outros dispositivos (como ca ca teclado PS/2), dentre muitas outras coisas! E quem pensa que essa estensibilidade toda se restringe ` parte de a software est muito enganado: o Arduino possui o que chamamos de shields, que so placas que se acoplam ` a a a placa original, agregando funcionalidades ` mesma. a Existem shields dos mais variados tipos, para as mais diversas funes. Alguns servem como entrada, outros co como sa da, e ainda outros como entrada e sa da. Com os shields conseguimos, por exemplo, fazer o Arduino se comunicar numa rede Ethernet, ou ainda transmitir dados para qualquer dispositivo via Bluetooth, Wi-Fi ou Zigbee. Existem shields com circuitos integrados prontos para controlarmos motores sem que precisemos nos preocupar com complicaes eletrnicas envolvidas, outros possuem leitor de carto SD, acelermetro, co o a o GPS e diversos outros sensores que podem gerar dados importantes para o software que est rodando no a microcontrolador.

14

CAP ITULO 1. CONCEITOS BASICOS

Figura 1.6: Arduino Duemilanove com shield Ethernet Existem tambm outros shields mais elaborados, que so sistemas completos. Um deles, por exemplo, cria e a uma plataforma para desenvolvimento de jogos no Arduino: o Video Game Shield10 , que possui uma sa RCA da e duas entradas para controles Numchuck do Nintendo Wii. Alm do hardware, existe uma biblioteca para e ser utilizada em conjunto, que j possui vrias funes pr-programadas para fazermos desenhos na televiso e a a co e a capturar os dados dos movimentos nos controles.

1.5

Integrao com o PC ca

Apesar de o Arduino ser um computador independente, em alguns casos podemos nos aproveitar de um PC por perto e explorar outra funcionalidade muito boa do projeto: o Arduino consegue conversar com o computador atravs da porta USB. Isso nos permite desenvolver um software que roda no PC e se comunica com o software e que roda no Arduino, o que nos abre um mar de possibilidades! Podemos, por exemplo, criar um software em Python11 que recebe os dados de um sensor, via USB (atravs do Arduino), e envia para algum banco de dados e na Internet assim teremos, de certa forma, nosso Arduino online, enviando dados para o mundo, atravs de e um PC! Existem inmeros projetos interessantes que fazem interface entre linguagens de programao e o Arduino u ca existem implementaes para Python, Ruby, Java, C, dentre outras linguagens. E no para por a alm de o co a : e software que roda no PC receber dados, ele pode tambm enviar dados, controlando o Arduino! Dessa forma, e podemos, por exemplo, receber dados da Web e enviar comandos ao Arduino, baseados nesses dados. Um exemplo de aplicao que utiliza a porta USB para comunicao do Arduino com o PC o projeto ca ca e Arduinoscope12 , que tem como nalidade criar um osciloscpio, onde podemos ver em tempo real, no PC, o grcos das tenses que esto ligadas `s portas analgicas do Arduino. Outro exemplo um projeto que criei, a o a a o e onde controlo um carrinho atravs de Wi-Fi, o Turiquinhas13 . e Fica a dica para quem quer comear um projeto Arduino assistido por computador de maneira fcil: vale a c a pena estudar um protocolo de comunicao e controle chamado Firmata14 , cuja implementao 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/

1.6. PORTAS ANALOGICAS E DIGITAIS

15

para vrias linguagens (e j vem por padro um exemplo na IDE do Arduino). Ele facilita o processo de a a a aquisio de dados e controle da placa. ca Alm das opes citadas acima, existe uma linguagem chamada Processing15 , parecid e co ssima com a linguagem que utilizamos no Arduino, que consegue se comunicar com o Arduino via USB e utilizada para criar imagens, e animaes e interaes no PC, a partir dos dados vindos da comunicao com o Arduino. co co ca

1.6

Portas analgicas e digitais o

O Arduino possui dois tipos de portas de entrada: analgicas e digitais. Alm disso, as portas digitais tambm o e e servem como portas de sa da, funcionando com dois tipos bsicos de sa a da: sa digital comum e sa PWM da da o PWM pode ser utilizado para simular uma sa analgica, dentre outras coisas. da o

1.6.1

Portas digitais

Utilizamos as portas digitais quando precisamos trabalhar com valores bem denidos de tenso. Apesar de nem a sempre ser verdade, geralmente trabalhamos com valores digitais binrios, ou seja, projetamos sistemas que a utilizam apenas dois valores bem denidos de tenso. Existem sistemas ternrios, quaternrios, mas focaremos a a a no binrio, j que esse o utilizado pelo Arduino. a a e Como o sistema binrio, temos que ter apenas duas tenses. So elas: 0V e 5V. Dessa forma, as portas e a o a digitais do Arduino podem trabalhar apenas com essas duas tenses e o software que desenvolveremos poder o a requisitar 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 esto destacadas na gura a seguir: a

Figura 1.7: Portas digitais do Arduino, de 13 a 0 Apesar de ser poss vel, no recomendvel utilizar as portas 0 e 1 pois elas esto diretamente ligadas ao a e a a sistema de comunicao do Arduino (pinos RX e TX recepo e transmisso, respectivamente) e, por isso, ca ca a seu uso pode conitar com o upload do software. Caso queira utiliz-las, certique-se de desconectar quaisquer a circuitos conectados a ela no momento do upload. Utilizaremos as funes digitalRead e digitalWrite para ler e escrever, respectivamente, nas portas dico gitais. A funo digitalWrite j foi exemplicada em nosso exemplo Blink, onde acendemos e apagamos um ca a LED ao alternar a tenso da porta 13 entre 5V e 0V, com intervalo de 1 segundo. Para exemplicar a funo a ca digitalRead utilizaremos um boto, como no diagrama a seguir: a
15 http://www.processing.org/

16

CAP ITULO 1. CONCEITOS BASICOS

Figura 1.8: Esquema eltrico ligando um boto ao Arduino e a Montado o circuito acima, vamos programar o Arduino com o seguinte cdigo: 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 funo digitalRead nos retorna o valor correspondente ` tenso que est na porta que passamos entre ca a a a parenteses. Em nosso exemplo, utilizamos a porta BOTAO (que na verdade uma constante, denida atravs da e e diretiva #define), cujo valor 2. O valor retornado uma constante, mapeado da seguinte forma: e e HIGH, caso a tenso na porta seja 5V; a LOW, caso a tenso na porta seja 0V; a O que o programa faz, ento, apagar o LED caso o boto esteja pressionado e acend-lo caso no esteja. a e a e a Fica como exerc entender o cdigo a seguir, que uma otimizao do anterior e possui mesma funcionalidade: cio o e ca #define BOTAO 2 #define LED 13 void setup() { pinMode(LED, OUTPUT); pinMode(BOTAO, INPUT); }

1.6. PORTAS ANALOGICAS E DIGITAIS void loop() { digitalWrite(LED, !digitalRead(BOTAO)); }

17

Dica: o caractere !, em linguagem C, signica not e tem como nalidade negar a expresso que segue ` a a sua direita. PWM PWM signica Modulao por Largura de Pulso (Pulse-Width Modulation, do Ingls) e consiste em manipuca e larmos a razo c a clica de um sinal (conhecida do Ingls como duty cycle) a m de transportar informao ou e ca controlar a potncia de algum outro circuito. Basicamente, teremos um sinal digital que oscila entre 0V e 5V e com determinada frequncia (o Arduino trabalha com um padro perto de 500Hz) funciona como se fosse um e a clock, porm os tempos em que o sinal permanece em 0V e 5V podem ser diferentes. Duty cycle a razo do e e a tempo em que o sinal permanece em 5V sobre o tempo total de uma oscilao. A Figura 1.9 ilustra melhor esse ca conceito:

Figura 1.9: Sinal PWM com duty cycle de 25% Assim, temos: duty cycle =

x x = x+y T

O que controlamos atravs de software justamente a duty cycle, ou seja, o percentual de tempo em que e e o sinal ca em 5V. Dessa forma, podemos utilizar essa tcnica para limitar a potncia de algum circuito. Por e e exemplo, 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%). Atravs de um clculo simples de potncia podemos e e a e notar que o LED L2 consumir apenas 25% da potncia do primeiro. a e Infelizmente, por limitaes de hardware, o Arduino no possui PWM em todas as portas digitais: apenas co a as portas 3, 5, 6, 9, 10 e 11 so privilegiadas e podem utilizar esse recurso. Para exemplicar o uso de controle a de potncia de um circuito utilizando PWM vamos utilizar um LED em srie com um resistor ligados ` porta e e a 11 (o circuito o mesmo do experimento Blink, s vamos mudar a porta) e o seguinte cdigo: 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 funo loop acima temos um lao for, que conta de 0 a 255 (armazenando o valor do contador na varivel ca c a i), chamando a funo analogWrite (passando como parmetros a porta do LED (11) e i) e esperando por 30 ca a milisegundos a cada iterao. ca

18

CAP ITULO 1. CONCEITOS BASICOS

A funo analogWrite (apesar de estarmos utilizando uma porta digital) responsvel pelo PWM e recebe ca e a como parmetros a porta e um valor entre 0 e 255 esse valor corresponde ao duty cycle, onde 0 corresponde a a 0% e 255 a 100%. Quando voc rodar o cdigo perceber que o LED acende de maneira mais suave cada e o a etapa de luminosidade diferente corresponde a uma iterao do for. Fica como exerc para o leitor modicar ca cio o programa para que o LED, alm de acender, tambm apague suavemente. :-) e e

1.6.2

Portas analgicas o

Alm das portas digitais o Arduino possui as portas analgicas. Ao contrrio das portas digitais, as portas e o a analgicas so apenas de entrada e nelas podemos ter como entrada innitos valores de tenso (delimitados o a a na faixa de 0V a 5V). Como os conversores analgico-digitais (ADC analog-digital converter, do Ingls) do o e Arduino possuem 10 bits de preciso, a preciso das medies de tenso no Arduino de por volta de 0,005V a a co a e ou 5mV.

Figura 1.10: Portas analgicas do Arduino, de 0 a 5 o

Como os nomes de funes no Arduino so bastante intuitivos, utilizamos a funo analogRead para ler co a ca valores analgicos ao chamar a funo passamos como argumento o nmero da porta que desejamos ler (de o ca u 0 a 5). Como exemplo vamos regular a luminosidade de nosso LED (utilizando PWM) atravs da quantidade e de luz detectada por um resistor dependente de luz (ou LDR light dependent resistor, do Ingls). Monte o e circuito segundo a gura 1.11.

1.6. PORTAS ANALOGICAS E DIGITAIS

19

Figura 1.11: Circuito com LDR e LED

Como os conversores analgico-digital possuem 10 bits de preciso, a funo analogRead nos devolve um o a ca valor entre 0 e 1023, onde 0 corresponde a uma leitura de 0V na porta analgica e 1023 corresponde a 5V (para o valores intermedirios, basta fazer uma regra de trs simples, de maneira anloga com o PWM). Vamos carregar a e a em nosso Arduino o seguinte cdigo: 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 denem a varivel valorPWM devem ser calibrados conforme iluminao do a ca ambiente, resistores utilizados e luminosidade desejada. Para o cdigo acima, teremos o seguinte comportamento o do valor que colocamos na porta PWM a partir dos valores lidos na porta analgica: o

20

CAP ITULO 1. CONCEITOS BASICOS

Figura 1.12: Grco da funo PWM versus leitura analgica a ca o Ficam trs exerc e cios: Aprenda a utilizar um potencimetro e o utilize para regular o brilho do LED, em vez do LDR; o Volte o LDR para seu lugar anterior e utilize o potencimetro para congurar os valores 0.25 e 255; o Leia o datasheet do circuito integrado LM35 e monte um circuito parecido com o anterior, porm sens e vel a temperatura (e no mais a luz). a

Cap tulo 2

Fundamentos de Eletrnica o

21

22

CAP ITULO 2. FUNDAMENTOS DE ELETRONICA

2.1

Resistores e Lei de Ohm

Resistores so dispositivos utilizados com a nalidade de transformar energia eltrica em energia trmica e/ou a e e limitar a corrente eltrica em um circuito. Como o prprio nome sugere, eles tm como funo oferecer uma e o e ca resistncia ` passagem da corrente eltrica medimos essa resistncia atravs da unidade (ohm). e a e e e Por consequncia, eles causam uma queda de tenso na regio do circuito onde se encontram muitas vezes e a a acabamos utilizando esse efeito para conseguirmos tenses intermedirias, caso as fontes de tenso do circuito o a a no consigam fornec-las. Sabendo-se a tenso e corrente em um resistor, podemos calcular sua resistncia a e a e atravs da frmula: e o R= V I

Por sua vez, a resistncia pode ser calculada atravs das caracter e e sticas do material resistivo: R= L A

Onde a resistividade do material, L seu comprimento e A sua rea, ou seja, a resistncia proporcional e e a e e ao comprimento e indiretamente proporcional ` rea. aa Se, para um determinado circuito, V e I tm uma relao linear, ou seja, R constante para inmeros e ca e u valores de V e I, ento chamamos o material (que possui resistncia R) de hmico. a e o

2.1.1

Resistores em srie e

Se possuirmos resistores em srie em determinado circuito, podemos calcular a resistncia equivalente do mesmo e e somando-se as resistncias, atravs da frmula: e e o Req = R1 + R2 + ... + Rn

Figura 2.1: Resistores em srie e Retirado de http://en.wikipedia.org/wiki/Resistor

2.1.2

Resistores em paralelo

Caso os resistores estejam em paralelo, a resistncia equivalente ser o inverso da soma dos inversos das resise a tncias, como na frmula 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

2.2. CAPACITORES E INDUTORES

23

2.1.3

Cdigo de cores o

Os resistores possuem um cdigo de cores que nos permite identicar qual sua resistncia. Para isso, mapeamos o e as cores das diversas faixas do resistor e utilizamos a seguinte frmula: o R = (10a + b) 10c t, onde a, b e c so as primeiras faixas e t a ultima faixa (geralmente prata ou dourada), que representa a a tolerncia. a

Figura 2.3: Cdigo de cores o Retirado de http://pt.wikipedia.org/wiki/Resistor

2.1.4

Divisor de tenso a

Como citado acima, resistores criam uma queda de tenso na regio do circuito em que esto. Utilizando esse a a a efeito, podemos criar o que chamamos de divisores de tenso1 : circuitos com resistores que, aplicada uma tenso, a a tm como sa uma frao (da o nome divisores) dessa tenso de entrada. e da ca a

Figura 2.4: Circuito divisor de tenso a A partir do circuito acima, temos que: Vout = R2 Vin R1 + R2

Esse recurso bastante util quando precisamos medir um tenso maior do que nossos circuitos conseguem. e a Por exemplo: se quisermos medir uma tenso que varia de 9 a 12V no Arduino precisaremos coloc-la na faixa a a de 0 a 5V, j que as portas analgicas do Arduino trabalham nessa faixa menor. Para isso, poder a o amos utilizar i um divisor de tenso cujos valores de resistncia resultassem em Vout = V3n . Dessa forma, os valores lidos em a e Vout seriam de 3 a 4V. Porm, ateno: caso precisemos conectar resistores ou outros circuitos resistivos no pino Vout , o clculo das e ca a tenses muda e Vout passa a depender das novas resistncias do circuito. o e

2.2

Capacitores e indutores

Apesar de no estudarmos a fundo esses dois elementos bsicos de circuitos, eles podem ser importantes no a a desenvolvimento de futuros projetos. Basicamente, capacitores e indutores armazenam energia (pense como
1 http://pt.wikipedia.org/wiki/Divisor

de tenso a

24

CAP ITULO 2. FUNDAMENTOS DE ELETRONICA

uma bateria em que voc carrega e descarrega de tempos em tempos, porm com capacidade bem limitada) e e e so bastante utilizados em ltros de sinais, estabilizadores de tenso, circuitos ressonantes (como transmissores a a e receptores de rdio), dentre outros. a

2.2.1

Capacitores

Os capacitores so componentes que armazenam energia em forma de campo eltrico. So formados por duas a e a placas metlicas com um dieltrico (isolante) no meio. A unidade de medida o Farad (F), porm como 1 Farad a e e e algo bem grande, comumente encontramos capacitores na casa dos mF (miliFarad), F (microFarad) e pF e (picoFarad).

Figura 2.5: Capacitor eletrol tico bastante comum no mercado

Figura 2.6: Representao de um capacitor em circuito eltrico ca e

2.2.2

Indutores

Os indutores so componentes que armazenam energia em forma de campo magntico. Geralmente so formados a e a por bobinas (o enrolado) com um condutor no meio. A unidade de medida o Henry (H). e

Figura 2.7: Indutores de vrios tipos, comuns no mercado a

2.3. DIODOS

25

Figura 2.8: Representao de um indutor em circuito eltrico ca e

2.3

Diodos

Diodos so componentes que tm a capacidade de conduzir corrente eltrica em uma direo e bloque-la em a e e ca a outra esse comportamento chamado de reticao e pode ser utilizado para converter corrente alternada e ca (CA ou AC alternating current, do Ingls , a energia que temos em nossas tomadas) em corrente cont e nua (CC ou DC direct current, do Ingls , a forma como as baterias nos fornecem energia). Outros usos de diodo e so proteo de circuitos (contra corrente reversa) e extrao de modulao de sinais (por exemplo, para uso a ca ca ca em circuitos de comunicao sem o). ca

Figura 2.9: Foto de um diodo comum no mercado a faixa menor (cinza, para esse diodo) corresponde ao terminal negativo

Figura 2.10: Representao de um diodo em circuito eltrico ca e

O diodo conduzir corrente eltrica caso a tenso em seu terminal positivo (+) seja maior que a tenso em a e a a seu terminal negativo (), ou seja, funcionar como um curto-circuito. Caso contrrio, ele funcionar como a a a circuito aberto (no conduzir). E importante notar que para diodos reais existe uma queda de tenso de 0,7V a a a em sua juno P-N e, com isso, a tenso do lado positivo precisa ser maior que a tenso negativa + 0,7V para ca a a que ele conduza.

2.4

Transistores

Transistores so dispositivos semicondutores usados como amplicadores ou chaveadores. Sua entrada uma a e corrente/tenso que altera a corrente/tenso de sa a a da. Os transistores so a base de todos os circuitos integrados a e placas modernos alguns, como os microprocessadores, possuem milhes deles. o Para nossos estudos, iremos focar nos transistores de estrutura bipolar de juno (ou BJT, Bipolar Junction ca Transistor, do Ingls) com polaridade NPN e PNP, porm existem outros tipos, como os FETs. e e

26

CAP ITULO 2. FUNDAMENTOS DE ELETRONICA

(a) NPN

(b) PNP

Figura 2.11: S mbolos de transistores BJT em circuito eltrico e

Os transistores possuem trs terminais: base, coletor e emissor. E suas principais equaes caracter e co sticas so: a IC + IB = IE

IC = IB , onde uma constante (tambm referida como hF E ) caracter e e stica do transistor (fator de amplicao). ca A segunda equao nos evidencia o poder de amplicao de um transistor: dependendo da corrente que ca ca colocarmos na base (corrente IB ), ele permitir maior ou menor corrente no coletor (corrente IC ). a No mercado encontramos transistores NPN e PNP com vrios encapsulamentos diferentes. Alguns comuns a so o 2N2904 (NPN) e 2N3906 (PNP). a

Figura 2.12: Componente 2N3904: transistor NPN com encapsulamento TO-92

2.4.1

Utilizao de transistores com rels ca e

Rels so componentes uteis quando precisamos isolar eletronicamente um circuito de controle de um circuito e a de potncia. Se quisermos, por exemplo, acender uma lmpada incandescente (que utiliza corrente alternada) e a atravs do Arduino, podemos utilizar um rel: o Arduino controlar o rel, que ento far a conexo (ou no) da e e a e a a a a lmpada com a tomada. Existem rels mecnicos e de estado slido (SSD ou Solid-state relay, do Ingls), porm a e a o e e iremos utilizar um rel mecnico em nosso exemplo, por ser mais barato e fcil de se encontrar no mercado. e a a Como rels possuem correntes de ativao maiores que as portas digitais do Arduino conseguem suprir, e ca precisamos amplicar 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 e 470 para a base do transistor) podemos utilizar o circuito a seguir para controlar qualquer carga de corrente alternada basta ligar a carga `s sa a das do rel, que no esto indicadas no diagrama: e a a

2.4. TRANSISTORES

27

Figura 2.13: Circuito para ligar um rel (controlado por transistor) no Arduino e Fica como exerc para o leitor vericar como seria o uso de um transistor PNP. cio

2.4.2

Ponte-H

Em alguns projetos precisamos inverter a tenso de entrada de determinado circuito. Por exemplo: os motores a de corrente cont nua giram para um lado caso apliquemos tenso positiva em seu terminal esquerdo e negativa a em seu terminal direito. Porm, para faz-los girar em sentido contrrio, precisamos aplicar tenso negativa em e e a a seu terminal esquerdo e positiva em seu terminal direito. Podemos implementar circuitos que fazem essa inverso de tenso a partir de 4 transistores funcionando a a como chave. Esse tipo de circuito se chama ponte-H por conta da disposio dos transistores com relao ao ca ca motor, como pode ser visto no diagrama a seguir:

Figura 2.14: Diagrama de uma ponte-H

28

CAP ITULO 2. FUNDAMENTOS DE ELETRONICA

Quando fechamos as chaves S1 e S4, o terminal esquerdo do motor recebe tenso positiva e o terminal a direito recebe tenso negativa. J quando fechamos as chaves S2 e S3, o terminal esquerdo do motor recebe a a tenso negativa e o terminal direito recebe tenso positiva. O que precisamos fazer substituir as chaves por a a e transistores, para ento podermos controlar o sentido de rotao do motor atravs do Arduino. a ca e A seguir temos um circuito bastante completo de ponte-H que utiliza diodos de proteo e acopladores ca o pticos para dar mais segurana ` soluo como um todo: c a ca

Figura 2.15: Esquema de uma ponte-H com transistores Retirado de http://www.mcmanis.com/chuck/robotics/tutorial/h-bridge/ Para quem no quer ter trabalho montando o circuito, existe a opo de comprar um circuito integrado a ca pronto com a ponte-H uma das opes o L293D. co e PWM e ponte-H para controle de velocidade Como com PWM conseguimos controlar a quantidade de potncia que ser entregue a um circuito, caso utilizee a mos PWM como entrada do controle de uma ponte-H, podemos limitar a quantidade de potncia entregue ao e motor e, com isso, controlar sua velocidade.

Cap tulo 3

Eletrnica Digital o

29

30

CAP ITULO 3. ELETRONICA DIGITAL

3.1

Introduo ca

Dizemos que um circuito digital quando suas entradas e sa e das trabalham com sinais digitais, ou seja, sinais com valores bem denidos. Geralmente esses circuitos trabalham apenas com dois valores e, por isso, chamamos esses sistemas de digitais binrios. a Quando estamos falando de circuitos digitais, estamos falando de transporte de informao. E como temos ca somente dois valores poss veis de tenso, teremos toda a informao codicada em binrio chamamos cada a ca a informao binria de bit (d ca a gito binrio ou binary digit, do Ingls) e os representamos por 0 e 1. a e Dessa forma, se nossos circuitos trabalham com tenses de 0V e 5V, dizemos que 0V equivale ao bit 0 e 5V o equivale ao bit 1 agora passamos a falar de bits (informao) em vez de tenses, ou seja, estamos pensando ca o uma camada acima.

3.2

Portas lgicas o

Assim como na Matemtica possu a mos operaes bsicas como soma, subtrao, multiplicao e diviso, na co a ca ca a aritmtica binria temos operaes que podemos fazer com nossos bits. Para simplicar, vamos tratar as e a co operaes com uma ou duas entradas, apenas uma sa co da, tratar o bit 0 como sinnimo de falso e o bit 1 como o sinnimo de verdadeiro. Dessa forma, temos as seguintes operaes: o co AND: operao que resulta em bit 1 somente quando os dois bits de entrada so 1 (ou seja, s resulta ca a o em verdadeiro se somente o primeiro e o segundo bit forem verdadeiros.); OR: operao 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: operao que resulta na inverso do bit de entrada; ca a XOR: tambm chamade de exclusive or (ou exclusivo), essa operao s resulta em bit 1 quando somente e ca o um dos bits de entrada 1. e O circuito abaixo exemplica a criao de uma porta do tipo AND: ca

Figura 3.1: Porta lgica AND criada a partir de diodos e resistor o

3.2.1

Tabela-verdade

Para um nmero nito de entradas podemos aplicar as operaes lgicas em todos os poss u co o veis valores dessa entrada e obter todos os poss veis resultados da operao/funo lgica. Chama-se tabela-verdade a tabela que ca ca o lista todas essas possibilidades. Para as funes lgicas acima, quando temos duas entradas temos um total de 4 poss co o veis combinaes de co u entradas diferentes (o nmero de combinaes binrias sempre 2nmero de entradas ) e as seguintes tabelas: u co a e

3.2. PORTAS LOGICAS

31

A 0 0 1 1

B 0 1 0 1

A AND B 0 0 0 1

A 0 0 1 1

B 0 1 0 1

A OR B 0 1 1 1 A 0 1 NOT A 1 0

A 0 0 1 1

B 0 1 0 1

A XOR B 0 1 1 0

(c) Operaao NOT c

(a) Operao AND ca

(b) Operaao OR c

(d) Operao XOR ca

Figura 3.2: Tabelas-verdade das operaes lgicas bsicas co o a Alm das operaes bsicas, temos as negaes nas mesmas, como NAND, NOR e XNOR. Para saber a e co a co tabela-verdade dessas, basta negar a sa da tabela verdade das outras operaes (AND, OR e XOR, respecda co tivamente).

3.2.2

Representao das operaoes ca c

As operaes lgicas 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 operaes lgicas co o Alm disso, podem ser escritas por extenso: e Operao ca NOT A A AND B A NAND B A OR B A NOR B A XOR B A XNOR B Representao ca A A+B A+B AB AB AB AB

3.2.3

Funes lgicas compostas co o

Assim como na Matemtica, podemos fazer composies das funes lgicas bsicas para obter novas funes a co co o a co (compostas). A funo XOR, por exemplo, pode ser obtida atravs da composio das funes NOT, AND e ca e ca co OR: AB =AB+AB ou

Figura 3.4: Diagrama da funo composta XOR ca

32

CAP ITULO 3. ELETRONICA DIGITAL

A partir de funes lgicas compostas e tcnicas como realimentao conseguimos criar dispositivos mais co o e ca complexos como latches, ip-ops, coders/decoders, mux/demux, dentre outros. Esses dispositivos so a base a para criar circuitos lgicos de alto n o vel, por exemplo: com alguns ip-ops conseguimos criar registradores, que podem evoluir para memrias e fazer parte do circuito de um microprocessador. o

Cap tulo 4

Fazendo barulho com o Arduino

33

34

CAP ITULO 4. FAZENDO BARULHO COM O ARDUINO

Para quem gosta de fazer msica, o Arduino possui uma funo pronta para criar uma onda quadrada na u ca frequncia e no tempo desejados. Apesar de serem notas simples e a onda ser quadrada, adicionando circuitos e extras (para ltros e distores) e um pouco de criatividade, conseguimos criar sons legais para nossos projetos. co A funo que faz esse trabalho chamada tone. Vamos criar um projeto-exemplo ligando um buzzer ca e componente que reproduz sons de acordo com as variaes de tenso em seus terminais para tocar nosso som co a da seguinte forma:

Figura 4.1: Circuito com buzzer Utilizaremos o seguinte cdigo: 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); } Alm do lao for, utilizamos tambm um vetor de inteiros chamado notas. Um vetor nada mais que um e c e e local onde armazenamos vrias variveis de mesmo tipo. Os vetores so indexados e para acessar cada item a a a guardado neles utilizamos ndices que variam de 0 a n 1, onde n o nmero total de elementos. No exemplo e u acima, utilizamos a varivel i para percorrer o vetor e, por isso, para acessar os elementos utilizamos i. a Os segredos do cdigo acima so: o a Saber a frequncia das notas1 e e Saber utilizar a funo tone. A funo tone recebe trs parmetros, respectivamente: pino (precisa ser ca ca e a um pino que tenha suporte a PWM), frequncia da nota e durao do som em milissegundos. e ca
1 Saiba

mais em http://pt.wikipedia.org/wiki/Srie harmnica (msica) e o u

Cap tulo 5

Armazenando na EEPROM

35

36

CAP ITULO 5. ARMAZENANDO NA EEPROM

EEPROM (Electrically Erasable Programmable Read-Only Memory, do Ingls) um tipo de memria no e e o a voltil, ou seja, que no se apaga ao retirarmos energia de seu circuito (o que no verdade para as memrias a a a e o do tipo RAM, por exemplo). O ATMega328, microcontrolador presente no Arduino Duemilanove, possui um circuito EEPROM integrado de 1024 bytes (ou 1KiB) em outras verses do Arduino, como o Mega (que usa o ATMega1280 ou ATMega2560, dependendo do modelo), a EEPROM pode chegar at 4KiB. e Ter o circuito EEPROM integrado signica que nosso software pode armazenar 1KiB de dados que no a sero perdidos (mesmo que desliguemos o Arduino da fonte de alimentao) funciona como se fosse um a ca micro-pendrive. Para utilizar a EEPROM no precisamos de circuitos adicionais: precisamos apenas utilizar a a biblioteca EEPROM.h. Porm, para nosso exemplo, vamos ligar um LED na porta 11 e utilizar o seguinte cdigo: 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, alm do cdigo que digitamos, utilizaremos um cdigo j criado pela equipe do Arduino para facilitar a utilizao e o o a ca da EEPROM. O exemplo nada mais faz que escrever 16 bytes na EEPROM (na funo setup), ler um por um ca e congurar o valor lido como sa PWM da porta 11 (na funo loop). da ca A funo de escrita, EEPROM.write, recebe dois parmetros: o endereo onde ela vai escrever (um valor entre ca a c 0 e 1023, no caso do Arduino Duemilanove com ATMega328) e o byte que escreveremos nesse local, j a funo a ca EEPROM.read recebe apenas um parmetro (o endereo de onde ela far a leitura) e nos retorna o valor lido na a c a memria (um byte). o