Você está na página 1de 36

2

Sum ario
1 Conceitos b asicos 1.1 O Projeto Arduino . . . . . . . 1.2 Instala c ao do software . . . . . 1.3 Primeiro projeto . . . . . . . . 1.3.1 C alculos de resist encia . 1.3.2 Alimenta c ao do circuito 1.4 Bibliotecas e shields . . . . . . 1.5 Integra c ao com o PC . . . . . . 1.6 Portas anal ogicas e digitais . . 1.6.1 Portas digitais . . . . . 1.6.2 Portas anal ogicas . . . . 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 Eletr onica 2.1 Resistores e Lei de Ohm . . . . . . . 2.1.1 Resistores em s erie . . . . . . 2.1.2 Resistores em paralelo . . . . 2.1.3 C odigo de cores . . . . . . . . 2.1.4 Divisor de tens ao . . . . . . . 2.2 Capacitores e indutores . . . . . . . 2.2.1 Capacitores . . . . . . . . . . 2.2.2 Indutores . . . . . . . . . . . 2.3 Diodos . . . . . . . . . . . . . . . . . 2.4 Transistores . . . . . . . . . . . . . . 2.4.1 Utiliza c ao de transistores com 2.4.2 Ponte-H . . . . . . . . . . . . 3 Eletr onica Digital 3.1 Introdu c ao . . . . . . . . . . . . . . 3.2 Portas l ogicas . . . . . . . . . . . . . 3.2.1 Tabela-verdade . . . . . . . . 3.2.2 Representa c ao das opera c oes 3.2.3 Fun c oes l ogicas compostas . . 4 Fazendo barulho com o Arduino 5 Armazenando na EEPROM

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rel es . . .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

SUMARIO

SUMARIO

Pref acio
Essa apostila e destinada aos alunos que realizaram o Curso de Arduino1 , tendo como premissa explicar em mais detalhes temas abordados em aula para que os alunos n ao se preocupem com anota c oes durante os experimentos. Seu conte udo (com exce c ao das fotos de terceiros, devidamente citadas) est a dispon vel atrav es da licen ca Creative Commons Atribui c ao-Uso n ao-comercial-Compartilhamento pela mesma licen ca 3.0 Unported, que est a dispon vel nas formas compacta e completa nos seguintes endere cos: 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 c oes, sugest oes ou mesmo queira contribuir escrevendo essa apostila, sinta-se livre para entrar em contato terei um imenso prazer em receber sua contribui c ao!

Download
Essa apostila est a dispon vel para download atrav es do site do Curso de Arduino1 . Acesse o site para vericar novas vers oes no seguinte endere co: http://www.CursoDeArduino.com.br/apostila

O Autor
Alvaro Justen, tamb em conhecido como Turicas, e o criador do Curso de Arduino1 e autor dessa apostila. F a de carteirinha de software livre (usu ario h a mais de 12 anos), sempre participa de eventos (palestrando ou organizando) e grupos de usu arios, al em de contribuir com o desenvolvimento de diversos projetos. Foi respons avel pela cria c ao do grupo de usu arios de Arduino do Rio de Janeiro2 , onde s ao realizados encontros mensais para discutir sobre a plataforma. Est a nalizando sua gradua c ao em Engenharia de Telecomunica c oes pela Universidade Federal Fluminense (Niter oi/RJ), onde j a desenvolveu diversas atividades de pesquisa, ensino e extens ao (muitas ligadas ao Arduino); e programador Python3 , tendo criado e contribu do com diversos projetos nessa linguagem; entusiasta de metodologias a geis e Coding Dojo4 , sendo o respons avel por trazer a pr atica a Niter oi. Alvaro atualmente possui uma empresa que ministra cursos de Arduino por todo o Brasil e desenvolve projetos utilizando a plataforma para diversas empresas. Al em disso, desenvolve bibliotecas abertas 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 b asicos

CAP ITULO 1. CONCEITOS BASICOS

1.1

O Projeto Arduino

Arduino1 e um projeto que engloba software e hardware e tem como objetivo fornecer uma plataforma f acil para prototipa c ao de projetos interativos, utilizando um microcontrolador. Ele faz parte do que chamamos de computa c ao f sica: area da computa c ao em que o software interage diretamente com o hardware, tornando poss vel integra c ao f acil com sensores, motores e outros dispositivos eletr onicos. A parte de hardware do projeto, uma placa que cabe na palma da m ao, e um computador como qualquer outro: possui microprocessador, mem oria RAM, mem oria ash (para guardar o software ), temporizadores, contadores, dentre outras funcionalidades. Atualmente, o projeto est a na vers ao Uno, por em muitos Arduinos encontrados hoje s ao da vers ao Duemilanove (2009, em italiano), que possui um clock de 16MHz, 2kB de mem oria RAM, 32kB de mem oria ash, 14 portas digitais e 6 entradas anal ogicas.

Figura 1.1: Foto do hardware de um Arduino Duemilanove A principal diferen ca entre um Arduino e um computador convencional e que, al em ter menor porte (tanto 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 a em projetos com o Arduino os dispositivos de entrada e sa da s ao circuitos el etricos/eletr onicos. Como a interface do Arduino com outros dispositivos est a mais perto do meio f sico que a de um PC, podemos ler dados de sensores (temperatura, luz, press ao etc.) e controlar outros circuitos (l ampadas, motores, eletrodom esticos etc.), dentre outras coisas que n ao conseguir amos diretamente com um PC. A grande diferen ca com rela c ao ao uso desses dispositivos, no caso do Arduino, e que, na maior parte das vezes, n os mesmos constru mos os circuitos que s ao utilizados, ou seja, n ao estamos limitados apenas a produtos existentes no mercado: o limite e dado por nosso conhecimento e criatividade! O melhor de tudo nesse projeto e que seu software, hardware e documenta c ao s ao abertos. O software e livre (GNU GPL2 ), o hardware e totalmente especicado (basta entrar no site e baixar os esquemas) e a documenta c ao est a dispon vel em Creative Commons3 os usu arios podem colaborar (seja escrevendo documenta c ao, seja traduzindo) atrav es da wiki!
1 http://www.arduino.cc/ 2 http://www.gnu.org/licenses/gpl.html 3 http://creativecommons.org/licenses/

DO SOFTWARE 1.2. INSTALAC AO

1.2

Instala c ao do software

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 ` a porta USB do PC. Como qualquer computador, o Arduino precisa de um software para executar comandos. Esse software ser a desenvolvido na Arduino IDE em nosso PC, utilizando a linguagem C++. Ap os escrever o c odigo, o compilaremos e ent ao faremos o envio da vers ao compilada ` a mem oria ash do Arduino, atrav es da porta USB. A partir do momento que o software e gravado no Arduino n ao precisamos mais do PC: o Arduino, como e um computador independente, conseguir a sozinho executar o software que criamos, desde que seja ligado a uma fonte de energia. Antes de iniciar nosso projeto precisamos ent ao instalar a IDE. Vamos l 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 c ao Gerenciador de pacotes Synaptic).

Ubuntu GNU/Linux (anterior a 10.10): Consulte a p agina de instala c ao do Arduino em Ubuntu5 .

Outras distribui c oes GNU/Linux: Consulte a p agina de instala c ao em outras distribui c oes GNU/Linux6 .

Microsoft Windows: Consulte a p agina de instala c ao para as variadas vers oes do Microsoft Windows7 .

Apple Mac OS X: Consulte a p agina de instala c ao para o Mac OS X8 .

Ap os a instala c ao, abra a IDE (no Ubuntu GNU/Linux ela estar a dispon vel no menu Aplicativos Eletr onica Arduino IDE ). A seguinte tela ser a mostrada:

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 vers ao 0018 rodando no Ubuntu GNU/Linux 10.10

1.3

Primeiro projeto

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

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 n umero 13 como sa da, dessa forma, podemos controlar quando a porta car a com 5V ou quando car a com 0V internamente o Arduino possui um LED conectado ` a porta 13 e, por isso, teremos como ver nosso software funcionando. Para que nosso software funcione corretamente no Arduino, precisamos criar duas fun c oes espec cas: setup e loop. A fun c ao setup e executada assim que o Arduino d a boot, j a a fun c ao loop ca sendo executada continuamente (em loop ) at e que o Arduino seja desligado. Como as portas digitais s ao de entrada ou sa da, denimos ent ao dentro da fun c ao setup que a nossa porta 13 e uma porta de sa da fazemos isso atrav es da chamada ` a fun ca o pinMode, que j a vem na biblioteca padr ao do Arduino. Depois de congurarmos corretamente a porta 13 como sa da, precisamos acender e apagar o LED que est a conectado a ela. Para alterar a tens ao na porta, utilizamos a fun c ao digitalWrite (que tamb em est a na biblioteca padr ao do Arduino); passamos para essa fun c ao a porta que queremos alterar a tens ao e o novo valor de tens ao (HIGH = 5V, LOW = 0V). Depois das chamadas para acender e apagar o LED, chamamos a fun c ao delay passando o par ametro 1000 o que essa fun c ao faz e esperar um tempo em milisegundos para ent ao executar a pr oxima instru c ao. Deve-se ressaltar que a IDE Arduino inclui automaticamente todas as bibliotecas que utilizamos. Se voc e est a acostumado com C/C++, note que n ao precisamos digitar as diretivas include para arquivos como o stdlib.h, por exemplo. Tudo e feito de forma autom atica para facilitar o desenvolvimento do projeto! Como o Arduino j a vem com um LED internamente conectado ` a porta 13, n ao precisaremos de circuitos externos para que esse projeto funcione, ou seja, bastar a fazer upload daquele c odigo e j a teremos o resultado esperado:

(a) LED apagado

(b) LED aceso

Figura 1.3: Arduino Duemilanove rodando o exemplo Blink

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

12

CAP ITULO 1. CONCEITOS BASICOS

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

1.3.1

C alculos de resist encia

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 e alimentado com tens ao de 2,2V e corrente de 20mA atrav es do Arduino, precisaremos de um resistor, como j a vimos, j a que o Arduino s o consegue fornecer ou 0V ou 5V. Colocaremos o resistor em s erie com o LED, e com isso podemos concluir que: A tens ao total (soma das tens oes no resistor e no LED) ser a de 5V, ou seja: VLED + VR = 5V A corrente total que passa pelo resistor e pelo LED e igual, ou seja, 20mA, ou seja: ILED = IR = 20mA Precisamos colocar uma tens ao de 2,2V no LED, ou seja: VLED = 2, 2V Sabendo desses detalhes, podemos concluir que a tens ao no resistor ser a de: VR = 5V VLED VR = 5V 2, 2V VR = 2, 8V . Como IR = 20mA e VR = 2, 8V , podemos calcular o valor da resist encia R do resistor que iremos utilizar atrav es da Lei de Ohm: V = RI
,8V Assim, temos: 2, 8V = R0, 020A R = 02 ,020A R = 140 Depois de feito o c alculo, podemos generalizar com a seguinte f ormula:

R=

Vf onte VLED IR

Para o LED verde, precisamos de um resistor de 140, por em n ao existem resistores com esse valor para venda os valores s ao pr e-denidos9 . Dada essa situa c ao, temos duas alternativas: Utilizar um resistor de maior resist encia e limitar mais a corrente (que far a com que o LED brilhe menos); ou Associar dois ou mais resistores em s erie ou paralelo para conseguir o valor. Geralmente escolhemos um resistor de valor pr oximo, j a que uma altera c ao pequena de corrente n ao causar a danos ao dispositivo, por em em alguns casos precisaremos combinar resistores de valores diferentes para conseguir o valor equivalente esse tema ser a explicado em mais detalhes no pr oximo cap 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

Alimenta c ao do circuito

Internamente, o circuito do Arduino e alimentado com uma tens ao de 5V. Quando ligamos o Arduino em uma porta USB do PC, o pr oprio PC, atrav es do cabo USB, alimenta o Arduino. Por em nem sempre temos um 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 n ao possu mos pilhas/baterias em abund ancia no mercado com tens ao de 5V, ca complicado alimentar 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 tens ao que aceita tens oes de 7 a 12V (na verdade, ele consegue funcionar com tens oes entre 6 e 20V, apesar de n ao ser recomendado). Com o regulador de tens ao podemos combinar pilhas em s erie, utilizar uma bateria 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 a vem com diversas fun c oes pr e-denidas, o Arduino possui outras bibliotecas para controle de servomotores, displays LCD, gera c ao de a udio, recep c ao de sinais de sensores e outros dispositivos (como teclado PS/2), dentre muitas outras coisas! E quem pensa que essa estensibilidade toda se restringe ` a parte de software est a muito enganado: o Arduino possui o que chamamos de shields, que s ao placas que se acoplam ` a placa original, agregando funcionalidades ` a mesma. Existem shields dos mais variados tipos, para as mais diversas fun c oes. Alguns servem como entrada, outros 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 complica c oes eletr onicas envolvidas, outros possuem leitor de cart ao SD, aceler ometro, GPS e diversos outros sensores que podem gerar dados importantes para o software que est a rodando no microcontrolador.

14

CAP ITULO 1. CONCEITOS BASICOS

Figura 1.6: Arduino Duemilanove com shield Ethernet Existem tamb em outros shields mais elaborados, que s ao sistemas completos. Um deles, por exemplo, cria uma plataforma para desenvolvimento de jogos no Arduino: o Video Game Shield10 , que possui uma sa da RCA e duas entradas para controles Numchuck do Nintendo Wii. Al em do hardware, existe uma biblioteca para ser utilizada em conjunto, que j a possui v arias fun c oes pr e-programadas para fazermos desenhos na televis ao e capturar os dados dos movimentos nos controles.

1.5

Integra c ao com o PC

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 atrav es da porta USB. Isso nos permite desenvolver um software que roda no PC e se comunica com o software 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 (atrav es do Arduino), e envia para algum banco de dados na Internet assim teremos, de certa forma, nosso Arduino online, enviando dados para o mundo, atrav es de um PC! Existem in umeros projetos interessantes que fazem interface entre linguagens de programa c ao e o Arduino existem implementa c oes para Python, Ruby, Java, C, dentre outras linguagens. E n ao para por a : al em de o software que roda no PC receber dados, ele pode tamb em enviar dados, controlando o Arduino! Dessa forma, podemos, por exemplo, receber dados da Web e enviar comandos ao Arduino, baseados nesses dados. Um exemplo de aplica c ao que utiliza a porta USB para comunica c ao do Arduino com o PC e o projeto Arduinoscope12 , que tem como nalidade criar um oscilosc opio, onde podemos ver em tempo real, no PC, gr acos das tens oes que est ao ligadas ` as portas anal ogicas do Arduino. Outro exemplo e um projeto que criei, onde controlo um carrinho atrav es de Wi-Fi, o Turiquinhas13 . Fica a dica para quem quer come car um projeto Arduino assistido por computador de maneira f acil: vale a pena estudar um protocolo de comunica c ao e controle chamado Firmata14 , cuja implementa c ao est a dispon 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 v arias linguagens (e j a vem por padr ao um exemplo na IDE do Arduino). Ele facilita o processo de aquisi c ao de dados e controle da placa. Al em das op c oes citadas acima, existe uma linguagem chamada Processing15 , parecid ssima com a linguagem que utilizamos no Arduino, que consegue se comunicar com o Arduino via USB e e utilizada para criar imagens, anima c oes e intera c oes no PC, a partir dos dados vindos da comunica c ao com o Arduino.

1.6

Portas anal ogicas e digitais

O Arduino possui dois tipos de portas de entrada: anal ogicas e digitais. Al em disso, as portas digitais tamb em servem como portas de sa da, funcionando com dois tipos b asicos de sa da: sa da digital comum e sa da PWM o PWM pode ser utilizado para simular uma sa da anal ogica, dentre outras coisas.

1.6.1

Portas digitais

Utilizamos as portas digitais quando precisamos trabalhar com valores bem denidos de tens ao. Apesar de nem sempre ser verdade, geralmente trabalhamos com valores digitais bin arios, ou seja, projetamos sistemas que utilizam apenas dois valores bem denidos de tens ao. Existem sistemas tern arios, quatern arios, mas focaremos no bin ario, j a que e esse o utilizado pelo Arduino. Como o sistema e bin ario, temos que ter apenas duas tens oes. S ao elas: 0V e 5V. Dessa forma, as portas digitais do Arduino podem trabalhar apenas com essas duas tens oes e o software que desenvolveremos poder 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 a 0V ou 5V como resposta). O Arduino Duemilanove possui 14 portas digitais que est ao destacadas na gura a seguir:

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

16

CAP ITULO 1. CONCEITOS BASICOS

Figura 1.8: Esquema el etrico ligando um bot ao ao Arduino Montado o circuito acima, vamos programar o Arduino com o seguinte c odigo: #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 c ao digitalRead nos retorna o valor correspondente ` a tens ao que est a na porta que passamos entre parenteses. Em nosso exemplo, utilizamos a porta BOTAO (que na verdade e uma constante, denida atrav es da diretiva #define), cujo valor e 2. O valor retornado e uma constante, mapeado da seguinte forma: HIGH, caso a tens ao na porta seja 5V; LOW, caso a tens ao na porta seja 0V; O que o programa faz, ent ao, e apagar o LED caso o bot ao esteja pressionado e acend e-lo caso n ao esteja. Fica como exerc cio entender o c odigo a seguir, que e uma otimiza c ao do anterior e possui mesma funcionalidade: #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 express ao que segue ` a sua direita. PWM PWM signica Modula c ao por Largura de Pulso (Pulse-Width Modulation, do Ingl es) e consiste em manipularmos a raz ao c clica de um sinal (conhecida do Ingl es como duty cycle ) a m de transportar informa c ao ou controlar a pot encia de algum outro circuito. Basicamente, teremos um sinal digital que oscila entre 0V e 5V com determinada frequ encia (o Arduino trabalha com um padr ao perto de 500Hz) funciona como se fosse um clock, por em os tempos em que o sinal permanece em 0V e 5V podem ser diferentes. Duty cycle e a raz ao do tempo em que o sinal permanece em 5V sobre o tempo total de uma oscila c ao. A Figura 1.9 ilustra melhor esse conceito:

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

x x = x+y T

O que controlamos atrav es de software e justamente a duty cycle, ou seja, o percentual de tempo em que o sinal ca em 5V. Dessa forma, podemos utilizar essa t ecnica para limitar a pot encia de algum circuito. Por exemplo, considere que um LED L1 seja alimentado o tempo inteiro por um sinal constante de 5V; j a o LED L2 e alimentado pelo sinal PWM acima (duty cycle de 25%). Atrav es de um c alculo simples de pot encia podemos notar que o LED L2 consumir a apenas 25% da pot encia do primeiro. Infelizmente, por limita c oes de hardware, o Arduino n ao possui PWM em todas as portas digitais: apenas as portas 3, 5, 6, 9, 10 e 11 s ao privilegiadas e podem utilizar esse recurso. Para exemplicar o uso de controle de pot encia de um circuito utilizando PWM vamos utilizar um LED em s erie com um resistor ligados ` a porta 11 (o circuito e o mesmo do experimento Blink, s o vamos mudar a porta) e o seguinte c odigo: #define LED 11 void setup() { pinMode(LED, OUTPUT); } void loop() { for (int i = 0; i < 255; i++) { analogWrite(LED, i); delay(30); } } Na fun c ao loop acima temos um la co for, que conta de 0 a 255 (armazenando o valor do contador na vari avel i), chamando a fun c ao analogWrite (passando como par ametros a porta do LED (11) e i) e esperando por 30 milisegundos a cada itera c ao.

18

CAP ITULO 1. CONCEITOS BASICOS

A fun c ao analogWrite (apesar de estarmos utilizando uma porta digital) e respons avel pelo PWM e recebe como par ametros a porta e um valor entre 0 e 255 esse valor corresponde ao duty cycle, onde 0 corresponde a 0% e 255 a 100%. Quando voc e rodar o c odigo perceber a que o LED acende de maneira mais suave cada etapa de luminosidade diferente corresponde a uma itera c ao do for. Fica como exerc cio para o leitor modicar o programa para que o LED, al em de acender, tamb em apague suavemente. :-)

1.6.2

Portas anal ogicas

Al em das portas digitais o Arduino possui as portas anal ogicas. Ao contr ario das portas digitais, as portas anal ogicas s ao apenas de entrada e nelas podemos ter como entrada innitos valores de tens ao (delimitados na faixa de 0V a 5V). Como os conversores anal ogico-digitais (ADC analog-digital converter, do Ingl es) do Arduino possuem 10 bits de precis ao, a precis ao das medi c oes de tens ao no Arduino e de por volta de 0,005V ou 5mV.

Figura 1.10: Portas anal ogicas do Arduino, de 0 a 5

Como os nomes de fun c oes no Arduino s ao bastante intuitivos, utilizamos a fun c ao analogRead para ler valores anal ogicos ao chamar a fun c ao passamos como argumento o n umero da porta que desejamos ler (de 0 a 5). Como exemplo vamos regular a luminosidade de nosso LED (utilizando PWM) atrav es da quantidade de luz detectada por um resistor dependente de luz (ou LDR light dependent resistor, do Ingl es). Monte o circuito segundo a gura 1.11.

1.6. PORTAS ANALOGICAS E DIGITAIS

19

Figura 1.11: Circuito com LDR e LED

Como os conversores anal ogico-digital possuem 10 bits de precis ao, a fun c ao analogRead nos devolve um valor entre 0 e 1023, onde 0 corresponde a uma leitura de 0V na porta anal ogica e 1023 corresponde a 5V (para valores intermedi arios, basta fazer uma regra de tr es simples, de maneira an aloga com o PWM). Vamos carregar em nosso Arduino o seguinte c odigo:

#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 vari avel valorPWM devem ser calibrados conforme ilumina c ao do ambiente, resistores utilizados e luminosidade desejada. Para o c odigo acima, teremos o seguinte comportamento do valor que colocamos na porta PWM a partir dos valores lidos na porta anal ogica:

20

CAP ITULO 1. CONCEITOS BASICOS

Figura 1.12: Gr aco da fun c ao PWM versus leitura anal ogica Ficam tr es exerc cios: Aprenda a utilizar um potenci ometro e o utilize para regular o brilho do LED, em vez do LDR; Volte o LDR para seu lugar anterior e utilize o potenci ometro para congurar os valores 0.25 e 255; Leia o datasheet do circuito integrado LM35 e monte um circuito parecido com o anterior, por em sens vel a temperatura (e n ao mais a luz).

Cap tulo 2

Fundamentos de Eletr onica

21

22

CAP ITULO 2. FUNDAMENTOS DE ELETRONICA

2.1

Resistores e Lei de Ohm

Resistores s ao dispositivos utilizados com a nalidade de transformar energia el etrica em energia t ermica e/ou limitar a corrente el etrica em um circuito. Como o pr oprio nome sugere, eles t em como fun c ao oferecer uma resist encia ` a passagem da corrente el etrica medimos essa resist encia atrav es da unidade (ohm). Por consequ encia, eles causam uma queda de tens ao na regi ao do circuito onde se encontram muitas vezes acabamos utilizando esse efeito para conseguirmos tens oes intermedi arias, caso as fontes de tens ao do circuito n ao consigam fornec e-las. Sabendo-se a tens ao e corrente em um resistor, podemos calcular sua resist encia atrav es da f ormula: R= V I

Por sua vez, a resist encia pode ser calculada atrav es das caracter sticas do material resistivo: R= L A

Onde e a resistividade do material, L e seu comprimento e A sua area, ou seja, a resist encia e proporcional ao comprimento e indiretamente proporcional ` a area. Se, para um determinado circuito, V e I t em uma rela c ao linear, ou seja, R e constante para in umeros valores de V e I , ent ao chamamos o material (que possui resist encia R) de ohmico.

2.1.1

Resistores em s erie

Se possuirmos resistores em s erie em determinado circuito, podemos calcular a resist encia equivalente do mesmo somando-se as resist encias, atrav es da f ormula: Req = R1 + R2 + ... + Rn

Figura 2.1: Resistores em s erie Retirado de http://en.wikipedia.org/wiki/Resistor

2.1.2

Resistores em paralelo

Caso os resistores estejam em paralelo, a resist encia equivalente ser a o inverso da soma dos inversos das resist encias, como na f ormula a seguir: 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

C odigo de cores

Os resistores possuem um c odigo de cores que nos permite identicar qual sua resist encia. Para isso, mapeamos as cores das diversas faixas do resistor e utilizamos a seguinte f ormula: R = (10a + b) 10c t, onde a, b e c s ao as primeiras faixas e t a u ltima faixa (geralmente prata ou dourada), que representa a toler ancia.

Figura 2.3: C odigo de cores Retirado de http://pt.wikipedia.org/wiki/Resistor

2.1.4

Divisor de tens ao

Como citado acima, resistores criam uma queda de tens ao na regi ao do circuito em que est ao. Utilizando esse efeito, podemos criar o que chamamos de divisores de tens ao1 : circuitos com resistores que, aplicada uma tens ao, t em como sa da uma fra c ao (da o nome divisores) dessa tens ao de entrada.

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

Esse recurso e bastante u til quando precisamos medir um tens ao maior do que nossos circuitos conseguem. Por exemplo: se quisermos medir uma tens ao que varia de 9 a 12V no Arduino precisaremos coloc a-la na faixa de 0 a 5V, j a que as portas anal ogicas do Arduino trabalham nessa faixa menor. Para isso, poder amos utilizar in um divisor de tens ao cujos valores de resist encia resultassem em Vout = V3 . Dessa forma, os valores lidos em Vout seriam de 3 a 4V. Por em, aten c ao: caso precisemos conectar resistores ou outros circuitos resistivos no pino Vout , o c alculo das tens oes muda e Vout passa a depender das novas resist encias do circuito.

2.2

Capacitores e indutores

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

de tens ao

24

CAP ITULO 2. FUNDAMENTOS DE ELETRONICA

uma bateria em que voc e carrega e descarrega de tempos em tempos, por em com capacidade bem limitada) e s ao bastante utilizados em ltros de sinais, estabilizadores de tens ao, circuitos ressonantes (como transmissores e receptores de r adio), dentre outros.

2.2.1

Capacitores

Os capacitores s ao componentes que armazenam energia em forma de campo el etrico. S ao formados por duas placas met alicas com um diel etrico (isolante) no meio. A unidade de medida e o Farad (F), por em como 1 Farad e algo bem grande, comumente encontramos capacitores na casa dos mF (miliFarad), F (microFarad) e pF (picoFarad).

Figura 2.5: Capacitor eletrol tico bastante comum no mercado

Figura 2.6: Representa c ao de um capacitor em circuito el etrico

2.2.2

Indutores

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

Figura 2.7: Indutores de v arios tipos, comuns no mercado

2.3. DIODOS

25

Figura 2.8: Representa c ao de um indutor em circuito el etrico

2.3

Diodos

Diodos s ao componentes que t em a capacidade de conduzir corrente el etrica em uma dire c ao e bloque a-la em outra esse comportamento e chamado de retica c ao e pode ser utilizado para converter corrente alternada (CA ou AC alternating current, do Ingl es , a energia que temos em nossas tomadas) em corrente cont nua (CC ou DC direct current, do Ingl es , a forma como as baterias nos fornecem energia). Outros usos de diodo s ao prote c ao de circuitos (contra corrente reversa) e extra c ao de modula c ao de sinais (por exemplo, para uso em circuitos de comunica c ao sem o).

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

Figura 2.10: Representa c ao de um diodo em circuito el etrico

O diodo conduzir a corrente el etrica caso a tens ao em seu terminal positivo (+) seja maior que a tens ao em seu terminal negativo (), ou seja, funcionar a como um curto-circuito. Caso contr ario, ele funcionar a como importante notar que para diodos reais existe uma queda de tens circuito aberto (n ao conduzir a). E ao de 0,7V em sua jun c ao P-N e, com isso, a tens ao do lado positivo precisa ser maior que a tens ao negativa + 0,7V para que ele conduza.

2.4

Transistores

Transistores s ao dispositivos semicondutores usados como amplicadores ou chaveadores. Sua entrada e uma corrente/tens ao que altera a corrente/tens ao de sa da. Os transistores s ao a base de todos os circuitos integrados e placas modernos alguns, como os microprocessadores, possuem milh oes deles. Para nossos estudos, iremos focar nos transistores de estrutura bipolar de jun c ao (ou BJT, Bipolar Junction Transistor, do Ingl es) com polaridade NPN e PNP, por em existem outros tipos, como os FETs.

26

CAP ITULO 2. FUNDAMENTOS DE ELETRONICA

(a) NPN

(b) PNP

Figura 2.11: S mbolos de transistores BJT em circuito el etrico

Os transistores possuem tr es terminais: base, coletor e emissor. E suas principais equa c oes caracter sticas s ao: IC + IB = IE

IC = IB , onde e uma constante (tamb em referida como hF E ) caracter stica do transistor (fator de amplica c ao). A segunda equa c ao nos evidencia o poder de amplica c ao de um transistor: dependendo da corrente que colocarmos na base (corrente IB ), ele permitir a maior ou menor corrente no coletor (corrente IC ). No mercado encontramos transistores NPN e PNP com v arios encapsulamentos diferentes. Alguns comuns s ao o 2N2904 (NPN) e 2N3906 (PNP).

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

2.4.1

Utiliza c ao de transistores com rel es

Rel es s ao componentes u teis quando precisamos isolar eletronicamente um circuito de controle de um circuito de pot encia. Se quisermos, por exemplo, acender uma l ampada incandescente (que utiliza corrente alternada) atrav es do Arduino, podemos utilizar um rel e: o Arduino controlar a o rel e, que ent ao far a a conex ao (ou n ao) da l ampada com a tomada. Existem rel es mec anicos e de estado s olido (SSD ou Solid-state relay, do Ingl es), por em iremos utilizar um rel e mec anico em nosso exemplo, por ser mais barato e f acil de se encontrar no mercado. Como rel es possuem correntes de ativa c ao maiores que as portas digitais do Arduino conseguem suprir, 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 e acionado por 5V, um transistor NPN (2N3904) e dois resistores (10 para o rel 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 ` as sa das do rel e, que n ao est ao indicadas no diagrama:

2.4. TRANSISTORES

27

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

2.4.2

Ponte-H

Em alguns projetos precisamos inverter a tens ao de entrada de determinado circuito. Por exemplo: os motores de corrente cont nua giram para um lado caso apliquemos tens ao positiva em seu terminal esquerdo e negativa em seu terminal direito. Por em, para faz e-los girar em sentido contr ario, precisamos aplicar tens ao negativa em seu terminal esquerdo e positiva em seu terminal direito. Podemos implementar circuitos que fazem essa invers ao de tens ao a partir de 4 transistores funcionando como chave. Esse tipo de circuito se chama ponte-H por conta da disposi c ao dos transistores com rela c ao ao 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 tens ao positiva e o terminal direito recebe tens ao negativa. J a quando fechamos as chaves S2 e S3, o terminal esquerdo do motor recebe tens ao negativa e o terminal direito recebe tens ao positiva. O que precisamos fazer e substituir as chaves por transistores, para ent ao podermos controlar o sentido de rota c ao do motor atrav es do Arduino. A seguir temos um circuito bastante completo de ponte-H que utiliza diodos de prote c ao e acopladores opticos para dar mais seguran ca ` a solu c ao como um todo:

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

Cap tulo 3

Eletr onica Digital

29

30

CAP ITULO 3. ELETRONICA DIGITAL

3.1

Introdu c ao

Dizemos que um circuito e digital quando suas entradas e sa 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 bin arios. Quando estamos falando de circuitos digitais, estamos falando de transporte de informa c ao. E como temos somente dois valores poss veis de tens ao, teremos toda a informa c ao codicada em bin ario chamamos cada informa c ao bin aria de bit (d gito bin ario ou binary digit, do Ingl es) e os representamos por 0 e 1. Dessa forma, se nossos circuitos trabalham com tens oes de 0V e 5V, dizemos que 0V equivale ao bit 0 e 5V equivale ao bit 1 agora passamos a falar de bits (informa c ao) em vez de tens oes, ou seja, estamos pensando uma camada acima.

3.2

Portas l ogicas

Assim como na Matem atica possu mos opera c oes b asicas como soma, subtra c ao, multiplica c ao e divis ao, na aritm etica bin aria temos opera c oes que podemos fazer com nossos bits. Para simplicar, vamos tratar as opera c oes com uma ou duas entradas, apenas uma sa da, tratar o bit 0 como sin onimo de falso e o bit 1 como sin onimo de verdadeiro. Dessa forma, temos as seguintes opera c oes: AND: opera c ao que resulta em bit 1 somente quando os dois bits de entrada s ao 1 (ou seja, s o resulta em verdadeiro se somente o primeiro e o segundo bit forem verdadeiros.); OR: opera c ao que resulta em 1 quando pelo menos uma das entradas e 1 (ou seja, resulta em verdadeiro quando o primeiro ou o segundo bit forem verdadeiros.); NOT: opera c ao que resulta na invers ao do bit de entrada; XOR: tamb em chamade de exclusive or (ou exclusivo), essa opera c ao s o resulta em bit 1 quando somente um dos bits de entrada e 1. O circuito abaixo exemplica a cria c ao de uma porta do tipo AND:

Figura 3.1: Porta l ogica AND criada a partir de diodos e resistor

3.2.1

Tabela-verdade

Para um n umero nito de entradas podemos aplicar as opera c oes l ogicas em todos os poss veis valores dessa entrada e obter todos os poss veis resultados da opera c ao/fun c ao l ogica. Chama-se tabela-verdade a tabela que lista todas essas possibilidades. Para as fun c oes l ogicas acima, quando temos duas entradas temos um total de 4 poss veis combina c oes de umero de entradas ) e as seguintes tabelas: entradas diferentes (o n umero de combina c oes bin arias e sempre 2n

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) Opera ca o NOT

(a) Opera c ao AND

(b) Opera ca o OR

(d) Opera c ao XOR

Figura 3.2: Tabelas-verdade das opera c oes l ogicas b asicas Al em das opera c oes b asicas, temos as nega c oes nas mesmas, como NAND, NOR e XNOR. Para saber a tabela-verdade dessas, basta negar a sa da da tabela verdade das outras opera c oes (AND, OR e XOR, respectivamente).

3.2.2

Representa c ao das opera co es

As opera c oes l ogicas citadas acima podem ser representadas em circuitos pelos seguintes s mbolos:

(a) NOT

(b) AND

(c) NAND

(d) OR

(e) NOR

(f) XOR

(g) XNOR

Figura 3.3: S mbolos das opera c oes l ogicas Al em disso, podem ser escritas por extenso: Opera c ao NOT A A AND B A NAND B A OR B A NOR B A XOR B A XNOR B Representa c ao A A+B A+B AB AB AB AB

3.2.3

Fun c oes l ogicas compostas

Assim como na Matem atica, podemos fazer composi c oes das fun c oes l ogicas b asicas para obter novas fun c oes (compostas). A fun c ao XOR, por exemplo, pode ser obtida atrav es da composi c ao das fun c oes NOT, AND e OR: AB =AB+AB ou

Figura 3.4: Diagrama da fun c ao composta XOR

32

CAP ITULO 3. ELETRONICA DIGITAL

A partir de fun c oes l ogicas compostas e t ecnicas como realimenta c ao conseguimos criar dispositivos mais complexos como latches, ip-ops, coders/decoders, mux/demux, dentre outros. Esses dispositivos s ao a base para criar circuitos l ogicos de alto n vel, por exemplo: com alguns ip-ops conseguimos criar registradores, que podem evoluir para mem orias e fazer parte do circuito de um microprocessador.

Cap tulo 4

Fazendo barulho com o Arduino

33

34

CAP ITULO 4. FAZENDO BARULHO COM O ARDUINO

Para quem gosta de fazer m usica, o Arduino possui uma fun c ao pronta para criar uma onda quadrada na frequ encia e no tempo desejados. Apesar de serem notas simples e a onda ser quadrada, adicionando circuitos extras (para ltros e distor c oes) e um pouco de criatividade, conseguimos criar sons legais para nossos projetos. A fun c ao que faz esse trabalho e chamada tone. Vamos criar um projeto-exemplo ligando um buzzer componente que reproduz sons de acordo com as varia c oes de tens ao em seus terminais para tocar nosso som da seguinte forma:

Figura 4.1: Circuito com buzzer Utilizaremos o seguinte c odigo: #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 em do la co for, utilizamos tamb em um vetor de inteiros chamado notas. Um vetor nada mais e que um local onde armazenamos v arias vari aveis de mesmo tipo. Os vetores s ao indexados e para acessar cada item guardado neles utilizamos ndices que variam de 0 a n 1, onde n e o n umero total de elementos. No exemplo acima, utilizamos a vari avel i para percorrer o vetor e, por isso, para acessar os elementos utilizamos i. Os segredos do c odigo acima s ao: Saber a frequ encia das notas1 e Saber utilizar a fun c ao tone. A fun c ao tone recebe tr es par ametros, respectivamente: pino (precisa ser um pino que tenha suporte a PWM), frequ encia da nota e dura c ao do som em milissegundos.
1 Saiba

mais em http://pt.wikipedia.org/wiki/S erie harm onica (m usica)

Cap tulo 5

Armazenando na EEPROM

35

36

CAP ITULO 5. ARMAZENANDO NA EEPROM

EEPROM (Electrically Erasable Programmable Read-Only Memory, do Ingl es) e um tipo de mem oria n ao vol atil, ou seja, que n ao se apaga ao retirarmos energia de seu circuito (o que n ao e verdade para as mem orias do tipo RAM, por exemplo). O ATMega328, microcontrolador presente no Arduino Duemilanove, possui um circuito EEPROM integrado de 1024 bytes (ou 1KiB ) em outras vers oes do Arduino, como o Mega (que usa ATMega1280 ou ATMega2560, dependendo do modelo), a EEPROM pode chegar at e 4KiB . Ter o circuito EEPROM integrado signica que nosso software pode armazenar 1KiB de dados que n ao ser ao perdidos (mesmo que desliguemos o Arduino da fonte de alimenta c ao) funciona como se fosse um micro-pendrive. Para utilizar a EEPROM n ao precisamos de circuitos adicionais: precisamos apenas utilizar a biblioteca EEPROM.h. Por em, para nosso exemplo, vamos ligar um LED na porta 11 e utilizar o seguinte c odigo: #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 em do c odigo que digitamos, utilizaremos um c odigo j a criado pela equipe do Arduino para facilitar a utiliza c ao da EEPROM. O exemplo nada mais faz que escrever 16 bytes na EEPROM (na fun c ao setup), ler um por um e congurar o valor lido como sa da PWM da porta 11 (na fun c ao loop). A fun c ao de escrita, EEPROM.write, recebe dois par ametros: o endere co onde ela vai escrever (um valor entre 0 e 1023, no caso do Arduino Duemilanove com ATMega328) e o byte que escreveremos nesse local, j a a fun c ao EEPROM.read recebe apenas um par ametro (o endere co de onde ela far a a leitura) e nos retorna o valor lido na mem oria (um byte ).