Вы находитесь на странице: 1из 23

Universidade Federal Fluminense Centro Tecnologico Escola de Engenharia Curso de Engenharia de Telecomunica oes c Programa de Educa ao Tutorial c

Apostila Arduino

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

Sumrio a
1 Introduo ao Arduino ca 2 Caracter sticas do Duemilanove 2.1 Caracter sticas . . . . . . . . . . . 2.2 Alimentao . . . . . . . . . . . . . ca 2.3 Memria . . . . . . . . . . . . . . . o 2.4 Entrada e Sa . . . . . . . . . . . da 2.5 Comunicao . . . . . . . . . . . . ca 2.6 Programaao . . . . . . . . . . . . c 2.7 Reset Automtico . . . . . . . . . . a 2.8 Proteo contra sobrecorrente USB ca 2 4 4 4 5 5 6 6 6 7 8 8 9 10

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

3 Referncias da linguagem usada na programao e ca 3.1 Linguaguem de referncia . . . . . . . . . . . . . e 3.2 Funoes . . . . . . . . . . . . . . . . . . . . . . . c 3.3 Bibliotecas . . . . . . . . . . . . . . . . . . . . . .

do Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Instalao da IDE e suas bibliotecas ca 12 4.1 Arduino para Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2 Arduino para GNU/Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 5 Desenvolvimento 5.1 Exemplo 1 . . 5.2 Exemplo 2 . . 5.3 Exemplo 3 . . 5.4 Exemplo 4 . . de . . . . . . . . Projetos . . . . . . . . . . . . . . . . . . . . . . . . 14 14 16 18 20 22

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

6 Referncias Bibliogrcas e a

Cap tulo 1 Introduo ao Arduino ca


O Arduino faz parte do conceito de hardware e software livre e est aberto para uso e contribuia ao de toda sociedade. O conceito Arduino surgiu na Itlia em 2005 com o objetivo de criar um c a dispositivo para controlar projetos/prottipos constru o dos de uma forma menos dispendiosa do que outros sistemas dispon veis no mercado. Arduino uma plataforma de computao f e ca sica (so sistemas digitais ligados a sensores e a atuadores, que permitem construir sistemas que percebam a realidade e respondem com aoes c f sicas), baseada em uma simples placa de Entrada/Sa microcontrolada e desenvolvida sobre da uma biblioteca que simplica a escrita da programaao em C/C++. O Arduino pode ser usado c para desenvolver artefatos interativos stand-alone ou conectados ao computador atravs de e Adobe Flash, Processing, Max/MSP, Pure Data ou SuperCollider. Um microcontrolador (tambm denominado MCU) um computador em um chip, que cone e tm processador, memria e perifricos de entrada/sa e o e da. E um microprocessador que pode ser programado para funoes espec c cas, em contraste com outros microprocessadores de propsito o geral (como os utilizados nos PCs). Eles so embarcados no interior de algum outro dispositivo, a no nosso caso o Arduino, para que possam controlar suas funes ou aoes. co c E um kit de desenvolvimento capaz de interpretar variveis no ambiente e transform-las em a a sinal eltrico correspondente, atravs de sensores ligados aos seus terminais de entrada, e atuar e e no controle ou acionamento de algum outro elemento eletro-eletrnico 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 aps 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 tm 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 eltricos, podendo receber ou enviar informaoes/tenses o e c o neles. Para um melhor entendimento, abaixo na gura 1 poss identicar os elementos princie vel pais do circuito atravs de diagrama em blocos. e

Figura 1.1: Diagrama de Blocos

O Arduino baseado em um microcontrolador (Atmega), e dessa forma logicamente proe e gramvel, ou seja, poss a criaao de programas, utilizando uma linguagem prpria baseada a e vel c o em C/C++, que, quando implementadas fazem com que o hardware execute certas aoes. Dessa c forma, estamos congurando a etapa de processamento. O grande diferencial desta ferramenta que ela desenvolvida e aperfeioada por uma e e c comunidade que divulga os seus projetos e seus cdigos de aplicaao, pois a concepao dela o c c e open-source, ou seja, qualquer pessoa com conhecimento de programaao pode modic-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 nalidade de ser de fcil entendimento, programaao e aplicaa c ao, alm de ser multiplataforma, ou seja, podemos congura-lo em ambientes Windows, c e GNU/Linux e Mac OS. Assim sendo, pode ser perfeitamente utilizado como ferramenta educacional sem se preocupar que o usurio tenha um conhecimento espec a co de eletrnica, mas pelo o fato de ter o seu esquema e software de programaao open-source, acabou chamando a atenao c c dos tcnicos de eletrnica, que comearam a aperfeio-la e a criar aplicaoes mais complexas. e o c c a c

Cap tulo 2 Caracter sticas do Duemilanove


O Arduino Duemilanove (2009 em italiano) uma placa baseada no microcontrolador ATe mega168 ou ATmega328. Tem 14 pinos de entrada ou sa digital (dos quais 6 podem ser da utilizados como sa das PWM), 6 entradas analgicas, um oscilador de cristal 16 MHz, controo lador USB, uma tomada de alimentaao, um conector ICSP, e um boto de reset. Para sua c a utilizaao 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 Tenso operacional a 5V Tenso de alimentaao (recomendada) a c 7-12 V Tenso de alimentaao (limites) a c 6-20 V Pinos I/O digitais 14 (dos quais 6 podem ser Sa das PWM) Pinos de entrada analgica o 6 Corrente cont nua por pino I/O 40 mA Corrente cont nua para o pino 3.3 V 50 mA Memria ash o 32 KB (2KB usados para o bootloader) / 16KB SRAM 2 KB EEPROM 1 KB Frequncia de clock e 16 MHz Tabela com as caracter sticas bsicas do arduino Duemilanove. a

2.2

Alimentao ca

O Arduino Duemilanove pode ser alimentado pela conexo USB ou por qualquer fonte de a alimentao externa. A fonte de alimentao selecionada automaticamente. ca ca e A alimentao externa (no-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 alimentaao. c Cabos vindos de uma bateria podem ser inseridos nos pinos GND (terra) e Vin (entrada de tenso) do conector de alimentao. a ca A placa pode operar com uma alimentao externa de 6 a 20 V. Entretanto, se a alimentaao ca c for inferior a 7 V o pino 5 V pode fornecer menos de 5 V e a placa pode car instvel. Se a a alimentao for superior a 12 V o regulador de tenso pode superaquecer e avariar a placa. A ca a alimentao recomendada de 7 a 12 V. ca e

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

2.3

Memria o

O ATmega328 tem 32 KB de memria ash (onde armazenado o software), alm de 2 KB o e e de SRAM (onde cam as variveis) e 1 KB of EEPROM (esta ultima pode ser lida e escrita a atravs da biblioteca EEPROM e guarda os dados permanentemente, mesmo que desliguemos e a placa). A memria 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 funes de pinMode(), digitalWrite(), e digitalRead(). Eles operam com 5 V. co Cada pino pode fornecer ou receber um mximo de 40 mA e tem um resistor pull-up interno a (desconectado por padro) de 20-50 k. Alm disso, alguns pinos tm funoes especializadas: a e e c Serial: 0 (RX) e 1 (TX). Usados para receber (RX) e transmitir (TX) dados seriais TTL. Estes pinos so conectados aos pinos correspondentes do chip serial FTDI USB-to-TTL. a PWM: 3, 5, 6, 9, 10, e 11. Fornecem uma sa analgica PWM de 8-bit com a funao da o c analogWrite(). SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estes pinos suportam comunicao SPI, ca que embora compat com o hardware, no 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 analgicas, cada uma delas est ligada a um conversor o a analgico-digital de 10 bits, ou seja, transformam a leitura analgica em um valor dentre 1024 o o possibilidades (exemplo: de 0 a 1023). Por padro, elas medem de 0 a 5 V, embora seja a poss mudar o limite superior usando o pino AREF e um pouco de cdigo de baixo n vel o vel. Adicionalmente alguns pinos tm funcionalidades especializadas: e I2C: 4 (SDA) e 5 (SCL). Suportam comunicaao I2C (TWI) usando a biblioteca Wire. c AREF. referncia de tenso para entradas analgicas. Usados com analogReference(). e a o Reset. Envie o valor LOW para reiniciar o microcontrolador. Tipicamente utilizados para adicionar um boto de reset aos shields( placas que podem ser plugadas ao Arduino para a extender suas capacidades) que bloqueiam o que h na placa. a

2.5

Comunicao ca

Com o Arduino Duemilanove a comunicaao com um computador, com outro Arduino ou com c outros microcontroladores muito simplicada. O ATmega328 permite comunicaao serial no e c padro 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 comunicao serial atravs 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 ` esto sendo transferidos ao computador pelo chip FTDI e h conexo USB (mas no quando a a a a h comunicaao serial pelos pinos 0 e 1). a c A biblioteca SoftwareSerial permite comunicaao serial por quaisquer dos pinos digitais do c Duemilanove. O ATmega328 tambm oferece suporte aos padres de comunicao I2C (TWI) e SPI. O e o ca software do Arduino inclui uma biblioteca Wire para simplicar o uso do barramento I2C. Para usar a comunicaao SPI veja o datasheet (folha de informaoes) do ATmega328. c c

2.6

Programao ca

O ambiente de programao 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 programaao c no cap tulo Referncias da linguagem usada na programaao do Arduino. e c

2.7

Reset Automtico a

Algumas verses anteriores do Arduino requerem um reset f o sico (pressionando o boto 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 atravs 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 lgico baixo, o sinal cai por tempo suciente para reiniciar o chip. O software vel o Arduino usa esta caracter stica para permitir carregar o programa simplesmente pressionando o boto upload no ambiente Arduino. Isto signica que o bootloader pode ter um timeout a mais curto, j que a ativao do DTR (sinal baixo) pode ser bem coordenada com o in do a ca cio upload. Estas conguraes tm outras implicaoes. 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 conexo feita por a e software (via USB). No prximo meio segundo aproximadamente, o bootloader estar rodando o a no Duemilanove. Considerando que programado para ignorar qualquer coisa a no ser um e a upload de um novo cdigo, ele interceptar os primeiros bytes de dados sendo enviados para a o a placa depois que a conexo aberta. Se um sketch rodando na placa recebe conguraoes 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 conexo 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 tambm desabilitar o a e e e auto-reset conectando um resistor de 110 dos +5 V at o sinal de reset. e

2.8

Proteo 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 proteo interna ca prpria, o fus proporciona uma proteao extra. Se mais de 500 mA forem aplicados na porta o vel c USB, o fus ir automaticamente interromper a conexo at que o curto ou a sobrecarga seja vel a a e removida.

Cap tulo 3 Referncias da linguagem usada na e programao do Arduino ca


Nesse cap tulo iremos fazer uma pequena introduo sobre como so estruturados os programas ca a para o Arduino, conhecendo a linguagem usada como referncia e suas principais funoes. E e c por m veremos as funcionalidades extras que o uso de bibliotecas nos proporciona.

3.1

Linguaguem de referncia e

Os programas para o Arduino so implementados tendo como referncia a linguagem C++. a e Preservando sua sintaxe clssica na declaraao de variveis, nos operadores, nos ponteiros, nos a c a vetores, nas estruturas e em muitas outras caracter sticas da linguagem. Com isso temos as referncias da linguagem, essas podem ser divididas em trs partes principais: As estruturas, e e os valores (variveis e constantes) e as funes. a co As estruturas de referncias so: e a Estruturas de controle (if, else, break, ...) Sintaxe bsica (dene, include, ; , ...) a Operadores aritmticos e de comparao (+, -, =, ==, !=, ...) e ca Operadores booleanos (, ||, !) Acesso a ponteiros (*, ) Operadores compostos (++, , +=, ...) Operadores de bits (|, , , ...) Os valores de referncias so: e a Tipos de dados(byte, array, int , char , ...) Converses(char(), byte(), int(), ...) o Varivel de escopo e de qualicao (variable scope, static, volatile, ...) a ca Utilitrios (sizeof(), diz o tamanho da varivel em bytes) a a

E bom citar que o software que vem no Arduino j prov vrias funes e constantes para a e a co facilitar a programaao. c setup() loop() Constantes (HIGH | LOW , INPUT | OUTPUT , ...) Bibliotecas (Serial, Servo, Tone, etc.)

3.2

Funes co

As funoes so referncias essenciais para o desenvolvimento de um projeto usando o Arduino, c a e principalmente para os iniciantes no assunto. Essas funoes j implementadas e dispon c a veis em bibliotecas direcionam e exemplicam as funcionalidades bsicas do microcontrolador. Temos a como funoes bsicas e de referncias as seguintes funoes: c a e c Digital I/O pinMode() digitalWrite() digitalRead() Analgico I/O o analogReference() analogRead() analogWrite() - PWM Avanado I/O c tone() noTone() shiftOut() pulseIn() Tempo millis() micros() delay() delayMicroseconds() Matemtica a min() max() abs() constrain() map() pow() ***s do C/C++ sqrt() ***s do C/C++ o o Trigonomtrica e sin() ***s do C/C++ cos() ***s do C/C++ tan() ***s do C/C++ o o o Nmeros aleatrios u o randomSeed() random() Bits e Bytes lowByte() highByte() bitRead() bitWrite() bitSet() bitClear() bit() Interrupoes externas c attachInterrupt() detachInterrupt() Interrupoes c interrupts() noInterrupts() Comunicaao Serial c

3.3

Bibliotecas

O uso de bibliotecas nos proporciona um horizonte de programaao mais amplo e diverso quando c comparado a utilizao apenas de estruturas, valores e funes. Isso percept ca co e vel quando analisamos os assuntos que so abordados por cada biblioteca em espec a co. Lembrando sempre que, para se fazer uso de uma biblioteca esta j deve estar instalada e dispon na sua mquina. a vel a Temos as seguintes bibliotecas de referncia: 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 Firmata. 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 Interface (SPI). SoftwareSerial - Para a comunicaao 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 atravs de uma rede e de dispositivos ou sensores. Temos como referncia tambm, o uso de bibliotecas mais espec e e cas. O que de extrema e importncia quando se faz o uso do arduino com um enfoque em uma determinada area. Como a por exemplo: Comunicao (redes e protocolos) ca Messenger - Para o processamento de mensagens de texto a partir do computador. NewSoftSerial - Uma verso 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 atravs de uma conexo serial. e a

10

Sensoriamento Capacitive Sensing - Transformar dois ou mais pinos em sensores capacitivos. Debounce - Leitura de ruidos na entrada digital. Gerao de Frequncia e de Audio ca e Tone - Gerar ondas quadradas de freqncia de udio em qualquer pino do microcontroue a lador. Temporizao 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 interrupao para desencadear uma ao a c ca cada N milissegundos. Utilidades TextString (String) - Manipular strings PString - uma classe leve para imprimir em buers. Streaming - Um mtodo para simplicar as declaraes de impresso. e co a

11

Cap tulo 4 Instalao da IDE e suas bibliotecas ca


Neste cap tulo iremos explicar como instalar a IDE e conectar a placa Arduino ao computador para sua programaao. 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 necessrio um programa capaz de descompactar o arquivo a a (exemplos: WinZip, WinRAR, etc.). Certique-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 atravs 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 alimentaao adequada. c Quando se conecta a placa, o Windows dever iniciar o processo de instalaao 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 no, clique em Avanar. a c Selecione personalizar, logo aps selecione instalar e clique em Avanar. o c Certique-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 diretrios o de distribuiao do Arduino. Clique em Avanar. 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, faa 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 instalaao da IDE e suas bibliotecas no sistema operacional Linux, podemos assim como c feito para o Windows baixar o arquivo zipado atravs do site http://www.arduino.cc/en/Main/Software. e Apenas vale resaltar que neste sistema operacional temos um tratamento diferente com relao ca a manipulaao de pastas e diretrios, agora o arquivo baixado .tar.gz. c o e Alm desta forma de instalaao, 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 instalao 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 trmino do primeiro passo executamos o segundo comando digitando: sudo aptie tude update E por m executamos o ultimo comando digitando: sudo aptitude install arduino Aps estes trs passos a IDE est instalada e pode ser acessada pelo menu aplicatio e a vos/desenvolvimento/arduino Outras distribuioes 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 aplicaoes simples com o Arduino, agora com c uma pequena base de c para arduino podemos comear a fazer e explicar exemplos mesmo para c quem no possua uma grande infraestrutura possa realiz-lo. a a

5.1

Exemplo 1

Comearemos 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 no necessrio de nenhuma outra infraestrutura que no o prprio a e a a o Arduino. Primeiramente, vamos criar uma varivel chamada ledPin que armazenar o nmero da porta a a u onde o LED est conectado (varivel do tipo inteiro): a a int ledPin = 13;

Assim quando nos referirmos a varivel ledPin estaremos nos referindo a sa 13. ` a ` da O seguinte passo classicar o ledpin como pino de Sa e da, isto feito da seguinte maneira: e void setup() { pinMode(ledPin, OUTPUT); } A funo pinMode() tem como primeiro parmetro o pino e como segundo parmetro se ca a a ele pino de entrada ou sa e da. Agora comearemos a escrever o processamento. O programa c rodar em um loop, pois no h ocorrncias ou interferncias que mudem o estado. Dentro do a a a e e loop ter uma funo que far o LED car aceso por 1 segundo e depois car apagado por mais a ca a um segundo, aps isso volta ao loop. Escreva da seguinte maneira: o void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }

14

A funo digitalWrite() escreve uma informaao digital, ou seja, 0 (LOW) ou 1 (HIGH). ca c Seu primeiro parmetro o pino de sa a e da, que no caso o ledPin. O segundo parmetro 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 ca com 0V, j quando est em estado alto (HIGH), ca em 5 V. a a A funao delay() um atraso que se d para a continuao da leitura do programa, logo c e a ca como foi escrito que o ledPin estar aceso, s aps 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, faa por tentativa e erro, logo escolha um e c tente rodar, caso no 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 gura 5.1.

Figura 5.1: Upload

15

5.2

Exemplo 2

No segundo exemplo exploraremos melhor as sa das digitais. Neste exemplo sero necessrios a a 10 LEDs para sua execuao. Os LEDs ascendero em sequncia e caro acesos por 1 segundo, c a e a at que o ultimo apagar e todos os outros em sequncia apagaro. e a e a Para a confecao 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 srie, e a e outra ponta de todos os resistores no terra do Arduino, GND na placa. Assim como na gura 5.2.

Figura 5.2: Circuito Exemplo 2 As primeiras linhas de comando so para declarao de variveis, iremos precisar de uma a ca a varivel constante e inteira de valor 10, em nosso caso chamamos de ledCount. Outra varivel a a necessria um vetor com 10 posies, enumerados de 2 11, que so os nmeros dos pinos de a e co e a u sa digital que sero utilizados que tambm possuem valores inteiros, chamamos o vetor de da a e ledPins. A seguir vem a declaraao a ser feita: c const int ledCount = 10; int ledPins[] = { 2, 3, 4, 5, 6, 7,8,9,10,11 }; Agora com as variveis declaradas vamos denir 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 posio do for declaramos uma varivel que inicia em 0. Na segunda posiao ca a c damos a condiao para o for, e na terceira a cada vez que vericada a condiao do for, com c e c execuo da primeira, acrescido 1 ao valor de thisLed, que a varivel que utilizaremos ca e e a para chamar as determinadas posies do vetor ledPins. A funao 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 ca 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 idia sempre se referir `s poe e e a sies do vetor, a diferena aqui que para cada posio estamos acendendo um LED, usando co c e ca a funao digitalWrite. A funao delay foi utilizada para que seja mais fcil de visualizar c c a que cada LED acende de cada vez, e que aps todos os LEDs acenderem, todos cam 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 varivel thisLed, utilizada apenas no for, comea com valor 9 e decrescida de 1 at a c e e que chegue em 0, logo os LEDs apagaro do ultimo a acender para o primeiro, e permanecer a a apagado por 1 segundo. Este foi o segundo exemplo, perceba que poss modic-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 mudana c desejada.

17

5.3

Exemplo 3

Neste exemplo utilizaremos a entrada analgica e a sa serial na confeco de um capac o da ca metro. Para isso ser necessrio um resistor, que pode ter qualquer valor que chamaremos de R1, um a a resitor de 220, um capacitor, um protoboard e um o. 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 o do ponto comum a entrada analgica. o

Figura 5.3: Circuito Exemplo 3 Iremos calcular o valor do capacitor medindo o tempo de carga, sabemos que uma constante de tempo ( = T C) em segundos igual a resistncia (R) em ohms multiplicado pela e e capacitncia (C) em farads, e que a tenso no capacitor em uma constante de tempo (TC***) a a de 63,2% do valor mximo, podemos calcular a capacitncia, pois como sabemos o valor da e a a fonte fornecida pelo arduino, 5 V, basta calcularmos 63,2% de sua tenso e quando a tenso 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 tenso mxima. e a a A programaao comea com a declaraao de variveis, ou seja, um pino analgico para medir c c c a o tenso 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 m de depurar erros: da void setup(){ pinMode(chargePin, OUTPUT); digitalWrite(chargePin, LOW); Serial.begin(9600); } No decorrer do desenvolvimento da apostila ainda no hav a amos mencionado a comunicao ca serial, no prprio compilador arduino-0018 existe uma interface que lhe proporciona observar o a sa e entrada na prpria tela do computador, a gura 5.2 abaixo mostra onde ter acesso a da o esse recurso.

18

Figura 5.4: Comunicaao Serial c Em nosso caso utilizamos a frequncia de transferncia 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 comunicao serial. ca Iniciaremos o loop do programa fornecendo energia ao pino de carga do capacitor e acionando o startTime, que a varivel que ir temporizar o tempo de carga do capacitor. Para poder e a a calcular os 63,2% da carga teremos que fazer uma converso, pois o m da escala de 1023, logo a e 63,2% disso corresponde 647, que a porcentagem da tenso mxima no capacitor. Enquanto e e a a a entrada do pino analgico no equivaler a esta porcentagem de tempo no ocorre nada, apenas o a a a contagem de tempo de carga do capacitor, que j esta sendo feita pela varivel startTime. a a Quando esta porcentagem ultrapassada mede-se a capacitncia dividindo o tempo de carga e a pelo valor de R1. Como usual que valores de capacitncia sejam baixos, na ordem de mili a nano Farad, e a e mais agradvel que se expresse o valor em mili ou nano Farad, ou seja, multiplique o valor da a capacitncia por 1000 e acrescente o mF no nal, caso mesmo com este procedimento o valor a ainda seja menor que 1, podemos utilizar outras escalas (micro, nano, etc.). A programao ca referida pode ser observada a seguir: void loop(){ digitalWrite(chargePin, HIGH); startTime = millis(); // coloque HIGH em chargePin

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 - Modulao por ca Largura de Pulso) do Arduino com um servomotor. Qualquer servo com um terminal de controle compat pode ser utilizado. Aqui usaremos um polar rotor do tipo usado em antenas vel parablicas. 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 frequncia da alimentao. e ca

Figura 5.5: PWM Suas aplicaes so diversas e abrangem tanto usos industriais quanto domsticos. Em inco a e dstrias, o PWM pode ser usado para controlar elevadores de carga, esteiras rolantes e guinchos. u J em aplicaoes domsticas, pode ser usado para controle de iluminaao, portes e cortinas. a c e c o Iremos utilizar a entrada manual comandada por um potencimetro linear de 100 k. o O motor possui 3 os: um vermelho, um preto e um branco. Os os preto e vermelho correspondem ao negativo e positivo da alimentaao, respectivamente, e neste exemplo podemos c conect-los diretamente aos pinos de alimentao do Arduino. O vermelho conectado ao pino a ca e 5V, e o preto a qualquer um dos pinos GND. O o 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 potencimetro 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 tenso de referncia, e o pino central a e conectado a qualquer uma das entradas analgicas, 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 declaraao de variveis, iremos declarar um pino para o potencie c a ometro e servo, e uma varivel inteira para o valor lido do potencimetro. Tambm 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 potencimetro teremos que converter seu valor para graus para o podermos controlar em graus quanto o motor ir girar, para isto utilizaremos a funao map. a c Aps isto apenas devemos enviar a informao para o motor e esperar alguns milissegundos o ca para a movimentaao do motor. c void loop() { val = analogRead(potpin); val = map(val, 0, 1023, 0, 180); meuservo.write(val); delay(500); }

21

Cap tulo 6 Referncias Bibliogrcas 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