Tut arduino

  • 220 views
Uploaded on

Tut arduino

Tut arduino

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
220
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
8
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Universidade Federal Fluminense ´ Centro Tecnologico Escola de Engenharia c˜Curso de Engenharia de Telecomunica¸ oes c˜ Programa de Educa¸ ao Tutorial Apostila Arduino Autores: Erika Guimaraes Pereira da Fonseca ˜ Mathyan Motta Beppu Orientador: Prof. Alexandre Santos de la Vega Niteroi-RJ ´ Dezembro / 2010
  • 2. Sum´rio 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
  • 3. 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
  • 4. 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
  • 5. 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
  • 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 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. ´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
  • 11. 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
  • 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 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
  • 14. 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
  • 15. 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
  • 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 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
  • 17. 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
  • 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 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
  • 19. 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
  • 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 ı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
  • 21. 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
  • 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˜ 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
  • 23. 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