2
Sum´ ario 1 Conc Concei eito toss b´ basicos a ´sicos 1.1 O Projeto Projeto Arduin Arduinoo . . . . . . . 1.2 1.2 Inst Instal ala¸ a¸ c˜ c˜ao ao do software do software . . . . . 1.3 Primei Primeiro ro projeto projeto . . . . . . . . 1.3.1 C´alculos alcu los de resistˆ resi stˆencia enci a . 1.3.2 1.3 .2 Alimen Alimenta¸ ta¸c˜ cao ˜ao do circuito 1.4 Biblio Bibliotec tecas as e shields . . . . . . 1.5 1.5 Inte Integr gra¸ a¸c˜ cao a˜o com o PC . . . . . . 1.6 Porta Portass anal´ anal´ ogicas ogicas e digitais digitais . . 1.6.1 1.6 .1 Porta Portass digita digitais is . . . . . 1.6.2 1.6 .2 Porta Portass anal´ anal´ ogicas ogicas . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
7 8 9 10 12 13 13 14 15 15 18
2 Fundame undament ntos os de Eletr Eletrˆ onica o ˆnica 2.1 Resist Resistore oress e Lei de Ohm . . . . . . . . . . 2.1.1 Resistores em s´ erie erie . . . . . . . . . 2.1.2 2.1 .2 Resist Resistore oress em em para paralel leloo . . . . . . . 2.1.3 Codigo ´odigo de cores . . . . . . . . . . . 2.1.4 2.1 .4 Diviso Divisorr de tens˜ tens˜ aaoo . . . . . . . . . . 2.2 Capaci Capacitor tores es e induto indutores res . . . . . . . . . . 2.2.1 2.2 .1 Capaci Capacitor tores es . . . . . . . . . . . . . 2.2. 2.2.22 Induto Indutore ress . . . . . . . . . . . . . . 2.3 2.3 Diod Diodos os . . . . . . . . . . . . . . . . . . . . 2.4 Transis ransistor tores es . . . . . . . . . . . . . . . . . 2.4. 2.4.11 Util Utiliz iza¸ a¸c˜ c˜ao ao de transistores transis tores com rel´es es 2.4. 2.4.22 Pont Pontee-H H . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
21 22 22 22 23 23 23 24 24 25 25 26 27
3 Elet Eletrˆ rˆ onica onica Digital 3.1 3.1 Intr Introdu odu¸c˜ c¸˜ao ao . . . . . . . . . . . . . . 3.2 3.2 Porta ortass l´ ogicas ogicas . . . . . . . . . . . . . 3.2.1 Tabela-verdad abela-verdadee . . . . . . . . 3.2.2 3.2 .2 Repres Represen enta¸ ta¸c˜ c˜ao ao das opera¸c˜ coes o˜es 3.2. 3.2.33 Fun¸ un¸c˜ c˜oes oes l´ogicas ogicas compostas . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
29 30 30 30 31 31
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . .
. . . . . . . . . .
. . . . .
. . . . .
4 Fazendo azendo barulh barulho o com o Arduino Arduino
33
5 Armaze Armazenand nando o na EEPR EEPROM OM
35
3
4
´ SUM ARIO
5
´ SUM ARIO
6
Pref´ acio Essa apostila ´e destinada aos alunos que realizaram o Curso de Arduino 1 , tendo como premissa explicar em mais detalhes temas abordados em aula para que os alunos n˜ao se preocupem com anota¸co˜es 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¸co˜es, 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 verificar 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˜a o do 2 grupo de usu´arios de Arduino do Rio de Janeiro , onde s˜ao realizados encontros mensais para discutir sobre a plataforma. Est´ a finalizando sua gradua¸ca˜o 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 ´ageis 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: • Blog:
1
[email protected]
http://blog.justen.eng.br/
• Twitter:
http://twitter.com/turicas
• Telefone:
+55 21 9898-0141
http://www.CursoDeArduino.com.br/ http://ArduInRio.cc/ 3 http://www.python.org/ 4 http://dojorio.org/ 2
Cap´ıtulo 1
Conceitos b´ asicos
7
´ CAP ´ ITULO 1. CONCEITOS BASICOS
8
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¸ca˜o f´ısica: ´area da computa¸c˜a o em que o software interage diretamente com o hardware , tornando poss´ıvel integra¸ca˜o 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 flash (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 flash , 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¸ca˜o 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 pro jeto ´e que seu software , hardware e documenta¸c˜ao s˜ao abertos. O software ´e livre (GNU GPL2 ), o hardware ´e totalmente especificado (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¸ca˜o, seja traduzindo) atrav´es da wiki! 1
http://www.arduino.cc/ http://www.gnu.org/licenses/gpl.html 3 http://creativecommons.org/licenses/ 2
˜ DO SOFTWARE 1.2. INSTALA¸ C AO
1.2
9
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 flash 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¸ca˜o → Gerenciador de pacotes Synaptic).
• Ubuntu
• Outras
GNU/Linux (anterior a 10.10): Consulte a p´agina de instala¸ca˜o do Arduino em Ubuntu5 .
distribui¸ c˜ oes GNU/Linux: Consulte a p´ agina de instala¸ca˜o em outras distribui¸c˜oes GNU/Linux6 .
• Microsoft
• Apple
Windows: Consulte a p´agina de instala¸ca˜o para as variadas vers˜oes do Microsoft Windows7 .
Mac OS X: Consulte a p´ agina de instala¸c˜ao para o Mac OS X 8 .
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 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 5
´ CAP ´ ITULO 1. CONCEITOS BASICOS
10
Figura 1.2: Arduino IDE vers˜ao 0018 rodando no Ubuntu GNU/Linux 10.10
1.3
Primeiro projeto
Quando ensinamos linguagens de programa¸ca˜o 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 ficar´ 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 figura 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¸ca˜o do processo:
11
1.3. PRIMEIRO PROJETO
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 ficar´ a com 5V ou quando ficar´ 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´ıficas: setup e loop. A fun¸ca˜o setup ´e executada assim que o Arduino d´ a boot, j´ a a fun¸c˜ao loop fica sendo executada continuamente (em loop) at´ e que o Arduino seja desligado. Como as portas digitais s˜ ao de entrada ou sa´ıda, definimos 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¸c˜ao pinMode, que j´a vem na biblioteca padr˜ao do Arduino. Depois de configurarmos 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¸ca˜o 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 ametro 1000 – o que essa fun¸ca˜o faz ´e esperar um tempo em milisegundos para ent˜ao delay passando o parˆ executar a pr´oxima instru¸ca˜o. 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 atica para facilitar o desenvolvimento do projeto! stdlib.h, por exemplo. Tudo ´e feito de forma autom´ 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.
´ CAP ´ ITULO 1. CONCEITOS BASICOS
12
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: V LED + V R = 5V
• A
corrente total que passa pelo resistor e pelo LED ´e igual, ou seja, 20mA, ou seja: I LED = I R = 20mA
• Precisamos
colocar uma tens˜ao de 2,2V no LED, ou seja: V LED = 2, 2V
Sabendo desses detalhes, podemos concluir que a tens˜ ao no resistor ser´a de: V R = 5V − V LED ∴ V R = 5V − 2, 2V ⇒ V R = 2, 8V . Como I R = 20mA e V R = 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 = R 0, 020A ∴ R = 02,020 ⇒ R = 140Ω A Depois de feito o c´alculo, podemos generalizar com a seguinte f´ormula:
R =
V fonte − V LED I R
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-definidos 9 . Dada essa situa¸ca˜o, 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
1.3.2
13
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, fica 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-definidas, o Arduino possui outras bibliotecas para controle de servomotores, displays LCD, gera¸ca˜ o de ´audio, recep¸ca˜o 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¸co˜es. 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¸co˜es 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.
´ CAP ´ ITULO 1. CONCEITOS BASICOS
14
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 Shield 10 , 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 finalidade criar um oscilosc´opio, onde podemos ver em tempo real, no PC, gr´ aficos 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¸ca˜o est´a dispon´ıvel 10
http://www.wayneandlayne.com/projects/video-game-shield/ http://www.python.org/ 12 http://code.google.com/p/arduinoscope/ 13 http://www.justen.eng.br/Turiquinhas 14 http://www.firmata.org/ 11
´ 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 Processing 15 , 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¸ca˜o 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 definidos 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 definidos 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˜o es. 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 figura 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 conflitar com o upload do software . Caso queira utiliz´a-las, certifique-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¸ca˜o digitalWrite j´ a foi exemplificada 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 exemplificar a fun¸ca˜o ao, como no diagrama a seguir: digitalRead utilizaremos um bot˜ 15
http://www.processing.org/
´ CAP ´ ITULO 1. CONCEITOS BASICOS
16
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¸ca˜o 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, definida 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;
ao na porta seja 0V; LOW, caso a tens˜
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
17
void loop() { digitalWrite(LED, !digitalRead(BOTAO)); }
Dica: o caractere “!”, em linguagem C, significa not e tem como finalidade negar a express˜ao que segue `a sua direita. PWM PWM significa 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 fim de transportar informa¸ca˜o 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 em os tempos em que o sinal permanece em 0V e 5V podem ser diferentes. Duty cycle ´e a raz˜ao do clock , por´ 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+y
=
x T
O que controlamos atrav´es de software ´e justamente a duty cycle , ou seja, o percentual de tempo em que o sinal fica em 5V. Dessa forma, podemos utilizar essa t´ecnica para limitar a potˆencia de algum circuito. Por exemplo, considere que um LED L 1 seja alimentado o tempo inteiro por um sinal constante de 5V; j´ a o LED L 2 ´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¸co˜es 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 exemplificar 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¸ca˜o 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¸ca ˜o analogWrite (passando como parˆametros a porta do LED (11) e i) e esperando por 30 milisegundos a cada itera¸ca˜o.
´ CAP ´ ITULO 1. CONCEITOS BASICOS
18
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¸ca˜o do for . Fica como exerc´ıcio para o leitor modificar 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 infinitos 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¸ca˜o analogRead para ler valores anal´ogicos – ao chamar a fun¸ca˜o 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 figura 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 definem a vari´avel valorPWM devem ser calibrados conforme ilumina¸ca˜o 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:
´ CAP ´ ITULO 1. CONCEITOS BASICOS
20
Figura 1.12: Gr´afico da fun¸ca˜o PWM versus leitura anal´ogica Ficam trˆes exerc´ıcios: • Aprenda • Volte • Leia
a utilizar um potenciˆometro e o utilize para regular o brilho do LED, em vez do LDR;
o LDR para seu lugar anterior e utilize o potenciˆometro para configurar os valores 0 .25 e 255;
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
ˆ CAP ´ ITULO 2. FUNDAMENTOS DE ELETR ONICA
22
2.1
Resistores e Lei de Ohm
Resistores s˜ao dispositivos utilizados com a finalidade 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¸ca˜o 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 a´rea. 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 = R 1 + 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 Req
=
1 R1
+
1 R2
+ ... +
1 Rn
Figura 2.2: Resistores em paralelo Retirado de http://en.wikipedia.org/wiki/Resistor
23
2.2. CAPACITORES E INDUTORES
2.1.3
C´ odigo de cores
Os resistores possuem um c´odigo de cores que nos permite identificar 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¸ca˜o (da´ı o nome divisores) dessa tens˜ ao de entrada.
Figura 2.4: Circuito divisor de tens˜ao A partir do circuito acima, temos que: V out =
R2 R1 + R2
· V in
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 um divisor de tens˜ao cujos valores de resistˆ encia resultassem em V out = V 3n . Dessa forma, os valores lidos em V out seriam de 3 a 4V. Por´em, aten¸c˜ao: caso precisemos conectar resistores ou outros circuitos resistivos no pino V out , o c´alculo das tens˜ oes muda e V out passa a depender das novas resistˆ encias do circuito. i
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
ˆ CAP ´ ITULO 2. FUNDAMENTOS DE ELETR ONICA
24
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 filtros 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¸ca˜o 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 (fio 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
25
2.3. DIODOS
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 retifica¸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¸ca˜o de modula¸ca˜o de sinais (por exemplo, para uso em circuitos de comunica¸c˜ao sem fio).
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¸ca˜o 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 ´ circuito aberto (n˜ ao conduzir´a). E importante notar que para diodos reais existe uma queda de tens˜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 amplificadores 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.
ˆ CAP ´ ITULO 2. FUNDAMENTOS DE ELETR ONICA
26
(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: I C + I B = I E
I C = βI B ,
onde β ´e uma constante (tamb´em referida como h F E ) caracter´ıstica do transistor (fator de amplifica¸c˜ao). A segunda equa¸c˜ao nos evidencia o poder de amplifica¸ca˜o de um transistor: dependendo da corrente que colocarmos na base (corrente I B ), ele permitir´a maior ou menor corrente no coletor (corrente I C ). 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 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´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:
27
2.4. TRANSISTORES
Figura 2.13: Circuito para ligar um rel´ e (controlado por transistor) no Arduino Fica como exerc´ıcio para o leitor verificar 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¸ca˜o ao motor, como pode ser visto no diagrama a seguir:
Figura 2.14: Diagrama de uma ponte-H
28
ˆ CAP ´ ITULO 2. FUNDAMENTOS DE ELETR ONICA
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¸ca˜o 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¸ca˜o 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
ˆ CAP ´ITULO 3. ELETR ONICA DIGITAL
30
3.1
Introdu¸ ca ˜o
Dizemos que um circuito ´e digital quando suas entradas e sa´ı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´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¸ca˜o codificada em bin´ario – chamamos cada informa¸ca˜o bin´ aria de bit (d´ıgito bin´ario ou b inary dig it , 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¸ca˜o) 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¸co˜es b´asicas como soma, subtra¸c˜ao, multiplica¸ca˜o e divis˜ao, na aritm´etica bin´ aria temos opera¸co˜es que podemos fazer com nossos bits. Para simplificar, 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¸ca˜o 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¸ca˜o 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 exemplifica a cria¸ca˜o 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 finito de entradas podemos aplicar as opera¸co˜es l´ogicas em todos os poss´ıveis valores dessa entrada e obter todos os poss´ıveis resultados da opera¸ca˜o/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
B
A AND B
A
B
A OR B
0
0
0
0
0
0
A
0
1
0
0
1
1
1
0
0
1
0
1
1
1
1
1
1
1
(a) Opera¸ca ˜o AND
A
B
A XOR B
NOT A
0
0
0
0
1
0
1
1
1
0
1
0
1
1
1
0
(c) Opera¸ca ˜o NOT
(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¸co˜es 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¸ c˜ oes
As opera¸co˜es 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¸co˜es l´ogicas Al´em disso, podem ser escritas por extenso:
3.2.3
Opera¸ca ˜o
Representa¸ ca ˜o
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
Fun¸ co ˜es l´ ogicas compostas
Assim como na Matem´atica, podemos fazer composi¸c˜oes das fun¸co˜es 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¸co˜es NOT, AND e OR: A ⊕ B = A · B + A · B
ou
Figura 3.4: Diagrama da fun¸ca˜o composta XOR
32
ˆ CAP ´ITULO 3. ELETR ONICA DIGITAL
A partir de fun¸c˜oes l´ogicas compostas e t´ecnicas como realimenta¸c˜ao conseguimos criar dispositivos mais complexos como latches , flip-flops , 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 flip-flops 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
CAP ´ITULO 4. FAZENDO BARULHO COM O ARDUINO
34
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 filtros 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¸co˜es 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 notas 1 e
• Saber
utilizar a fun¸ca˜o tone. A fun¸ ca˜o tone recebe trˆes parˆametros, respectivamente: pino (precisa ser um pino que tenha suporte a PWM), frequˆ encia da nota e dura¸ca˜o 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