O capítulo descreve os conceitos básicos sobre o projeto Arduino, incluindo o que é o projeto Arduino, como instalar o software, realizar um primeiro projeto, utilizar bibliotecas e shields, integrar com o PC e utilizar portas analógicas e digitais.
6. 6 ´
SUMARIO
Pref´cio
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 n˜o se preocupem com anota¸˜es durante os experimentos.
a co
Seu conte´do (com exce¸˜o das fotos de terceiros, devidamente citadas) est´ dispon´ atrav´s da licen¸a
u ca a ıvel e c
Creative Commons Atribui¸˜o-Uso n˜o-comercial-Compartilhamento pela mesma licen¸a 3.0 Un-
ca a c
ported, que est´ dispon´ nas formas compacta e completa nos seguintes endere¸os:
a ıvel c
http://creativecommons.org/licenses/by-nc-sa/3.0/deed.pt_BR
http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode
Caso possua corre¸˜es, sugest˜es ou mesmo queira contribuir escrevendo essa apostila, sinta-se livre para
co o
entrar em contato – terei um imenso prazer em receber sua contribui¸˜o!
ca
Download
Essa apostila est´ dispon´ para download atrav´s do site do Curso de Arduino1 . Acesse o site para verificar
a ıvel e
novas vers˜es no seguinte endere¸o:
o c
http://www.CursoDeArduino.com.br/apostila
O Autor
´
Alvaro Justen, tamb´m conhecido como “Turicas”, ´ o criador do Curso
e e
de Arduino1 e autor dessa apostila. F˜ de carteirinha de software livre
a
(usu´rio h´ mais de 12 anos), sempre participa de eventos (palestrando
a a
ou organizando) e grupos de usu´rios, al´m de contribuir com o de-
a e
senvolvimento de diversos projetos. Foi respons´vel pela cria¸˜o do
a ca
grupo de usu´rios de Arduino do Rio de Janeiro2 , onde s˜o realizados
a a
encontros mensais para discutir sobre a plataforma.
Est´ finalizando sua gradua¸˜o em Engenharia de Telecomunica-
a ca
¸˜es pela Universidade Federal Fluminense (Niter´i/RJ), onde j´ de-
co o a
senvolveu diversas atividades de pesquisa, ensino e extens˜o (muitas
a
ligadas ao Arduino); ´ programador Python3 , tendo criado e contri-
e
bu´ com diversos projetos nessa linguagem; entusiasta de metodolo-
ıdo
gias ageis e Coding Dojo4 , sendo o respons´vel por trazer a pr´tica a
´ a a
Niter´i.
o
´
Alvaro atualmente possui uma empresa que ministra cursos de Ar-
duino por todo o Brasil e desenvolve projetos utilizando a plataforma
para diversas empresas. Al´m disso, desenvolve bibliotecas abertas
e
para o Arduino e publica artigos com dicas e projetos em seu blog.
Contato
• E-mail: alvaro@CursoDeArduino.com.br
• Blog: http://blog.justen.eng.br/
• Twitter: http://twitter.com/turicas
• Telefone: +55 21 9898-0141
1 http://www.CursoDeArduino.com.br/
2 http://ArduInRio.cc/
3 http://www.python.org/
4 http://dojorio.org/
8. 8 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 f´cil
e a
para prototipa¸˜o de projetos interativos, utilizando um microcontrolador. Ele faz parte do que chamamos de
ca
computa¸˜o f´
ca ısica: ´rea da computa¸˜o em que o software interage diretamente com o hardware, tornando
a ca
poss´ integra¸˜o f´cil com sensores, motores e outros dispositivos eletrˆnicos.
ıvel ca a o
A parte de hardware do projeto, uma placa que cabe na palma da m˜o, ´ um computador como qualquer
a e
outro: possui microprocessador, mem´ria RAM, mem´ria flash (para guardar o software), temporizadores,
o o
contadores, dentre outras funcionalidades. Atualmente, o projeto est´ na vers˜o Uno, por´m muitos Arduinos
a a e
encontrados hoje s˜o da vers˜o Duemilanove (2009, em italiano), que possui um clock de 16MHz, 2kB de
a a
mem´ria RAM, 32kB de mem´ria flash, 14 portas digitais e 6 entradas anal´gicas.
o o o
Figura 1.1: Foto do hardware de um Arduino Duemilanove
A principal diferen¸a entre um Arduino e um computador convencional ´ que, al´m ter menor porte (tanto
c e 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´ s˜o
a ıda a
circuitos el´tricos/eletrˆnicos.
e o
Como a interface do Arduino com outros dispositivos est´ mais perto do meio f´
a ısico que a de um PC,
podemos ler dados de sensores (temperatura, luz, press˜o etc.) e controlar outros circuitos (lˆmpadas, motores,
a a
eletrodom´sticos etc.), dentre outras coisas que n˜o conseguir´
e a ıamos diretamente com um PC. A grande diferen¸a c
com rela¸˜o ao uso desses dispositivos, no caso do Arduino, ´ que, na maior parte das vezes, n´s mesmos
ca e o
constru´ımos os circuitos que s˜o utilizados, ou seja, n˜o 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 documenta¸˜o s˜o abertos. O software ´ livre
e ca a e
(GNU GPL2 ), o hardware ´ totalmente especificado (basta entrar no site e baixar os esquemas) e a documenta¸˜o
e ca
est´ dispon´
a ıvel em Creative Commons3 – os usu´rios podem colaborar (seja escrevendo documenta¸˜o, seja
a ca
traduzindo) atrav´s da wiki!
e
1 http://www.arduino.cc/
2 http://www.gnu.org/licenses/gpl.html
3 http://creativecommons.org/licenses/
9. ¸˜
1.2. INSTALACAO DO SOFTWARE 9
1.2 Instala¸˜o 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++. Ap´s escrever o c´digo, o
a o o
compilaremos e ent˜o faremos o envio da vers˜o compilada ` mem´ria flash do Arduino, atrav´s da porta USB.
a a a o e
A partir do momento que o software ´ gravado no Arduino n˜o 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 ent˜o instalar a IDE. Vamos l´:
a a
• Ubuntu GNU/Linux 10.10: Basta executar em um terminal:
sudo aptitude install arduino
ou procurar pelo pacote “arduino” no Synaptic (menu Sistema → Administra¸˜o → Gerenciador de pacotes
ca
Synaptic).
• Ubuntu GNU/Linux (anterior a 10.10): Consulte a p´gina de instala¸˜o do Arduino em Ubuntu5 .
a ca
• Outras distribui¸˜es GNU/Linux: Consulte a p´gina de instala¸˜o em outras distribui¸˜es GNU/Linux6 .
co a ca co
• Microsoft Windows: Consulte a p´gina de instala¸˜o para as variadas vers˜es do Microsoft Windows7 .
a ca o
• Apple Mac OS X: Consulte a p´gina de instala¸˜o para o Mac OS X8 .
a ca
Ap´s a instala¸˜o, abra a IDE (no Ubuntu GNU/Linux ela estar´ dispon´ no menu Aplicativos → Ele-
o ca a ıvel
trˆnica → Arduino IDE ). A seguinte tela ser´ mostrada:
o a
4 http://arduino.cc/en/Main/Software
5 http://www.arduino.cc/playground/Linux/Ubuntu
6 http://www.arduino.cc/playground/Learning/Linux
7 http://www.arduino.cc/en/Guide/Windows
8 http://www.arduino.cc/en/Guide/MacOSX
10. 10 CAP´ ´
ITULO 1. CONCEITOS BASICOS
Figura 1.2: Arduino IDE vers˜o 0018 rodando no Ubuntu GNU/Linux 10.10
a
1.3 Primeiro projeto
Quando ensinamos linguagens de programa¸˜o novas, geralmente o primeiro exemplo ´ um hello world. Como
ca e
o Arduino n˜o vem por padr˜o com um display, nosso primeiro exemplo ser´ fazer um LED piscar – e por isso
a a a
ser´ chamado blink. Nosso LED ficar´ aceso durante um segundo e apagado durante outro segundo e ent˜o
a a a
recome¸ar´ o ciclo. Abra a IDE e digite o seguinte c´digo:
c a o
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
Chamamos um c´digo feito para Arduino de sketch e o salvamos em um arquivo com a extens˜o .pde. Com
o a
nosso sketch pronto, bastar´ conectar o Arduino na porta USB e clicar no bot˜o upload (segundo, da direita
a a
para a esquerda – destacado na figura acima). Ap´s o processo, ser´ vista a mensagem Done uploading na IDE
o a
e ent˜o o sketch estar´ rodando no Arduino, ou seja, o LED acender´ e apagar´, de 1 em 1 segundo. Vamos
a a a a
agora ` explica¸˜o do processo:
a ca
11. 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´mero 13 como sa´
u ıda, dessa forma, podemos controlar quando a porta ficar´ com 5V ou quando
a
ficar´ 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 fun¸˜es espec´
co ıficas: setup
e loop. A fun¸˜o setup ´ executada assim que o Arduino d´ boot, j´ a fun¸˜o loop fica sendo executada
ca e a a ca
continuamente (em loop) at´ que o Arduino seja desligado. Como as portas digitais s˜o de entrada ou sa´
e a ıda,
definimos ent˜o dentro da fun¸˜o setup que a nossa porta 13 ´ uma porta de sa´ – fazemos isso atrav´s da
a ca e ıda e
chamada ` fun¸ao pinMode, que j´ vem na biblioteca padr˜o do Arduino.
a c˜ a a
Depois de configurarmos corretamente a porta 13 como sa´ ıda, precisamos acender e apagar o LED que
est´ conectado a ela. Para alterar a tens˜o na porta, utilizamos a fun¸˜o digitalWrite (que tamb´m est´ na
a a ca e a
biblioteca padr˜o do Arduino); passamos para essa fun¸˜o a porta que queremos alterar a tens˜o e o novo valor
a ca a
de tens˜o (HIGH = 5V, LOW = 0V). Depois das chamadas para acender e apagar o LED, chamamos a fun¸˜o
a ca
delay passando o parˆmetro 1000 – o que essa fun¸˜o faz ´ esperar um tempo em milisegundos para ent˜o
a ca e a
executar a pr´xima instru¸˜o.
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 n˜o precisamos digitar as diretivas include para arquivos como o
a a
stdlib.h, por exemplo. Tudo ´ feito de forma autom´tica para facilitar o desenvolvimento do projeto!
e a
Como o Arduino j´ vem com um LED internamente conectado ` porta 13, n˜o precisaremos de circuitos
a a a
externos para que esse projeto funcione, ou seja, bastar´ fazer upload daquele c´digo e j´ teremos o resultado
a o a
esperado:
(a) LED apagado (b) LED aceso
Figura 1.3: Arduino Duemilanove rodando o exemplo Blink
Por´m, se quisermos acender um LED externo ` placa, podemos conect´-lo diretamente ` porta 13. Podemos
e a a 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 tens˜o 0V, ou a tens˜o 5V – e caso coloquemos 5V no LED ele ir´ queimar.
a a a
Para solucionar esse problema precisamos ligar algum outro componente que seja respons´vel por dividir
a
parte dessa tens˜o com o LED, para que ele n˜o queime, ent˜o utilizaremos um resistor. Portanto, ligamos um
a a a
resistor de 120Ω em s´rie com o LED, o resistor ` porta 13 e o LED ` porta GND – ground ou terra –, como
e a a
na Figura 1.4.
12. 12 CAP´ ´
ITULO 1. CONCEITOS BASICOS
Figura 1.4: Utilizando um LED externo para o exemplo Blink
N˜o precisamos fazer nenhuma altera¸˜o no software para que esse circuito funcione: basta ligar o Arduino
a ca
na porta USB do computador, para que o computador dˆ energia ao circuito, e ent˜o veremos o LED externo
e a
piscar juntamente com o LED interno. Em vez do LED, poder´ ıamos controlar outros componentes, como
motores, eletrodom´sticos etc.
e
1.3.1 C´lculos de resistˆncia
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 tens˜o de 2,2V e corrente de 20mA atrav´s do Arduino, precisaremos de um resistor, como j´ vimos, j´ que
a e a a
o Arduino s´ consegue fornecer ou 0V ou 5V. Colocaremos o resistor em s´rie com o LED, e com isso podemos
o e
concluir que:
• A tens˜o total (soma das tens˜es no resistor e no LED) ser´ de 5V, ou seja: VLED + VR = 5V
a o a
• A corrente total que passa pelo resistor e pelo LED ´ igual, ou seja, 20mA, ou seja: ILED = IR = 20mA
e
• Precisamos colocar uma tens˜o de 2,2V no LED, ou seja: VLED = 2, 2V
a
Sabendo desses detalhes, podemos concluir que a tens˜o 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 resistˆncia R do
e
resistor que iremos utilizar atrav´s da Lei de Ohm:
e
V = RI
2,8V
Assim, temos: 2, 8V = R0, 020A ∴ R = 0,020A ⇒ R = 140Ω
Depois de feito o c´lculo, podemos generalizar com a seguinte f´rmula:
a o
Vf onte − VLED
R=
IR
Para o LED verde, precisamos de um resistor de 140Ω, por´m n˜o existem resistores com esse valor para
e a
venda – os valores s˜o pr´-definidos9 . Dada essa situa¸˜o, temos duas alternativas:
a e ca
• Utilizar um resistor de maior resistˆncia e limitar mais a corrente (que far´ com que o LED brilhe menos);
e a
ou
• Associar dois ou mais resistores em s´rie ou paralelo para conseguir o valor.
e
Geralmente escolhemos um resistor de valor pr´ximo, j´ que uma altera¸˜o pequena de corrente n˜o causar´
o a ca a a
danos ao dispositivo, por´m em alguns casos precisaremos combinar resistores de valores diferentes para conseguir
e
o valor equivalente – esse tema ser´ explicado em mais detalhes no pr´ximo cap´
a o ıtulo.
9 Saiba mais em http://www2.eletronica.org/hack-s-dicas/valores-comerciais-para-resistores-capacitores-e-indutores/
13. 1.4. BIBLIOTECAS E SHIELDS 13
1.3.2 Alimenta¸˜o do circuito
ca
Internamente, o circuito do Arduino ´ alimentado com uma tens˜o de 5V. Quando ligamos o Arduino em uma
e a
porta USB do PC, o pr´prio PC, atrav´s do cabo USB, alimenta o Arduino. Por´m 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 n˜o possu´
a ımos pilhas/baterias em abundˆncia no mercado com tens˜o de 5V, fica 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 tens˜o que aceita tens˜es de 7 a 12V (na verdade, ele consegue funcionar com tens˜es entre 6 e 20V, apesar
a o o
de n˜o ser recomendado). Com o regulador de tens˜o podemos combinar pilhas em s´rie, 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 fun¸˜es pr´-definidas, o Arduino possui outras bibliotecas para controle
a co e
de servomotores, displays LCD, gera¸˜o de audio, recep¸˜o 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 s˜o placas que se acoplam `
a a a
placa original, agregando funcionalidades ` mesma.
a
Existem shields dos mais variados tipos, para as mais diversas fun¸˜es. 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 complica¸˜es eletrˆnicas envolvidas, outros possuem leitor de cart˜o SD, acelerˆmetro,
co o a o
GPS e diversos outros sensores que podem gerar dados importantes para o software que est´ rodando no
a
microcontrolador.
14. 14 CAP´ ´
ITULO 1. CONCEITOS BASICOS
Figura 1.6: Arduino Duemilanove com shield Ethernet
Existem tamb´m outros shields mais elaborados, que s˜o sistemas completos. Um deles, por exemplo, cria
e 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. Al´m do hardware, existe uma biblioteca para
e
ser utilizada em conjunto, que j´ possui v´rias fun¸˜es pr´-programadas para fazermos desenhos na televis˜o e
a a co e a
capturar os dados dos movimentos nos controles.
1.5 Integra¸˜o 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
atrav´s 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 (atrav´s 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, atrav´s de
e
um PC!
Existem in´meros projetos interessantes que fazem interface entre linguagens de programa¸˜o e o Arduino
u ca
– existem implementa¸˜es para Python, Ruby, Java, C, dentre outras linguagens. E n˜o para por a´ al´m de o
co a ı: e
software que roda no PC receber dados, ele pode tamb´m 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 aplica¸˜o que utiliza a porta USB para comunica¸˜o do Arduino com o PC ´ o projeto
ca ca e
Arduinoscope12 , que tem como finalidade criar um oscilosc´pio, onde podemos ver em tempo real, no PC,
o
gr´ficos das tens˜es que est˜o ligadas `s portas anal´gicas do Arduino. Outro exemplo ´ um projeto que criei,
a o a a o e
onde controlo um carrinho atrav´s de Wi-Fi, o Turiquinhas13 .
e
Fica a dica para quem quer come¸ar um projeto Arduino assistido por computador de maneira f´cil: vale a
c a
pena estudar um protocolo de comunica¸˜o e controle chamado Firmata14 , cuja implementa¸˜o est´ dispon´
ca ca a ıvel
10 http://www.wayneandlayne.com/projects/video-game-shield/
11 http://www.python.org/
12 http://code.google.com/p/arduinoscope/
13 http://www.justen.eng.br/Turiquinhas
14 http://www.firmata.org/
15. ´
1.6. PORTAS ANALOGICAS E DIGITAIS 15
para v´rias linguagens (e j´ vem por padr˜o um exemplo na IDE do Arduino). Ele facilita o processo de
a a a
aquisi¸˜o de dados e controle da placa.
ca
Al´m das op¸˜es citadas acima, existe uma linguagem chamada Processing15 , parecid´
e co ıssima com a linguagem
que utilizamos no Arduino, que consegue se comunicar com o Arduino via USB e ´ utilizada para criar imagens,
e
anima¸˜es e intera¸˜es no PC, a partir dos dados vindos da comunica¸˜o com o Arduino.
co co ca
1.6 Portas anal´gicas e digitais
o
O Arduino possui dois tipos de portas de entrada: anal´gicas e digitais. Al´m disso, as portas digitais tamb´m
o e e
servem como portas de sa´ıda, funcionando com dois tipos b´sicos de sa´
a ıda: sa´ digital comum e sa´ PWM
ıda ıda
– o PWM pode ser utilizado para simular uma sa´ anal´gica, dentre outras coisas.
ıda o
1.6.1 Portas digitais
Utilizamos as portas digitais quando precisamos trabalhar com valores bem definidos de tens˜o. Apesar de nem
a
sempre ser verdade, geralmente trabalhamos com valores digitais bin´rios, ou seja, projetamos sistemas que
a
utilizam apenas dois valores bem definidos de tens˜o. Existem sistemas tern´rios, quatern´rios, mas focaremos
a a a
no bin´rio, j´ que ´ esse o utilizado pelo Arduino.
a a e
Como o sistema ´ bin´rio, temos que ter apenas duas tens˜es. S˜o elas: 0V e 5V. Dessa forma, as portas
e a o a
digitais do Arduino podem trabalhar apenas com essas duas tens˜es – 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 est˜o destacadas na figura a seguir:
a
Figura 1.7: Portas digitais do Arduino, de 13 a 0
Apesar de ser poss´ıvel, n˜o ´ recomend´vel utilizar as portas 0 e 1 pois elas est˜o diretamente ligadas ao
a e a a
sistema de comunica¸˜o do Arduino (pinos RX e TX – recep¸˜o e transmiss˜o, respectivamente) e, por isso,
ca ca a
seu uso pode conflitar com o upload do software. Caso queira utiliz´-las, certifique-se de desconectar quaisquer
a
circuitos conectados a ela no momento do upload.
Utilizaremos as fun¸˜es digitalRead e digitalWrite para ler e escrever, respectivamente, nas portas di-
co
gitais. A fun¸˜o digitalWrite j´ foi exemplificada em nosso exemplo Blink, onde acendemos e apagamos um
ca a
LED ao alternar a tens˜o da porta 13 entre 5V e 0V, com intervalo de 1 segundo. Para exemplificar a fun¸˜o
a ca
digitalRead utilizaremos um bot˜o, como no diagrama a seguir:
a
15 http://www.processing.org/
16. 16 CAP´ ´
ITULO 1. CONCEITOS BASICOS
Figura 1.8: Esquema el´trico ligando um bot˜o ao Arduino
e a
Montado o circuito acima, vamos programar o Arduino com o seguinte c´digo:
o
#define BOTAO 2
#define LED 13
void setup() {
pinMode(LED, OUTPUT);
pinMode(BOTAO, INPUT);
}
void loop() {
if (digitalRead(BOTAO) == HIGH) {
digitalWrite(LED, LOW);
}
else {
digitalWrite(LED, HIGH);
}
}
A fun¸˜o digitalRead nos retorna o valor correspondente ` tens˜o que est´ na porta que passamos entre
ca a a a
parenteses. Em nosso exemplo, utilizamos a porta BOTAO (que na verdade ´ uma constante, definida atrav´s da
e e
diretiva #define), cujo valor ´ 2. O valor retornado ´ uma constante, mapeado da seguinte forma:
e e
• HIGH, caso a tens˜o na porta seja 5V;
a
• LOW, caso a tens˜o na porta seja 0V;
a
O que o programa faz, ent˜o, ´ apagar o LED caso o bot˜o esteja pressionado e acendˆ-lo caso n˜o esteja.
a e a e a
Fica como exerc´ entender o c´digo a seguir, que ´ uma otimiza¸˜o do anterior e possui mesma funcionalidade:
ıcio o e ca
#define BOTAO 2
#define LED 13
void setup() {
pinMode(LED, OUTPUT);
pinMode(BOTAO, INPUT);
}
17. ´
1.6. PORTAS ANALOGICAS E DIGITAIS 17
void loop() {
digitalWrite(LED, !digitalRead(BOTAO));
}
Dica: o caractere “!”, em linguagem C, significa not e tem como finalidade negar a express˜o que segue `
a a
sua direita.
PWM
PWM significa Modula¸˜o por Largura de Pulso (Pulse-Width Modulation, do Inglˆs) e consiste em manipu-
ca e
larmos a raz˜o c´
a ıclica de um sinal (conhecida do Inglˆs como duty cycle) a fim de transportar informa¸˜o ou
e ca
controlar a potˆncia de algum outro circuito. Basicamente, teremos um sinal digital que oscila entre 0V e 5V
e
com determinada frequˆncia (o Arduino trabalha com um padr˜o perto de 500Hz) – funciona como se fosse um
e a
clock, por´m os tempos em que o sinal permanece em 0V e 5V podem ser diferentes. Duty cycle ´ a raz˜o do
e e a
tempo em que o sinal permanece em 5V sobre o tempo total de uma oscila¸˜o. A Figura 1.9 ilustra melhor esse
ca
conceito:
Figura 1.9: Sinal PWM com duty cycle de 25%
Assim, temos:
x x
duty cycle = =
x+y T
O que controlamos atrav´s de software ´ justamente a duty cycle, ou seja, o percentual de tempo em que
e e
o sinal fica em 5V. Dessa forma, podemos utilizar essa t´cnica para limitar a potˆncia 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%). Atrav´s de um c´lculo simples de potˆncia podemos
e e a e
notar que o LED L2 consumir´ apenas 25% da potˆncia do primeiro.
a e
Infelizmente, por limita¸˜es de hardware, o Arduino n˜o possui PWM em todas as portas digitais: apenas
co a
as portas 3, 5, 6, 9, 10 e 11 s˜o privilegiadas e podem utilizar esse recurso. Para exemplificar o uso de controle
a
de potˆncia de um circuito utilizando PWM vamos utilizar um LED em s´rie com um resistor ligados ` porta
e e a
11 (o circuito ´ o mesmo do experimento Blink, s´ vamos mudar a porta) e o seguinte c´digo:
e o o
#define LED 11
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
for (int i = 0; i < 255; i++) {
analogWrite(LED, i);
delay(30);
}
}
Na fun¸˜o loop acima temos um la¸o for, que conta de 0 a 255 (armazenando o valor do contador na vari´vel
ca c a
i), chamando a fun¸˜o analogWrite (passando como parˆmetros a porta do LED (11) e i) e esperando por 30
ca a
milisegundos a cada itera¸˜o.
ca
18. 18 CAP´ ´
ITULO 1. CONCEITOS BASICOS
A fun¸˜o analogWrite (apesar de estarmos utilizando uma porta digital) ´ respons´vel pelo PWM e recebe
ca e a
como parˆmetros 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 c´digo perceber´ que o LED acende de maneira mais suave – cada
e o a
etapa de luminosidade diferente corresponde a uma itera¸˜o do for. Fica como exerc´ para o leitor modificar
ca ıcio
o programa para que o LED, al´m de acender, tamb´m apague suavemente. :-)
e e
1.6.2 Portas anal´gicas
o
Al´m das portas digitais o Arduino possui as portas anal´gicas. Ao contr´rio das portas digitais, as portas
e o a
anal´gicas s˜o apenas de entrada e nelas podemos ter como entrada infinitos valores de tens˜o (delimitados
o a a
na faixa de 0V a 5V). Como os conversores anal´gico-digitais (ADC – analog-digital converter, do Inglˆs) do
o e
Arduino possuem 10 bits de precis˜o, a precis˜o das medi¸˜es de tens˜o no Arduino ´ de por volta de 0,005V
a a co a e
ou 5mV.
Figura 1.10: Portas anal´gicas do Arduino, de 0 a 5
o
Como os nomes de fun¸˜es no Arduino s˜o bastante intuitivos, utilizamos a fun¸˜o analogRead para ler
co a ca
valores anal´gicos – ao chamar a fun¸˜o passamos como argumento o n´mero da porta que desejamos ler (de
o ca u
0 a 5). Como exemplo vamos regular a luminosidade de nosso LED (utilizando PWM) atrav´s da quantidade
e
de luz detectada por um resistor dependente de luz (ou LDR – light dependent resistor, do Inglˆs). Monte o
e
circuito segundo a figura 1.11.
19. ´
1.6. PORTAS ANALOGICAS E DIGITAIS 19
Figura 1.11: Circuito com LDR e LED
Como os conversores anal´gico-digital possuem 10 bits de precis˜o, a fun¸˜o analogRead nos devolve um
o a ca
valor entre 0 e 1023, onde 0 corresponde a uma leitura de 0V na porta anal´gica e 1023 corresponde a 5V (para
o
valores intermedi´rios, basta fazer uma regra de trˆs simples, de maneira an´loga com o PWM). Vamos carregar
a e a
em nosso Arduino o seguinte c´digo:
o
#define LED 11
#define LDR 5
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
int leitura = analogRead(LDR);
int valorPWM = - 0.25 * leitura + 255;
analogWrite(LED, valorPWM);
}
Os valores 0.25 e 255 da linha que definem a vari´vel valorPWM devem ser calibrados conforme ilumina¸˜o do
a ca
ambiente, resistores utilizados e luminosidade desejada. Para o c´digo acima, teremos o seguinte comportamento
o
do valor que colocamos na porta PWM a partir dos valores lidos na porta anal´gica:
o
20. 20 CAP´ ´
ITULO 1. CONCEITOS BASICOS
Figura 1.12: Gr´fico da fun¸˜o PWM versus leitura anal´gica
a ca o
Ficam trˆs exerc´
e ıcios:
• Aprenda a utilizar um potenciˆmetro e o utilize para regular o brilho do LED, em vez do LDR;
o
• Volte o LDR para seu lugar anterior e utilize o potenciˆmetro para configurar os valores 0.25 e 255;
o
• Leia o datasheet do circuito integrado LM35 e monte um circuito parecido com o anterior, por´m sens´
e ıvel
a temperatura (e n˜o mais a luz).
a
22. 22 CAP´ ˆ
ITULO 2. FUNDAMENTOS DE ELETRONICA
2.1 Resistores e Lei de Ohm
Resistores s˜o dispositivos utilizados com a finalidade de transformar energia el´trica em energia t´rmica e/ou
a e e
limitar a corrente el´trica em um circuito. Como o pr´prio nome sugere, eles tˆm como fun¸˜o oferecer uma
e o e ca
resistˆncia ` passagem da corrente el´trica – medimos essa resistˆncia atrav´s da unidade Ω (ohm).
e a e e e
Por consequˆncia, eles causam uma queda de tens˜o na regi˜o do circuito onde se encontram – muitas vezes
e a a
acabamos utilizando esse efeito para conseguirmos tens˜es intermedi´rias, caso as fontes de tens˜o do circuito
o a a
n˜o consigam fornecˆ-las. Sabendo-se a tens˜o e corrente em um resistor, podemos calcular sua resistˆncia
a e a e
atrav´s da f´rmula:
e o
V
R=
I
Por sua vez, a resistˆncia pode ser calculada atrav´s das caracter´
e e ısticas do material resistivo:
ρL
R=
A
Onde ρ ´ a resistividade do material, L ´ seu comprimento e A sua ´rea, ou seja, a resistˆncia ´ proporcional
e e a e e
ao comprimento e indiretamente proporcional ` ´rea.
aa
Se, para um determinado circuito, V e I tˆm uma rela¸˜o linear, ou seja, R ´ constante para in´meros
e ca e u
valores de V e I, ent˜o chamamos o material (que possui resistˆncia R) de ˆhmico.
a e o
2.1.1 Resistores em s´rie
e
Se possuirmos resistores em s´rie em determinado circuito, podemos calcular a resistˆncia equivalente do mesmo
e e
somando-se as resistˆncias, atrav´s da f´rmula:
e e o
Req = R1 + R2 + ... + Rn
Figura 2.1: Resistores em s´rie
e
Retirado de http://en.wikipedia.org/wiki/Resistor
2.1.2 Resistores em paralelo
Caso os resistores estejam em paralelo, a resistˆncia equivalente ser´ o inverso da soma dos inversos das resis-
e a
tˆncias, como na f´rmula a seguir:
e o
1 1 1 1
= + + ... +
Req R1 R2 Rn
Figura 2.2: Resistores em paralelo
Retirado de http://en.wikipedia.org/wiki/Resistor
23. 2.2. CAPACITORES E INDUTORES 23
2.1.3 C´digo de cores
o
Os resistores possuem um c´digo de cores que nos permite identificar qual sua resistˆncia. Para isso, mapeamos
o e
as cores das diversas faixas do resistor e utilizamos a seguinte f´rmula:
o
R = (10a + b) · 10c ± t,
onde a, b e c s˜o as primeiras faixas e t a ultima faixa (geralmente prata ou dourada), que representa a
a ´
tolerˆncia.
a
Figura 2.3: C´digo de cores
o
Retirado de http://pt.wikipedia.org/wiki/Resistor
2.1.4 Divisor de tens˜o
a
Como citado acima, resistores criam uma queda de tens˜o na regi˜o do circuito em que est˜o. Utilizando esse
a a a
efeito, podemos criar o que chamamos de divisores de tens˜o1 : circuitos com resistores que, aplicada uma tens˜o,
a a
tˆm como sa´ uma fra¸˜o (da´ o nome divisores) dessa tens˜o de entrada.
e ıda ca ı a
Figura 2.4: Circuito divisor de tens˜o
a
A partir do circuito acima, temos que:
R2
Vout = · Vin
R1 + R2
Esse recurso ´ bastante util quando precisamos medir um tens˜o maior do que nossos circuitos conseguem.
e ´ a
Por exemplo: se quisermos medir uma tens˜o que varia de 9 a 12V no Arduino precisaremos coloc´-la na faixa
a a
de 0 a 5V, j´ que as portas anal´gicas do Arduino trabalham nessa faixa menor. Para isso, poder´
a o ıamos utilizar
um divisor de tens˜o cujos valores de resistˆncia resultassem em Vout = V3n . Dessa forma, os valores lidos em
a e i
Vout seriam de 3 a 4V.
Por´m, aten¸˜o: caso precisemos conectar resistores ou outros circuitos resistivos no pino Vout , o c´lculo das
e ca a
tens˜es muda e Vout passa a depender das novas resistˆncias do circuito.
o e
2.2 Capacitores e indutores
Apesar de n˜o estudarmos a fundo esses dois elementos b´sicos 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 tens˜o
a
24. 24 CAP´ ˆ
ITULO 2. FUNDAMENTOS DE ELETRONICA
uma bateria em que vocˆ carrega e descarrega de tempos em tempos, por´m com capacidade bem limitada) e
e e
s˜o bastante utilizados em filtros de sinais, estabilizadores de tens˜o, circuitos ressonantes (como transmissores
a a
e receptores de r´dio), dentre outros.
a
2.2.1 Capacitores
Os capacitores s˜o componentes que armazenam energia em forma de campo el´trico. S˜o formados por duas
a e a
placas met´licas com um diel´trico (isolante) no meio. A unidade de medida ´ o Farad (F), por´m como 1 Farad
a e e e
´ algo bem grande, comumente encontramos capacitores na casa dos mF (miliFarad), µF (microFarad) e pF
e
(picoFarad).
Figura 2.5: Capacitor eletrol´
ıtico bastante comum no mercado
Figura 2.6: Representa¸˜o de um capacitor em circuito el´trico
ca e
2.2.2 Indutores
Os indutores s˜o componentes que armazenam energia em forma de campo magn´tico. Geralmente s˜o formados
a e a
por bobinas (fio enrolado) com um condutor no meio. A unidade de medida ´ o Henry (H).
e
Figura 2.7: Indutores de v´rios tipos, comuns no mercado
a
25. 2.3. DIODOS 25
Figura 2.8: Representa¸˜o de um indutor em circuito el´trico
ca e
2.3 Diodos
Diodos s˜o componentes que tˆm a capacidade de conduzir corrente el´trica em uma dire¸˜o e bloque´-la em
a e e ca a
outra – esse comportamento ´ chamado de retifica¸˜o e pode ser utilizado para converter corrente alternada
e ca
(CA ou AC – alternating current, do Inglˆs –, a energia que temos em nossas tomadas) em corrente cont´
e ınua
(CC ou DC – direct current, do Inglˆs –, a forma como as baterias nos fornecem energia). Outros usos de diodo
e
s˜o prote¸˜o de circuitos (contra corrente reversa) e extra¸˜o de modula¸˜o de sinais (por exemplo, para uso
a ca ca ca
em circuitos de comunica¸˜o sem fio).
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: Representa¸˜o de um diodo em circuito el´trico
ca e
O diodo conduzir´ corrente el´trica caso a tens˜o em seu terminal positivo (+) seja maior que a tens˜o em
a e a a
seu terminal negativo (−), ou seja, funcionar´ como um curto-circuito. Caso contr´rio, ele funcionar´ como
a a a
a a ´
circuito aberto (n˜o conduzir´). E importante notar que para diodos reais existe uma queda de tens˜o de 0,7V
a
em sua jun¸˜o P-N e, com isso, a tens˜o do lado positivo precisa ser maior que a tens˜o negativa + 0,7V para
ca a a
que ele conduza.
2.4 Transistores
Transistores s˜o dispositivos semicondutores usados como amplificadores ou chaveadores. Sua entrada ´ uma
a e
corrente/tens˜o que altera a corrente/tens˜o de sa´
a a ıda. Os transistores s˜o a base de todos os circuitos integrados
a
e placas modernos – alguns, como os microprocessadores, possuem milh˜es deles.
o
Para nossos estudos, iremos focar nos transistores de estrutura bipolar de jun¸˜o (ou BJT, Bipolar Junction
ca
Transistor, do Inglˆs) com polaridade NPN e PNP, por´m existem outros tipos, como os FETs.
e e
26. 26 CAP´ ˆ
ITULO 2. FUNDAMENTOS DE ELETRONICA
(a) NPN (b) PNP
Figura 2.11: S´
ımbolos de transistores BJT em circuito el´trico
e
Os transistores possuem trˆs terminais: base, coletor e emissor. E suas principais equa¸˜es caracter´
e co ısticas
s˜o:
a
IC + IB = IE
IC = βIB ,
onde β ´ uma constante (tamb´m referida como hF E ) caracter´
e e ıstica do transistor (fator de amplifica¸˜o).
ca
A segunda equa¸˜o nos evidencia o poder de amplifica¸˜o de um transistor: dependendo da corrente que
ca 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 v´rios encapsulamentos diferentes. Alguns comuns
a
s˜o o 2N2904 (NPN) e 2N3906 (PNP).
a
Figura 2.12: Componente 2N3904: transistor NPN com encapsulamento TO-92
2.4.1 Utiliza¸˜o de transistores com rel´s
ca e
Rel´s s˜o componentes uteis quando precisamos isolar eletronicamente um circuito de controle de um circuito
e a ´
de potˆncia. Se quisermos, por exemplo, acender uma lˆmpada incandescente (que utiliza corrente alternada)
e a
atrav´s do Arduino, podemos utilizar um rel´: o Arduino controlar´ o rel´, que ent˜o far´ a conex˜o (ou n˜o) da
e e a e a a a a
lˆmpada com a tomada. Existem rel´s mecˆnicos e de estado s´lido (SSD ou Solid-state relay, do Inglˆs), por´m
a e a o e e
iremos utilizar um rel´ mecˆnico em nosso exemplo, por ser mais barato e f´cil de se encontrar no mercado.
e a a
Como rel´s possuem correntes de ativa¸˜o maiores que as portas digitais do Arduino conseguem suprir,
e ca
precisamos amplificar a corrente que sai das portas digitais do Arduino para que ela seja capaz de acionar o rel´
e
– e isso faremos utilizando um transistor NPN.
Utilizando um rel´ acionado por 5V, um transistor NPN (2N3904) e dois resistores (10Ω para o rel´ e
e 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 n˜o est˜o indicadas no diagrama:
e a a
27. 2.4. TRANSISTORES 27
Figura 2.13: Circuito para ligar um rel´ (controlado por transistor) no Arduino
e
Fica como exerc´ para o leitor verificar como seria o uso de um transistor PNP.
ıcio
2.4.2 Ponte-H
Em alguns projetos precisamos inverter a tens˜o de entrada de determinado circuito. Por exemplo: os motores
a
de corrente cont´
ınua giram para um lado caso apliquemos tens˜o positiva em seu terminal esquerdo e negativa
a
em seu terminal direito. Por´m, para fazˆ-los girar em sentido contr´rio, precisamos aplicar tens˜o negativa em
e e a a
seu terminal esquerdo e positiva em seu terminal direito.
Podemos implementar circuitos que fazem essa invers˜o de tens˜o a partir de 4 transistores funcionando
a a
como chave. Esse tipo de circuito se chama ponte-H por conta da disposi¸˜o dos transistores com rela¸˜o ao
ca ca
motor, como pode ser visto no diagrama a seguir:
Figura 2.14: Diagrama de uma ponte-H
28. 28 CAP´ ˆ
ITULO 2. FUNDAMENTOS DE ELETRONICA
Quando fechamos as chaves S1 e S4, o terminal esquerdo do motor recebe tens˜o positiva e o terminal
a
direito recebe tens˜o negativa. J´ quando fechamos as chaves S2 e S3, o terminal esquerdo do motor recebe
a a
tens˜o negativa e o terminal direito recebe tens˜o positiva. O que precisamos fazer ´ substituir as chaves por
a a e
transistores, para ent˜o podermos controlar o sentido de rota¸˜o do motor atrav´s do Arduino.
a ca e
A seguir temos um circuito bastante completo de ponte-H que utiliza diodos de prote¸˜o e acopladores
ca
o
´pticos para dar mais seguran¸a ` solu¸˜o 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 n˜o quer ter trabalho montando o circuito, existe a op¸˜o de comprar um circuito integrado
a ca
pronto com a ponte-H – uma das op¸˜es ´ o L293D.
co e
PWM e ponte-H para controle de velocidade
Como com PWM conseguimos controlar a quantidade de potˆncia que ser´ entregue a um circuito, caso utilize-
e a
mos PWM como entrada do controle de uma ponte-H, podemos limitar a quantidade de potˆncia entregue ao
e
motor e, com isso, controlar sua velocidade.
30. 30 CAP´ ˆ
ITULO 3. ELETRONICA DIGITAL
3.1 Introdu¸˜o
ca
Dizemos que um circuito ´ digital quando suas entradas e sa´
e ıdas trabalham com sinais digitais, ou seja, sinais
com valores bem definidos. Geralmente esses circuitos trabalham apenas com dois valores e, por isso, chamamos
esses sistemas de digitais bin´rios.
a
Quando estamos falando de circuitos digitais, estamos falando de transporte de informa¸˜o. E como temos
ca
somente dois valores poss´ ıveis de tens˜o, teremos toda a informa¸˜o codificada em bin´rio – chamamos cada
a ca a
informa¸˜o bin´ria de bit (d´
ca a ıgito bin´rio ou binary digit, do Inglˆs) e os representamos por 0 e 1.
a e
Dessa forma, se nossos circuitos trabalham com tens˜es de 0V e 5V, dizemos que 0V equivale ao bit 0 e 5V
o
equivale ao bit 1 – agora passamos a falar de bits (informa¸˜o) em vez de tens˜es, ou seja, estamos pensando
ca o
uma camada acima.
3.2 Portas l´gicas
o
Assim como na Matem´tica possu´
a ımos opera¸˜es b´sicas como soma, subtra¸˜o, multiplica¸˜o e divis˜o, na
co a ca ca a
aritm´tica bin´ria temos opera¸˜es que podemos fazer com nossos bits. Para simplificar, vamos tratar as
e a co
opera¸˜es com uma ou duas entradas, apenas uma sa´
co ıda, tratar o bit 0 como sinˆnimo de falso e o bit 1 como
o
sinˆnimo de verdadeiro. Dessa forma, temos as seguintes opera¸˜es:
o co
• AND: opera¸˜o que resulta em bit 1 somente quando os dois bits de entrada s˜o 1 (ou seja, s´ resulta
ca a o
em “verdadeiro” se somente o primeiro e o segundo bit forem “verdadeiros”.);
• OR: opera¸˜o que resulta em 1 quando pelo menos uma das entradas ´ 1 (ou seja, resulta em “verdadeiro”
ca e
quando o primeiro ou o segundo bit forem “verdadeiros”.);
• NOT: opera¸˜o que resulta na invers˜o do bit de entrada;
ca a
• XOR: tamb´m chamade de exclusive or (“ou exclusivo”), essa opera¸˜o s´ resulta em bit 1 quando somente
e ca o
um dos bits de entrada ´ 1.
e
O circuito abaixo exemplifica a cria¸˜o de uma porta do tipo AND:
ca
Figura 3.1: Porta l´gica AND criada a partir de diodos e resistor
o
3.2.1 Tabela-verdade
Para um n´mero finito de entradas podemos aplicar as opera¸˜es l´gicas em todos os poss´
u co o ıveis valores dessa
entrada e obter todos os poss´ ıveis resultados da opera¸˜o/fun¸˜o l´gica. Chama-se tabela-verdade a tabela que
ca ca o
lista todas essas possibilidades.
Para as fun¸˜es l´gicas acima, quando temos duas entradas temos um total de 4 poss´
co o ıveis combina¸˜es de
co
entradas diferentes (o n´mero de combina¸˜es bin´rias ´ sempre 2n´mero de entradas ) e as seguintes tabelas:
u co a e u
31. ´
3.2. PORTAS LOGICAS 31
A B A AND B A B A OR B A B A XOR B
0 0 0 0 0 0 A NOT A 0 0 0
0 1 0 0 1 1 0 1 0 1 1
1 0 0 1 0 1 1 0 1 0 1
1 1 1 1 1 1 (c) Opera¸ao NOT
c˜ 1 1 0
(a) Opera¸˜o AND
ca (b) Opera¸ao OR
c˜ (d) Opera¸˜o XOR
ca
Figura 3.2: Tabelas-verdade das opera¸˜es l´gicas b´sicas
co o a
Al´m das opera¸˜es b´sicas, temos as nega¸˜es nas mesmas, como NAND, NOR e XNOR. Para saber a
e co a co
tabela-verdade dessas, basta negar a sa´ da tabela verdade das outras opera¸˜es (AND, OR e XOR, respec-
ıda co
tivamente).
3.2.2 Representa¸˜o das opera¸oes
ca c˜
As opera¸˜es l´gicas citadas acima podem ser representadas em circuitos pelos seguintes s´
co o ımbolos:
(a) NOT (b) AND (c) NAND (d) OR (e) NOR (f) XOR (g) XNOR
Figura 3.3: S´
ımbolos das opera¸˜es l´gicas
co o
Al´m disso, podem ser escritas por extenso:
e
Opera¸˜o
ca Representa¸˜o
ca
NOT A A
A AND B A+B
A NAND B A+B
A OR B A·B
A NOR B A·B
A XOR B A⊕B
A XNOR B A⊕B
3.2.3 Fun¸˜es l´gicas compostas
co o
Assim como na Matem´tica, podemos fazer composi¸˜es das fun¸˜es l´gicas b´sicas para obter novas fun¸˜es
a co co o a co
(compostas). A fun¸˜o XOR, por exemplo, pode ser obtida atrav´s da composi¸˜o das fun¸˜es NOT, AND e
ca e ca co
OR:
A⊕B =A·B+A·B
ou
Figura 3.4: Diagrama da fun¸˜o composta XOR
ca
32. 32 CAP´ ˆ
ITULO 3. ELETRONICA DIGITAL
A partir de fun¸˜es l´gicas compostas e t´cnicas como realimenta¸˜o conseguimos criar dispositivos mais
co o e ca
complexos como latches, flip-flops, coders/decoders, mux/demux, dentre outros. Esses dispositivos s˜o a base
a
para criar circuitos l´gicos de alto n´
o ıvel, por exemplo: com alguns flip-flops conseguimos criar registradores,
que podem evoluir para mem´rias e fazer parte do circuito de um microprocessador.
o
34. 34 CAP´
ITULO 4. FAZENDO BARULHO COM O ARDUINO
Para quem gosta de fazer m´sica, o Arduino possui uma fun¸˜o pronta para criar uma onda quadrada na
u ca
frequˆncia e no tempo desejados. Apesar de serem notas simples e a onda ser quadrada, adicionando circuitos
e
extras (para filtros e distor¸˜es) e um pouco de criatividade, conseguimos criar sons legais para nossos projetos.
co
A fun¸˜o que faz esse trabalho ´ chamada tone. Vamos criar um projeto-exemplo ligando um buzzer –
ca e
componente que reproduz sons de acordo com as varia¸˜es de tens˜o em seus terminais – para tocar nosso som
co a
da seguinte forma:
Figura 4.1: Circuito com buzzer
Utilizaremos o seguinte c´digo:
o
#define BUZZER 9
int notas[] = { 524, 588, 660, 699, 785, 881, 989 };
void setup() {
pinMode(BUZZER, OUTPUT);
}
void loop() {
for (int i = 0; i < 7; i++) {
tone(BUZZER, notas[i], 1000);
delay(1000);
}
delay(1000);
}
Al´m do la¸o for, utilizamos tamb´m um vetor de inteiros chamado notas. Um vetor nada mais ´ que um
e c e e
local onde armazenamos v´rias vari´veis de mesmo tipo. Os vetores s˜o indexados e para acessar cada item
a a a
guardado neles utilizamos ´ındices que variam de 0 a n − 1, onde n ´ o n´mero total de elementos. No exemplo
e u
acima, utilizamos a vari´vel i para percorrer o vetor e, por isso, para acessar os elementos utilizamos i.
a
Os segredos do c´digo acima s˜o:
o a
• Saber a frequˆncia das notas1 e
e
• Saber utilizar a fun¸˜o tone. A fun¸˜o tone recebe trˆs parˆmetros, respectivamente: pino (precisa ser
ca ca e a
um pino que tenha suporte a PWM), frequˆncia da nota e dura¸˜o do som em milissegundos.
e ca
1 Saiba mais em http://pt.wikipedia.org/wiki/S´rie harmˆnica (m´sica)
e o u
36. 36 CAP´
ITULO 5. ARMAZENANDO NA EEPROM
EEPROM (Electrically Erasable Programmable Read-Only Memory, do Inglˆs) ´ um tipo de mem´ria n˜o
e e o a
vol´til, ou seja, que n˜o se apaga ao retirarmos energia de seu circuito (o que n˜o ´ verdade para as mem´rias
a a a e 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 vers˜es 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 significa que nosso software pode armazenar 1KiB de dados que n˜o a
ser˜o perdidos (mesmo que desliguemos o Arduino da fonte de alimenta¸˜o) – funciona como se fosse um
a ca
micro-pendrive. Para utilizar a EEPROM n˜o precisamos de circuitos adicionais: precisamos apenas utilizar a
a
biblioteca EEPROM.h. Por´m, para nosso exemplo, vamos ligar um LED na porta 11 e utilizar o seguinte c´digo:
e o
#include <EEPROM.h>
#define LED 11
void setup() {
for (int i = 0; i < 16; i++) {
EEPROM.write(i, i * i);
}
}
void loop() {
for (int i = 0; i < 16; i++) {
byte leitura = EEPROM.read(i);
analogWrite(LED, leitura);
delay(50);
}
delay(1000);
}
A diretiva #include diz ao compilador que queremos incluir a biblioteca EEPROM.h – isso quer dizer que,
al´m do c´digo que digitamos, utilizaremos um c´digo j´ criado pela equipe do Arduino para facilitar a utiliza¸˜o
e o o a ca
da EEPROM. O exemplo nada mais faz que escrever 16 bytes na EEPROM (na fun¸˜o setup), ler um por um
ca
e configurar o valor lido como sa´ PWM da porta 11 (na fun¸˜o loop).
ıda ca
A fun¸˜o de escrita, EEPROM.write, recebe dois parˆmetros: o endere¸o onde ela vai escrever (um valor entre
ca a c
0 e 1023, no caso do Arduino Duemilanove com ATMega328) e o byte que escreveremos nesse local, j´ a fun¸˜o
a ca
EEPROM.read recebe apenas um parˆmetro (o endere¸o de onde ela far´ a leitura) e nos retorna o valor lido na
a c a
mem´ria (um byte).
o