2
Sum´rio
   a

1 Conceitos b´sicos
              a                                                                                                                                                                                7
  1.1 O Projeto Arduino . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    8
  1.2 Instala¸˜o do software . . . . .
             ca                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
  1.3 Primeiro projeto . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10
      1.3.1 C´lculos de resistˆncia .
                a              e          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
      1.3.2 Alimenta¸˜o do circuito
                       ca                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
  1.4 Bibliotecas e shields . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
  1.5 Integra¸˜o com o PC . . . . . .
             ca                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
  1.6 Portas anal´gicas e digitais . .
                  o                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
      1.6.1 Portas digitais . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
      1.6.2 Portas anal´gicas . . . .
                          o               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18

2 Fundamentos de Eletrˆnicao                                                                                                                                                                  21
  2.1 Resistores e Lei de Ohm . . . . . . .           . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
      2.1.1 Resistores em s´rie . . . . . .
                              e                       . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
      2.1.2 Resistores em paralelo . . . .            . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
      2.1.3 C´digo de cores . . . . . . . .
               o                                      . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
      2.1.4 Divisor de tens˜o . . . . . . .
                             a                        . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
  2.2 Capacitores e indutores . . . . . . .           . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
      2.2.1 Capacitores . . . . . . . . . .           . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   24
      2.2.2 Indutores . . . . . . . . . . .           . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   24
  2.3 Diodos . . . . . . . . . . . . . . . . .        . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
  2.4 Transistores . . . . . . . . . . . . . .        . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
      2.4.1 Utiliza¸˜o de transistores com
                    ca                                rel´s
                                                         e        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   26
      2.4.2 Ponte-H . . . . . . . . . . . .           . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27

3 Eletrˆnica Digital
       o                                                                                                                                                                                      29
  3.1 Introdu¸˜o . . . . . . . . . . . . . .
              ca                                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30
  3.2 Portas l´gicas . . . . . . . . . . . . .
              o                                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30
       3.2.1 Tabela-verdade . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30
       3.2.2 Representa¸˜o das opera¸˜es
                         ca             co            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31
       3.2.3 Fun¸˜es l´gicas compostas . .
                 co o                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31

4 Fazendo barulho com o Arduino                                                                                                                                                               33

5 Armazenando na EEPROM                                                                                                                                                                       35




                                                                          3
4      ´
    SUMARIO
5
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/
Cap´
   ıtulo 1

Conceitos b´sicos
           a




                    7
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/
¸˜
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                                                                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
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                                                                           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/
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                                                                  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/
´
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                                                                 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);
      }
´
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                                                                 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.
´
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                                                                    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
Cap´
   ıtulo 2

Fundamentos de Eletrˆnica
                    o




                 21
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
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                                                      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
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                                                      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
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                                                    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.
Cap´
   ıtulo 3

Eletrˆnica Digital
     o




                     29
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
´
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                                                                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
Cap´
   ıtulo 4

Fazendo barulho com o Arduino




                 33
34                                                          CAP´
                                                               ITULO 4. FAZENDO BARULHO COM O ARDUINO

    Para quem gosta de fazer m´sica, o Arduino possui uma fun¸˜o pronta para criar uma onda quadrada na
                                  u                               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
Cap´
   ıtulo 5

Armazenando na EEPROM




              35
36                                                           CAP´
                                                                ITULO 5. ARMAZENANDO NA EEPROM

    EEPROM (Electrically Erasable Programmable Read-Only Memory, do Inglˆs) ´ um tipo de mem´ria n˜o
                                                                                 e e                   o     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

Ap apostila arduino-rev4

  • 2.
  • 3.
    Sum´rio a 1 Conceitos b´sicos a 7 1.1 O Projeto Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2 Instala¸˜o do software . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3 Primeiro projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.3.1 C´lculos de resistˆncia . a e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.3.2 Alimenta¸˜o do circuito ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.4 Bibliotecas e shields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.5 Integra¸˜o com o PC . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.6 Portas anal´gicas e digitais . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.6.1 Portas digitais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.6.2 Portas anal´gicas . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2 Fundamentos de Eletrˆnicao 21 2.1 Resistores e Lei de Ohm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.1.1 Resistores em s´rie . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.1.2 Resistores em paralelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.1.3 C´digo de cores . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.1.4 Divisor de tens˜o . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.2 Capacitores e indutores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.2.1 Capacitores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.2.2 Indutores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.3 Diodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.4 Transistores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.4.1 Utiliza¸˜o de transistores com ca rel´s e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.4.2 Ponte-H . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3 Eletrˆnica Digital o 29 3.1 Introdu¸˜o . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.2 Portas l´gicas . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.2.1 Tabela-verdade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.2.2 Representa¸˜o das opera¸˜es ca co . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.2.3 Fun¸˜es l´gicas compostas . . co o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4 Fazendo barulho com o Arduino 33 5 Armazenando na EEPROM 35 3
  • 4.
    4 ´ SUMARIO
  • 5.
  • 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/
  • 7.
    Cap´ ıtulo 1 Conceitos b´sicos a 7
  • 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 DOSOFTWARE 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 ESHIELDS 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 ANALOGICASE 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 ANALOGICASE 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 ANALOGICASE 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
  • 21.
    Cap´ ıtulo 2 Fundamentos de Eletrˆnica o 21
  • 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 EINDUTORES 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.
  • 29.
    Cap´ ıtulo 3 Eletrˆnica Digital o 29
  • 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
  • 33.
    Cap´ ıtulo 4 Fazendo barulho com o Arduino 33
  • 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
  • 35.
    Cap´ ıtulo 5 Armazenando na EEPROM 35
  • 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