Você está na página 1de 23

Universidade Federal Fluminense gico Centro Tecnolo Escola de Engenharia es Curso de Engenharia de Telecomunica co o Tutorial Programa de Educa ca

Apostila Arduino

Autores: Erika Guimara es Pereira da Fonseca Mathyan Motta Beppu Orientador: Prof. Alexandre Santos de la Vega Nitero i-RJ Dezembro / 2010

Sum ario
1 Introdu c ao ao Arduino 2 Caracter sticas do Duemilanove 2.1 Caracter sticas . . . . . . . . . . . 2.2 Alimenta c ao . . . . . . . . . . . . . 2.3 Mem oria . . . . . . . . . . . . . . . 2.4 Entrada e Sa da . . . . . . . . . . . 2.5 Comunica c ao . . . . . . . . . . . . 2.6 Programa ca o . . . . . . . . . . . . 2.7 Reset Autom atico . . . . . . . . . . 2.8 Prote c ao contra sobrecorrente USB 2 4 4 4 5 5 6 6 6 7 8 8 9 10

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

3 Refer encias da linguagem usada na programa c ao 3.1 Linguaguem de refer encia . . . . . . . . . . . . . 3.2 Fun co es . . . . . . . . . . . . . . . . . . . . . . . 3.3 Bibliotecas . . . . . . . . . . . . . . . . . . . . . .

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

4 Instala c ao da IDE e suas bibliotecas 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 Refer encias Bibliogr acas

Cap tulo 1 Introdu c ao ao Arduino


O Arduino faz parte do conceito de hardware e software livre e est a aberto para uso e contribui ca o de toda sociedade. O conceito Arduino surgiu na It alia em 2005 com o objetivo de criar um dispositivo para controlar projetos/prot otipos constru dos de uma forma menos dispendiosa do que outros sistemas dispon veis no mercado. Arduino e uma plataforma de computa c ao f sica (s ao sistemas digitais ligados a sensores e atuadores, que permitem construir sistemas que percebam a realidade e respondem com a co es f sicas), baseada em uma simples placa de Entrada/Sa da microcontrolada e desenvolvida sobre uma biblioteca que simplica a escrita da programa ca o em C/C++. O Arduino pode ser usado para desenvolver artefatos interativos stand-alone ou conectados ao computador atrav es de Adobe Flash, Processing, Max/MSP, Pure Data ou SuperCollider. Um microcontrolador (tamb em denominado MCU) e um computador em um chip, que con um microprocessador que pode ser t em processador, mem oria e perif ericos de entrada/sa da. E programado para fun co es espec cas, em contraste com outros microprocessadores de prop osito geral (como os utilizados nos PCs). Eles s ao embarcados no interior de algum outro dispositivo, no nosso caso o Arduino, para que possam controlar suas fun c oes ou a co es. um kit de desenvolvimento capaz de interpretar vari E aveis no ambiente e transform a-las em sinal el etrico correspondente, atrav es de sensores ligados aos seus terminais de entrada, e atuar no controle ou acionamento de algum outro elemento eletro-eletr onico conectado ao terminal de sa da. Ou seja, e uma ferramenta de controle de entrada e sa da de dados, que pode ser acionada por um sensor (por exemplo um resistor dependente da luz - LDR) e que, logo ap os passar por uma etapa de processamento, o microcontrolador, poder a acionar um atuador (um motor por exemplo). Como podem perceber, e como um computador, que t em como sensores de entrada como o mouse e o teclado, e de sa da, impressoras e caixas de som, por exemplo, s o que ele faz interface com circuitos el etricos, podendo receber ou enviar informa co es/tens oes neles. Para um melhor entendimento, abaixo na gura 1 e poss vel identicar os elementos principais do circuito atrav es de diagrama em blocos.

Figura 1.1: Diagrama de Blocos

O Arduino e baseado em um microcontrolador (Atmega), e dessa forma e logicamente program avel, ou seja, e poss vel a cria ca o de programas, utilizando uma linguagem pr opria baseada em C/C++, que, quando implementadas fazem com que o hardware execute certas a co es. Dessa forma, estamos congurando a etapa de processamento. O grande diferencial desta ferramenta e que ela e desenvolvida e aperfei coada por uma comunidade que divulga os seus projetos e seus c odigos de aplica ca o, pois a concep ca o dela e open-source, ou seja, qualquer pessoa com conhecimento de programa ca o pode modic a-lo e ampli a-lo de acordo com a necessidade, visando sempre a melhoria dos produtos que possam ser criados aplicando o Arduino. Ele foi projetado com a nalidade de ser de f acil entendimento, programa ca o e aplica ca o, al em de ser multiplataforma, ou seja, podemos congura-lo em ambientes Windows, GNU/Linux e Mac OS. Assim sendo, pode ser perfeitamente utilizado como ferramenta educacional sem se preocupar que o usu ario tenha um conhecimento espec co de eletr onica, mas pelo fato de ter o seu esquema e software de programa ca o open-source, acabou chamando a aten ca o dos t ecnicos de eletr onica, que come caram a aperfei co a-la e a criar aplica co es mais complexas.

Cap tulo 2 Caracter sticas do Duemilanove


O Arduino Duemilanove (2009 em italiano) e uma placa baseada no microcontrolador ATmega168 ou ATmega328. Tem 14 pinos de entrada ou sa da digital (dos quais 6 podem ser utilizados como sa das PWM), 6 entradas anal ogicas, um oscilador de cristal 16 MHz, controlador USB, uma tomada de alimenta ca o, um conector ICSP, e um bot ao de reset. Para sua utiliza ca o basta conect a-lo a um computador com um cabo USB ou lig a-lo com um adaptador AC para DC ou bateria.

2.1

Caracter sticas

Microcontrolador ATmega328 ou ATmega168 Tens ao operacional 5V Tens ao de alimenta ca o (recomendada) 7-12 V Tens ao de alimenta ca o (limites) 6-20 V Pinos I/O digitais 14 (dos quais 6 podem ser Sa das PWM) Pinos de entrada anal ogica 6 Corrente cont nua por pino I/O 40 mA Corrente cont nua para o pino 3.3 V 50 mA Mem oria ash 32 KB (2KB usados para o bootloader) / 16KB SRAM 2 KB EEPROM 1 KB Frequ encia de clock 16 MHz Tabela com as caracter sticas b asicas do arduino Duemilanove.

2.2

Alimenta c ao

O Arduino Duemilanove pode ser alimentado pela conex ao USB ou por qualquer fonte de alimenta c ao externa. A fonte de alimenta c ao e selecionada automaticamente. A alimenta c ao externa (n ao-USB) pode ser tanto de uma fonte ou de uma bateria. A fonte pode ser conectada com um plug de 2,1 mm (centro positivo) no conector de alimenta ca o. Cabos vindos de uma bateria podem ser inseridos nos pinos GND (terra) e Vin (entrada de tens ao) do conector de alimenta c ao. A placa pode operar com uma alimenta c ao externa de 6 a 20 V. Entretanto, se a alimenta ca o for inferior a 7 V o pino 5 V pode fornecer menos de 5 V e a placa pode car inst avel. Se a alimenta c ao for superior a 12 V o regulador de tens ao pode superaquecer e avariar a placa. A alimenta c ao recomendada e de 7 a 12 V.

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

2.3

Mem oria

O ATmega328 tem 32 KB de mem oria ash (onde e armazenado o software), al em de 2 KB de SRAM (onde cam as vari aveis) e 1 KB of EEPROM (esta u ltima pode ser lida e escrita atrav es da biblioteca EEPROM e guarda os dados permanentemente, mesmo que desliguemos a placa). A mem oria SRAM e apagada toda vez que desligamos o circuito.

2.4

Entrada e Sa da

Cada um dos 14 pinos digitais do Duemilanove pode ser usado como entrada ou sa da usando as fun c oes de pinMode(), digitalWrite(), e digitalRead(). Eles operam com 5 V. Cada pino pode fornecer ou receber um m aximo de 40 mA e tem um resistor pull-up interno (desconectado por padr ao) de 20-50 k. Al em disso, alguns pinos t em fun co es especializadas: Serial: 0 (RX) e 1 (TX). Usados para receber (RX) e transmitir (TX) dados seriais TTL. Estes pinos s ao conectados aos pinos correspondentes do chip serial FTDI USB-to-TTL. PWM: 3, 5, 6, 9, 10, e 11. Fornecem uma sa da anal ogica PWM de 8-bit com a fun ca o analogWrite(). SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estes pinos suportam comunica c ao SPI, que embora compat vel com o hardware, n ao est a inclu da na linguagem do Arduino. LED: 13. H a um LED j a montado e conectado ao pino digital 13. O Duemilanove tem 6 entradas anal ogicas, cada uma delas est a ligada a um conversor anal ogico-digital de 10 bits, ou seja, transformam a leitura anal ogica em um valor dentre 1024 possibilidades (exemplo: de 0 a 1023). Por padr ao, elas medem de 0 a 5 V, embora seja poss vel mudar o limite superior usando o pino AREF e um pouco de c odigo de baixo n vel. Adicionalmente alguns pinos t em funcionalidades especializadas: I2C: 4 (SDA) e 5 (SCL). Suportam comunica ca o I2C (TWI) usando a biblioteca Wire. AREF. refer encia de tens ao para entradas anal ogicas. Usados com analogReference(). Reset. Envie o valor LOW para reiniciar o microcontrolador. Tipicamente utilizados para adicionar um bot ao de reset aos shields ( placas que podem ser plugadas ao Arduino para extender suas capacidades) que bloqueiam o que h a na placa.

2.5

Comunica c ao

Com o Arduino Duemilanove a comunica ca o com um computador, com outro Arduino ou com outros microcontroladores e muito simplicada. O ATmega328 permite comunica ca o serial no padr ao UART TTL (5 V), que est a dispon vel nos pinos digitais 0 (RX) e 1 (TX). Um chip FTDI FT232RL na placa encaminha esta comunica c ao serial atrav es da USB e os drivers FTDI (inclu do no software do Arduino) fornecem uma porta virtual para o software no computador. O software Arduino inclui um monitor serial que permite que dados simples de texto sejam enviados e recebidos a ` placa Arduino. Os LEDs RX e TX da placa piscam quando os dados est ao sendo transferidos ao computador pelo chip FTDI e h a conex ao USB (mas n ao quando h a comunica ca o serial pelos pinos 0 e 1). A biblioteca SoftwareSerial permite comunica ca o serial por quaisquer dos pinos digitais do Duemilanove. O ATmega328 tamb em oferece suporte aos padr oes de comunica c ao I2C (TWI) e SPI. O software do Arduino inclui uma biblioteca Wire para simplicar o uso do barramento I2C. Para usar a comunica ca o SPI veja o datasheet (folha de informa co es) do ATmega328.

2.6

Programa c ao

O ambiente de programa c ao mais indicado e o do software Arduino, que pode ser baixado no seguinte site: http://www.arduino.cc/en/Main/Software. Mais detalhes sobre a programa ca o no cap tulo Refer encias da linguagem usada na programa ca o do Arduino.

2.7

Reset Autom atico

Algumas vers oes anteriores do Arduino requerem um reset f sico (pressionando o bot ao de reset na placa) antes de carregar um sketch (o programa a ser compilado). O Arduino Duemilanove e projetado de modo a permitir que isto seja feito atrav es do software que esteja rodando no 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 vel l ogico baixo, o sinal cai por tempo suciente para reiniciar o chip. O software Arduino usa esta caracter stica para permitir carregar o programa simplesmente pressionando o bot ao upload no ambiente Arduino. Isto signica que o bootloader pode ter um timeout mais curto, j a que a ativa c ao do DTR (sinal baixo) pode ser bem coordenada com o in cio do upload. Estas congura c oes t em outras implica co es. Quando o Duemilanove est a conectado a um computador rodando Mac OS X ou GNU/Linux, ele reinicia toda vez que a conex ao e feita por software (via USB). No pr oximo meio segundo aproximadamente, o bootloader estar a rodando no Duemilanove. Considerando que e programado para ignorar qualquer coisa a n ao ser um upload de um novo c odigo, ele interceptar a os primeiros bytes de dados sendo enviados para a placa depois que a conex ao e aberta. Se um sketch rodando na placa recebe congura co es de uma vez ou outros dados ao iniciar, assegure-se que o software que esteja comunicando espere um segundo depois de aberta a conex ao antes de enviar estes dados. O Duemilanove tem uma trilha que pode ser cortada para desabilitar o auto-reset e pode ser ressoldada para reativ a-lo, e chamada de RESET-EN, voc e pode tamb em desabilitar o auto-reset conectando um resistor de 110 dos +5 V at e o sinal de reset.

2.8

Prote c ao contra sobrecorrente USB

O Arduino Duemilanove tem um polifus vel que protege a porta USB do seu computador contra curtocircuito e sobrecorrente. Apesar da maioria dos computadores possu rem prote c ao interna pr opria, o fus vel proporciona uma prote ca o extra. Se mais de 500 mA forem aplicados na porta USB, o fus vel ir a automaticamente interromper a conex ao at e que o curto ou a sobrecarga seja removida.

Cap tulo 3 Refer encias da linguagem usada na programa c ao do Arduino


Nesse cap tulo iremos fazer uma pequena introdu c ao sobre como s ao estruturados os programas para o Arduino, conhecendo a linguagem usada como refer encia e suas principais fun co es. E por m veremos as funcionalidades extras que o uso de bibliotecas nos proporciona.

3.1

Linguaguem de refer encia

Os programas para o Arduino s ao implementados tendo como refer encia a linguagem C++. Preservando sua sintaxe cl assica na declara ca o de vari aveis, nos operadores, nos ponteiros, nos vetores, nas estruturas e em muitas outras caracter sticas da linguagem. Com isso temos as refer encias da linguagem, essas podem ser divididas em tr es partes principais: As estruturas, os valores (vari aveis e constantes) e as fun c oes. As estruturas de refer encias s ao: Estruturas de controle (if, else, break, ...) Sintaxe b asica (dene, include, ; , ...) Operadores aritm eticos e de compara c ao (+, -, =, ==, !=, ...) Operadores booleanos (, ||, !) Acesso a ponteiros (*, ) Operadores compostos (++, , +=, ...) Operadores de bits (|, , , ...) Os valores de refer encias s ao: Tipos de dados(byte, array, int , char , ...) Convers oes(char(), byte(), int(), ...) Vari avel de escopo e de qualica c ao (variable scope, static, volatile, ...) Utilit arios (sizeof(), diz o tamanho da vari avel em bytes)

bom citar que o software que vem no Arduino j E a prov e v arias fun c oes e constantes para facilitar a programa ca o. setup() loop() Constantes (HIGH | LOW , INPUT | OUTPUT , ...) Bibliotecas (Serial, Servo, Tone, etc.)

3.2

Fun c oes

As fun co es s ao refer encias essenciais para o desenvolvimento de um projeto usando o Arduino, principalmente para os iniciantes no assunto. Essas fun co es j a implementadas e dispon veis em bibliotecas direcionam e exemplicam as funcionalidades b asicas do microcontrolador. Temos como fun co es b asicas e de refer encias as seguintes fun co es: Digital I/O pinMode() digitalWrite() digitalRead() Anal ogico I/O analogReference() analogRead() analogWrite() - PWM Avan cado I/O tone() noTone() shiftOut() pulseIn() Tempo millis() micros() delay() delayMicroseconds() Matem atica min() max() abs() constrain() map() pow() ***s o do C/C++ sqrt() ***s o do C/C++ Trigonom etrica sin() ***s o do C/C++ cos() ***s o do C/C++ tan() ***s o do C/C++ N umeros aleat orios randomSeed() random() Bits e Bytes lowByte() highByte() bitRead() bitWrite() bitSet() bitClear() bit() Interrup co es externas attachInterrupt() detachInterrupt() Interrup co es interrupts() noInterrupts() Comunica ca o Serial

3.3

Bibliotecas

O uso de bibliotecas nos proporciona um horizonte de programa ca o mais amplo e diverso quando comparado a utiliza c ao apenas de estruturas, valores e fun c oes. Isso e percept vel quando analisamos os assuntos que s ao abordados por cada biblioteca em espec co. Lembrando sempre que, para se fazer uso de uma biblioteca esta j a deve estar instalada e dispon vel na sua m aquina. Temos as seguintes bibliotecas de refer encia: 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 comunica ca o serial em qualquer um dos pinos digitais. Stepper - para controlar motores de passo. Wire - Dois Wire Interface (TWI/I2C) para enviar e receber dados atrav es de uma rede de dispositivos ou sensores. Temos como refer encia tamb em, o uso de bibliotecas mais espec cas. O que e de extrema import ancia quando se faz o uso do arduino com um enfoque em uma determinada a rea. Como por exemplo: Comunica c ao (redes e protocolos) Messenger - Para o processamento de mensagens de texto a partir do computador. NewSoftSerial - Uma vers ao melhorada da biblioteca SoftwareSerial. 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 es de uma conex ao serial.

10

Sensoriamento Capacitive Sensing - Transformar dois ou mais pinos em sensores capacitivos. Debounce - Leitura de ruidos na entrada digital. Gera c ao de Frequ encia e de Audio Tone - Gerar ondas quadradas de freq u encia de audio em qualquer pino do microcontrolador. Temporiza c ao 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 ca o para desencadear uma a c ao a cada N milissegundos. Utilidades TextString (String) - Manipular strings PString - uma classe leve para imprimir em buers. Streaming - Um m etodo para simplicar as declara c oes de impress ao.

11

Cap tulo 4 Instala c ao da IDE e suas bibliotecas


Neste cap tulo iremos explicar como instalar a IDE e conectar a placa Arduino ao computador para sua programa ca o. Junto com a placa arduino voc e deve ter um cabo USB tipo AB para poder conect a-lo ao computador.

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 a necess ario um programa capaz de descompactar o arquivo (exemplos: WinZip, WinRAR, etc.). Certique-se de preservar a estrutura da pasta. D e um duplo clique na pasta para abri-la, haver a uns arquivos e sub-pastas, clique no aplicativo arduino, este ser a seu ambiente de desenvolvimento. Conecte a placa ao computador atrav es do cabo USB, o LED verde na placa nomeado por PWR deve ascender, ele indica que a placa est a ligada. O arduino seleciona automaticamente a fonte de alimenta ca o adequada. Quando se conecta a placa, o Windows dever a iniciar o processo de instala ca o do driver. No windows vista, o driver deve ser baixado e instalado automaticamente. No Windows XP o assistente Adicionar Novo Hardware ser a aberto: Quando o Windows perguntar se pode se conectar ao Windows Update para proucurar o software selecione n ao, clique em Avan car. Selecione personalizar, logo ap os selecione instalar e clique em Avan car. 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 diret orios de distribui ca o do Arduino. Clique em Avan car. O assistente ir a proucurar o driver e em seguida, dizer que um hardware foi encontrado. Clique em Concluir. O assistente de novo hardware abrir a novamente, fa ca todos os passos da mesma maneira, desta vez, uma porta serial USB ser a encontrada.

12

4.2

Arduino para GNU/Linux

Para a instala ca o da IDE e suas bibliotecas no sistema operacional Linux, podemos assim como feito para o Windows baixar o arquivo zipado atrav es do site http://www.arduino.cc/en/Main/Software. Apenas vale resaltar que neste sistema operacional temos um tratamento diferente com rela c ao a manipula ca o de pastas e diret orios, agora o arquivo baixado e .tar.gz. Al em desta forma de instala ca o, temos uma outra mais objetiva para executar o mesmo procedimento, esta u ltima usando apenas o terminal. Veremos um passo a passo deste procedimento 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 c ao no Ubuntu O primeiro passo e com o terminal aberto digitar o comando: sudo add-apt-repository ppa:arduino-ubuntu-team/ppa Com o t ermino do primeiro passo executamos o segundo comando digitando: sudo aptitude update E por m executamos o u ltimo comando digitando: sudo aptitude install arduino Ap os estes tr es passos a IDE est a instalada e pode ser acessada pelo menu aplicativos/desenvolvimento/arduino Outras distribui co es de Linux pesquisar no site http://www.arduino.cc/en/Main/Software e para Mac OS pesquisar em http://www.arduino.cc/en/Guide/MacOSX.

13

Cap tulo 5 Desenvolvimento de Projetos


Neste cap tulo iremos ver alguns exemplos de aplica co es simples com o Arduino, agora com uma pequena base de c para arduino podemos come car a fazer e explicar exemplos mesmo para quem n ao possua uma grande infraestrutura possa realiz a-lo.

5.1

Exemplo 1

Come caremos com o exemplo Blink, que j a vem no aplicativo. Para encontrar o exemplo clique em File Examples Digital Blink. O programa tem como objetivo acender e apagar o LED de um em um segundo. Para compilar este exemplo n ao e necess ario de nenhuma outra infraestrutura que n ao o pr oprio Arduino. Primeiramente, vamos criar uma vari avel chamada ledPin que armazenar a o n umero da porta onde o LED est a conectado (vari avel do tipo inteiro): int ledPin = 13;

Assim quando nos referirmos a ` vari avel ledPin estaremos nos referindo a ` sa da 13. O seguinte passo e classicar o ledpin como pino de Sa da, isto e feito da seguinte maneira: void setup() { pinMode(ledPin, OUTPUT); } A fun c ao pinMode() tem como primeiro par ametro o pino e como segundo par ametro se ele e pino de entrada ou sa da. Agora come caremos a escrever o processamento. O programa rodar a em um loop, pois n ao h a ocorr encias ou interfer encias que mudem o estado. Dentro do loop ter a uma fun c ao que far a o LED car aceso por 1 segundo e depois car apagado por mais um segundo, ap os isso volta ao loop. Escreva da seguinte maneira: void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }

14

A fun c ao digitalWrite() escreve uma informa ca o digital, ou seja, 0 (LOW) ou 1 (HIGH). Seu primeiro par ametro e o pino de sa da, que no caso e o ledPin. O segundo par ametro eo estado, que no caso e a sa da, HIGH ou LOW. Quando uma porta digital est a em estado baixo (LOW), ela ca com 0V, j a quando est a em estado alto (HIGH), ca em 5 V. A fun ca o delay() e um atraso que se d a para a continua c ao da leitura do programa, logo como foi escrito que o ledPin estar a aceso, s o ap os um segundo, ou como est a escrito 1000 ms, ir a ler a linha seguinte que escreve que a sa da do ledPin e baixa, e o mesmo ocorre mais 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 a em Tools Serial Port porta, onde porta e o nome da porta onde est a ligado o Arduino (/dev/ttyUSB*, no caso de GNU/Linux, COM* em Windows). Para saber em qual porta o Arduino se encontra, fa ca por tentativa e erro, logo escolha um e tente rodar, caso n ao rode, e o outro. Outro passo que deve-se fazer e escolher o modelo da placa, para isso v a em Tools Board e o modelo da sua placa. Agora sim para fazer o upload, 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 ser ao necess arios 10 LEDs para sua execu ca o. Os LEDs ascender ao em sequ encia e car ao acesos por 1 segundo, at e que o u ltimo apagar a e todos os outros em sequ encia apagar ao. Para a confec ca o do projeto ligue o positivo dos LEDs nos pinos digitais de 2 e 11 e a outra ponta em um protoboard, no lado negativo dos LEDs ligue resistores de 150 , em s erie, e a 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 s ao para declara c ao de vari aveis, iremos precisar de uma vari avel constante e inteira de valor 10, em nosso caso chamamos de ledCount. Outra vari avel necess aria e um vetor com 10 posi c oes, enumerados de 2 e 11, que s ao os n umeros dos pinos de sa da digital que ser ao utilizados que tamb em possuem valores inteiros, chamamos o vetor de ledPins. A seguir vem a declara ca o a ser feita: const int ledCount = 10; int ledPins[] = { 2, 3, 4, 5, 6, 7,8,9,10,11 }; Agora com as vari aveis declaradas vamos denir o vetor ledPins como pinos de sa da , para isso utilizaremos um loop, da seguinte maneira: void setup() { for (int thisLed = 0; thisLed < ledCount; thisLed++) { pinMode(ledPins[thisLed], OUTPUT); } } Na primeira posi c ao do for declaramos uma vari avel que inicia em 0. Na segunda posi ca o damos a condi ca o para o for, e na terceira a cada vez que e vericada a condi ca o do for, com execu c ao da primeira, e acrescido 1 ao valor de thisLed, que e a vari avel que utilizaremos para chamar as determinadas posi c oes do vetor ledPins. A fun ca o pinMode(), como vista no exemplo anterior, est a declarando que o vetor ledPins e um vetor de sa da de dados. Agora ser a iniciado um loop, que far a com que o programa sempre rode, dentro dele ter a um for que acender a todos os LEDs sequencialmente, com um intervalo de 1 segundo (1000 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 e da mesma maneira que o u ltimo, pois a id eia e sempre se referir ` as posi c oes do vetor, a diferen ca aqui e que para cada posi c ao estamos acendendo um LED, usando a fun ca o digitalWrite. A fun ca o delay foi utilizada para que seja mais f acil de visualizar que cada LED acende de cada vez, e que ap os todos os LEDs acenderem, todos cam acesos por mais um segundo. Agora ser a feito o mesmo, mas para apagar os LEDs, como mostra a seguir: for (int thisLed = 9; thisLed >= 0; thisLed--) { digitalWrite(ledPins[thisLed], LOW); delay(1000); } delay(1000); } A vari avel thisLed, utilizada apenas no for, come ca com valor 9 e e decrescida de 1 at e que chegue em 0, logo os LEDs apagar ao do u ltimo a acender para o primeiro, e permanecer a apagado por 1 segundo. Este foi o segundo exemplo, perceba que e poss vel modic a-lo com o que j a foi aprendido, fazendo com que ele apague na mesma ordem que acende, ou fazendo qualquer outra mudan ca desejada.

17

5.3

Exemplo 3

Neste exemplo utilizaremos a entrada anal ogica e a sa da serial na confec c ao de um capac metro. Para isso ser a necess ario um resistor, que pode ter qualquer valor que chamaremos de R1, um 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 e o pino que ir a descarregar o capacitor. Ligue o o do ponto comum a entrada anal ogica.

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 e igual a resist encia (R) em ohms multiplicado pela capacit ancia (C) em farads, e que a tens ao no capacitor em uma constante de tempo (TC***) e de 63,2% do valor m aximo, podemos calcular a capacit ancia, pois como sabemos o valor da fonte fornecida pelo arduino, 5 V, basta calcularmos 63,2% de sua tens ao e quando a tens ao no capacitor encontrar este valor basta dividi-la pelo valor da resistencia R1. = R C , ou seja 63, 2%V = R C , onde V e a tens ao m axima. A programa ca o come ca com a declara ca o de vari aveis, ou seja, um pino anal ogico para medir tens ao no capacitor, um pino de carga e um de descarga do capacitor e um pino com o valor 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 do pelo valor escolhido. Devemos ajustar o pino 13 como pino de sa da, como j a foi feito em exemplos anteriores, e iniciar a sa da serial a m de depurar erros: void setup(){ pinMode(chargePin, OUTPUT); digitalWrite(chargePin, LOW); Serial.begin(9600); } No decorrer do desenvolvimento da apostila ainda n ao hav amos mencionado a comunica c ao serial, no pr oprio compilador arduino-0018 existe uma interface que lhe proporciona observar a sa da e entrada na pr opria tela do computador, a gura 5.2 abaixo mostra onde ter acesso a esse recurso.

18

Figura 5.4: Comunica ca o Serial Em nosso caso utilizamos a frequ encia de transfer encia de dados de 9600B/s, mas e poss vel selecionar outros valores j a pr e-determinados pelo programa que podem ser observados quando se abre a comunica c ao serial. Iniciaremos o loop do programa fornecendo energia ao pino de carga do capacitor e acionando o startTime, que e a vari avel que ir a temporizar o tempo de carga do capacitor. Para poder calcular os 63,2% da carga teremos que fazer uma convers ao, pois o m da escala e de 1023, logo 63,2% disso corresponde e 647, que e a porcentagem da tens ao m axima no capacitor. Enquanto a entrada do pino anal ogico n ao equivaler a esta porcentagem de tempo n ao ocorre nada, apenas a contagem de tempo de carga do capacitor, que j a esta sendo feita pela vari avel startTime. Quando esta porcentagem e ultrapassada mede-se a capacit ancia dividindo o tempo de carga pelo valor de R1. Como e usual que valores de capacit ancia sejam baixos, na ordem de mili a nano Farad, e mais agrad avel que se expresse o valor em mili ou nano Farad, ou seja, multiplique o valor da capacit ancia por 1000 e acrescente o mF no nal, caso mesmo com este procedimento o valor ainda seja menor que 1, podemos utilizar outras escalas (micro, nano, etc.). A programa c ao 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 a est a quase conclu do, basta fazer a descarga do capacitor. Para isso des-

19

ligue o chargePin, ajuste dischargePin como sa da, coloque LOW at e que o capacitor esteja descarregado, e volte a ajustar o dischargePin como entrada, da seguinte maneira: digitalWrite(chargePin, LOW); pinMode(dischargePin, OUTPUT); digitalWrite(dischargePin, LOW); while (analogRead(analogPin) > 0) { } pinMode(dischargePin, INPUT); }

5.4

Exemplo 4

Este exemplo ilustra o uso de uma das sa das PWM(Pulse-Width Modulation - Modula c ao por Largura de Pulso) do Arduino com um servomotor. Qualquer servo com um terminal de controle compat vel pode ser utilizado. Aqui usaremos um polar rotor do tipo usado em antenas parab olicas. Primeiramente e importante saber o que e PWM e o que e poss vel fazer. PWM e uma tecnologia que permite controlar o per odo c clico da frequ encia da alimenta c ao.

Figura 5.5: PWM Suas aplica c oes s ao diversas e abrangem tanto usos industriais quanto dom esticos. Em ind ustrias, o PWM pode ser usado para controlar elevadores de carga, esteiras rolantes e guinchos. J a em aplica co es dom esticas, pode ser usado para controle de ilumina ca o, port oes e cortinas. Iremos utilizar a entrada manual comandada por um potenci ometro linear de 100 k. O motor possui 3 os: um vermelho, um preto e um branco. Os os preto e vermelho correspondem ao negativo e positivo da alimenta ca o, respectivamente, e neste exemplo podemos conect a-los diretamente aos pinos de alimenta c ao do Arduino. O vermelho e conectado ao pino 5V, e o preto a qualquer um dos pinos GND. O o branco e o terminal de controle, e deve ser conectado a uma das sa das digitais com PWM, qualquer um dos pinos 3, 5, 6, 9, 10 ou 11. No exemplo usaremos o 10. O potenci ometro linear de 100 k e conectado tendo um dos seus pinos extremos ligado ao GND, o outro extremo ao pino AREF, que fornece a tens ao de refer encia, e o pino central conectado a qualquer uma das entradas anal ogicas, utilizaremos o pino 1. Desta vez usaremos uma biblioteca para suporte de servos, logo no in cio do programa deveremos import a-la. Deveremos criar um objeto do tipo servo que ser a utilizado para controle, da seguinte maneira:

20

Figura 5.6: Exemplo 4 #include <Servo.h> Servo meuservo; A seguir e feita a parte de declara ca o de vari aveis, iremos declarar um pino para o potencio metro e servo, e uma vari avel inteira para o valor lido do potenci ometro. Tamb em deveremos iniciar o servo, que em nosso caso est a conectado ao pino 10, como vemos a seguir: int potpin = 1; int val; void setup() { meuservo.attach(10); } Quando lermos a entrada do potenci ometro teremos que converter seu valor para graus para podermos controlar em graus quanto o motor ir a girar, para isto utilizaremos a fun ca o map. Ap os isto apenas devemos enviar a informa c ao para o motor e esperar alguns milissegundos para a movimenta ca o do motor. void loop() { val = analogRead(potpin); val = map(val, 0, 1023, 0, 180); meuservo.write(val); delay(500); }

21

Cap tulo 6 Refer encias Bibliogr acas


Sites: http://www.sabereletr^ onica.com.br/secoes/leitura/1307 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

Você também pode gostar