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