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

Ap tut arduino

  • 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 dealimenta¸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 citarque 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¸aoSerial 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: Exemplo4 #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