SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
Universidade Federal Fluminense
                         ´
           Centro Tecnologico
          Escola de Engenharia
                                    c˜
Curso de Engenharia de Telecomunica¸ oes
                       c˜
    Programa de Educa¸ ao Tutorial




             Apostila Arduino




   Autores: Erika Guimaraes Pereira da Fonseca
                          ˜
              Mathyan Motta Beppu
   Orientador: Prof. Alexandre Santos de la Vega
                    Niteroi-RJ
                         ´
                 Dezembro / 2010
Sum´rio
   a

1 Introdu¸˜o ao Arduino
         ca                                                                                                                                                      2

2 Caracter´
          ısticas do Duemilanove                                                                                                                                4
  2.1 Caracter´
              ısticas . . . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   4
  2.2 Alimenta¸˜o . . . . . . . . . . . . .
               ca                                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   4
  2.3 Mem´ria . . . . . . . . . . . . . . .
           o                                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   5
  2.4 Entrada e Sa´ . . . . . . . . . . .
                   ıda                                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   5
  2.5 Comunica¸˜o . . . . . . . . . . . .
                ca                                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6
  2.6 Programa¸ao . . . . . . . . . . . .
                c˜                                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6
  2.7 Reset Autom´tico . . . . . . . . . .
                   a                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6
  2.8 Prote¸˜o contra sobrecorrente USB
           ca                                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   7

3 Referˆncias da linguagem usada na programa¸˜o
       e                                                 ca                                 do Arduino                                                           8
  3.1 Linguaguem de referˆncia . . . . . . . . . . . . .
                            e                                                               . . . . . . . . . . . . . . . . .                                    8
  3.2 Fun¸oes . . . . . . . . . . . . . . . . . . . . . . .
          c˜                                                                                . . . . . . . . . . . . . . . . .                                    9
  3.3 Bibliotecas . . . . . . . . . . . . . . . . . . . . . .                               . . . . . . . . . . . . . . . . .                                   10

4 Instala¸˜o da IDE e suas bibliotecas
         ca                                                                                12
  4.1 Arduino para Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
  4.2 Arduino para GNU/Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

5 Desenvolvimento       de    Projetos                                                                                                                          14
  5.1 Exemplo 1 . .     . .   . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14
  5.2 Exemplo 2 . .     . .   . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
  5.3 Exemplo 3 . .     . .   . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18
  5.4 Exemplo 4 . .     . .   . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20

6 Referˆncias Bibliogr´ficas
       e              a                                                                                                                                         22




                                                                1
Cap´
   ıtulo 1

Introdu¸˜o ao Arduino
       ca

O Arduino faz parte do conceito de hardware e software livre e est´ aberto para uso e contribui-
                                                                       a
¸ao de toda sociedade. O conceito Arduino surgiu na It´lia em 2005 com o objetivo de criar um
c˜                                                         a
dispositivo para controlar projetos/prot´tipos constru´
                                          o               ıdos de uma forma menos dispendiosa do
que outros sistemas dispon´ ıveis no mercado.
     Arduino ´ uma plataforma de computa¸˜o f´
              e                               ca ısica (s˜o sistemas digitais ligados a sensores e
                                                           a
atuadores, que permitem construir sistemas que percebam a realidade e respondem com a¸oes     c˜
f´
 ısicas), baseada em uma simples placa de Entrada/Sa´ microcontrolada e desenvolvida sobre
                                                          ıda
uma biblioteca que simplifica a escrita da programa¸ao em C/C++. O Arduino pode ser usado
                                                       c˜
para desenvolver artefatos interativos stand-alone ou conectados ao computador atrav´s de   e
Adobe Flash, Processing, Max/MSP, Pure Data ou SuperCollider.
     Um microcontrolador (tamb´m denominado MCU) ´ um computador em um chip, que con-
                                  e                         e
t´m processador, mem´ria e perif´ricos de entrada/sa´
 e                       o          e                           ´
                                                         ıda. E um microprocessador que pode ser
programado para fun¸oes espec´
                        c˜       ıficas, em contraste com outros microprocessadores de prop´sito
                                                                                             o
geral (como os utilizados nos PCs). Eles s˜o embarcados no interior de algum outro dispositivo,
                                            a
no nosso caso o Arduino, para que possam controlar suas fun¸˜es ou a¸oes.
                                                                    co       c˜
     ´
     E um kit de desenvolvimento capaz de interpretar vari´veis no ambiente e transform´-las em
                                                              a                           a
sinal el´trico correspondente, atrav´s de sensores ligados aos seus terminais de entrada, e atuar
         e                            e
no controle ou acionamento de algum outro elemento eletro-eletrˆnico conectado ao terminal
                                                                        o
de sa´ ıda. Ou seja, ´ uma ferramenta de controle de entrada e sa´ de dados, que pode ser
                      e                                                  ıda
acionada por um sensor (por exemplo um resistor dependente da luz - LDR) e que, logo ap´s       o
passar por uma etapa de processamento, o microcontrolador, poder´ acionar um atuador (um
                                                                          a
motor por exemplo). Como podem perceber, ´ como um computador, que tˆm como sensores
                                                 e                              e
de entrada como o mouse e o teclado, e de sa´     ıda, impressoras e caixas de som, por exemplo,
s´ que ele faz interface com circuitos el´tricos, podendo receber ou enviar informa¸oes/tens˜es
 o                                       e                                           c˜        o
neles.
     Para um melhor entendimento, abaixo na figura 1 ´ poss´ identificar os elementos princi-
                                                          e       ıvel
pais do circuito atrav´s de diagrama em blocos.
                        e




                                Figura 1.1: Diagrama de Blocos




                                                2
O Arduino ´ baseado em um microcontrolador (Atmega), e dessa forma ´ logicamente pro-
                e                                                            e
gram´vel, ou seja, ´ poss´ a cria¸ao de programas, utilizando uma linguagem pr´pria baseada
      a             e    ıvel     c˜                                               o
em C/C++, que, quando implementadas fazem com que o hardware execute certas a¸oes. Dessa
                                                                                     c˜
forma, estamos configurando a etapa de processamento.
    O grande diferencial desta ferramenta ´ que ela ´ desenvolvida e aperfei¸oada por uma
                                           e          e                          c
comunidade que divulga os seus projetos e seus c´digos de aplica¸ao, pois a concep¸ao dela ´
                                                 o                c˜                  c˜        e
open-source, ou seja, qualquer pessoa com conhecimento de programa¸ao pode modific´-lo e
                                                                        c˜                a
ampli´-lo de acordo com a necessidade, visando sempre a melhoria dos produtos que possam
      a
ser criados aplicando o Arduino.
    Ele foi projetado com a finalidade de ser de f´cil entendimento, programa¸ao e aplica-
                                                    a                              c˜
¸ao, al´m de ser multiplataforma, ou seja, podemos configura-lo em ambientes Windows,
c˜      e
GNU/Linux e Mac OS. Assim sendo, pode ser perfeitamente utilizado como ferramenta educa-
cional sem se preocupar que o usu´rio tenha um conhecimento espec´
                                  a                                 ıfico de eletrˆnica, mas pelo
                                                                                 o
fato de ter o seu esquema e software de programa¸ao open-source, acabou chamando a aten¸ao
                                                 c˜                                          c˜
dos t´cnicos de eletrˆnica, que come¸aram a aperfei¸o´-la e a criar aplica¸oes mais complexas.
     e                o              c              c a                   c˜




                                               3
Cap´
   ıtulo 2

Caracter´
        ısticas do Duemilanove

O Arduino Duemilanove (2009 em italiano) ´ uma placa baseada no microcontrolador AT-
                                            e
mega168 ou ATmega328. Tem 14 pinos de entrada ou sa´ digital (dos quais 6 podem ser
                                                         ıda
utilizados como sa´ıdas PWM), 6 entradas anal´gicas, um oscilador de cristal 16 MHz, contro-
                                             o
lador USB, uma tomada de alimenta¸ao, um conector ICSP, e um bot˜o de reset. Para sua
                                    c˜                                 a
utiliza¸ao basta conect´-lo a um computador com um cabo USB ou lig´-lo com um adaptador
       c˜               a                                            a
AC para DC ou bateria.


2.1     Caracter´
                ısticas
           Microcontrolador                    ATmega328 ou ATmega168
          Tens˜o operacional
               a                                             5V
 Tens˜o de alimenta¸ao (recomendada)
     a              c˜                                     7-12 V
    Tens˜o de alimenta¸ao (limites)
        a              c˜                                  6-20 V
           Pinos I/O digitais            14 (dos quais 6 podem ser Sa´
                                                                     ıdas PWM)
      Pinos de entrada anal´gica
                            o                                 6
    Corrente cont´ınua por pino I/O                        40 mA
  Corrente cont´
               ınua para o pino 3.3 V                      50 mA
             Mem´ria flash
                  o                   32 KB (2KB usados para o bootloader) / 16KB
                 SRAM                                       2 KB
              EEPROM                                        1 KB
          Frequˆncia de clock
                e                                         16 MHz
               Tabela com as caracter´
                                     ısticas b´sicas do arduino Duemilanove.
                                              a


2.2     Alimenta¸˜o
                ca
O Arduino Duemilanove pode ser alimentado pela conex˜o USB ou por qualquer fonte de
                                                          a
alimenta¸˜o externa. A fonte de alimenta¸˜o ´ selecionada automaticamente.
          ca                             ca e
    A alimenta¸˜o externa (n˜o-USB) pode ser tanto de uma fonte ou de uma bateria. A fonte
                ca           a
pode ser conectada com um plug de 2,1 mm (centro positivo) no conector de alimenta¸ao.   c˜
Cabos vindos de uma bateria podem ser inseridos nos pinos GND (terra) e Vin (entrada de
tens˜o) do conector de alimenta¸˜o.
     a                         ca
    A placa pode operar com uma alimenta¸˜o externa de 6 a 20 V. Entretanto, se a alimenta¸ao
                                          ca                                              c˜
for inferior a 7 V o pino 5 V pode fornecer menos de 5 V e a placa pode ficar inst´vel. Se a
                                                                                    a
alimenta¸˜o for superior a 12 V o regulador de tens˜o pode superaquecer e avariar a placa. A
          ca                                       a
alimenta¸˜o recomendada ´ de 7 a 12 V.
          ca               e



                                             4
Os pinos de alimenta¸ao s˜o:
                       c˜ a
   • Vin : entrada de alimenta¸ao para a placa Arduino quando uma fonte externa for utilizada.
                              c˜
     Vocˆ pode fornecer alimenta¸ao por este pino ou, se usar o conector de alimenta¸ao,
          e                        c˜                                                     c˜
     acessar a alimenta¸ao por este pino;
                         c˜
   • 5 V: A fonte de alimenta¸˜o utilizada para o microcontrolador e para outros componentes
                             ca
     da placa. Pode ser proveniente do pino Vin atrav´s de um regulador on-board ou ser
                                                        e
     fornecida pelo USB ou outra fonte de 5 V;
   • 3 V3: alimenta¸ao de 3,3 V fornecida pelo circuito integrado FTDI (controlador USB). A
                   c˜
     corrente m´xima ´ de 50 mA;
               a      e
   • GND (ground): pino terra.


2.3     Mem´ria
           o
O ATmega328 tem 32 KB de mem´ria flash (onde ´ armazenado o software), al´m de 2 KB
                                o               e                        e
de SRAM (onde ficam as vari´veis) e 1 KB of EEPROM (esta ultima pode ser lida e escrita
                             a                             ´
atrav´s da biblioteca EEPROM e guarda os dados permanentemente, mesmo que desliguemos
     e
a placa). A mem´ria SRAM ´ apagada toda vez que desligamos o circuito.
                 o         e


2.4     Entrada e Sa´
                    ıda
Cada um dos 14 pinos digitais do Duemilanove pode ser usado como entrada ou sa´ usando
                                                                                ıda
as fun¸˜es de pinMode(), digitalWrite(), e digitalRead(). Eles operam com 5 V.
      co
Cada pino pode fornecer ou receber um m´ximo de 40 mA e tem um resistor pull-up interno
                                        a
(desconectado por padr˜o) de 20-50 kΩ. Al´m disso, alguns pinos tˆm fun¸oes especializadas:
                      a                  e                       e     c˜
   • Serial: 0 (RX) e 1 (TX). Usados para receber (RX) e transmitir (TX) dados seriais TTL.
     Estes pinos s˜o conectados aos pinos correspondentes do chip serial FTDI USB-to-TTL.
                  a
   • PWM: 3, 5, 6, 9, 10, e 11. Fornecem uma sa´ anal´gica PWM de 8-bit com a fun¸ao
                                               ıda   o                           c˜
     analogWrite().
   • SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estes pinos suportam comunica¸˜o SPI,
                                                                                ca
     que embora compat´ com o hardware, n˜o est´ inclu´ na linguagem do Arduino.
                        ıvel                  a    a     ıda
   • LED: 13. H´ um LED j´ montado e conectado ao pino digital 13.
               a         a
   O Duemilanove tem 6 entradas anal´gicas, cada uma delas est´ ligada a um conversor
                                           o                           a
anal´gico-digital de 10 bits, ou seja, transformam a leitura anal´gica em um valor dentre 1024
    o                                                            o
possibilidades (exemplo: de 0 a 1023). Por padr˜o, elas medem de 0 a 5 V, embora seja
                                                    a
poss´ mudar o limite superior usando o pino AREF e um pouco de c´digo de baixo n´
    ıvel                                                                  o               ıvel.
Adicionalmente alguns pinos tˆm funcionalidades especializadas:
                                e
   • I2C: 4 (SDA) e 5 (SCL). Suportam comunica¸ao I2C (TWI) usando a biblioteca Wire.
                                              c˜
   • AREF. referˆncia de tens˜o para entradas anal´gicas. Usados com analogReference().
                e            a                    o
   • Reset. Envie o valor LOW para reiniciar o microcontrolador. Tipicamente utilizados para
     adicionar um bot˜o de reset aos shields( placas que podem ser plugadas ao Arduino para
                      a
     extender suas capacidades) que bloqueiam o que h´ na placa.
                                                       a



                                              5
2.5     Comunica¸˜o
                ca
Com o Arduino Duemilanove a comunica¸ao com um computador, com outro Arduino ou com
                                          c˜
outros microcontroladores ´ muito simplificada. O ATmega328 permite comunica¸ao serial no
                            e                                                     c˜
padr˜o UART TTL (5 V), que est´ dispon´ nos pinos digitais 0 (RX) e 1 (TX). Um chip
      a                             a        ıvel
FTDI FT232RL na placa encaminha esta comunica¸˜o serial atrav´s da USB e os drivers FTDI
                                                    ca            e
(inclu´ no software do Arduino) fornecem uma porta virtual para o software no computador.
       ıdo
O software Arduino inclui um monitor serial que permite que dados simples de texto sejam
enviados e recebidos a placa Arduino. Os LEDs RX e TX da placa piscam quando os dados
                       `
est˜o sendo transferidos ao computador pelo chip FTDI e h´ conex˜o USB (mas n˜o quando
    a                                                        a       a              a
h´ comunica¸ao serial pelos pinos 0 e 1).
  a           c˜
     A biblioteca SoftwareSerial permite comunica¸ao serial por quaisquer dos pinos digitais do
                                                  c˜
Duemilanove.
     O ATmega328 tamb´m oferece suporte aos padr˜es de comunica¸˜o I2C (TWI) e SPI. O
                         e                            o               ca
software do Arduino inclui uma biblioteca Wire para simplificar o uso do barramento I2C. Para
usar a comunica¸ao SPI veja o datasheet (folha de informa¸oes) do ATmega328.
                  c˜                                       c˜


2.6     Programa¸˜o
                ca
O ambiente de programa¸˜o mais indicado ´ o do software Arduino, que pode ser baixado no
                         ca               e
seguinte site: http://www.arduino.cc/en/Main/Software. Mais detalhes sobre a programa¸ao
                                                                                     c˜
no cap´
      ıtulo Referˆncias da linguagem usada na programa¸ao do Arduino.
                  e                                   c˜


2.7     Reset Autom´tico
                   a
Algumas vers˜es anteriores do Arduino requerem um reset f´
              o                                              ısico (pressionando o bot˜o de reset
                                                                                      a
na placa) antes de carregar um sketch(o programa a ser compilado). O Arduino Duemilanove
´ projetado de modo a permitir que isto seja feito atrav´s do software que esteja rodando no
e                                                          e
computador conectado. Uma das linhas de controle de hardware (DTR) do FT232RL est´              a
conectada ao reset do ATmega328 via um capacitor de 100 microFaraday . Quando esta linha ´      e
colocada em n´ l´gico baixo, o sinal cai por tempo suficiente para reiniciar o chip. O software
               ıvel o
Arduino usa esta caracter´ ıstica para permitir carregar o programa simplesmente pressionando
o bot˜o “upload ” no ambiente Arduino. Isto significa que o bootloader pode ter um timeout
      a
mais curto, j´ que a ativa¸˜o do DTR (sinal baixo) pode ser bem coordenada com o in´ do
             a             ca                                                             ıcio
upload.
    Estas configura¸˜es tˆm outras implica¸oes. Quando o Duemilanove est´ conectado a um
                    co   e                  c˜                                 a
computador rodando Mac OS X ou GNU/Linux, ele reinicia toda vez que a conex˜o ´ feita por
                                                                                    a e
software (via USB). No pr´ximo meio segundo aproximadamente, o bootloader estar´ rodando
                            o                                                         a
no Duemilanove. Considerando que ´ programado para ignorar qualquer coisa a n˜o ser um
                                       e                                              a
upload de um novo c´digo, ele interceptar´ os primeiros bytes de dados sendo enviados para a
                      o                    a
placa depois que a conex˜o ´ aberta. Se um sketch rodando na placa recebe configura¸oes de
                         a e                                                             c˜
uma vez ou outros dados ao iniciar, assegure-se que o software que esteja comunicando espere
um segundo depois de aberta a conex˜o antes de enviar estes dados.
                                       a
    O Duemilanove tem uma trilha que pode ser cortada para desabilitar o auto-reset e pode
ser ressoldada para reativ´-lo, ´ chamada de “RESET-EN”, vocˆ pode tamb´m desabilitar o
                            a     e                                 e            e
auto-reset conectando um resistor de 110 Ω dos +5 V at´ o sinal de reset.
                                                           e




                                               6
2.8     Prote¸˜o contra sobrecorrente USB
             ca
O Arduino Duemilanove tem um polifus´ que protege a porta USB do seu computador contra
                                       ıvel
curtocircuito e sobrecorrente. Apesar da maioria dos computadores possu´
                                                                       ırem prote¸˜o interna
                                                                                 ca
pr´pria, o fus´ proporciona uma prote¸ao extra. Se mais de 500 mA forem aplicados na porta
  o           ıvel                      c˜
USB, o fus´ ir´ automaticamente interromper a conex˜o at´ que o curto ou a sobrecarga seja
           ıvel a                                      a   e
removida.




                                             7
Cap´
   ıtulo 3

Referˆncias da linguagem usada na
     e
programa¸˜o do Arduino
         ca

Nesse cap´
         ıtulo iremos fazer uma pequena introdu¸˜o sobre como s˜o estruturados os programas
                                               ca               a
para o Arduino, conhecendo a linguagem usada como referˆncia e suas principais fun¸oes. E
                                                          e                          c˜
por fim veremos as funcionalidades extras que o uso de bibliotecas nos proporciona.


3.1     Linguaguem de referˆncia
                           e
Os programas para o Arduino s˜o implementados tendo como referˆncia a linguagem C++.
                                  a                                  e
Preservando sua sintaxe cl´ssica na declara¸ao de vari´veis, nos operadores, nos ponteiros, nos
                             a               c˜       a
vetores, nas estruturas e em muitas outras caracter´ısticas da linguagem. Com isso temos as
referˆncias da linguagem, essas podem ser divididas em trˆs partes principais: As estruturas,
     e                                                     e
os valores (vari´veis e constantes) e as fun¸˜es.
                a                           co
    As estruturas de referˆncias s˜o:
                           e      a

   • Estruturas de controle (if, else, break, ...)

   • Sintaxe b´sica (define, include, ; , ...)
              a

   • Operadores aritm´ticos e de compara¸˜o (+, -, =, ==, !=, ...)
                     e                  ca

   • Operadores booleanos (, ||, !)

   • Acesso a ponteiros (*, )

   • Operadores compostos (++, –, +=, ...)

   • Operadores de bits (|, , , ...)


   Os valores de referˆncias s˜o:
                      e       a

   • Tipos de dados(byte, array, int , char , ...)

   • Convers˜es(char(), byte(), int(), ...)
            o

   • Vari´vel de escopo e de qualifica¸˜o (variable scope, static, volatile, ...)
         a                           ca

   • Utilit´rios (sizeof(), diz o tamanho da vari´vel em bytes)
           a                                     a




                                                 8
´
E bom citar que o software que vem no Arduino j´ provˆ v´rias fun¸˜es e constantes para
                                               a     e a         co
facilitar a programa¸ao.
                    c˜

   • setup()

   • loop()

   • Constantes (HIGH | LOW , INPUT | OUTPUT , ...)

   • Bibliotecas (Serial, Servo, Tone, etc.)


3.2     Fun¸˜es
           co
As fun¸oes s˜o referˆncias essenciais para o desenvolvimento de um projeto usando o Arduino,
       c˜    a       e
principalmente para os iniciantes no assunto. Essas fun¸oes j´ implementadas e dispon´
                                                        c˜ a                         ıveis em
bibliotecas direcionam e exemplificam as funcionalidades b´sicas do microcontrolador. Temos
                                                            a
como fun¸oes b´sicas e de referˆncias as seguintes fun¸oes:
          c˜    a               e                     c˜

   • Digital I/O
      pinMode() digitalWrite() digitalRead()

   • Anal´gico I/O
         o
      analogReference() analogRead() analogWrite() - PWM

   • Avan¸ado I/O
         c
      tone() noTone() shiftOut() pulseIn()

   • Tempo
      millis() micros() delay() delayMicroseconds()

   • Matem´tica
          a
      min() max() abs() constrain() map() pow() ***s´ do C/C++ sqrt() ***s´ do C/C++
                                                    o                     o

   • Trigonom´trica
             e
      sin() ***s´ do C/C++ cos() ***s´ do C/C++ tan() ***s´ do C/C++
                o                    o                    o

   • N´meros aleat´rios
      u           o
      randomSeed() random()

   • Bits e Bytes
      lowByte() highByte() bitRead() bitWrite() bitSet() bitClear() bit()

   • Interrup¸oes externas
             c˜
      attachInterrupt() detachInterrupt()

   • Interrup¸oes
             c˜
      interrupts() noInterrupts()

   • Comunica¸ao Serial
             c˜




                                               9
3.3     Bibliotecas
O uso de bibliotecas nos proporciona um horizonte de programa¸ao mais amplo e diverso quando
                                                                  c˜
comparado a utiliza¸˜o apenas de estruturas, valores e fun¸˜es. Isso ´ percept´
                      ca                                         co          e        ıvel quando
analisamos os assuntos que s˜o abordados por cada biblioteca em espec´
                            a                                             ıfico. Lembrando sempre
que, para se fazer uso de uma biblioteca esta j´ deve estar instalada e dispon´ na sua m´quina.
                                               a                               ıvel        a
Temos as seguintes bibliotecas de referˆncia:
                                        e

   • EEPROM - leitura e escrita de “armazenamento” permanente.

   • Ethernet - para se conectar a uma rede Ethernet usando o Arduino Ethernet Shield.

   • Firmata - para se comunicar com os aplicativos no computador usando o protocolo Fir-
     mata.

   • LiquidCrystal - para controlar telas de cristal l´
                                                      ıquido (LCDs).

   • Servo - para controlar servo motores.

   • SPI - para se comunicar com dispositivos que utilizam bararmento Serial Peripheral In-
     terface (SPI).

   • SoftwareSerial - Para a comunica¸ao serial em qualquer um dos pinos digitais.
                                     c˜

   • Stepper - para controlar motores de passo.

   • Wire - Dois Wire Interface (TWI/I2C) para enviar e receber dados atrav´s de uma rede
                                                                           e
     de dispositivos ou sensores.

   Temos como referˆncia tamb´m, o uso de bibliotecas mais espec´
                    e          e                                ıficas. O que ´ de extrema
                                                                             e
importˆncia quando se faz o uso do arduino com um enfoque em uma determinada area. Como
      a                                                                        ´
por exemplo:

                            Comunica¸˜o (redes e protocolos)
                                    ca

   • Messenger - Para o processamento de mensagens de texto a partir do computador.

   • NewSoftSerial - Uma vers˜o melhorada da biblioteca SoftwareSerial.
                             a

   • OneWire - Dispositivos de controle que usam o protocolo One Wire.

   • PS2Keyboard - Ler caracteres de um PS2 teclado.

   • Simple Message System - Enviar mensagens entre Arduino e o computador.

   • SSerial2Mobile - Enviar mensagens de texto ou e-mails usando um telefone celular.

   • Webduino - Biblioteca que cria um servidor Web (para uso com o Arduino Ethernet
     Shield).

   • X10 - Envio de sinais X10 nas linhas de energia AC.

   • XBee - Para se comunicar via protocolo XBee.

   • SerialControl - Controle remoto atrav´s de uma conex˜o serial.
                                          e              a



                                               10
Sensoriamento

• Capacitive Sensing - Transformar dois ou mais pinos em sensores capacitivos.

• Debounce - Leitura de ruidos na entrada digital.

                           ca         ¨e          ´
                       Gera¸˜o de Frequˆncia e de Audio

• Tone - Gerar ondas quadradas de freq¨ˆncia de ´udio em qualquer pino do microcontro-
                                      ue        a
  lador.

                                   Temporiza¸˜o
                                            ca

• DateTime - Uma biblioteca para se manter informado da data e hora atuais do software.

• Metro - Ajuda ao programador a acionar o tempo em intervalos regulares.

• MsTimer2 - Utiliza o temporizador de 2 de interrup¸ao para desencadear uma a¸˜o a
                                                    c˜                        ca
  cada N milissegundos.

                                     Utilidades

• TextString (String) - Manipular strings

• PString - uma classe leve para imprimir em buffers.

• Streaming - Um m´todo para simplificar as declara¸˜es de impress˜o.
                  e                               co             a




                                            11
Cap´
   ıtulo 4

Instala¸˜o da IDE e suas bibliotecas
       ca

Neste cap´
         ıtulo iremos explicar como instalar a IDE e conectar a placa Arduino ao computador
para sua programa¸ao. Junto com a placa arduino vocˆ deve ter um cabo USB tipo AB para
                   c˜                                  e
poder conect´-lo ao computador.
             a


4.1     Arduino para Windows
Primeiramente deve-se baixar o ambiente para o Arduino que pode ser encontrado no seguinte
site: //www.arduino.cc/en/Main/Software , em download clique em Windows e baixe o arquivo
arduino-0018.zip (ou mais novo), ser´ necess´rio um programa capaz de descompactar o arquivo
                                    a       a
(exemplos: WinZip, WinRAR, etc.). Certifique-se de preservar a estrutura da pasta. Dˆ        e
um duplo clique na pasta para abri-la, haver´ uns arquivos e sub-pastas, clique no aplicativo
                                              a
arduino, este ser´ seu ambiente de desenvolvimento.
                 a
    Conecte a placa ao computador atrav´s do cabo USB, o LED verde na placa nomeado por
                                          e
PWR deve ascender, ele indica que a placa est´ ligada. O arduino seleciona automaticamente
                                                a
a fonte de alimenta¸ao adequada.
                    c˜
    Quando se conecta a placa, o Windows dever´ iniciar o processo de instala¸ao do driver.
                                                  a                            c˜
No windows vista, o driver deve ser baixado e instalado automaticamente. No Windows XP o
assistente Adicionar Novo Hardware ser´ aberto:
                                        a

   • Quando o Windows perguntar se pode se conectar ao Windows Update para proucurar o
     software selecione n˜o, clique em Avan¸ar.
                         a                 c

   • Selecione personalizar, logo ap´s selecione instalar e clique em Avan¸ar.
                                    o                                     c

   • Certifique-se de poucurar o melhor driver, desmarque a pesquisa de m´       ıdia remov´ ıvel;
     selecione Incluir este local na pesquisa e proucure os drivers /FTDI USB Drivers diret´rios
                                                                                           o
     de distribui¸ao do Arduino. Clique em Avan¸ar.
                 c˜                                  c

   • O assistente ir´ proucurar o driver e em seguida, dizer que um hardware foi encontrado.
                    a
     Clique em Concluir.

   • O assistente de novo hardware abrir´ novamente, fa¸a todos os passos da mesma maneira,
                                        a              c
     desta vez, uma porta serial USB ser´ encontrada.
                                        a




                                               12
4.2     Arduino para GNU/Linux
Para a instala¸ao da IDE e suas bibliotecas no sistema operacional Linux, podemos assim como
               c˜
feito para o Windows baixar o arquivo zipado atrav´s do site http://www.arduino.cc/en/Main/Software.
                                                   e
Apenas vale resaltar que neste sistema operacional temos um tratamento diferente com rela¸˜o
                                                                                          ca
a manipula¸ao de pastas e diret´rios, agora o arquivo baixado ´ .tar.gz.
            c˜                  o                                e
    Al´m desta forma de instala¸ao, temos uma outra mais objetiva para executar o mesmo
       e                         c˜
procedimento, esta ultima usando apenas o terminal. Veremos um passo a passo deste proce-
                    ´
dimento usando o Linux Ubuntu.
    Links usados:

   • http://www.arduino.cc/playground/Linux/Ubuntu

   • https://launchpad.net/ arduino-ubuntu-team/+archive/ppa

   • https://launchpad.net/+help/soyuz/ppa-sources-list.html

                        Passo a Passo da instala¸˜o no Ubuntu
                                                ca

   • O primeiro passo ´ com o terminal aberto digitar o comando: sudo add-apt-repository
                      e
     ppa:arduino-ubuntu-team/ppa

   • Com o t´rmino do primeiro passo executamos o segundo comando digitando: sudo apti-
            e
     tude update

   • E por fim executamos o ultimo comando digitando: sudo aptitude install arduino
                           ´

   • Ap´s estes trˆs passos a IDE est´ instalada e pode ser acessada pelo menu aplicati-
        o         e                  a
     vos/desenvolvimento/arduino

   Outras distribui¸oes de Linux pesquisar no site http://www.arduino.cc/en/Main/Software
                   c˜
e para Mac OS pesquisar em http://www.arduino.cc/en/Guide/MacOSX.




                                             13
Cap´
   ıtulo 5

Desenvolvimento de Projetos

Neste cap´
         ıtulo iremos ver alguns exemplos de aplica¸oes simples com o Arduino, agora com
                                                   c˜
uma pequena base de c para arduino podemos come¸ar a fazer e explicar exemplos mesmo para
                                                 c
quem n˜o possua uma grande infraestrutura possa realiz´-lo.
       a                                              a


5.1     Exemplo 1
Come¸aremos com o exemplo Blink, que j´ vem no aplicativo. Para encontrar o exemplo clique
     c                                a
em File → Examples → Digital → Blink.

   O programa tem como objetivo acender e apagar o LED de um em um segundo. Para
compilar este exemplo n˜o ´ necess´rio de nenhuma outra infraestrutura que n˜o o pr´prio
                       a e         a                                        a      o
Arduino.
Primeiramente, vamos criar uma vari´vel chamada ledPin que armazenar´ o n´mero da porta
                                   a                                 a    u
onde o LED est´ conectado (vari´vel do tipo inteiro):
               a               a
int ledPin =    13;
   Assim quando nos referirmos a vari´vel ledPin estaremos nos referindo a sa´ 13.
                                `    a                                      ` ıda
O seguinte passo ´ classificar o ledpin como pino de Sa´
                 e                                    ıda, isto ´ feito da seguinte maneira:
                                                                e


void setup() {
  pinMode(ledPin, OUTPUT);
}
    A fun¸˜o pinMode() tem como primeiro parˆmetro o pino e como segundo parˆmetro se
          ca                                    a                                 a
ele ´ pino de entrada ou sa´
    e                       ıda. Agora come¸aremos a escrever o processamento. O programa
                                           c
rodar´ em um loop, pois n˜o h´ ocorrˆncias ou interferˆncias que mudem o estado. Dentro do
      a                    a a        e               e
loop ter´ uma fun¸˜o que far´ o LED ficar aceso por 1 segundo e depois ficar apagado por mais
        a         ca          a
um segundo, ap´s isso volta ao loop. Escreva da seguinte maneira:
                o


void loop() {
  digitalWrite(ledPin, HIGH);
  delay(1000);
  digitalWrite(ledPin, LOW);
  delay(1000);
}



                                             14
A fun¸˜o digitalWrite() escreve uma informa¸ao digital, ou seja, 0 (LOW) ou 1 (HIGH).
          ca                                         c˜
Seu primeiro parˆmetro ´ o pino de sa´
                  a       e             ıda, que no caso ´ o ledPin. O segundo parˆmetro ´ o
                                                         e                         a     e
estado, que no caso ´ a sa´
                      e     ıda, HIGH ou LOW. Quando uma porta digital est´ em estado baixo
                                                                           a
(LOW), ela fica com 0V, j´ quando est´ em estado alto (HIGH), fica em 5 V.
                             a           a
    A fun¸ao delay() ´ um atraso que se d´ para a continua¸˜o da leitura do programa, logo
          c˜             e                    a               ca
como foi escrito que o ledPin estar´ aceso, s´ ap´s um segundo, ou como est´ escrito 1000
                                       a         o o                           a
ms, ir´ ler a linha seguinte que escreve que a sa´ do ledPin ´ baixa, e o mesmo ocorre mais
      a                                          ıda            e
uma vez.
    Antes de fazer o upload do programa, primeiro deve-se escolher a porta USB em que o
Arduino se encontra. Para isso v´ em Tools → Serial Port → porta, onde porta ´ o nome da
                                    a                                            e
porta onde est´ ligado o Arduino (/dev/ttyUSB*, no caso de GNU/Linux, COM* em Windows).
                a
Para saber em qual porta o Arduino se encontra, fa¸a por tentativa e erro, logo escolha um e
                                                      c
tente rodar, caso n˜o rode, ´ o outro. Outro passo que deve-se fazer ´ escolher o modelo da
                     a         e                                      e
placa, para isso v´ em Tools → Board e o modelo da sua placa. Agora sim para fazer o upload,
                   a
clique em Upload, como mostra a figura 5.1.




                                    Figura 5.1: Upload




                                            15
5.2     Exemplo 2
No segundo exemplo exploraremos melhor as sa´    ıdas digitais. Neste exemplo ser˜o necess´rios
                                                                                  a         a
10 LEDs para sua execu¸ao. Os LEDs ascender˜o em sequˆncia e ficar˜o acesos por 1 segundo,
                        c˜                      a           e          a
at´ que o ultimo apagar´ e todos os outros em sequˆncia apagar˜o.
  e       ´             a                            e           a
    Para a confec¸ao do projeto ligue o positivo dos LEDs nos pinos digitais de 2 ´ 11 e a outra
                 c˜                                                               e
ponta em um protoboard, no lado negativo dos LEDs ligue resistores de 150 Ω, em s´rie, e a
                                                                                        e
outra ponta de todos os resistores no terra do Arduino, GND na placa. Assim como na figura
5.2.




                               Figura 5.2: Circuito Exemplo 2

    As primeiras linhas de comando s˜o para declara¸˜o de vari´veis, iremos precisar de uma
                                        a              ca        a
vari´vel constante e inteira de valor 10, em nosso caso chamamos de ledCount. Outra vari´vel
    a                                                                                   a
necess´ria ´ um vetor com 10 posi¸˜es, enumerados de 2 ´ 11, que s˜o os n´meros dos pinos de
      a e                           co                     e       a     u
sa´ digital que ser˜o utilizados que tamb´m possuem valores inteiros, chamamos o vetor de
  ıda                a                       e
 ledPins. A seguir vem a declara¸ao a ser feita:
                                    c˜


const int ledCount = 10;

int ledPins[] = { 2, 3, 4, 5, 6, 7,8,9,10,11 };

   Agora com as vari´veis declaradas vamos definir o vetor ledPins como pinos de sa´ ,
                       a                                                          ıda
para isso utilizaremos um loop, da seguinte maneira:


void setup() {
  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    pinMode(ledPins[thisLed], OUTPUT);
  }
}

   Na primeira posi¸˜o do for declaramos uma vari´vel que inicia em 0. Na segunda posi¸ao
                    ca                             a                                      c˜
damos a condi¸ao para o for, e na terceira a cada vez que ´ verificada a condi¸ao do for, com
               c˜                                         e                  c˜
execu¸˜o da primeira, ´ acrescido 1 ao valor de thisLed, que ´ a vari´vel que utilizaremos
     ca                e                                        e       a
para chamar as determinadas posi¸˜es do vetor ledPins. A fun¸ao pinMode(), como vista
                                  co                             c˜
no exemplo anterior, est´ declarando que o vetor ledPins ´ um vetor de sa´ de dados.
                         a                                 e               ıda
   Agora ser´ iniciado um loop, que far´ com que o programa sempre rode, dentro dele ter´
             a                          a                                                   a
um for que acender´ todos os LEDs sequencialmente, com um intervalo de 1 segundo (1000
                    a
ms) entre cada LED. O corpo do programa fica da seguinte maneira:


 void loop() {




                                              16
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
      digitalWrite(ledPins[thisLed], HIGH);
      delay(1000);
    }

    delay(1000);

    Perceba que o for ´ da mesma maneira que o ultimo, pois a id´ia ´ sempre se referir `s po-
                       e                          ´               e e                   a
si¸˜es do vetor, a diferen¸a aqui ´ que para cada posi¸˜o estamos acendendo um LED, usando
  co                      c       e                   ca
a fun¸ao digitalWrite. A fun¸ao delay foi utilizada para que seja mais f´cil de visualizar
      c˜                          c˜                                        a
que cada LED acende de cada vez, e que ap´s todos os LEDs acenderem, todos ficam acesos
                                              o
por mais um segundo.

    Agora ser´ feito o mesmo, mas para apagar os LEDs, como mostra a seguir:
             a


    for (int thisLed = 9; thisLed >= 0; thisLed--) {
       digitalWrite(ledPins[thisLed], LOW);
       delay(1000);
    }
    delay(1000);
}

    A vari´vel thisLed, utilizada apenas no for, come¸a com valor 9 e ´ decrescida de 1 at´
          a                                            c              e                    e
que chegue em 0, logo os LEDs apagar´o do ultimo a acender para o primeiro, e permanecer´
                                      a     ´                                             a
apagado por 1 segundo.
    Este foi o segundo exemplo, perceba que ´ poss´ modific´-lo com o que j´ foi aprendido,
                                            e     ıvel     a               a
fazendo com que ele apague na mesma ordem que acende, ou fazendo qualquer outra mudan¸a  c
desejada.




                                             17
5.3     Exemplo 3
Neste exemplo utilizaremos a entrada anal´gica e a sa´ serial na confec¸˜o de um capac´
                                          o          ıda               ca              ımetro.
Para isso ser´ necess´rio um resistor, que pode ter qualquer valor que chamaremos de R1, um
             a        a
resitor de 220Ω, um capacitor, um protoboard e um fio.
    Ligue o positivo do capacitor em um ponto comum e o negativo no terra, o resistor R1 entre
o +5 da placa e o ponto comum, ligue o outro resistor, que chamaremos de R2 e tem o valor
de 220 Ω entre o ponto comum e o pino 11, que ´ o pino que ir´ descarregar o capacitor. Ligue
                                                e             a
o fio do ponto comum a entrada anal´gica.
                                      o




                               Figura 5.3: Circuito Exemplo 3

    Iremos calcular o valor do capacitor medindo o tempo de carga, sabemos que uma cons-
tante de tempo (τ = T C) em segundos ´ igual a resistˆncia (R) em ohms multiplicado pela
                                           e              e
capacitˆncia (C) em farads, e que a tens˜o no capacitor em uma constante de tempo (TC***)
        a                                 a
´ de 63,2% do valor m´ximo, podemos calcular a capacitˆncia, pois como sabemos o valor da
e                      a                                    a
fonte fornecida pelo arduino, 5 V, basta calcularmos 63,2% de sua tens˜o e quando a tens˜o no
                                                                        a                a
capacitor encontrar este valor basta dividi-la pelo valor da resistencia R1. τ = R ∗ C, ou seja
63, 2%V = R ∗ C, onde V ´ a tens˜o m´xima.
                           e       a    a
    A programa¸ao come¸a com a declara¸ao de vari´veis, ou seja, um pino anal´gico para medir
                c˜       c                c˜        a                          o
tens˜o no capacitor, um pino de carga e um de descarga do capacitor e um pino com o valor
     a
de R1, como podemos ver no exemplo a seguir:
#define analogPin      0
#define chargePin      13
#define dischargePin   11
#define resistorValue R1
unsigned long startTime;
unsigned long elapsedTime;
float microFarads;
float nanoFarads;
    Perceba que o valor de R1 deve ser substitu´ pelo valor escolhido.
                                               ıdo
    Devemos ajustar o pino 13 como pino de sa´ ıda, como j´ foi feito em exemplos anteriores, e
                                                          a
iniciar a sa´ serial a fim de depurar erros:
            ıda
void setup(){
  pinMode(chargePin, OUTPUT);
  digitalWrite(chargePin, LOW);
  Serial.begin(9600);
}
    No decorrer do desenvolvimento da apostila ainda n˜o hav´
                                                      a     ıamos mencionado a comunica¸˜o
                                                                                         ca
serial, no pr´prio compilador arduino-0018 existe uma interface que lhe proporciona observar
             o
a sa´ e entrada na pr´pria tela do computador, a figura 5.2 abaixo mostra onde ter acesso a
    ıda                o
esse recurso.



                                              18
Figura 5.4: Comunica¸ao Serial
                                                   c˜

    Em nosso caso utilizamos a frequˆncia de transferˆncia de dados de 9600B/s, mas ´ poss´
                                      e                e                               e    ıvel
selecionar outros valores j´ pr´-determinados pelo programa que podem ser observados quando
                           a e
se abre a comunica¸˜o serial.
                     ca
    Iniciaremos o loop do programa fornecendo energia ao pino de carga do capacitor e acionando
o startTime, que ´ a vari´vel que ir´ temporizar o tempo de carga do capacitor. Para poder
                   e       a          a
calcular os 63,2% da carga teremos que fazer uma convers˜o, pois o fim da escala ´ de 1023, logo
                                                         a                       e
63,2% disso corresponde ´ 647, que ´ a porcentagem da tens˜o m´xima no capacitor. Enquanto
                          e          e                      a    a
a entrada do pino anal´gico n˜o equivaler a esta porcentagem de tempo n˜o ocorre nada, apenas
                        o      a                                        a
a contagem de tempo de carga do capacitor, que j´ esta sendo feita pela vari´vel startTime.
                                                     a                         a
Quando esta porcentagem ´ ultrapassada mede-se a capacitˆncia dividindo o tempo de carga
                             e                               a
pelo valor de R1.
    Como ´ usual que valores de capacitˆncia sejam baixos, na ordem de mili a nano Farad, ´
           e                             a                                                     e
mais agrad´vel que se expresse o valor em mili ou nano Farad, ou seja, multiplique o valor da
            a
capacitˆncia por 1000 e acrescente o mF no final, caso mesmo com este procedimento o valor
        a
ainda seja menor que 1, podemos utilizar outras escalas (micro, nano, etc.). A programa¸˜o  ca
referida pode ser observada a seguir:

void loop(){
  digitalWrite(chargePin, HIGH);         // coloque HIGH em chargePin
  startTime = millis();

  while (analogRead(analogPin) < 648) {
  }

  elapsedTime = millis() - startTime;
  microFarads = ((float)elapsedTime / resistorValue) * 1000;
  Serial.print(elapsedTime);
  Serial.println(" ms");

  if (microFarads > 1) {
    Serial.print((long)microFarads);
    Serial.println(" mF");
  }
  else {
    nanoFarads = microFarads * 1000.0;
    Serial.print((long)nanoFarads);
    Serial.println(" nF");
  }

   O programa j´ est´ quase conclu´
               a    a             ıdo, basta fazer a descarga do capacitor. Para isso “des-



                                              19
ligue” o chargePin, ajuste dischargePin como sa´ ıda, coloque LOW at´ que o capacitor esteja
                                                                     e
descarregado, e volte a ajustar o dischargePin como entrada, da seguinte maneira:
    digitalWrite(chargePin, LOW);
    pinMode(dischargePin, OUTPUT);
    digitalWrite(dischargePin, LOW);
    while (analogRead(analogPin) > 0) {
    }

    pinMode(dischargePin, INPUT);
}


5.4      Exemplo 4
Este exemplo ilustra o uso de uma das sa´
                                        ıdas PWM(Pulse-Width Modulation - Modula¸˜o por
                                                                                     ca
Largura de Pulso) do Arduino com um servomotor. Qualquer servo com um terminal de con-
trole compat´ pode ser utilizado. Aqui usaremos um polar rotor do tipo usado em antenas
             ıvel
parab´licas. Primeiramente ´ importante saber o que ´ PWM e o que ´ poss´ fazer.
      o                     e                       e                 e     ıvel
PWM ´ uma tecnologia que permite controlar o per´
       e                                          ıodo c´
                                                        ıclico da frequˆncia da alimenta¸˜o.
                                                                        e               ca




                                      Figura 5.5: PWM

   Suas aplica¸˜es s˜o diversas e abrangem tanto usos industriais quanto dom´sticos. Em in-
                co   a                                                          e
d´strias, o PWM pode ser usado para controlar elevadores de carga, esteiras rolantes e guinchos.
 u
J´ em aplica¸oes dom´sticas, pode ser usado para controle de ilumina¸ao, port˜es e cortinas.
 a           c˜        e                                              c˜        o
Iremos utilizar a entrada manual comandada por um potenciˆmetro linear de 100 kΩ.
                                                             o
   O motor possui 3 fios: um vermelho, um preto e um branco. Os fios preto e vermelho
correspondem ao negativo e positivo da alimenta¸ao, respectivamente, e neste exemplo podemos
                                                 c˜
conect´-los diretamente aos pinos de alimenta¸˜o do Arduino. O vermelho ´ conectado ao pino
      a                                       ca                           e
5V, e o preto a qualquer um dos pinos GND. O fio branco ´ o terminal de controle, e deve ser
                                                           e
conectado a uma das sa´  ıdas digitais com PWM, qualquer um dos pinos 3, 5, 6, 9, 10 ou 11. No
exemplo usaremos o 10.
   O potenciˆmetro linear de 100 kΩ ´ conectado tendo um dos seus pinos extremos ligado
              o                           e
ao GND, o outro extremo ao pino AREF, que fornece a tens˜o de referˆncia, e o pino central
                                                             a           e
conectado a qualquer uma das entradas anal´gicas, utilizaremos o pino 1.
                                             o

   Desta vez usaremos uma biblioteca para suporte de servos, logo no in´     ıcio do programa
deveremos import´-la. Deveremos criar um objeto do tipo servo que ser´ utilizado para controle,
                a                                                    a
da seguinte maneira:



                                              20
Figura 5.6: Exemplo 4

#include <Servo.h>
Servo meuservo;

    A seguir ´ feita a parte de declara¸ao de vari´veis, iremos declarar um pino para o potenci-
              e                        c˜         a
ometro e servo, e uma vari´vel inteira para o valor lido do potenciˆmetro. Tamb´m deveremos
ˆ                           a                                       o             e
iniciar o servo, que em nosso caso est´ conectado ao pino 10, como vemos a seguir:
                                       a

int potpin = 1;
int val;
void setup() {
  meuservo.attach(10);
}

   Quando lermos a entrada do potenciˆmetro teremos que converter seu valor para graus para
                                     o
podermos controlar em graus quanto o motor ir´ girar, para isto utilizaremos a fun¸ao map.
                                              a                                   c˜
Ap´s isto apenas devemos enviar a informa¸˜o para o motor e esperar alguns milissegundos
   o                                     ca
para a movimenta¸ao do motor.
                 c˜

void loop() {
  val = analogRead(potpin);
  val = map(val, 0, 1023, 0, 180);
  meuservo.write(val);
  delay(500);
}




                                              21
Cap´
   ıtulo 6

Referˆncias Bibliogr´ficas
     e              a

Sites:

http://www.sabereletr^nica.com.br/secoes/leitura/1307
                     o
Acessado em: 09/10/2010

http://arduino.cc/en/Reference/HomePage
Acessado em: 09/10/2010

http://www.arduino.cc
Acessado em: 09/10/2010

http://www.arduino.cc/en/Reference/AttachInterrupt
Acessado em: 09/10/2010

http://projeto39.wordpress.com/o-arduino-duemilanove/
Acessado em: 09/10/2010




                                      22

Contenu connexe

Tendances

Programming Languages Paradigms
Programming Languages ParadigmsProgramming Languages Paradigms
Programming Languages Paradigmsrodrigovmoraes
 
Ferramenta para Auxílio na Aprendizagem de Linguagens Formais e Autômatos
Ferramenta para Auxílio na Aprendizagem de Linguagens Formais e AutômatosFerramenta para Auxílio na Aprendizagem de Linguagens Formais e Autômatos
Ferramenta para Auxílio na Aprendizagem de Linguagens Formais e AutômatosLuan Felipe Knebel
 
Apostila Arduino - FBS Eletrônica
Apostila Arduino - FBS EletrônicaApostila Arduino - FBS Eletrônica
Apostila Arduino - FBS EletrônicaFabio Souza
 
Drivers de Dispositivos Linux
Drivers de Dispositivos LinuxDrivers de Dispositivos Linux
Drivers de Dispositivos LinuxHudson Augusto
 
Curso de robotica movel
Curso de robotica movelCurso de robotica movel
Curso de robotica movelRibeiro Baieta
 
Br Office Writer
Br Office WriterBr Office Writer
Br Office Writerntetlcursos
 
Fenix Nox 199
Fenix Nox 199Fenix Nox 199
Fenix Nox 199Alan Lima
 
Introdução à programação em R
Introdução à programação em RIntrodução à programação em R
Introdução à programação em RMonica Barros
 
BrOffice - Apostila completa
BrOffice - Apostila completaBrOffice - Apostila completa
BrOffice - Apostila completaVera Mln Silva
 
Cientista da computacao usando python
Cientista da computacao usando pythonCientista da computacao usando python
Cientista da computacao usando pythonJean Lopes
 
Faculdade: Trabalho sobre Seguranca Digital (Versão em PDF)
Faculdade: Trabalho sobre Seguranca Digital (Versão em PDF)Faculdade: Trabalho sobre Seguranca Digital (Versão em PDF)
Faculdade: Trabalho sobre Seguranca Digital (Versão em PDF)Rafael Biriba
 
Publicado ruby on-rails-rr71
Publicado ruby on-rails-rr71Publicado ruby on-rails-rr71
Publicado ruby on-rails-rr71Fernando Palma
 

Tendances (16)

Programming Languages Paradigms
Programming Languages ParadigmsProgramming Languages Paradigms
Programming Languages Paradigms
 
Ferramenta para Auxílio na Aprendizagem de Linguagens Formais e Autômatos
Ferramenta para Auxílio na Aprendizagem de Linguagens Formais e AutômatosFerramenta para Auxílio na Aprendizagem de Linguagens Formais e Autômatos
Ferramenta para Auxílio na Aprendizagem de Linguagens Formais e Autômatos
 
Apostila Arduino - FBS Eletrônica
Apostila Arduino - FBS EletrônicaApostila Arduino - FBS Eletrônica
Apostila Arduino - FBS Eletrônica
 
Drivers de Dispositivos Linux
Drivers de Dispositivos LinuxDrivers de Dispositivos Linux
Drivers de Dispositivos Linux
 
Curso de robotica movel
Curso de robotica movelCurso de robotica movel
Curso de robotica movel
 
Br Office Writer
Br Office WriterBr Office Writer
Br Office Writer
 
Fenix Nox 199
Fenix Nox 199Fenix Nox 199
Fenix Nox 199
 
Introdução à programação em R
Introdução à programação em RIntrodução à programação em R
Introdução à programação em R
 
Scilab programacao
Scilab programacaoScilab programacao
Scilab programacao
 
BrOffice - Apostila completa
BrOffice - Apostila completaBrOffice - Apostila completa
BrOffice - Apostila completa
 
Apostila UML
Apostila UML Apostila UML
Apostila UML
 
Cientista da computacao usando python
Cientista da computacao usando pythonCientista da computacao usando python
Cientista da computacao usando python
 
Apostila latex
Apostila latexApostila latex
Apostila latex
 
Faculdade: Trabalho sobre Seguranca Digital (Versão em PDF)
Faculdade: Trabalho sobre Seguranca Digital (Versão em PDF)Faculdade: Trabalho sobre Seguranca Digital (Versão em PDF)
Faculdade: Trabalho sobre Seguranca Digital (Versão em PDF)
 
Curso estatistica descritiva no r
Curso   estatistica descritiva no rCurso   estatistica descritiva no r
Curso estatistica descritiva no r
 
Publicado ruby on-rails-rr71
Publicado ruby on-rails-rr71Publicado ruby on-rails-rr71
Publicado ruby on-rails-rr71
 

En vedette

Faixa de Areia Brasil - B - Documentary film
Faixa de Areia Brasil -  B - Documentary filmFaixa de Areia Brasil -  B - Documentary film
Faixa de Areia Brasil - B - Documentary filmMonique Bodin
 
Polaticas de-operacian-para-activar-la-red-universitaria
Polaticas de-operacian-para-activar-la-red-universitariaPolaticas de-operacian-para-activar-la-red-universitaria
Polaticas de-operacian-para-activar-la-red-universitariaPatricio Efraín Santana Tello
 
Revisão enem 2011
Revisão enem 2011Revisão enem 2011
Revisão enem 2011elves0927
 
Aplicação de Abordagens Ágeis: Estudo de Caso de utlização do SCRUM – PROEG/UFPA
Aplicação de Abordagens Ágeis: Estudo de Caso de utlização do SCRUM – PROEG/UFPAAplicação de Abordagens Ágeis: Estudo de Caso de utlização do SCRUM – PROEG/UFPA
Aplicação de Abordagens Ágeis: Estudo de Caso de utlização do SCRUM – PROEG/UFPACOTIC-PROEG (UFPA)
 
MACVEST - Simulado ENEM 2012
MACVEST - Simulado ENEM 2012MACVEST - Simulado ENEM 2012
MACVEST - Simulado ENEM 2012Matheus Ronconi
 
Fisica resolucao exercicios gabarito cinematica 2011 1_serie
Fisica resolucao exercicios gabarito cinematica 2011 1_serieFisica resolucao exercicios gabarito cinematica 2011 1_serie
Fisica resolucao exercicios gabarito cinematica 2011 1_seriecomentada
 

En vedette (8)

Faixa de Areia Brasil - B - Documentary film
Faixa de Areia Brasil -  B - Documentary filmFaixa de Areia Brasil -  B - Documentary film
Faixa de Areia Brasil - B - Documentary film
 
Polaticas de-operacian-para-activar-la-red-universitaria
Polaticas de-operacian-para-activar-la-red-universitariaPolaticas de-operacian-para-activar-la-red-universitaria
Polaticas de-operacian-para-activar-la-red-universitaria
 
001 2010
001 2010001 2010
001 2010
 
Métricas de Acompanhamento
Métricas de AcompanhamentoMétricas de Acompanhamento
Métricas de Acompanhamento
 
Revisão enem 2011
Revisão enem 2011Revisão enem 2011
Revisão enem 2011
 
Aplicação de Abordagens Ágeis: Estudo de Caso de utlização do SCRUM – PROEG/UFPA
Aplicação de Abordagens Ágeis: Estudo de Caso de utlização do SCRUM – PROEG/UFPAAplicação de Abordagens Ágeis: Estudo de Caso de utlização do SCRUM – PROEG/UFPA
Aplicação de Abordagens Ágeis: Estudo de Caso de utlização do SCRUM – PROEG/UFPA
 
MACVEST - Simulado ENEM 2012
MACVEST - Simulado ENEM 2012MACVEST - Simulado ENEM 2012
MACVEST - Simulado ENEM 2012
 
Fisica resolucao exercicios gabarito cinematica 2011 1_serie
Fisica resolucao exercicios gabarito cinematica 2011 1_serieFisica resolucao exercicios gabarito cinematica 2011 1_serie
Fisica resolucao exercicios gabarito cinematica 2011 1_serie
 

Similaire à Arduino: Introdução à plataforma de prototipagem rápida

Apostila de Introdução ao Arduino
Apostila de Introdução ao ArduinoApostila de Introdução ao Arduino
Apostila de Introdução ao ArduinoFernando Palma
 
Apostila curso de arduino rev4
Apostila curso de arduino rev4Apostila curso de arduino rev4
Apostila curso de arduino rev4Carlos Barbosa
 
Apostila rev4
Apostila rev4Apostila rev4
Apostila rev4dsa8282
 
Alternativas ao Software Proprietário
Alternativas ao Software ProprietárioAlternativas ao Software Proprietário
Alternativas ao Software ProprietárioHudson Augusto
 
Microcontroladores pic
Microcontroladores picMicrocontroladores pic
Microcontroladores picjonasface
 
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digitalNcl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digitalRafael Carvalho
 
Vida de-silício-apostila-arduino-básico-vol.1
Vida de-silício-apostila-arduino-básico-vol.1Vida de-silício-apostila-arduino-básico-vol.1
Vida de-silício-apostila-arduino-básico-vol.1Valmir Barbosa
 
Tcc Mauricio Bento Ghem 2009 - Versão Final
Tcc Mauricio Bento Ghem 2009 - Versão FinalTcc Mauricio Bento Ghem 2009 - Versão Final
Tcc Mauricio Bento Ghem 2009 - Versão Finalimpalador69
 
Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...
Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...
Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...bentow
 

Similaire à Arduino: Introdução à plataforma de prototipagem rápida (20)

Apostila de Introdução ao Arduino
Apostila de Introdução ao ArduinoApostila de Introdução ao Arduino
Apostila de Introdução ao Arduino
 
Apostila curso de arduino rev4
Apostila curso de arduino rev4Apostila curso de arduino rev4
Apostila curso de arduino rev4
 
Apostila rev4
Apostila rev4Apostila rev4
Apostila rev4
 
Apostila rev4
Apostila rev4Apostila rev4
Apostila rev4
 
Poojava
PoojavaPoojava
Poojava
 
Poojava
PoojavaPoojava
Poojava
 
Manual de portugol
Manual de portugolManual de portugol
Manual de portugol
 
Tutorial de Uppaal
Tutorial de UppaalTutorial de Uppaal
Tutorial de Uppaal
 
Introdução às redes
Introdução às redesIntrodução às redes
Introdução às redes
 
Alternativas ao Software Proprietário
Alternativas ao Software ProprietárioAlternativas ao Software Proprietário
Alternativas ao Software Proprietário
 
Microcontroladores pic
Microcontroladores picMicrocontroladores pic
Microcontroladores pic
 
Hardware CDTC
Hardware CDTCHardware CDTC
Hardware CDTC
 
Apostila latex
Apostila latexApostila latex
Apostila latex
 
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digitalNcl e Lua - desenvolvendo aplicações interativas para tv digital
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
 
Vida de-silício-apostila-arduino-básico-vol.1
Vida de-silício-apostila-arduino-básico-vol.1Vida de-silício-apostila-arduino-básico-vol.1
Vida de-silício-apostila-arduino-básico-vol.1
 
Curso C
Curso CCurso C
Curso C
 
Taxonomias
TaxonomiasTaxonomias
Taxonomias
 
Manual do Kile
Manual do KileManual do Kile
Manual do Kile
 
Tcc Mauricio Bento Ghem 2009 - Versão Final
Tcc Mauricio Bento Ghem 2009 - Versão FinalTcc Mauricio Bento Ghem 2009 - Versão Final
Tcc Mauricio Bento Ghem 2009 - Versão Final
 
Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...
Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...
Tcc Mauricio Bento Ghem 2009 - Proposta de uma Ferramenta de Monitoramento de...
 

Arduino: Introdução à plataforma de prototipagem rápida

  • 1. Universidade Federal Fluminense ´ Centro Tecnologico Escola de Engenharia c˜ Curso de Engenharia de Telecomunica¸ oes c˜ Programa de Educa¸ ao Tutorial Apostila Arduino Autores: Erika Guimaraes Pereira da Fonseca ˜ Mathyan Motta Beppu Orientador: Prof. Alexandre Santos de la Vega Niteroi-RJ ´ Dezembro / 2010
  • 2. Sum´rio a 1 Introdu¸˜o ao Arduino ca 2 2 Caracter´ ısticas do Duemilanove 4 2.1 Caracter´ ısticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 Alimenta¸˜o . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3 Mem´ria . . . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.4 Entrada e Sa´ . . . . . . . . . . . ıda . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.5 Comunica¸˜o . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.6 Programa¸ao . . . . . . . . . . . . c˜ . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.7 Reset Autom´tico . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.8 Prote¸˜o contra sobrecorrente USB ca . . . . . . . . . . . . . . . . . . . . . . . . . 7 3 Referˆncias da linguagem usada na programa¸˜o e ca do Arduino 8 3.1 Linguaguem de referˆncia . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . 8 3.2 Fun¸oes . . . . . . . . . . . . . . . . . . . . . . . c˜ . . . . . . . . . . . . . . . . . 9 3.3 Bibliotecas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 4 Instala¸˜o da IDE e suas bibliotecas ca 12 4.1 Arduino para Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2 Arduino para GNU/Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 5 Desenvolvimento de Projetos 14 5.1 Exemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 5.2 Exemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 5.3 Exemplo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5.4 Exemplo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 6 Referˆncias Bibliogr´ficas e a 22 1
  • 3. Cap´ ıtulo 1 Introdu¸˜o ao Arduino ca O Arduino faz parte do conceito de hardware e software livre e est´ aberto para uso e contribui- a ¸ao de toda sociedade. O conceito Arduino surgiu na It´lia em 2005 com o objetivo de criar um c˜ a dispositivo para controlar projetos/prot´tipos constru´ o ıdos de uma forma menos dispendiosa do que outros sistemas dispon´ ıveis no mercado. Arduino ´ uma plataforma de computa¸˜o f´ e ca ısica (s˜o sistemas digitais ligados a sensores e a atuadores, que permitem construir sistemas que percebam a realidade e respondem com a¸oes c˜ f´ ısicas), baseada em uma simples placa de Entrada/Sa´ microcontrolada e desenvolvida sobre ıda uma biblioteca que simplifica a escrita da programa¸ao em C/C++. O Arduino pode ser usado c˜ para desenvolver artefatos interativos stand-alone ou conectados ao computador atrav´s de e Adobe Flash, Processing, Max/MSP, Pure Data ou SuperCollider. Um microcontrolador (tamb´m denominado MCU) ´ um computador em um chip, que con- e e t´m processador, mem´ria e perif´ricos de entrada/sa´ e o e ´ ıda. E um microprocessador que pode ser programado para fun¸oes espec´ c˜ ıficas, em contraste com outros microprocessadores de prop´sito o geral (como os utilizados nos PCs). Eles s˜o embarcados no interior de algum outro dispositivo, a no nosso caso o Arduino, para que possam controlar suas fun¸˜es ou a¸oes. co c˜ ´ E um kit de desenvolvimento capaz de interpretar vari´veis no ambiente e transform´-las em a a sinal el´trico correspondente, atrav´s de sensores ligados aos seus terminais de entrada, e atuar e e no controle ou acionamento de algum outro elemento eletro-eletrˆnico conectado ao terminal o de sa´ ıda. Ou seja, ´ uma ferramenta de controle de entrada e sa´ de dados, que pode ser e ıda acionada por um sensor (por exemplo um resistor dependente da luz - LDR) e que, logo ap´s o passar por uma etapa de processamento, o microcontrolador, poder´ acionar um atuador (um a motor por exemplo). Como podem perceber, ´ como um computador, que tˆm como sensores e e de entrada como o mouse e o teclado, e de sa´ ıda, impressoras e caixas de som, por exemplo, s´ que ele faz interface com circuitos el´tricos, podendo receber ou enviar informa¸oes/tens˜es o e c˜ o neles. Para um melhor entendimento, abaixo na figura 1 ´ poss´ identificar os elementos princi- e ıvel pais do circuito atrav´s de diagrama em blocos. e Figura 1.1: Diagrama de Blocos 2
  • 4. O Arduino ´ baseado em um microcontrolador (Atmega), e dessa forma ´ logicamente pro- e e gram´vel, ou seja, ´ poss´ a cria¸ao de programas, utilizando uma linguagem pr´pria baseada a e ıvel c˜ o em C/C++, que, quando implementadas fazem com que o hardware execute certas a¸oes. Dessa c˜ forma, estamos configurando a etapa de processamento. O grande diferencial desta ferramenta ´ que ela ´ desenvolvida e aperfei¸oada por uma e e c comunidade que divulga os seus projetos e seus c´digos de aplica¸ao, pois a concep¸ao dela ´ o c˜ c˜ e open-source, ou seja, qualquer pessoa com conhecimento de programa¸ao pode modific´-lo e c˜ a ampli´-lo de acordo com a necessidade, visando sempre a melhoria dos produtos que possam a ser criados aplicando o Arduino. Ele foi projetado com a finalidade de ser de f´cil entendimento, programa¸ao e aplica- a c˜ ¸ao, al´m de ser multiplataforma, ou seja, podemos configura-lo em ambientes Windows, c˜ e GNU/Linux e Mac OS. Assim sendo, pode ser perfeitamente utilizado como ferramenta educa- cional sem se preocupar que o usu´rio tenha um conhecimento espec´ a ıfico de eletrˆnica, mas pelo o fato de ter o seu esquema e software de programa¸ao open-source, acabou chamando a aten¸ao c˜ c˜ dos t´cnicos de eletrˆnica, que come¸aram a aperfei¸o´-la e a criar aplica¸oes mais complexas. e o c c a c˜ 3
  • 5. Cap´ ıtulo 2 Caracter´ ısticas do Duemilanove O Arduino Duemilanove (2009 em italiano) ´ uma placa baseada no microcontrolador AT- e mega168 ou ATmega328. Tem 14 pinos de entrada ou sa´ digital (dos quais 6 podem ser ıda utilizados como sa´ıdas PWM), 6 entradas anal´gicas, um oscilador de cristal 16 MHz, contro- o lador USB, uma tomada de alimenta¸ao, um conector ICSP, e um bot˜o de reset. Para sua c˜ a utiliza¸ao basta conect´-lo a um computador com um cabo USB ou lig´-lo com um adaptador c˜ a a AC para DC ou bateria. 2.1 Caracter´ ısticas Microcontrolador ATmega328 ou ATmega168 Tens˜o operacional a 5V Tens˜o de alimenta¸ao (recomendada) a c˜ 7-12 V Tens˜o de alimenta¸ao (limites) a c˜ 6-20 V Pinos I/O digitais 14 (dos quais 6 podem ser Sa´ ıdas PWM) Pinos de entrada anal´gica o 6 Corrente cont´ınua por pino I/O 40 mA Corrente cont´ ınua para o pino 3.3 V 50 mA Mem´ria flash o 32 KB (2KB usados para o bootloader) / 16KB SRAM 2 KB EEPROM 1 KB Frequˆncia de clock e 16 MHz Tabela com as caracter´ ısticas b´sicas do arduino Duemilanove. a 2.2 Alimenta¸˜o ca O Arduino Duemilanove pode ser alimentado pela conex˜o USB ou por qualquer fonte de a alimenta¸˜o externa. A fonte de alimenta¸˜o ´ selecionada automaticamente. ca ca e A alimenta¸˜o externa (n˜o-USB) pode ser tanto de uma fonte ou de uma bateria. A fonte ca a pode ser conectada com um plug de 2,1 mm (centro positivo) no conector de alimenta¸ao. c˜ Cabos vindos de uma bateria podem ser inseridos nos pinos GND (terra) e Vin (entrada de tens˜o) do conector de alimenta¸˜o. a ca A placa pode operar com uma alimenta¸˜o externa de 6 a 20 V. Entretanto, se a alimenta¸ao ca c˜ for inferior a 7 V o pino 5 V pode fornecer menos de 5 V e a placa pode ficar inst´vel. Se a a alimenta¸˜o for superior a 12 V o regulador de tens˜o pode superaquecer e avariar a placa. A ca a alimenta¸˜o recomendada ´ de 7 a 12 V. ca e 4
  • 6. Os pinos de alimenta¸ao s˜o: c˜ a • Vin : entrada de alimenta¸ao para a placa Arduino quando uma fonte externa for utilizada. c˜ Vocˆ pode fornecer alimenta¸ao por este pino ou, se usar o conector de alimenta¸ao, e c˜ c˜ acessar a alimenta¸ao por este pino; c˜ • 5 V: A fonte de alimenta¸˜o utilizada para o microcontrolador e para outros componentes ca da placa. Pode ser proveniente do pino Vin atrav´s de um regulador on-board ou ser e fornecida pelo USB ou outra fonte de 5 V; • 3 V3: alimenta¸ao de 3,3 V fornecida pelo circuito integrado FTDI (controlador USB). A c˜ corrente m´xima ´ de 50 mA; a e • GND (ground): pino terra. 2.3 Mem´ria o O ATmega328 tem 32 KB de mem´ria flash (onde ´ armazenado o software), al´m de 2 KB o e e de SRAM (onde ficam as vari´veis) e 1 KB of EEPROM (esta ultima pode ser lida e escrita a ´ atrav´s da biblioteca EEPROM e guarda os dados permanentemente, mesmo que desliguemos e a placa). A mem´ria SRAM ´ apagada toda vez que desligamos o circuito. o e 2.4 Entrada e Sa´ ıda Cada um dos 14 pinos digitais do Duemilanove pode ser usado como entrada ou sa´ usando ıda as fun¸˜es de pinMode(), digitalWrite(), e digitalRead(). Eles operam com 5 V. co Cada pino pode fornecer ou receber um m´ximo de 40 mA e tem um resistor pull-up interno a (desconectado por padr˜o) de 20-50 kΩ. Al´m disso, alguns pinos tˆm fun¸oes especializadas: a e e c˜ • Serial: 0 (RX) e 1 (TX). Usados para receber (RX) e transmitir (TX) dados seriais TTL. Estes pinos s˜o conectados aos pinos correspondentes do chip serial FTDI USB-to-TTL. a • PWM: 3, 5, 6, 9, 10, e 11. Fornecem uma sa´ anal´gica PWM de 8-bit com a fun¸ao ıda o c˜ analogWrite(). • SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estes pinos suportam comunica¸˜o SPI, ca que embora compat´ com o hardware, n˜o est´ inclu´ na linguagem do Arduino. ıvel a a ıda • LED: 13. H´ um LED j´ montado e conectado ao pino digital 13. a a O Duemilanove tem 6 entradas anal´gicas, cada uma delas est´ ligada a um conversor o a anal´gico-digital de 10 bits, ou seja, transformam a leitura anal´gica em um valor dentre 1024 o o possibilidades (exemplo: de 0 a 1023). Por padr˜o, elas medem de 0 a 5 V, embora seja a poss´ mudar o limite superior usando o pino AREF e um pouco de c´digo de baixo n´ ıvel o ıvel. Adicionalmente alguns pinos tˆm funcionalidades especializadas: e • I2C: 4 (SDA) e 5 (SCL). Suportam comunica¸ao I2C (TWI) usando a biblioteca Wire. c˜ • AREF. referˆncia de tens˜o para entradas anal´gicas. Usados com analogReference(). e a o • Reset. Envie o valor LOW para reiniciar o microcontrolador. Tipicamente utilizados para adicionar um bot˜o de reset aos shields( placas que podem ser plugadas ao Arduino para a extender suas capacidades) que bloqueiam o que h´ na placa. a 5
  • 7. 2.5 Comunica¸˜o ca Com o Arduino Duemilanove a comunica¸ao com um computador, com outro Arduino ou com c˜ outros microcontroladores ´ muito simplificada. O ATmega328 permite comunica¸ao serial no e c˜ padr˜o UART TTL (5 V), que est´ dispon´ nos pinos digitais 0 (RX) e 1 (TX). Um chip a a ıvel FTDI FT232RL na placa encaminha esta comunica¸˜o serial atrav´s da USB e os drivers FTDI ca e (inclu´ no software do Arduino) fornecem uma porta virtual para o software no computador. ıdo O software Arduino inclui um monitor serial que permite que dados simples de texto sejam enviados e recebidos a placa Arduino. Os LEDs RX e TX da placa piscam quando os dados ` est˜o sendo transferidos ao computador pelo chip FTDI e h´ conex˜o USB (mas n˜o quando a a a a h´ comunica¸ao serial pelos pinos 0 e 1). a c˜ A biblioteca SoftwareSerial permite comunica¸ao serial por quaisquer dos pinos digitais do c˜ Duemilanove. O ATmega328 tamb´m oferece suporte aos padr˜es de comunica¸˜o I2C (TWI) e SPI. O e o ca software do Arduino inclui uma biblioteca Wire para simplificar o uso do barramento I2C. Para usar a comunica¸ao SPI veja o datasheet (folha de informa¸oes) do ATmega328. c˜ c˜ 2.6 Programa¸˜o ca O ambiente de programa¸˜o mais indicado ´ o do software Arduino, que pode ser baixado no ca e seguinte site: http://www.arduino.cc/en/Main/Software. Mais detalhes sobre a programa¸ao c˜ no cap´ ıtulo Referˆncias da linguagem usada na programa¸ao do Arduino. e c˜ 2.7 Reset Autom´tico a Algumas vers˜es anteriores do Arduino requerem um reset f´ o ısico (pressionando o bot˜o de reset a na placa) antes de carregar um sketch(o programa a ser compilado). O Arduino Duemilanove ´ projetado de modo a permitir que isto seja feito atrav´s do software que esteja rodando no e e computador conectado. Uma das linhas de controle de hardware (DTR) do FT232RL est´ a conectada ao reset do ATmega328 via um capacitor de 100 microFaraday . Quando esta linha ´ e colocada em n´ l´gico baixo, o sinal cai por tempo suficiente para reiniciar o chip. O software ıvel o Arduino usa esta caracter´ ıstica para permitir carregar o programa simplesmente pressionando o bot˜o “upload ” no ambiente Arduino. Isto significa que o bootloader pode ter um timeout a mais curto, j´ que a ativa¸˜o do DTR (sinal baixo) pode ser bem coordenada com o in´ do a ca ıcio upload. Estas configura¸˜es tˆm outras implica¸oes. Quando o Duemilanove est´ conectado a um co e c˜ a computador rodando Mac OS X ou GNU/Linux, ele reinicia toda vez que a conex˜o ´ feita por a e software (via USB). No pr´ximo meio segundo aproximadamente, o bootloader estar´ rodando o a no Duemilanove. Considerando que ´ programado para ignorar qualquer coisa a n˜o ser um e a upload de um novo c´digo, ele interceptar´ os primeiros bytes de dados sendo enviados para a o a placa depois que a conex˜o ´ aberta. Se um sketch rodando na placa recebe configura¸oes de a e c˜ uma vez ou outros dados ao iniciar, assegure-se que o software que esteja comunicando espere um segundo depois de aberta a conex˜o antes de enviar estes dados. a O Duemilanove tem uma trilha que pode ser cortada para desabilitar o auto-reset e pode ser ressoldada para reativ´-lo, ´ chamada de “RESET-EN”, vocˆ pode tamb´m desabilitar o a e e e auto-reset conectando um resistor de 110 Ω dos +5 V at´ o sinal de reset. e 6
  • 8. 2.8 Prote¸˜o contra sobrecorrente USB ca O Arduino Duemilanove tem um polifus´ que protege a porta USB do seu computador contra ıvel curtocircuito e sobrecorrente. Apesar da maioria dos computadores possu´ ırem prote¸˜o interna ca pr´pria, o fus´ proporciona uma prote¸ao extra. Se mais de 500 mA forem aplicados na porta o ıvel c˜ USB, o fus´ ir´ automaticamente interromper a conex˜o at´ que o curto ou a sobrecarga seja ıvel a a e removida. 7
  • 9. Cap´ ıtulo 3 Referˆncias da linguagem usada na e programa¸˜o do Arduino ca Nesse cap´ ıtulo iremos fazer uma pequena introdu¸˜o sobre como s˜o estruturados os programas ca a para o Arduino, conhecendo a linguagem usada como referˆncia e suas principais fun¸oes. E e c˜ por fim veremos as funcionalidades extras que o uso de bibliotecas nos proporciona. 3.1 Linguaguem de referˆncia e Os programas para o Arduino s˜o implementados tendo como referˆncia a linguagem C++. a e Preservando sua sintaxe cl´ssica na declara¸ao de vari´veis, nos operadores, nos ponteiros, nos a c˜ a vetores, nas estruturas e em muitas outras caracter´ısticas da linguagem. Com isso temos as referˆncias da linguagem, essas podem ser divididas em trˆs partes principais: As estruturas, e e os valores (vari´veis e constantes) e as fun¸˜es. a co As estruturas de referˆncias s˜o: e a • Estruturas de controle (if, else, break, ...) • Sintaxe b´sica (define, include, ; , ...) a • Operadores aritm´ticos e de compara¸˜o (+, -, =, ==, !=, ...) e ca • Operadores booleanos (, ||, !) • Acesso a ponteiros (*, ) • Operadores compostos (++, –, +=, ...) • Operadores de bits (|, , , ...) Os valores de referˆncias s˜o: e a • Tipos de dados(byte, array, int , char , ...) • Convers˜es(char(), byte(), int(), ...) o • Vari´vel de escopo e de qualifica¸˜o (variable scope, static, volatile, ...) a ca • Utilit´rios (sizeof(), diz o tamanho da vari´vel em bytes) a a 8
  • 10. ´ E bom citar que o software que vem no Arduino j´ provˆ v´rias fun¸˜es e constantes para a e a co facilitar a programa¸ao. c˜ • setup() • loop() • Constantes (HIGH | LOW , INPUT | OUTPUT , ...) • Bibliotecas (Serial, Servo, Tone, etc.) 3.2 Fun¸˜es co As fun¸oes s˜o referˆncias essenciais para o desenvolvimento de um projeto usando o Arduino, c˜ a e principalmente para os iniciantes no assunto. Essas fun¸oes j´ implementadas e dispon´ c˜ a ıveis em bibliotecas direcionam e exemplificam as funcionalidades b´sicas do microcontrolador. Temos a como fun¸oes b´sicas e de referˆncias as seguintes fun¸oes: c˜ a e c˜ • Digital I/O pinMode() digitalWrite() digitalRead() • Anal´gico I/O o analogReference() analogRead() analogWrite() - PWM • Avan¸ado I/O c tone() noTone() shiftOut() pulseIn() • Tempo millis() micros() delay() delayMicroseconds() • Matem´tica a min() max() abs() constrain() map() pow() ***s´ do C/C++ sqrt() ***s´ do C/C++ o o • Trigonom´trica e sin() ***s´ do C/C++ cos() ***s´ do C/C++ tan() ***s´ do C/C++ o o o • N´meros aleat´rios u o randomSeed() random() • Bits e Bytes lowByte() highByte() bitRead() bitWrite() bitSet() bitClear() bit() • Interrup¸oes externas c˜ attachInterrupt() detachInterrupt() • Interrup¸oes c˜ interrupts() noInterrupts() • Comunica¸ao Serial c˜ 9
  • 11. 3.3 Bibliotecas O uso de bibliotecas nos proporciona um horizonte de programa¸ao mais amplo e diverso quando c˜ comparado a utiliza¸˜o apenas de estruturas, valores e fun¸˜es. Isso ´ percept´ ca co e ıvel quando analisamos os assuntos que s˜o abordados por cada biblioteca em espec´ a ıfico. Lembrando sempre que, para se fazer uso de uma biblioteca esta j´ deve estar instalada e dispon´ na sua m´quina. a ıvel a Temos as seguintes bibliotecas de referˆncia: e • EEPROM - leitura e escrita de “armazenamento” permanente. • Ethernet - para se conectar a uma rede Ethernet usando o Arduino Ethernet Shield. • Firmata - para se comunicar com os aplicativos no computador usando o protocolo Fir- mata. • LiquidCrystal - para controlar telas de cristal l´ ıquido (LCDs). • Servo - para controlar servo motores. • SPI - para se comunicar com dispositivos que utilizam bararmento Serial Peripheral In- terface (SPI). • SoftwareSerial - Para a comunica¸ao serial em qualquer um dos pinos digitais. c˜ • Stepper - para controlar motores de passo. • Wire - Dois Wire Interface (TWI/I2C) para enviar e receber dados atrav´s de uma rede e de dispositivos ou sensores. Temos como referˆncia tamb´m, o uso de bibliotecas mais espec´ e e ıficas. O que ´ de extrema e importˆncia quando se faz o uso do arduino com um enfoque em uma determinada area. Como a ´ por exemplo: Comunica¸˜o (redes e protocolos) ca • Messenger - Para o processamento de mensagens de texto a partir do computador. • NewSoftSerial - Uma vers˜o melhorada da biblioteca SoftwareSerial. a • OneWire - Dispositivos de controle que usam o protocolo One Wire. • PS2Keyboard - Ler caracteres de um PS2 teclado. • Simple Message System - Enviar mensagens entre Arduino e o computador. • SSerial2Mobile - Enviar mensagens de texto ou e-mails usando um telefone celular. • Webduino - Biblioteca que cria um servidor Web (para uso com o Arduino Ethernet Shield). • X10 - Envio de sinais X10 nas linhas de energia AC. • XBee - Para se comunicar via protocolo XBee. • SerialControl - Controle remoto atrav´s de uma conex˜o serial. e a 10
  • 12. Sensoriamento • Capacitive Sensing - Transformar dois ou mais pinos em sensores capacitivos. • Debounce - Leitura de ruidos na entrada digital. ca ¨e ´ Gera¸˜o de Frequˆncia e de Audio • Tone - Gerar ondas quadradas de freq¨ˆncia de ´udio em qualquer pino do microcontro- ue a lador. Temporiza¸˜o ca • DateTime - Uma biblioteca para se manter informado da data e hora atuais do software. • Metro - Ajuda ao programador a acionar o tempo em intervalos regulares. • MsTimer2 - Utiliza o temporizador de 2 de interrup¸ao para desencadear uma a¸˜o a c˜ ca cada N milissegundos. Utilidades • TextString (String) - Manipular strings • PString - uma classe leve para imprimir em buffers. • Streaming - Um m´todo para simplificar as declara¸˜es de impress˜o. e co a 11
  • 13. Cap´ ıtulo 4 Instala¸˜o da IDE e suas bibliotecas ca Neste cap´ ıtulo iremos explicar como instalar a IDE e conectar a placa Arduino ao computador para sua programa¸ao. Junto com a placa arduino vocˆ deve ter um cabo USB tipo AB para c˜ e poder conect´-lo ao computador. a 4.1 Arduino para Windows Primeiramente deve-se baixar o ambiente para o Arduino que pode ser encontrado no seguinte site: //www.arduino.cc/en/Main/Software , em download clique em Windows e baixe o arquivo arduino-0018.zip (ou mais novo), ser´ necess´rio um programa capaz de descompactar o arquivo a a (exemplos: WinZip, WinRAR, etc.). Certifique-se de preservar a estrutura da pasta. Dˆ e um duplo clique na pasta para abri-la, haver´ uns arquivos e sub-pastas, clique no aplicativo a arduino, este ser´ seu ambiente de desenvolvimento. a Conecte a placa ao computador atrav´s do cabo USB, o LED verde na placa nomeado por e PWR deve ascender, ele indica que a placa est´ ligada. O arduino seleciona automaticamente a a fonte de alimenta¸ao adequada. c˜ Quando se conecta a placa, o Windows dever´ iniciar o processo de instala¸ao do driver. a c˜ No windows vista, o driver deve ser baixado e instalado automaticamente. No Windows XP o assistente Adicionar Novo Hardware ser´ aberto: a • Quando o Windows perguntar se pode se conectar ao Windows Update para proucurar o software selecione n˜o, clique em Avan¸ar. a c • Selecione personalizar, logo ap´s selecione instalar e clique em Avan¸ar. o c • Certifique-se de poucurar o melhor driver, desmarque a pesquisa de m´ ıdia remov´ ıvel; selecione Incluir este local na pesquisa e proucure os drivers /FTDI USB Drivers diret´rios o de distribui¸ao do Arduino. Clique em Avan¸ar. c˜ c • O assistente ir´ proucurar o driver e em seguida, dizer que um hardware foi encontrado. a Clique em Concluir. • O assistente de novo hardware abrir´ novamente, fa¸a todos os passos da mesma maneira, a c desta vez, uma porta serial USB ser´ encontrada. a 12
  • 14. 4.2 Arduino para GNU/Linux Para a instala¸ao da IDE e suas bibliotecas no sistema operacional Linux, podemos assim como c˜ feito para o Windows baixar o arquivo zipado atrav´s do site http://www.arduino.cc/en/Main/Software. e Apenas vale resaltar que neste sistema operacional temos um tratamento diferente com rela¸˜o ca a manipula¸ao de pastas e diret´rios, agora o arquivo baixado ´ .tar.gz. c˜ o e Al´m desta forma de instala¸ao, temos uma outra mais objetiva para executar o mesmo e c˜ procedimento, esta ultima usando apenas o terminal. Veremos um passo a passo deste proce- ´ dimento usando o Linux Ubuntu. Links usados: • http://www.arduino.cc/playground/Linux/Ubuntu • https://launchpad.net/ arduino-ubuntu-team/+archive/ppa • https://launchpad.net/+help/soyuz/ppa-sources-list.html Passo a Passo da instala¸˜o no Ubuntu ca • O primeiro passo ´ com o terminal aberto digitar o comando: sudo add-apt-repository e ppa:arduino-ubuntu-team/ppa • Com o t´rmino do primeiro passo executamos o segundo comando digitando: sudo apti- e tude update • E por fim executamos o ultimo comando digitando: sudo aptitude install arduino ´ • Ap´s estes trˆs passos a IDE est´ instalada e pode ser acessada pelo menu aplicati- o e a vos/desenvolvimento/arduino Outras distribui¸oes de Linux pesquisar no site http://www.arduino.cc/en/Main/Software c˜ e para Mac OS pesquisar em http://www.arduino.cc/en/Guide/MacOSX. 13
  • 15. Cap´ ıtulo 5 Desenvolvimento de Projetos Neste cap´ ıtulo iremos ver alguns exemplos de aplica¸oes simples com o Arduino, agora com c˜ uma pequena base de c para arduino podemos come¸ar a fazer e explicar exemplos mesmo para c quem n˜o possua uma grande infraestrutura possa realiz´-lo. a a 5.1 Exemplo 1 Come¸aremos com o exemplo Blink, que j´ vem no aplicativo. Para encontrar o exemplo clique c a em File → Examples → Digital → Blink. O programa tem como objetivo acender e apagar o LED de um em um segundo. Para compilar este exemplo n˜o ´ necess´rio de nenhuma outra infraestrutura que n˜o o pr´prio a e a a o Arduino. Primeiramente, vamos criar uma vari´vel chamada ledPin que armazenar´ o n´mero da porta a a u onde o LED est´ conectado (vari´vel do tipo inteiro): a a int ledPin = 13; Assim quando nos referirmos a vari´vel ledPin estaremos nos referindo a sa´ 13. ` a ` ıda O seguinte passo ´ classificar o ledpin como pino de Sa´ e ıda, isto ´ feito da seguinte maneira: e void setup() { pinMode(ledPin, OUTPUT); } A fun¸˜o pinMode() tem como primeiro parˆmetro o pino e como segundo parˆmetro se ca a a ele ´ pino de entrada ou sa´ e ıda. Agora come¸aremos a escrever o processamento. O programa c rodar´ em um loop, pois n˜o h´ ocorrˆncias ou interferˆncias que mudem o estado. Dentro do a a a e e loop ter´ uma fun¸˜o que far´ o LED ficar aceso por 1 segundo e depois ficar apagado por mais a ca a um segundo, ap´s isso volta ao loop. Escreva da seguinte maneira: o void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); } 14
  • 16. A fun¸˜o digitalWrite() escreve uma informa¸ao digital, ou seja, 0 (LOW) ou 1 (HIGH). ca c˜ Seu primeiro parˆmetro ´ o pino de sa´ a e ıda, que no caso ´ o ledPin. O segundo parˆmetro ´ o e a e estado, que no caso ´ a sa´ e ıda, HIGH ou LOW. Quando uma porta digital est´ em estado baixo a (LOW), ela fica com 0V, j´ quando est´ em estado alto (HIGH), fica em 5 V. a a A fun¸ao delay() ´ um atraso que se d´ para a continua¸˜o da leitura do programa, logo c˜ e a ca como foi escrito que o ledPin estar´ aceso, s´ ap´s um segundo, ou como est´ escrito 1000 a o o a ms, ir´ ler a linha seguinte que escreve que a sa´ do ledPin ´ baixa, e o mesmo ocorre mais a ıda e uma vez. Antes de fazer o upload do programa, primeiro deve-se escolher a porta USB em que o Arduino se encontra. Para isso v´ em Tools → Serial Port → porta, onde porta ´ o nome da a e porta onde est´ ligado o Arduino (/dev/ttyUSB*, no caso de GNU/Linux, COM* em Windows). a Para saber em qual porta o Arduino se encontra, fa¸a por tentativa e erro, logo escolha um e c tente rodar, caso n˜o rode, ´ o outro. Outro passo que deve-se fazer ´ escolher o modelo da a e e placa, para isso v´ em Tools → Board e o modelo da sua placa. Agora sim para fazer o upload, a clique em Upload, como mostra a figura 5.1. Figura 5.1: Upload 15
  • 17. 5.2 Exemplo 2 No segundo exemplo exploraremos melhor as sa´ ıdas digitais. Neste exemplo ser˜o necess´rios a a 10 LEDs para sua execu¸ao. Os LEDs ascender˜o em sequˆncia e ficar˜o acesos por 1 segundo, c˜ a e a at´ que o ultimo apagar´ e todos os outros em sequˆncia apagar˜o. e ´ a e a Para a confec¸ao do projeto ligue o positivo dos LEDs nos pinos digitais de 2 ´ 11 e a outra c˜ e ponta em um protoboard, no lado negativo dos LEDs ligue resistores de 150 Ω, em s´rie, e a e outra ponta de todos os resistores no terra do Arduino, GND na placa. Assim como na figura 5.2. Figura 5.2: Circuito Exemplo 2 As primeiras linhas de comando s˜o para declara¸˜o de vari´veis, iremos precisar de uma a ca a vari´vel constante e inteira de valor 10, em nosso caso chamamos de ledCount. Outra vari´vel a a necess´ria ´ um vetor com 10 posi¸˜es, enumerados de 2 ´ 11, que s˜o os n´meros dos pinos de a e co e a u sa´ digital que ser˜o utilizados que tamb´m possuem valores inteiros, chamamos o vetor de ıda a e ledPins. A seguir vem a declara¸ao a ser feita: c˜ const int ledCount = 10; int ledPins[] = { 2, 3, 4, 5, 6, 7,8,9,10,11 }; Agora com as vari´veis declaradas vamos definir o vetor ledPins como pinos de sa´ , a ıda para isso utilizaremos um loop, da seguinte maneira: void setup() { for (int thisLed = 0; thisLed < ledCount; thisLed++) { pinMode(ledPins[thisLed], OUTPUT); } } Na primeira posi¸˜o do for declaramos uma vari´vel que inicia em 0. Na segunda posi¸ao ca a c˜ damos a condi¸ao para o for, e na terceira a cada vez que ´ verificada a condi¸ao do for, com c˜ e c˜ execu¸˜o da primeira, ´ acrescido 1 ao valor de thisLed, que ´ a vari´vel que utilizaremos ca e e a para chamar as determinadas posi¸˜es do vetor ledPins. A fun¸ao pinMode(), como vista co c˜ no exemplo anterior, est´ declarando que o vetor ledPins ´ um vetor de sa´ de dados. a e ıda Agora ser´ iniciado um loop, que far´ com que o programa sempre rode, dentro dele ter´ a a a um for que acender´ todos os LEDs sequencialmente, com um intervalo de 1 segundo (1000 a ms) entre cada LED. O corpo do programa fica da seguinte maneira: void loop() { 16
  • 18. for (int thisLed = 0; thisLed < ledCount; thisLed++) { digitalWrite(ledPins[thisLed], HIGH); delay(1000); } delay(1000); Perceba que o for ´ da mesma maneira que o ultimo, pois a id´ia ´ sempre se referir `s po- e ´ e e a si¸˜es do vetor, a diferen¸a aqui ´ que para cada posi¸˜o estamos acendendo um LED, usando co c e ca a fun¸ao digitalWrite. A fun¸ao delay foi utilizada para que seja mais f´cil de visualizar c˜ c˜ a que cada LED acende de cada vez, e que ap´s todos os LEDs acenderem, todos ficam acesos o por mais um segundo. Agora ser´ feito o mesmo, mas para apagar os LEDs, como mostra a seguir: a for (int thisLed = 9; thisLed >= 0; thisLed--) { digitalWrite(ledPins[thisLed], LOW); delay(1000); } delay(1000); } A vari´vel thisLed, utilizada apenas no for, come¸a com valor 9 e ´ decrescida de 1 at´ a c e e que chegue em 0, logo os LEDs apagar´o do ultimo a acender para o primeiro, e permanecer´ a ´ a apagado por 1 segundo. Este foi o segundo exemplo, perceba que ´ poss´ modific´-lo com o que j´ foi aprendido, e ıvel a a fazendo com que ele apague na mesma ordem que acende, ou fazendo qualquer outra mudan¸a c desejada. 17
  • 19. 5.3 Exemplo 3 Neste exemplo utilizaremos a entrada anal´gica e a sa´ serial na confec¸˜o de um capac´ o ıda ca ımetro. Para isso ser´ necess´rio um resistor, que pode ter qualquer valor que chamaremos de R1, um a a resitor de 220Ω, um capacitor, um protoboard e um fio. Ligue o positivo do capacitor em um ponto comum e o negativo no terra, o resistor R1 entre o +5 da placa e o ponto comum, ligue o outro resistor, que chamaremos de R2 e tem o valor de 220 Ω entre o ponto comum e o pino 11, que ´ o pino que ir´ descarregar o capacitor. Ligue e a o fio do ponto comum a entrada anal´gica. o Figura 5.3: Circuito Exemplo 3 Iremos calcular o valor do capacitor medindo o tempo de carga, sabemos que uma cons- tante de tempo (τ = T C) em segundos ´ igual a resistˆncia (R) em ohms multiplicado pela e e capacitˆncia (C) em farads, e que a tens˜o no capacitor em uma constante de tempo (TC***) a a ´ de 63,2% do valor m´ximo, podemos calcular a capacitˆncia, pois como sabemos o valor da e a a fonte fornecida pelo arduino, 5 V, basta calcularmos 63,2% de sua tens˜o e quando a tens˜o no a a capacitor encontrar este valor basta dividi-la pelo valor da resistencia R1. τ = R ∗ C, ou seja 63, 2%V = R ∗ C, onde V ´ a tens˜o m´xima. e a a A programa¸ao come¸a com a declara¸ao de vari´veis, ou seja, um pino anal´gico para medir c˜ c c˜ a o tens˜o no capacitor, um pino de carga e um de descarga do capacitor e um pino com o valor a de R1, como podemos ver no exemplo a seguir: #define analogPin 0 #define chargePin 13 #define dischargePin 11 #define resistorValue R1 unsigned long startTime; unsigned long elapsedTime; float microFarads; float nanoFarads; Perceba que o valor de R1 deve ser substitu´ pelo valor escolhido. ıdo Devemos ajustar o pino 13 como pino de sa´ ıda, como j´ foi feito em exemplos anteriores, e a iniciar a sa´ serial a fim de depurar erros: ıda void setup(){ pinMode(chargePin, OUTPUT); digitalWrite(chargePin, LOW); Serial.begin(9600); } No decorrer do desenvolvimento da apostila ainda n˜o hav´ a ıamos mencionado a comunica¸˜o ca serial, no pr´prio compilador arduino-0018 existe uma interface que lhe proporciona observar o a sa´ e entrada na pr´pria tela do computador, a figura 5.2 abaixo mostra onde ter acesso a ıda o esse recurso. 18
  • 20. Figura 5.4: Comunica¸ao Serial c˜ Em nosso caso utilizamos a frequˆncia de transferˆncia de dados de 9600B/s, mas ´ poss´ e e e ıvel selecionar outros valores j´ pr´-determinados pelo programa que podem ser observados quando a e se abre a comunica¸˜o serial. ca Iniciaremos o loop do programa fornecendo energia ao pino de carga do capacitor e acionando o startTime, que ´ a vari´vel que ir´ temporizar o tempo de carga do capacitor. Para poder e a a calcular os 63,2% da carga teremos que fazer uma convers˜o, pois o fim da escala ´ de 1023, logo a e 63,2% disso corresponde ´ 647, que ´ a porcentagem da tens˜o m´xima no capacitor. Enquanto e e a a a entrada do pino anal´gico n˜o equivaler a esta porcentagem de tempo n˜o ocorre nada, apenas o a a a contagem de tempo de carga do capacitor, que j´ esta sendo feita pela vari´vel startTime. a a Quando esta porcentagem ´ ultrapassada mede-se a capacitˆncia dividindo o tempo de carga e a pelo valor de R1. Como ´ usual que valores de capacitˆncia sejam baixos, na ordem de mili a nano Farad, ´ e a e mais agrad´vel que se expresse o valor em mili ou nano Farad, ou seja, multiplique o valor da a capacitˆncia por 1000 e acrescente o mF no final, caso mesmo com este procedimento o valor a ainda seja menor que 1, podemos utilizar outras escalas (micro, nano, etc.). A programa¸˜o ca referida pode ser observada a seguir: void loop(){ digitalWrite(chargePin, HIGH); // coloque HIGH em chargePin startTime = millis(); while (analogRead(analogPin) < 648) { } elapsedTime = millis() - startTime; microFarads = ((float)elapsedTime / resistorValue) * 1000; Serial.print(elapsedTime); Serial.println(" ms"); if (microFarads > 1) { Serial.print((long)microFarads); Serial.println(" mF"); } else { nanoFarads = microFarads * 1000.0; Serial.print((long)nanoFarads); Serial.println(" nF"); } O programa j´ est´ quase conclu´ a a ıdo, basta fazer a descarga do capacitor. Para isso “des- 19
  • 21. ligue” o chargePin, ajuste dischargePin como sa´ ıda, coloque LOW at´ que o capacitor esteja e descarregado, e volte a ajustar o dischargePin como entrada, da seguinte maneira: digitalWrite(chargePin, LOW); pinMode(dischargePin, OUTPUT); digitalWrite(dischargePin, LOW); while (analogRead(analogPin) > 0) { } pinMode(dischargePin, INPUT); } 5.4 Exemplo 4 Este exemplo ilustra o uso de uma das sa´ ıdas PWM(Pulse-Width Modulation - Modula¸˜o por ca Largura de Pulso) do Arduino com um servomotor. Qualquer servo com um terminal de con- trole compat´ pode ser utilizado. Aqui usaremos um polar rotor do tipo usado em antenas ıvel parab´licas. Primeiramente ´ importante saber o que ´ PWM e o que ´ poss´ fazer. o e e e ıvel PWM ´ uma tecnologia que permite controlar o per´ e ıodo c´ ıclico da frequˆncia da alimenta¸˜o. e ca Figura 5.5: PWM Suas aplica¸˜es s˜o diversas e abrangem tanto usos industriais quanto dom´sticos. Em in- co a e d´strias, o PWM pode ser usado para controlar elevadores de carga, esteiras rolantes e guinchos. u J´ em aplica¸oes dom´sticas, pode ser usado para controle de ilumina¸ao, port˜es e cortinas. a c˜ e c˜ o Iremos utilizar a entrada manual comandada por um potenciˆmetro linear de 100 kΩ. o O motor possui 3 fios: um vermelho, um preto e um branco. Os fios preto e vermelho correspondem ao negativo e positivo da alimenta¸ao, respectivamente, e neste exemplo podemos c˜ conect´-los diretamente aos pinos de alimenta¸˜o do Arduino. O vermelho ´ conectado ao pino a ca e 5V, e o preto a qualquer um dos pinos GND. O fio branco ´ o terminal de controle, e deve ser e conectado a uma das sa´ ıdas digitais com PWM, qualquer um dos pinos 3, 5, 6, 9, 10 ou 11. No exemplo usaremos o 10. O potenciˆmetro linear de 100 kΩ ´ conectado tendo um dos seus pinos extremos ligado o e ao GND, o outro extremo ao pino AREF, que fornece a tens˜o de referˆncia, e o pino central a e conectado a qualquer uma das entradas anal´gicas, utilizaremos o pino 1. o Desta vez usaremos uma biblioteca para suporte de servos, logo no in´ ıcio do programa deveremos import´-la. Deveremos criar um objeto do tipo servo que ser´ utilizado para controle, a a da seguinte maneira: 20
  • 22. Figura 5.6: Exemplo 4 #include <Servo.h> Servo meuservo; A seguir ´ feita a parte de declara¸ao de vari´veis, iremos declarar um pino para o potenci- e c˜ a ometro e servo, e uma vari´vel inteira para o valor lido do potenciˆmetro. Tamb´m deveremos ˆ a o e iniciar o servo, que em nosso caso est´ conectado ao pino 10, como vemos a seguir: a int potpin = 1; int val; void setup() { meuservo.attach(10); } Quando lermos a entrada do potenciˆmetro teremos que converter seu valor para graus para o podermos controlar em graus quanto o motor ir´ girar, para isto utilizaremos a fun¸ao map. a c˜ Ap´s isto apenas devemos enviar a informa¸˜o para o motor e esperar alguns milissegundos o ca para a movimenta¸ao do motor. c˜ void loop() { val = analogRead(potpin); val = map(val, 0, 1023, 0, 180); meuservo.write(val); delay(500); } 21
  • 23. Cap´ ıtulo 6 Referˆncias Bibliogr´ficas e a Sites: http://www.sabereletr^nica.com.br/secoes/leitura/1307 o Acessado em: 09/10/2010 http://arduino.cc/en/Reference/HomePage Acessado em: 09/10/2010 http://www.arduino.cc Acessado em: 09/10/2010 http://www.arduino.cc/en/Reference/AttachInterrupt Acessado em: 09/10/2010 http://projeto39.wordpress.com/o-arduino-duemilanove/ Acessado em: 09/10/2010 22