Tut arduino
Upcoming SlideShare
Loading in...5
×
 

Tut arduino

on

  • 452 views

Tut arduino

Tut arduino

Statistics

Views

Total Views
452
Views on SlideShare
452
Embed Views
0

Actions

Likes
0
Downloads
8
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Tut arduino Tut arduino Document Transcript

    • 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 a1 Introdu¸˜o ao Arduino ca 22 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 . . . . . . . . . . . . . . . . . . . . . . . . . 73 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Instala¸˜o da IDE e suas bibliotecas ca 12 4.1 Arduino para Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2 Arduino para GNU/Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Desenvolvimento de Projetos 14 5.1 Exemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 5.2 Exemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 5.3 Exemplo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5.4 Exemplo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 Referˆncias Bibliogr´ficas e a 22 1
    • Cap´ ıtulo 1Introdu¸˜o ao Arduino caO 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 umc˜ adispositivo para controlar projetos/prot´tipos constru´ o ıdos de uma forma menos dispendiosa doque outros sistemas dispon´ ıveis no mercado. Arduino ´ uma plataforma de computa¸˜o f´ e ca ısica (s˜o sistemas digitais ligados a sensores e aatuadores, 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 ıdauma 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 eAdobe Flash, Processing, Max/MSP, Pure Data ou SuperCollider. Um microcontrolador (tamb´m denominado MCU) ´ um computador em um chip, que con- e et´m processador, mem´ria e perif´ricos de entrada/sa´ e o e ´ ıda. E um microprocessador que pode serprogramado para fun¸oes espec´ c˜ ıficas, em contraste com outros microprocessadores de prop´sito ogeral (como os utilizados nos PCs). Eles s˜o embarcados no interior de algum outro dispositivo, ano 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 asinal el´trico correspondente, atrav´s de sensores ligados aos seus terminais de entrada, e atuar e eno controle ou acionamento de algum outro elemento eletro-eletrˆnico conectado ao terminal ode sa´ ıda. Ou seja, ´ uma ferramenta de controle de entrada e sa´ de dados, que pode ser e ıdaacionada por um sensor (por exemplo um resistor dependente da luz - LDR) e que, logo ap´s opassar por uma etapa de processamento, o microcontrolador, poder´ acionar um atuador (um amotor por exemplo). Como podem perceber, ´ como um computador, que tˆm como sensores e ede 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˜ oneles. Para um melhor entendimento, abaixo na figura 1 ´ poss´ identificar os elementos princi- e ıvelpais 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 egram´vel, ou seja, ´ poss´ a cria¸ao de programas, utilizando uma linguagem pr´pria baseada a e ıvel c˜ oem 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 ccomunidade que divulga os seus projetos e seus c´digos de aplica¸ao, pois a concep¸ao dela ´ o c˜ c˜ eopen-source, ou seja, qualquer pessoa com conhecimento de programa¸ao pode modific´-lo e c˜ aampli´-lo de acordo com a necessidade, visando sempre a melhoria dos produtos que possam aser 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˜ eGNU/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 ofato 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 2Caracter´ ısticas do DuemilanoveO Arduino Duemilanove (2009 em italiano) ´ uma placa baseada no microcontrolador AT- emega168 ou ATmega328. Tem 14 pinos de entrada ou sa´ digital (dos quais 6 podem ser ıdautilizados como sa´ıdas PWM), 6 entradas anal´gicas, um oscilador de cristal 16 MHz, contro- olador USB, uma tomada de alimenta¸ao, um conector ICSP, e um bot˜o de reset. Para sua c˜ autiliza¸ao basta conect´-lo a um computador com um cabo USB ou lig´-lo com um adaptador c˜ a aAC 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. a2.2 Alimenta¸˜o caO Arduino Duemilanove pode ser alimentado pela conex˜o USB ou por qualquer fonte de aalimenta¸˜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 apode 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 detens˜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 aalimenta¸˜o for superior a 12 V o regulador de tens˜o pode superaquecer e avariar a placa. A ca aalimenta¸˜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 oO ATmega328 tem 32 KB de mem´ria flash (onde ´ armazenado o software), al´m de 2 KB o e ede 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 ea placa). A mem´ria SRAM ´ apagada toda vez que desligamos o circuito. o e2.4 Entrada e Sa´ ıdaCada um dos 14 pinos digitais do Duemilanove pode ser usado como entrada ou sa´ usando ıdaas fun¸˜es de pinMode(), digitalWrite(), e digitalRead(). Eles operam com 5 V. coCada 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 aanal´gico-digital de 10 bits, ou seja, transformam a leitura anal´gica em um valor dentre 1024 o opossibilidades (exemplo: de 0 a 1023). Por padr˜o, elas medem de 0 a 5 V, embora seja aposs´ 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 caCom 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 ıvelFTDI 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. ıdoO software Arduino inclui um monitor serial que permite que dados simples de texto sejamenviados 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 ah´ 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 casoftware do Arduino inclui uma biblioteca Wire para simplificar o uso do barramento I2C. Parausar a comunica¸ao SPI veja o datasheet (folha de informa¸oes) do ATmega328. c˜ c˜2.6 Programa¸˜o caO ambiente de programa¸˜o mais indicado ´ o do software Arduino, que pode ser baixado no ca eseguinte 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 aAlgumas vers˜es anteriores do Arduino requerem um reset f´ o ısico (pressionando o bot˜o de reset ana 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 noe ecomputador conectado. Uma das linhas de controle de hardware (DTR) do FT232RL est´ aconectada ao reset do ATmega328 via um capacitor de 100 microFaraday . Quando esta linha ´ ecolocada em n´ l´gico baixo, o sinal cai por tempo suficiente para reiniciar o chip. O software ıvel oArduino usa esta caracter´ ıstica para permitir carregar o programa simplesmente pressionandoo bot˜o “upload ” no ambiente Arduino. Isto significa que o bootloader pode ter um timeout amais curto, j´ que a ativa¸˜o do DTR (sinal baixo) pode ser bem coordenada com o in´ do a ca ıcioupload. Estas configura¸˜es tˆm outras implica¸oes. Quando o Duemilanove est´ conectado a um co e c˜ acomputador rodando Mac OS X ou GNU/Linux, ele reinicia toda vez que a conex˜o ´ feita por a esoftware (via USB). No pr´ximo meio segundo aproximadamente, o bootloader estar´ rodando o ano Duemilanove. Considerando que ´ programado para ignorar qualquer coisa a n˜o ser um e aupload de um novo c´digo, ele interceptar´ os primeiros bytes de dados sendo enviados para a o aplaca 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 espereum 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 podeser ressoldada para reativ´-lo, ´ chamada de “RESET-EN”, vocˆ pode tamb´m desabilitar o a e e eauto-reset conectando um resistor de 110 Ω dos +5 V at´ o sinal de reset. e 6
    • 2.8 Prote¸˜o contra sobrecorrente USB caO Arduino Duemilanove tem um polifus´ que protege a porta USB do seu computador contra ıvelcurtocircuito e sobrecorrente. Apesar da maioria dos computadores possu´ ırem prote¸˜o interna capr´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 eremovida. 7
    • Cap´ ıtulo 3Referˆncias da linguagem usada na eprograma¸˜o do Arduino caNesse cap´ ıtulo iremos fazer uma pequena introdu¸˜o sobre como s˜o estruturados os programas ca apara 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 eOs programas para o Arduino s˜o implementados tendo como referˆncia a linguagem C++. a ePreservando sua sintaxe cl´ssica na declara¸ao de vari´veis, nos operadores, nos ponteiros, nos a c˜ avetores, nas estruturas e em muitas outras caracter´ısticas da linguagem. Com isso temos asreferˆncias da linguagem, essas podem ser divididas em trˆs partes principais: As estruturas, e eos 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 cofacilitar a programa¸ao. c˜ • setup() • loop() • Constantes (HIGH | LOW , INPUT | OUTPUT , ...) • Bibliotecas (Serial, Servo, Tone, etc.)3.2 Fun¸˜es coAs fun¸oes s˜o referˆncias essenciais para o desenvolvimento de um projeto usando o Arduino, c˜ a eprincipalmente para os iniciantes no assunto. Essas fun¸oes j´ implementadas e dispon´ c˜ a ıveis embibliotecas direcionam e exemplificam as funcionalidades b´sicas do microcontrolador. Temos acomo 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 BibliotecasO 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 quandoanalisamos os assuntos que s˜o abordados por cada biblioteca em espec´ a ıfico. Lembrando sempreque, para se fazer uso de uma biblioteca esta j´ deve estar instalada e dispon´ na sua m´quina. a ıvel aTemos 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 eimportˆ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 4Instala¸˜o da IDE e suas bibliotecas caNeste cap´ ıtulo iremos explicar como instalar a IDE e conectar a placa Arduino ao computadorpara sua programa¸ao. Junto com a placa arduino vocˆ deve ter um cabo USB tipo AB para c˜ epoder conect´-lo ao computador. a4.1 Arduino para WindowsPrimeiramente deve-se baixar o ambiente para o Arduino que pode ser encontrado no seguintesite: //www.arduino.cc/en/Main/Software , em download clique em Windows e baixe o arquivoarduino-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ˆ eum duplo clique na pasta para abri-la, haver´ uns arquivos e sub-pastas, clique no aplicativo aarduino, este ser´ seu ambiente de desenvolvimento. a Conecte a placa ao computador atrav´s do cabo USB, o LED verde na placa nomeado por ePWR deve ascender, ele indica que a placa est´ ligada. O arduino seleciona automaticamente aa 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 oassistente 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/LinuxPara 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. eApenas vale resaltar que neste sistema operacional temos um tratamento diferente com rela¸˜o caa 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 5Desenvolvimento de ProjetosNeste 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 cquem n˜o possua uma grande infraestrutura possa realiz´-lo. a a5.1 Exemplo 1Come¸aremos com o exemplo Blink, que j´ vem no aplicativo. Para encontrar o exemplo clique c aem File → Examples → Digital → Blink. O programa tem como objetivo acender e apagar o LED de um em um segundo. Paracompilar este exemplo n˜o ´ necess´rio de nenhuma outra infraestrutura que n˜o o pr´prio a e a a oArduino.Primeiramente, vamos criar uma vari´vel chamada ledPin que armazenar´ o n´mero da porta a a uonde o LED est´ conectado (vari´vel do tipo inteiro): a aint ledPin = 13; Assim quando nos referirmos a vari´vel ledPin estaremos nos referindo a sa´ 13. ` a ` ıdaO seguinte passo ´ classificar o ledpin como pino de Sa´ e ıda, isto ´ feito da seguinte maneira: evoid setup() { pinMode(ledPin, OUTPUT);} A fun¸˜o pinMode() tem como primeiro parˆmetro o pino e como segundo parˆmetro se ca a aele ´ pino de entrada ou sa´ e ıda. Agora come¸aremos a escrever o processamento. O programa crodar´ em um loop, pois n˜o h´ ocorrˆncias ou interferˆncias que mudem o estado. Dentro do a a a e eloop ter´ uma fun¸˜o que far´ o LED ficar aceso por 1 segundo e depois ficar apagado por mais a ca aum segundo, ap´s isso volta ao loop. Escreva da seguinte maneira: ovoid 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 eestado, 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 cacomo foi escrito que o ledPin estar´ aceso, s´ ap´s um segundo, ou como est´ escrito 1000 a o o ams, ir´ ler a linha seguinte que escreve que a sa´ do ledPin ´ baixa, e o mesmo ocorre mais a ıda euma vez. Antes de fazer o upload do programa, primeiro deve-se escolher a porta USB em que oArduino se encontra. Para isso v´ em Tools → Serial Port → porta, onde porta ´ o nome da a eporta onde est´ ligado o Arduino (/dev/ttyUSB*, no caso de GNU/Linux, COM* em Windows). aPara saber em qual porta o Arduino se encontra, fa¸a por tentativa e erro, logo escolha um e ctente rodar, caso n˜o rode, ´ o outro. Outro passo que deve-se fazer ´ escolher o modelo da a e eplaca, para isso v´ em Tools → Board e o modelo da sua placa. Agora sim para fazer o upload, aclique em Upload, como mostra a figura 5.1. Figura 5.1: Upload 15
    • 5.2 Exemplo 2No segundo exemplo exploraremos melhor as sa´ ıdas digitais. Neste exemplo ser˜o necess´rios a a10 LEDs para sua execu¸ao. Os LEDs ascender˜o em sequˆncia e ficar˜o acesos por 1 segundo, c˜ a e aat´ 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˜ eponta em um protoboard, no lado negativo dos LEDs ligue resistores de 150 Ω, em s´rie, e a eoutra ponta de todos os resistores no terra do Arduino, GND na placa. Assim como na figura5.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 avari´vel constante e inteira de valor 10, em nosso caso chamamos de ledCount. Outra vari´vel a anecess´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 usa´ 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 ıdapara 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 apara 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 aum for que acender´ todos os LEDs sequencialmente, com um intervalo de 1 segundo (1000 ams) 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 asi¸˜es do vetor, a diferen¸a aqui ´ que para cada posi¸˜o estamos acendendo um LED, usando co c e caa fun¸ao digitalWrite. A fun¸ao delay foi utilizada para que seja mais f´cil de visualizar c˜ c˜ aque cada LED acende de cada vez, e que ap´s todos os LEDs acenderem, todos ficam acesos opor 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 eque chegue em 0, logo os LEDs apagar´o do ultimo a acender para o primeiro, e permanecer´ a ´ aapagado por 1 segundo. Este foi o segundo exemplo, perceba que ´ poss´ modific´-lo com o que j´ foi aprendido, e ıvel a afazendo com que ele apague na mesma ordem que acende, ou fazendo qualquer outra mudan¸a cdesejada. 17
    • 5.3 Exemplo 3Neste 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 aresitor 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 entreo +5 da placa e o ponto comum, ligue o outro resistor, que chamaremos de R2 e tem o valorde 220 Ω entre o ponto comum e o pino 11, que ´ o pino que ir´ descarregar o capacitor. Ligue e ao 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 ecapacitˆ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 dae a afonte fornecida pelo arduino, 5 V, basta calcularmos 63,2% de sua tens˜o e quando a tens˜o no a acapacitor encontrar este valor basta dividi-la pelo valor da resistencia R1. τ = R ∗ C, ou seja63, 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 otens˜o no capacitor, um pino de carga e um de descarga do capacitor e um pino com o valor ade R1, como podemos ver no exemplo a seguir:#define analogPin 0#define chargePin 13#define dischargePin 11#define resistorValue R1unsigned 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 ainiciar a sa´ serial a fim de depurar erros: ıdavoid 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 caserial, no pr´prio compilador arduino-0018 existe uma interface que lhe proporciona observar oa sa´ e entrada na pr´pria tela do computador, a figura 5.2 abaixo mostra onde ter acesso a ıda oesse 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 ıvelselecionar outros valores j´ pr´-determinados pelo programa que podem ser observados quando a ese abre a comunica¸˜o serial. ca Iniciaremos o loop do programa fornecendo energia ao pino de carga do capacitor e acionandoo startTime, que ´ a vari´vel que ir´ temporizar o tempo de carga do capacitor. Para poder e a acalcular os 63,2% da carga teremos que fazer uma convers˜o, pois o fim da escala ´ de 1023, logo a e63,2% disso corresponde ´ 647, que ´ a porcentagem da tens˜o m´xima no capacitor. Enquanto e e a aa entrada do pino anal´gico n˜o equivaler a esta porcentagem de tempo n˜o ocorre nada, apenas o a aa contagem de tempo de carga do capacitor, que j´ esta sendo feita pela vari´vel startTime. a aQuando esta porcentagem ´ ultrapassada mede-se a capacitˆncia dividindo o tempo de carga e apelo valor de R1. Como ´ usual que valores de capacitˆncia sejam baixos, na ordem de mili a nano Farad, ´ e a emais agrad´vel que se expresse o valor em mili ou nano Farad, ou seja, multiplique o valor da acapacitˆncia por 1000 e acrescente o mF no final, caso mesmo com este procedimento o valor aainda seja menor que 1, podemos utilizar outras escalas (micro, nano, etc.). A programa¸˜o careferida 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 edescarregado, 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 4Este exemplo ilustra o uso de uma das sa´ ıdas PWM(Pulse-Width Modulation - Modula¸˜o por caLargura 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 ıvelparab´licas. Primeiramente ´ importante saber o que ´ PWM e o que ´ poss´ fazer. o e e e ıvelPWM ´ 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 ed´strias, o PWM pode ser usado para controlar elevadores de carga, esteiras rolantes e guinchos. uJ´ em aplica¸oes dom´sticas, pode ser usado para controle de ilumina¸ao, port˜es e cortinas. a c˜ e c˜ oIremos 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 vermelhocorrespondem 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 e5V, e o preto a qualquer um dos pinos GND. O fio branco ´ o terminal de controle, e deve ser econectado a uma das sa´ ıdas digitais com PWM, qualquer um dos pinos 3, 5, 6, 9, 10 ou 11. Noexemplo usaremos o 10. O potenciˆmetro linear de 100 kΩ ´ conectado tendo um dos seus pinos extremos ligado o eao GND, o outro extremo ao pino AREF, que fornece a tens˜o de referˆncia, e o pino central a econectado 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 programadeveremos import´-la. Deveremos criar um objeto do tipo servo que ser´ utilizado para controle, a ada 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˜ aometro e servo, e uma vari´vel inteira para o valor lido do potenciˆmetro. Tamb´m deveremosˆ a o einiciar o servo, que em nosso caso est´ conectado ao pino 10, como vemos a seguir: aint potpin = 1;int val;void setup() { meuservo.attach(10);} Quando lermos a entrada do potenciˆmetro teremos que converter seu valor para graus para opodermos 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 capara 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 6Referˆncias Bibliogr´ficas e aSites:http://www.sabereletr^nica.com.br/secoes/leitura/1307 oAcessado em: 09/10/2010http://arduino.cc/en/Reference/HomePageAcessado em: 09/10/2010http://www.arduino.ccAcessado em: 09/10/2010http://www.arduino.cc/en/Reference/AttachInterruptAcessado em: 09/10/2010http://projeto39.wordpress.com/o-arduino-duemilanove/Acessado em: 09/10/2010 22