tutorial arduino

Upload: leidivaloliveira3719

Post on 11-Oct-2015

109 views

Category:

Documents


0 download

TRANSCRIPT

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 1

    ESCOLA NAVAL

    DEPARTAMENTO DE ENGENHEIROS NAVAIS

    RAMO DE ARMAS E ELECTRNICA

    Arduino

    Introduo e Recursos Avanados

    Nuno Pessanha Santos

    ASPOF EN-AEL

    [email protected]

    2009

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 2

    No se pode ensinar tudo a algum, pode-se apenas ajud-lo a encontrar por si mesmo.

    Galilleu Galilei

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 3

    ndice

    1. Introduo ............................................................................................................................ 7

    2. Hardware vs Software ......................................................................................................... 8

    2.1. Hardware ...................................................................................................................... 8

    2.1.1. Microprocessador ................................................................................................ 9

    2.1.2. Microcontrolador ................................................................................................. 9

    2.1.3. Tipos e Quantidades de Memria Disponveis ................................................ 11

    2.1.4. Pinout Disponvel ............................................................................................... 12

    2.2. Software ..................................................................................................................... 15

    2.2.1. Instalao e Utilizao ...................................................................................... 15

    2.2.2. Ciclo de Desenvolvimento ................................................................................ 17

    2.2.3. Interaco do Arduino com outro Software .................................................... 18

    3. ndice de Instrues ........................................................................................................... 18

    3.1. Funes Base ............................................................................................................. 19

    3.1.1 void setup()......................................................................................................... 19

    3.1.2 void loop()........................................................................................................... 19

    3.1.3. Resumindo ......................................................................................................... 20

    3.2. Ciclos ........................................................................................................................... 21

    3.2.1 Ciclo If.else .................................................................................................. 21

    3.2.2 Ciclo for ............................................................................................................... 22

    3.2.3 Ciclo switch / case .............................................................................................. 23

    3.2.4 Ciclo while .......................................................................................................... 24

    3.2.5 Ciclo do.while ................................................................................................. 25

    3.3. Tipos de variveis disponveis .................................................................................. 26

    3.3.1 Varivel do Tipo Boolean .................................................................................. 26

    3.3.2. Varivel do tipo char vs unsigned char ............................................................. 27

    3.3.3. Varivel do tipo byte ......................................................................................... 27

    3.3.4. Varivel do tipo int vs unsigned int .................................................................. 28

    3.3.5. Varivel do tipo long vs unsigned long ............................................................. 28

    3.3.6. Varivel do tipo float vs double ........................................................................ 29

    3.3.7. Varivel do Tipo array e a Noo de string ...................................................... 29

    3.4. Converter tipos de variveis ..................................................................................... 30

    3.4.1. char(x) ................................................................................................................. 30

    3.4.2. byte(x) ................................................................................................................ 30

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 4

    3.4.3. int(x) .................................................................................................................... 30

    3.4.4. long(x) ................................................................................................................. 30

    3.4.5. float(x) ................................................................................................................ 30

    3.5. Funes ....................................................................................................................... 31

    3.5.1. Input/Output digital ............................................................................................... 31

    3.5.1.1. pinMode() ....................................................................................................... 31

    3.5.1.2 digitalWrite() ...................................................................................................... 32

    3.5.1.3. digitalRead() ................................................................................................... 33

    3.5.2. Input/Output analgico ......................................................................................... 34

    3.5.2.1 analogRead() ...................................................................................................... 34

    3.5.2.2 analogWrite() ..................................................................................................... 35

    3.5.3. Tempo ..................................................................................................................... 36

    3.5.3.1. millis() ............................................................................................................. 36

    3.5.3.2. micros() ........................................................................................................... 36

    3.5.3.3. delay (milisegundos) ..................................................................................... 37

    3.5.3.4. delayMicroseconds (microsegundos)........................................................... 37

    3.5.4. Funes Matemticas ........................................................................................... 39

    3.5.4.1. min(valor1,valor2) ......................................................................................... 39

    3.5.4.2. max(valor1,valor2) ........................................................................................ 39

    3.5.4.3. abs(valor) ........................................................................................................ 39

    3.5.4.4. constrain(valor, valor1.,valor2) .................................................................... 40

    3.5.4.5. map(X,valor1,valor2,para valor1,para valor2) ............................................ 40

    3.5.4.6. pow(valor, expoente) .................................................................................... 41

    3.5.4.7. sqrt(valor) ....................................................................................................... 41

    3.5.5. Funes Trigonomtricas ..................................................................................... 42

    3.5.5.1. sen(valor) ........................................................................................................ 42

    3.5.5.2. cos(valor) ........................................................................................................ 42

    3.5.5.1. tan(valor) ........................................................................................................ 42

    3.5.6. Nmeros Aleatrios .............................................................................................. 43

    3.5.6.1 randomSeed(valor) ............................................................................................ 43

    3.5.6.2. random() ......................................................................................................... 43

    3.5.7. Interrupts ................................................................................................................ 45

    3.5.7.1. attachInterrupt(interrupt, funo,modo) ................................................... 45

    3.5.7.2. detachInterrupt(interrupt) ............................................................................ 46

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 5

    3.5.7.3. interrupts() ..................................................................................................... 46

    3.5.7.4. noInterrupts() ................................................................................................. 46

    3.5.8. Comunicao Srie ................................................................................................ 48

    3.5.8.1. Serial.available() ............................................................................................ 48

    3.5.8.2. Serial.begin(int baud rate) ............................................................................ 48

    3.5.8.3. Serial.read() .................................................................................................... 49

    3.5.8.4. Serial.flush() ................................................................................................... 49

    3.5.8.5. Serial.print() vs Serial.println() ..................................................................... 50

    3.5.8.1. Serial.write() .................................................................................................. 50

    4. Recursos Avanados .......................................................................................................... 51

    4.1. Flash ............................................................................................................................ 51

    4.1.1. Sintaxe a Utilizar para Guardar Dados em Flash ............................................ 51

    4.1.2. Sintaxe a Utilizar para Ler Dados da Memria Flash ..................................... 51

    4.2. EEPROM ..................................................................................................................... 52

    4.2.1. Sintaxe de Escrita em EEPROM ....................................................................... 52

    4.2.2. Sintaxe de Leitura em EEPROM ....................................................................... 52

    4.3. Servomotor ................................................................................................................ 53

    4.3.1. Sintaxe das Instrues da Biblioteca ............................................. 54

    4.3.1.1. attach() ........................................................................................................... 54

    4.3.1.2. detach()........................................................................................................... 55

    4.3.1.3. write() ............................................................................................................. 55

    4.3.1.4. read() ............................................................................................................... 56

    4.3.1.5. attached() ....................................................................................................... 56

    4.4. Software Serial .......................................................................................................... 58

    4.4.1. Sintaxe das Instrues da Biblioteca ............................. 59

    4.4.1.1. SoftwareSerial(Pino de Rx, Pino de Tx) ...................................................... 59

    4.4.1.2. begin(Baud Rate) ........................................................................................... 59

    4.4.1.3. read() ............................................................................................................... 60

    4.4.1.4. print(dados) vs println(dados) ...................................................................... 60

    4.5. FIRMATA vs Processing ............................................................................................ 62

    4.6. Aquisio de Sinal Converso A/D ......................................................................... 63

    4.6.1. Alguns Conceitos Tericos ................................................................................ 63

    4.6.2. Arduino vs ADC .................................................................................................. 64

    4.6.3. Sintaxe para Alterar o Valor do Factor de Diviso ...................................... 66

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 6

    5. Concluso ........................................................................................................................... 68

    6. Bibliografia ......................................................................................................................... 69

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 7

    1. Introduo

    Este tutorial tem como principal objectivo ser uma referncia para a utilizao da placa de desenvolvimento Arduino, no s para quem se est a iniciar no assunto, mas, tambm, para quem procura aprofundar mais o seu conhecimento sobre o tema.

    O Arduino uma ferramenta de desenvolvimento open source, tendo surgido de um projecto acadmico - quem sabe um projecto seu no poder ter o mesmo sucesso?... Como ferramenta usualmente associado filosofia de Physical Computing, ou seja, ao conceito que engloba a criao de sistemas fsicos atravs do uso de Software e Hardware capazes de responder a inputs vindos do mundo real.

    Podemos designar o Arduino simplesmente como uma pea de Hardware ou um Software de desenvolvimento, mas muito mais que isso. Devido ao sucesso que tem vindo a alcanar ao longo do tempo, existe uma enorme comunidade de utilizadores/seguidores em todo o Mundo, podendo afirmar-se que o Arduino representa tambm uma enorme comunidade. As razes para tal sucesso baseiam-se no seu baixo custo - dadas as suas funcionalidades -, a simplicidade na utilizao e a possibilidade de utilizao em vrios sistemas operativo, como o Windows, Macintosh OS e Linux - capacidade essa denominada por Cross-platform.

    O estudo do Arduino abre-nos portas compreenso de uma importante ferramenta de desenvolvimento atravs de uma aprendizagem simples mas dedicada, onde podemos fazer desde robots a domtica entre muitas outras aplicaes, bastando simplesmente ter imaginao.

    Devido sua enorme utilizao, como foi referido anteriormente, torna-se um assunto quase que obrigatrio a abordar, sendo o seu conhecimento uma mais-valia para todos os interessados pela electrnica (e no s).

    Assim, espera-se que este tutorial seja uma pequena ajuda para a aquisio de conhecimento sobre a temtica em estudo, que dever pautar pela dedicao.

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 8

    2. Hardware vs Software

    Antes de comear a trabalhar propriamente com esta plataforma de desenvolvimento, torna-se necessrio comear por perceber o seu funcionamento, para tal descrever-se- neste captulo o funcionamento do Arduino, em termos de Hardware e Software.

    Espera-se assim de certa forma iluminar o caminho neste estudo, fazendo com que toda a percepo do assunto a tratar se torne mais simples, ou seja, sero aqui apresentadas as bases para a sua compreenso.

    2.1. Hardware

    De seguida, far-se- uma exposio do tema incidindo na placa Arduino Duemilinove (disponvel na Escola Naval -EN), em tudo semelhante em termos de utilizao placa de desenvolvimento Arduino Mega. Contudo verificam-se pequenas diferenas como a diferena na sua capacidade de armazenamento (memria disponvel), o nmero de pinos analgicos, o nmero de pinos digitais e as dimenses.

    O Arduino Duemilinove (Fig. 1) apresenta-se com o microcontrolador ATMega168 ou ATMega328, enquanto o Arduino Mega (Fig.2) apresenta-se com um microcontrolador ATMega1280.

    Fig. 1 Arduino Duemilinove

    Fonte: Site oficial Arduino (www.arduino.cc)

    Fig. 2 Arduino Mega

    Fonte: Site oficial Arduino (www.arduino.cc)

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 9

    Vo ser abordados neste subcaptulo dois temas de grande importncia relativamente ao Arduino Duemilinove, s~o eles: Tipos e quantidades de memria disponveis e o pinout disponvel. Mais informaes relativas ao microcontrolador em estudo, ou qualquer outro, devem ser consultados os respectivos datasheet.

    Mas antes de abordar os temas referidos anteriormente torna-se necessrio fazer a distino entre microprocessador e microcontrolador, que por vezes alvo de confuso.

    2.1.1. Microprocessador

    Um microprocessador, basicamente, constitudo por um circuito integrado com a capacidade de executar determinadas instrues, sendo a sua velocidade de processamento determinada por um circuito que produz um determinado Clock (kHz, MHz ou GHz).

    O seu poder de processamento afectado por caractersticas como Bits, quantidade de ncleos, arquitectura apresentada, tipo de instrues, entre outras. Como factor de grande importncia tem-se ainda a existncia de memria externa, onde esto armazenados os programas que sero executados.

    Fig. 3 Exemplo de uma montagem utilizando um microprocessador

    2.1.2. Microcontrolador

    Um microcontrolador, ao contrrio de um microprocessador, desenhado e construdo de forma a integrar diversos componentes num nico circuito integrado, evitando, assim, a necessidade de adicionar componentes externos ao microcontrolador, que permitiriam as suas funcionalidades.

    Fig. 4 Exemplo de um microcontrolador com algumas das funcionalidades possveis

    CPU

    A/D

    D/A

    ROM

    RAM

    Temporizadores (Timers)

    Porta Paralela

    Porta Srie

    UART

    Etc

    Etc

    Etc

    Etc

    Microprocessador

    Memria RAM Memria ROM

    Perifricos Clock

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 10

    Pela anlise da figura acima, pode-se ter uma noo de alguns exemplos de componentes que se encontram disponveis, conseguindo reunir uma grande quantidade de recursos num nico circuito integrado.

    Na figura seguinte, apresentado um diagrama de blocos de um microcontrolador ATMega168 em tudo idntico a um ATMega328 em que possvel identificar todos os seus constituintes.

    Fig. 5 Diagrama de blocos de um microcontrolador ATMega168 Fonte: Datasheet do microcontrolador ATMega168

    As diferenas entre microprocessador e microcontrolador, so fundamentais para a correcta compreenso de todos os subcaptulos que se seguem.

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 11

    2.1.3. Tipos e Quantidades de Memria Disponveis

    Uma das principais diferenas em termos de capacidade nos diferentes modelos disponveis reside na memria do microcontrolador utilizado. Vamos comear por analisar essa diferena, j que representa um factor crucial no seu desempenho.

    As quantidades de memria disponveis nos diversos modelos de microcontrolador utilizados pelo Arduino so os seguintes:

    ATMega168 ATMega328 ATMega1280

    Flash 16 KBytes

    (2 KBytes Bootloader) 32 KBytes

    (2 KBytes Bootloader) 128 KBytes

    (4 KBytes Bootloader)

    SRAM 1024 Bytes 2048 Bytes 8192 Bytes

    EEPROM 512 Bytes 1024 Bytes 4096 Bytes

    Tabela 1 Quantidade de memria disponvel em cada modelo de microcontrolador Fonte: Retirado do datasheet dos respectivos microcontroladores

    Como podemos constatar pela anlise da tabela 1, o ATMega1280 leva clara vantagem em termos de capacidade. Uma das memrias mais importantes, alm da memria Flash que permite o armazenamento do bootloader e do programa sketch - a ser executado, a memria SRAM (Static Random Access Memory), que se comporta de forma semelhante RAM nos nossos computadores. na SRAM que o programa, ao ser executado, cria e modifica todo o tipo de variveis necessrias sua execuo. Este tipo de memria apenas mantm os dados enquanto se encontra alimentada, o mesmo no acontece com a memria EEPROM (Electrically-Erasable Programmable Read-Only Memory) e memria Flash.

    A memria Flash nos dias de hoje comummente utilizada em cartes de memria, pendrives, memria de armazenamento em cmaras de vdeo, telemveis, PDA (Personal Digital Assistant), entre muitas outras aplicaes. Podemos resumir o tipo de memria, em funo da sua utilizao, da seguinte forma:

    Tabela 2 Utilizao dada pelo Arduino (utilizador) aos diversos tipos de memria Fonte: Site oficial Arduino (www.arduino.cc)

    Com vista a ser poupada memria SRAM, necessria para a correcta execuo do programa, por vezes so guardadas constantes (p.ex. o nmero ) na memria Flash e EEPROM. Para tal, recorrem-se a bibliotecas prprias que possibilitam essa leitura e escrita, para a EEPROM pode-se recorrer { biblioteca e para a memria Flash pode-se recorrer biblioteca ou .

    Neste tutorial apenas vo ser abordadas a biblioteca e , mas, devido ao carcter open source, existem muitas outras bibliotecas disponveis para as mesmas finalidades, devendo o leitor procurar trabalhar com a que se sente mais vontade e obtm os melhores resultados. A abordagem a estas duas bibliotecas encontra-se no captulo 4 Recursos Avanados.

    Flash aqui que o sketch e o bootloader so armazenados

    SRAM Onde so criadas e modificadas as variveis ao longo da execuo do sketch

    EEPROM Pode ser usada para guardar informao (no voltil)

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 12

    2.1.4. Pinout Disponvel

    Torna-se importante uma descrio das possibilidades em termos de pinout do Arduino, sendo uma representao esquemtica possvel para o Arduino Duemilinove a seguinte:

    Fig. 6 Representao esquemtica do Arduino Duemilinove

    Fonte: Obtido a partir Software open source Fritzing (Software de download gratuito a partir do site - www.fritzing.org)

    Pela anlise da figura acima podemos retirar as seguintes concluses, em termos de pinout disponvel:

    Pinos de I/O digitais 14

    (6 com Pulse Width Modulation (PWM))

    Pinos analgicos 6

    Pinos de Ground (GND) 3

    Pinos de 5 V 1

    Pinos de 3.3 V 1

    Pinos de Analog Reference (AREF) 1

    Pinos de reset (RESET) 1

    Tabela 2 Pinout disponvel (Arduino Duemilinove)

    ainda importante referir que a corrente mxima por cada pino analgico e digital de 40 mA, excepo da sada que providencia 3.3 V (visvel na figura 1 e figura 5), que permite correntes mximas de 50 mA.

    De acordo com Sousa and Lavinia, 2006, a capacidade de utilizar Pulse Width Modulation (PWM), muito importante, pois permite obter uma tenso analgica a partir de um sinal digital, ou seja, de um sinal que apenas pode assumir o estado lgico 0 (0V) ou 1 (5 V). O conceito de PWM utilizado para referir sinal que possua uma frequncia constante e um duty cicle vari|vel.

    Fig. 7 Exemplo de sinal PWM Fonte: Adaptado de Sousa and Lavinia 2006, pg. 155

    Frequncia constante duty cicle vari|vel

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 13

    A teoria por detr|s deste fenmeno pode ser facilmente descrita. Analisemos a seguinte equao:

    =1

    0

    Nota: Na equao anterior, T representa o perodo e V(t) representa a tens~o em funo do tempo.

    Aplicando o conceito de PWM equao descrita anteriormente, obtemos o seguinte:

    = 0

    0 <

    Nota: Na equa~o anterior representa a dura~o do impulso, e representa

    a tenso do impulso do sinal PWM.

    Fig. 8 Representao de um impulso PWM Fonte: Adaptado de Sousa and Lavinia 2006, pg. 156

    Aplicando os conceitos descritos anteriormente:

    = + 0

    0

    Ficando pois:

    =

    Podemos concluir, pela an|lise da equa~o anterior, que a tens~o mdia ( ") directamente proporcional ao duty cicle do sinal PWM. Esta caracterstica permite-nos fazer variar a tenso, neste caso especfico, variar a tenso entre 0 e 5 V (Arduino).

    Aps uma breve descrio sobre o modo de funcionamento de um sinal PWM, vamos agora aprofundar um pouco mais a converso A/D. Este factor de grande interesse e a sua compreenso fundamental para perceber os valores obtidos nos pinos analgicos. O microcontrolador utilizado possui um conversor analgico digital de 10 bits, fazendo as contas:

    210 = 1024

    Como a tenso mxima de referncia, por definio, se encontra nos 5V, correspondendo ao valor 1023, obtemos a seguinte resoluo:

    5 1024 0,00488 V 5 mV

    O que significa que s se conseguir| detectar variaes superiores a 5 mV, ou seja, o valor lido pelo Arduino s se altera a cada 5 mV de variao do sinal analgico de entrada.

    0

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 14

    Em caso de aplicaes que possuam sensores analgicos, por vezes 5 mV no uma resoluo aceitvel - existindo uma grande perda de resoluo. Uma possvel soluo, sem recorrer a electrnica externa, apresentada de seguida.

    Para a resoluo da questo, existe um pino de entrada denominado AREF, que significa Analog Reference. Este pino permite mudar a referncia analgica do standard 5V para o valor de entrada. Ficando todas as entradas analgicas com a referncia introduzida.

    Simplificando, se for introduzido no pino AREF a tenso de 2V obtm-se a seguinte resoluo:

    2 1024 1.953 mV 2 mV

    importante ter em conta que todos os pinos analgicos ficam com esta referncia, sendo necessria tambm a sua declarao por Software pela forma analogReference(tipo). A referncia analgica pode, assim, ser de trs tipos:

    DEFAULT Mantm a referncia por definio (5V)

    INTERNAL Altera a referncia para 1.1 V (ATMega168)

    EXTERNAL A voltagem introduzida no pino AREF tomada como referencia

    Tabela 3 Modos de configurao da referncia analgica Fonte: Site oficial Arduino (www.arduino.cc)

    Basicamente, faz-se a configurao do contedo do registo ADMUX (pgina 205 e 206 do respectivo datasheet). importante, por vezes, fazer uma interligao entre a funo em C, uma linguagem de alto nvel (com um nvel de abstraco elevado, mais perto da linguagem humana), e o assembly, uma linguagem de baixo nvel. ento muito importante tentar perceber o que acontece na configurao do microcontrolador e no apenas ver os resultados, embora sejam estes que nos interessam, no ser isso que se pretende na compreenso do funcionamento do microcontrolador e, posteriormente, do Arduino.

    igualmente de referir que aps configurar o Arduino para o uso do pino AREF, ele deixa de ter disponveis os pinos de 3.3V e 5V, sendo estes desligados necessrio recorrer a alimentao externa, caso se queiram utilizar essas tenses de alimentao.

    O Arduino possui capacidade de operar alimentado, quer pela porta USB ou por uma entrada Pwr (do tipo Power Jack), sendo recomendada a sua alimentao (Pwr) entre os 7 e os 12V, possibilita uma opera~o do tipo Standalone.

    O pino Vin no foi referido juntamente com os outros tipos de alimentao, pois possui um comportamento duplo. Ou seja, pode servir para alimentar o Arduino na gama de valores especificada ou, caso se alimente o Arduino recorrendo a uma das alimentaes especificadas anteriormente, pode-se ter disponvel um pino com a tenso utilizada na entrada (p.ex. se for alimentado o Arduino recorrendo a uma alimentao externa de 9 V, no pino Vin estaro acessveis os 9 V da alimentao).

    Alguns pormenores de configurao de cariz mais avanado podero ser encontrados no captulo 4 Recursos avanados.

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 15

    2.2. Software

    2.2.1. Instalao e Utilizao

    Neste captulo, vai ser efectuada uma breve descrio de como instalar e utilizar o Software de desenvolvimento Arduino.

    O Software de desenvolvimento Arduino bastante fcil e intuitivo de utilizar, no havendo qualquer nvel de dificuldade. Foram estruturados passos de forma a simplificar a sua utilizao e instalao.

    1- O 1 passo consiste em efectuar o download do respectivo software de desenvolvimento, atravs do site oficial Arduino (www.arduino.cc).

    Fig. 9 Imagem da parte superior do site oficial do Arduino Fonte: Site oficial Arduino (www.arduino.cc)

    A ltima verso disponvel aparecer na parte superior da pgina, como mostra a figura abaixo, sendo s necessrio escolher a verso apropriada para o sistema operativo que nos encontramos a trabalhar. Actualmente, a verso mais actual a 0016, mas quando estiver a ler este tutorial muito provavelmente j deve haver uma verso mais avanada.

    Fig. 10 Imagem da parte superior do site oficial do Arduino. Fonte: Site oficial Arduino (www.arduino.cc)

    2- O 2 passo consiste em descompactar o ficheiro .ZIP (vers~o Windows w Mac OS) ou .tgz (vers~o Linux) para uma pasta { sua escolha. Escolha uma pasta de destino final, pois o programa no necessita de instalao. Utilizando o sistema operativo Windows, o contedo da pasta dever ser o seguinte:

    Fig. 11 Contedo da pasta que contm o Software de desenvolvimento Arduino

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 16

    3- O 3 passo consiste em ligar a placa de desenvolvimento ao computador e instalar os drivers FTDI, para permitir uma converso de USB para srie. A representao do pinout de um FTDI a seguinte:

    Fig. 12 Esquema de um FTDI

    Fonte: Retirado de Igoe 2007 pg. 55

    Os drivers encontram-se disponveis na pasta do Software Arduino - que descompactou no passo 2 - ou se preferir pode sempre retirar os drivers mais actualizados do site oficial FTDI - http://www.ftdichip.com/.

    4- O 4 passo consiste em configurar a porta srie a ser utilizada e qual o tipo de modelo Arduino, que nos encontramos a utilizar. Para tal, necessitamos de abrir o Software de desenvolvimento e escolher na barra de separadores a op~o Tools.

    Fig. 13 Software de desenvolvimento Arduino

    Opo Tools

    Seleccionar Modelo a utilizar Porta COM a ser utilizada

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 17

    5- O 5 e ltimo passo para a utilizao do Software consiste em elaborar o seu Sketch, compilar e, caso no tenha erros, fazer o uploading para a placa de desenvolvimento Arduino.

    Fig.14 Boto para compilar o Sketch elaborado Fig.15 Boto para efectuar uploading

    2.2.2. Ciclo de Desenvolvimento

    Um resumo do referido anteriormente pode ser encontrado na figura seguinte, que demonstra os passos necessrios para elaborar uma aplicao (aps ter feito a instalao do Software) de uma forma esquemtica e a qual se pode designar por Ciclo de Desenvolvimento.

    Fig.16 Esquema da fase de desenvolvimento de uma aplicao (Ciclo de desenvolvimento)

    A anlise da figura 16 permite fazer um resumo possvel de todas as fases necessrias at execuo do programa criado, sendo muito importante a sua compreenso e apreenso. A figura 17 visa dar outra perspectiva ao exposto na figura 16, tentando dar a compreender uma vez mais qual o ciclo de desenvolvimento da plataforma de desenvolvimento Arduino.

    Fig.17 Esquema da fase de desenvolvimento de uma aplicao (Outra maneira possvel de representar)

    Editar Compilar Uploading Executar

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 18

    2.2.3. Interaco do Arduino com outro Software

    Fig. 18 Imagem da parte superior do site oficial do Arduino

    Fonte: Site oficial Arduino (www.arduino.cc)

    Caso se pretenda interagir com outro tipo de Software com a plataforma de desenvolvimento Arduino, pode-se recorrer ao separador Playground (Fig. 18). Podendo encontrar inmeras referncias de interaco do Arduino com outro Software de desenvolvimento (p.ex. Processing, Mathematica, MatLab, entre outros).

    3. ndice de Instrues

    Neste captulo, vo ser referidas as mais importantes instrues base do ambiente de desenvolvimento Arduino, sem recorrer a bibliotecas externas, sendo estas enumeradas por tipo de aplicao. Antes de abordar algumas das instrues possveis numa linguagem de alto nvel, podemos fazer uma breve abordagem para analisar qual a classificao a atribuir ao microcontrolador em estudo.

    De acordo com Arroz, Monteiro et al. 2007, pg. 732, podemos classificar os processadores tendo em conta o seu conjunto de instrues em duas categorias:

    CISC (Complex Instruction Set Computers)

    RISC (Reduced Instruction Set Computers)

    Baseando-se a arquitectura CISC num conjunto de instrues com modos de endereamento bastante complexos, ao utilizar este tipo de arquitectura permitido elaborar programas bastante compactos e codificveis ao recorrer a um uso reduzido de instrues. Alguns dos inconvenientes deste tipo de arquitectura so baseados no elevado tempo de ciclos de relgio, necessrios para executar cada uma das suas instrues. Outro inconveniente a existncia de variados modos de endereamento.

    Por outro lado os processadores baseados em arquitecturas do tipo RISC, apresentam um conjunto de instrues bastante reduzido, possibilitando assim obter uma enorme simplicidade e um tempo de execuo menor por instruo que a arquitectura CISC. Conseguindo, assim, com um conjunto de instrues bsicas com tempo de execuo menores, obter, no final, velocidades de processamento mais elevadas que a arquitectura CISC.

    Na sua verso mais simples, baseando a anlise em Arroz, Monteiro et al. 2007 pg. 733, pode afirmar-se que os processadores RISC possuem os seguintes tipos de instrues:

    Instrues lgicas e aritmticas sobre registos;

    Instrues de transferncia de dados entre memria e registos;

    Instrues de controlo.

    No datasheet dos microcontroladores utilizados nos modelos do Arduino, pode-se perceber que estamos perante microcontroladores baseados numa arquitectura advanced RISC. Segundo Tecnology 1992 pg. 14, em que efectuado uma reviso completa arquitectura advanced RISC, referido que esta arquitectura foi desenvolvida para ser uma especifica~o standard para uma famlia de microprocessadores baseada na famlia MIPS.

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 19

    MIPS (Microprocessor Without Interlocked Pipeline Stages) uma arquitectura de microcontroladores RISC, desenvolvida pela MIPS Technology. MIPS tambm podem ser as iniciais de Millios of Instructions Per Second, ou seja, Milhares de Instrues Por Segundo.

    3.1. Funes Base

    3.1.1 void setup()

    Descrio: Esta funo apenas executada uma vez e normalmente utilizada para executar a inicializao de variveis, a inicializao da utilizao bibliotecas (no confundir com declarao de bibliotecas), a definio dos pinos (como input ou output), o incio do uso de comunicao srie, entre outros. Esta funo apenas volta a ser executada novamente ao ser efectuado o reset ou quando se desligar e volta a ligar a placa de desenvolvimento Arduino.

    Exemplo: (1) int botao=3; // Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3. (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT (5) } (6) void loop(){ (7) (.) (8) }

    3.1.2 void loop()

    Descrio: Esta fun~o faz um loop sucessivo (como o prprio nome indica), ou seja, todos os comandos existentes no interior desta funo so sucessivamente repetidos, o que pode permitir a leitura sucessiva de portas, a leitura sucessiva de parmetros provenientes de sensores externos e actuar de acordo com as condies estabelecidas, entre muitas outras aplicaes, bastando apenas ter criatividade. Exemplo: (1) int botao=3,val; // Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(botao); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) if(val>=500){ // Ciclo if que testa a condio val>=500 (maior ou igual a 500)

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 20

    (10) digitalWrite(13,HIGH); // Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (11) } (12) } Nota: As funes atrs descritas tm de ser necessariamente do tipo void, ou seja, no podem retornar qualquer valor depois da sua execuo.

    3.1.3. Resumindo

    As funes void setup()e void loop() s~o de carcter obrigatrio, ou seja, mesmo que no necessria a sua utilizao devero constar no cdigo utilizado. E apenas ser~o chamadas funes externas que constem na fun~o void loop(). Um resumo dos subcaptulos anteriores encontra-se expresso no exemplo seguinte: Exemplo: Declarao de variveis globais; void setup(){ Instruo 1; Instruo 2; (.) } void loop(){ Instruo 6; Instruo 9; Funo1(); (.) } Nos prximos captulos e subcaptulos, vai ser explorado o tipo de variveis possveis de declarar e algumas das instrues julgadas mais importantes. Essas instrues estaro divididas dependendo da sua aplicao, facilitando assim a sua organizao.

    Conjunto de instrues apenas executado uma vez,

    na inicializao do programa a executar

    Conjunto de instrues que executado em loop

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 21

    3.2. Ciclos

    3.2.1 Ciclo If.else

    Descrio: utilizado para descrever uma condio, ou seja, quando uma varivel for: igual, maior, menor ou diferente (de acordo com a declarao efectuada) que um determinado valor executada uma determinada condio. Podem-se usar vrios ciclos if.else encadeados, de forma a verificar diversas condies.

    Sintaxe: if(condio){ Instruo 1; Instruo 2; (..) } else{ Instruo 3; Instruo 4; (..) } A utilizao da instruo else no ciclo if dispensvel, podendo apenas tomar a forma: if(condio){ Instruo 1; Instruo 2; (..) } A condio acima referida pode ser descrita das seguintes formas:

    X == Y X igual a Y

    X != Y X diferente de Y (no igual)

    X > Y X maior que Y

    X >= Y X maior ou igual a Y

    X < Y X menor que Y

    X

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 22

    (5) pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(botao); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) if(val>=500) // Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) digitalWrite(13,HIGH); // Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (12) else (13) digitalWrite(13,LOW); // Se a condio no for verificada, atribudo ao pino digital 13 a condio LOW (0 V) (14) }

    3.2.2 Ciclo for

    Descrio: Esta instruo utilizada quando se quer efectuar uma instruo ou conjunto de instrues um determinado nmero de vezes. Um exemplo possvel de aplicao o preenchimento de um vector (array), com dados provenientes de entradas analgicas.

    Sintaxe: for(inicializao; condio; incremento a efectuar){ Instruo 1; Instruo 2; (.) } A inicializao apenas efectuada uma vez, no incio do ciclo. Cada vez que o ciclo efectuado a condio testada. Caso a condio se verifique efectuado o incremento, caso a condio no se verifique o ciclo termina a sua execuo. A condio, referida anteriormente, declarada semelhana da condio utilizada no ciclo if. O exemplo abaixo mostra um exemplo de implementao do ciclo for, face s regras expostas acima. Exemplo: (1) int entrada_analogica=3,val,f[10],i; // Declarao de uma varivel do tipo integer, com o nome entrada_analogica inicializada com o valor 3, de variveis do mesmo tipo com o nome val e i no inicializada, e de um vector f[] com 11 posies de memria do mesmo tipo (integer). (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(entrada_analogica,INPUT); // Permite definir o pino 3 como INPUT (5) } (6) void loop(){ (7) for(i=0;i

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 23

    (9) f[i]=val; //Atribui o valor da varivel val ao vector f[i], ou seja, permite preencher o vector com 11 valores do pino analgico 3 (10) } (11) }

    3.2.3 Ciclo switch / case

    Descrio: normalmente utilizada para declarar uma lista de casos possveis, para uma determinada varivel, sendo verificado cada caso e apenas executado quando a varivel respeitar a condio declarada.

    Sintaxe: switch(varivel){ case 1: Instruo a executar quando varivel for 1 (varivel == 1) break; case 2: Instruo a executar quando varivel for 2 (varivel == 2) break; (..) default: Conjunto de instrues a executar se nenhuma das condies for verificada. A utilizao desta condio opcional. break; } necess|rio utilizar a instru~o break caso se pretenda sair do ciclo aps a condio ser verificada. Caso contrrio, vai continuar a ser executado o ciclo a partir da condio verificada. Exemplo: (1) int entrada_analogica=3,val; // Declarao de uma varivel do tipo integer, com o nome entrada_analogica inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(entrada_analogica,INPUT); // Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(entrada_analogica); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) switch(val){ // Ciclo switch, sendo val a varivel a testar (10)case 500: // condio de teste, se val == 500 (igual a 500) (11) digitalWrite(13,HIGH); // Se a condio da linha 10 se verificar, esta instruo executada (12) break; // Instruo que permite terminar o ciclo (13) default: // Se nenhuma das condies se verificar (o seu uso opcional)

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 24

    (14) digitalWrite(13,LOW); // Instruo que executada se a condio do ciclo switch no se verificar (15) } (16) }

    3.2.4 Ciclo while

    Descrio: normalmente utilizado para efectuar um loop sucessivo at uma determinada condio se verificar. Caso essa condio se deixe de verificar o ciclo termina. Em casos em que a condio no se verifica, estamos perante um ciclo infinito (semelhante { fun~o void loop()).

    Sintaxe: while(condio){ Instruo 1; Instruo 2; (..) } necessrio fazer com que a condio se torne falsa, caso se queira finalizar o ciclo para executar outras instrues. Pois caso contrrio o ciclo vai ser executado indefinidamente. Exemplo: (1) int entrada_analogica=3,val,i=0,f[10]; // Declarao de uma varivel do tipo integer, com o nome entrada_analogica inicializada com o valor 3, de variveis do mesmo tipo com o nome val no inicializada, i inicializada com o valor 0 e de um vector f[] com 11 posies de memria do mesmo tipo (integer). (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(entrada_analogica,INPUT); // Permite definir o pino 3 como INPUT (5) } (6) void loop(){ (7) while(i

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 25

    3.2.5 Ciclo do.while Descrio: Bastante semelhante ao ciclo while, sendo a principal diferena o facto da condio ser testada apenas no fim do ciclo e no no incio do ciclo. Ou seja, mesmo que a condio seja falsa o ciclo vai ser sempre executado uma vez. Sintaxe: do{ Instruo 1; Instruo 2; (..) } while(condio); Exemplo: (1) int entrada_analogica=3,val,i=0,f[10]; // Declarao de uma varivel do tipo integer, com o nome entrada_analogica inicializada com o valor 3, de uma varivel do mesmo tipo com o nome val no inicializada, i inicializada com o valor 0 e de um vector f[] com 11 posies de memria do mesmo tipo (integer). (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(entrada_analogica,INPUT); // Permite definir o pino 3 como INPUT (5) } (6) void loop(){ (7) do{ // Permite definir o inicio do ciclo (8) val=analogRead(entrada_analogica); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) f[i]=val: //Atribui o valor da varivel val ao vector f[i], ou seja, permite preencher o vector com valores provenientes do pino analgico 3 (10) i++; // Incremento do valor de i inicialmente a zero, instruo semelhante a i=i+1 (11)} (12) while(i

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 26

    3.3. Tipos de variveis disponveis

    3.3.1 Varivel do Tipo Boolean

    Descrio: Uma varivel deste tipo apenas pode tomar dois valores distintos - true ou false. Esta vari|vel reserva 1 Byte de memria para a sua utilizao.

    Sintaxe: boolean vari|vel = valor; Quando referido acima a valor, est|-se a referir a true ou false. Exemplo: (1) int entrada_analogica=3,val,i=0,f[10]; // Declarao de uma varivel do tipo integer, com o nome entrada_analogica inicializada com o valor 3, de uma varivel do mesmo tipo com o nome val no inicializada, i inicializada com o valor 0 e de um vector f[] com 11 posies de memria do mesmo tipo (integer). (2) boolean teste = false; // Definio de uma varivel do tipo boolean inicializada com false (3) void setup() { (4) Serial.begin(9600); // Permite a inicializao da comunicao Srie (5) pinMode(entrada_analogica,INPUT); // Permite definir o pino 3 como INPUT (6) } (7) void loop(){ (8) do{ // Permite definir o inicio do ciclo (9) val=analogRead(entrada_analogica); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (10) f[i]=val: //Atribui o valor da varivel val ao vector f[i], ou seja, permite preencher o vector com valores provenientes do pino analgico 3 (11) i++; // Incremento do valor de i inicialmente a zero, instruo semelhante a i=i+1 (12) teste = !teste; //modifica o valo atribudo varivel booleana teste o seu oposto ( se true fica false e vice-versa) (13)} (14) while(i

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 27

    3.3.2. Varivel do tipo char vs unsigned char

    Descrio: Uma varivel do tipo char apenas pode guardar um nico caracter, ocupando este tipo de varivel 1 Byte de memria. Este tipo de varivel pode armazenar os valores em decimal, correspondentes ao valor decimal (tabela ASCII) do caracter a guardar. Podendo ter valores em decimal no intervalo de -128 a 127. Ao declarar uma varivel do tipo char como unsigned, estamos a abdicar da parte negativa. Podendo armazenar valores correspondendo entre 0 a 255.

    Sintaxe: char varivel = Caracter: char vari|vel = valor em decimal - tabela ASCII; unsigned char vari|vel = Caracter; unsigned char vari|vel = valor em decimal - tabela ASCII; Exemplos: char exemplo_char = N; // Atribuido varivel do tipo char o caracter N char exemplo_char_1 = 78; // Corresponde ao caracter N, segundo a tabela ASCII

    3.3.3. Varivel do tipo byte

    Descrio: Armazena um nmero do tipo unsigned, compreendido entre 0 e 255. Ocupando, como o prprio nome indica, 1 Byte na memria (8 Bits). Sintaxe: byte varivel = valor; Exemplos: byte exemplo = B0000001; // Armazena o valor em binrio que corresponde ao valor 1 em decimal byte exemplo_2 = 1; // Semelhante ao exemplo anterior, mas armazenando o valor directamente em decimal

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 28

    3.3.4. Varivel do tipo int vs unsigned int

    Descrio: Este tipo de varivel (integer) permite guardar um valor inteiro de 2 bytes, ou seja, um nmero inteiro com valor compreendido entre -32768 e 32767. Podemos tambm declarar a varivel int, como sendo do tipo unsigned. Ao declarar uma varivel do tipo unsigned, deixamos de ter parte negativa passando a poder armazenar valores compreendidos entre 0 e 65535. Sintaxe: int varivel = valor; unsigned int varivel = valor; Exemplos: int exemplo = -150; // Declara um varivel do tipo int e atribui-lhe o valor de -150 unsigned int exemplo_1 = 65000; // Declara um varivel do tipo unsigned int e atribui-lhe o valor de 65000

    3.3.5. Varivel do tipo long vs unsigned long

    Descrio: um tipo de varivel que pode guarda valores numricos at 32 bits, o que correspondente a 4 bytes, ou seja, valores compreendidos entre -2147483648 e 2147483647. Este tipo de varivel pode tambm ser declarado como unsigned, podendo armazenar valores compreendidos entre 0 e 4294967295.

    Sintaxe: long varivel = valor; unsigned long varivel = valor; Exemplos: long exemplo = -1500000000; // Declara um varivel do tipo long e atribui-lhe o valor de -1500000000 unsigned long exemplo_1 = 4000000000; // Declara um varivel do tipo unsigned long e atribui-lhe o valor de 4000000000

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 29

    3.3.6. Varivel do tipo float vs double

    Descrio: A varivel do tipo float apresenta uma maior resoluo, face s variveis do tipo integer. So reservados em memria 4 Bytes (32 bits), para armazenar o seu contedo. Este tipo de varivel pode conter valores no intervalo de 3.4028235 1038 e 3.4028235 1038. Paralelamente o conceito de double leva-nos a considerar uma varivel que possua o dobro da preciso, de uma varivel do tipo float, apesar de no contexto de estudo a declarao de uma varivel do tipo float ou do tipo double ser igual. Ou seja, no existe um incremento de preciso mantendo o mesmo espao reservado de memria para ambos os tipos utilizando o Arduino.

    Sintaxe: float varivel = valor; double varivel = valor; Exemplos: float exemplo = 1.589; // Declara um varivel do tipo float e atribui-lhe o valor de 1.589 double exemplo_1 = 1.589; // Declara um varivel do tipo double e atribui-lhe o valor de 1.589

    3.3.7. Varivel do Tipo array e a Noo de string

    Descrio: considerado um array, um vector de variveis do mesmo tipo ao qual se pode aceder atravs do seu respectivo ndice. O conceito de string comummente utilizado para designar um vector de variveis do tipo char.

    Sintaxe: tipo_varivel nome_varivel[ndice] = valor; Ao declarar um ndice de valor 10, estamos na verdade a reservar 11 espaos na memria para a varivel do tipo declarado. Pois, tambm, temos de contar com o ndice zero, este factor torna-se muitas vezes objecto de erro. Exemplos: float exemplo[10]; // Declarao de um vector com 11 espaos, do tipo float float exemplo_2[]={1,2,3,4,5,6,7,8,9,10}; // Declarao de um vector do tipo float, que vai ter um ndice compreendido entre 0 e 9 char exemplo_3[11]=Hello World; // Declarao de uma string char exemplo_4[11]={H,E,L,L,O, ,W,O,R,L,D}; // Declarao de uma string, com o contedo semelhante ao exemplo anterior, mas com outra forma de colocar o mesmo contedo

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 30

    3.4. Converter tipos de variveis

    3.4.1. char(x)

    Descrio: Converte um valor de x, que pode ser de qualquer tipo, para uma varivel do tipo char.

    Sintaxe:

    char varivel = char(valor);

    3.4.2. byte(x)

    Descrio: Converte um valor de x, que pode ser de qualquer tipo, para uma varivel do tipo byte.

    Sintaxe:

    byte varivel = byte(valor);

    3.4.3. int(x)

    Descrio: Converte um valor de x, que pode ser de qualquer tipo, para uma varivel do tipo integer.

    Sintaxe:

    int varivel = int(valor);

    3.4.4. long(x)

    Descrio: Converte um valor de x, que pode ser de qualquer tipo, para uma varivel do tipo long.

    Sintaxe:

    long varivel = long(valor);

    3.4.5. float(x)

    Descrio: Converte um valor de x, que pode ser de qualquer tipo, para uma varivel do tipo float.

    Sintaxe:

    float varivel = float(valor);

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 31

    3.5. Funes

    3.5.1. Input/Output digital

    3.5.1.1. pinMode()

    Descrio: Ao recorrer a esta instruo, possvel configurar o modo de comportamento de um determinado pino. Possibilitando assim defini-lo como input ou output, esta definio normalmente efectuada recorrendo funo void setup().

    Sintaxe: pinMode(Nmero do pino, Modo); O Modo acima descrito pode ser definido da seguinte forma:

    INPUT

    OUTPUT Exemplo: (1) int botao=3,val; // Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val no inicializada com nenhum valor (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(botao); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) if(val>=500) // Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) digitalWrite(13,HIGH); // Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (11) } (12) }

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 32

    3.5.1.2 digitalWrite()

    Descrio: Possibilita, nos pinos configurados como output atravs da instruo pinMode, estabelecer a sada dos respectivos pinos com o valor lgico 1 (HIGH 5 V) ou com o valor lgico 0 (LOW 0V)

    Sintaxe: digitalWrite(Nmero do pino, Modo); O Modo acima descrito, pode ser definido como:

    HIGH

    LOW Exemplo: (1) int botao=3,val; // Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val no inicializada com nenhum valor (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(botao); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) if(val>=500) // Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) digitalWrite(13,HIGH); // Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (11) } (12) }

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 33

    3.5.1.3. digitalRead()

    Descrio: Possibilita a leitura de uma entrada digital especfica, retornando um valor no formato integer (int). Se obtivermos um valor de retorno de 1, estamos perante uma leitura do tipo HIGH (valor lgico 1). Se tal no se verificar, e tivermos um valor de retorno igual a 0, estamos perante uma leitura do tipo LOW (valor lgico 0).

    Sintaxe: Varivel do tipo integer = digitalRead(Nmero do pino); Exemplo: (1) int botao=3,val; // Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val no inicializada com nenhum valor (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=digitalRead(botao); // Permite a leitura do valor do pino 3 digital atribuindo o seu valor varivel val (9) if(val==1) // Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) digitalWrite(13,HIGH); // Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (11) } (12) else{ // Caso a condio do ciclo if no se verifique (13) digitalWrite(13,LOW); // Se a condio no for verificada, atribudo ao pino digital 13 a condio LOW (0 V) (14) } (15) }

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 34

    3.5.2. Input/Output analgico

    3.5.2.1 analogRead()

    Descrio: Possibilita a leitura do valor analgico do pino especificado, com um conversor A/D possuindo uma resoluo de 10 bits. O que leva a que um valor compreendido entre 0 e 5 V, esteja compreendido entre os valores inteiros (int) 0 e 1023.

    Sintaxe: Varivel do tipo integer = analogRead(Nmero do pino); Exemplo: (1) int botao=3,val; // Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val no inicializada com nenhum valor (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(botao); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) if(val>=500) // Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) digitalWrite(13,HIGH); // Se a condio for verificada, atribudo ao pino digital 13 a condio HIGH (5 V) (11) } (12) }

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 35

    3.5.2.2 analogWrite()

    Descrio: Possibilita a utilizao dos pinos PWM (Pulse Width Modulation) da placa Arduino. O sinal PWM mantm-se at ser modificado atravs de uma outra instruo que afecte esse pino, a frequncia do sinal PWM criado de 490 .

    Sintaxe: analogWrite(Nmero do pino, valor); O valor referido anteriormente varia entre 0 (sempre desligado), at ao valor 255 (que representa um sinal de 5 V constante). Exemplo: (1) int botao=3,val; // Declarao de uma varivel do tipo integer, com o nome botao inicializada com o valor 3 e de uma varivel do mesmo tipo com o nome val no inicializada com nenhum valor (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(botao,INPUT); // Permite definir o pino 3 como INPUT (5) pinMode(13,OUTPUT); // Permite definir o pino 13 como OUTPUT (6) } (7) void loop(){ (8) val=analogRead(botao); // Permite a leitura analgica do valor do pino 3 atribuindo o seu valor varivel val (9) if(val>=500) // Ciclo if que testa a condio val>=500 (maior ou igual a 500) (10) analogWrite(9,255); // Instruo com a mesma funo que digitalWrite(9,HIGH) (11) } (12) else{ (13) analogWrite(9,0); // Instruo com a mesma funo que digitalWrite(9,LOW) (14) } (15) }

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 36

    3.5.3. Tempo

    3.5.3.1. millis()

    Descrio: Possibilita o retorno da quantidade de tempo, em milisegundos na forma de uma vari|vel do tipo unsigned long. O valor retornado representa o tempo que, passou desde que o programa actual comeou a ser executado. O overflow (voltar ao incio, valor zero) do contador ocorre passado um tempo de 50 dias.

    Sintaxe: unsigned long tempo = millis(); Exemplo: (1) unsigned long tempo; // Declarada uma varivel do tipo unsigned long com o nome tempo (2) void setup() { (3) (..) (4) } (5) void loop(){ (6) tempo = millis(); // Atribui varivel tempo o valor em milisegundos desde que o sketch actual comeou a ser executado (7) }

    3.5.3.2. micros()

    Descrio: Possibilita o retorno da quantidade de tempo, em microsegundos na forma de uma vari|vel do tipo unsigned long. O valor retornado representa o tempo que, passou desde que o programa actual comeou a ser executado. O overflow (voltar ao incio, valor zero) do contador ocorre passado um tempo de 70 minutos.

    Sintaxe: unsigned long tempo = micros(); Exemplo: (1) unsigned long tempo; // Declarada uma varivel do tipo unsigned long com o nome tempo (2) void setup() { (3) (..) (4) } (5) void loop(){ (6) tempo = micros(); // Atribui varivel tempo o valor em microsegundos desde que o sketch actual comeou a ser executado (7) }

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 37

    3.5.3.3. delay (milisegundos)

    Descrio: Possibilita efectuar uma pausa ao programa em execuo, por uma quantidade de milisegundos especificada. til para manter um estado durante uma certa quantidade de tempo.

    Sintaxe: delay(tempo que deseja efectuar a pausa ms); Exemplo: (1) int led_pin=13; // Declarao de uma varivel do tipo integer com o nome led_pin, sendo-lhe atribuda o valor 13 (2) void setup() { (4) pinMode(led_pin,OUTPUT); // Permite definir o pino 13 como OUTPUT (5) Serial.begin(9600); // Permite a inicializao da comunicao Srie (6) } (7) void loop(){ (8) digitalWrite(led_pin,HIGH); // atribudo ao pino digital 13 a condio HIGH (5 V) (9) delay(200); // efectuado um delay de 200 ms, antes de efectuar a prxima instruo (10) digitalWrite(led_pin,LOW); // atribudo ao pino digital 13 a condio LOW (0 V) (11) delay(600); // efectuado um delay de 600 ms, antes de efectuar a prxima instruo, neste caso a funo void loop() recomea (12) }

    3.5.3.4. delayMicroseconds (microsegundos)

    Descrio: Possibilita efectuar uma pausa ao programa em execuo, por uma quantidade de microsegundos especificada.

    Sintaxe:

    delayMicroseconds(tempo que deseja efectuar a pausa s); Exemplo: (1) int led_pin=13; // Declarao de uma varivel do tipo integer com o nome led_pin, sendo-lhe atribuda o valor 13 (2) void setup() { (4) pinMode(led_pin,OUTPUT); // Permite definir o pino 13 como OUTPUT (5) Serial.begin(9600); // Permite a inicializao da comunicao Srie (6) } (7) void loop(){ (8) digitalWrite(led_pin,HIGH); // atribudo ao pino digital 13 a condio HIGH (5 V)

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 38

    (9) delayMicroseconds(200); // efectuado um delay de 200 s, antes de efectuar a prxima instruo (10) digitalWrite(led_pin,LOW); // atribudo ao pino digital 13 a condio LOW (0 V)

    (11) delayMicroseconds(600); // efectuado um delay de 600 s, antes de efectuar a prxima instruo, neste caso a funo void loop() recomea (12) }

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 39

    3.5.4. Funes Matemticas

    3.5.4.1. min(valor1,valor2)

    Descrio: Instruo que retorna o menor de dois valores.

    Sintaxe: Varivel menor = min(Valor 1, Valor 2); Exemplo: int variavel_menor=0; // declarao de uma varivel do tipo integer de nome variavel_menor inicializada com o valor 0 variavel_menor = min(5,9); // O valor atribudo varivel varivel_menor seria o valor 5

    3.5.4.2. max(valor1,valor2)

    Descrio: Instruo que retorna o maior de dois valores.

    Sintaxe: Varivel maior = max(Valor 1, Valor 2); Exemplo: int variavel_maior=0; // declarao de uma varivel do tipo integer de nome variavel_maior inicializada com o valor 0 variavel_maior = max(5,9); // O valor atribudo varivel varivel_maior seria o valor 9

    3.5.4.3. abs(valor)

    Descrio: Instruo que retorna o modulo de um nmero.

    Sintaxe: Mdulo = abs(valor); Sendo Mdulo um valor que tem de respeitar a seguinte condi~o:

    Mdulo = valor valor 0valor valor < 0

    Exemplo: int modulo=0; modulo = abs(-5) // O valor atribudo varivel modulo seria o valor 5

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 40

    3.5.4.4. constrain(valor, valor1.,valor2)

    Descrio: Limita o valor de retorno a um intervalo definido pelo utilizador. Sintaxe: Valor = constrain(Valor a testar, Valor inferior do intervalo, Valor superior do intervalo); Sendo Valor dado pela seguinte condi~o:

    Valor = valor Se valor valor1, valor2

    valor1 valor < 1valor2 valor > 2

    Exemplo: int valor=0; // declarao de uma varivel do tipo integer de nome valor inicializada com o valor 0 valor = constrain(5,2,10) // O valor atribudo varivel valor seria o valor 5

    3.5.4.5. map(X,valor1,valor2,para valor1,para valor2)

    Descrio: Instruo til para modificar o intervalo de valores esperados por uma determinada aplicao. Possibilitando assim um ajuste na escala de valores a utilizar. Este tipo de instruo muito utilizado para gerar sinais PWM atravs de sinais analgicos de entrada, podendo assim a partir de um sinal que varia de 0 a 1023 gerar um sinal PWM que varia de 0 a 255 com relativa facilidade.

    Sintaxe: Valor num novo intervalo = map(Valor, valor1, valor2, Para valor1, Para valor2); valor1 O limite inferior do intervalo actual valor2 O limite superior do intervalo actual Para valor1 O limite inferior do novo intervalo a considerar Para valor2 O limite superior do novo intervalo a considerar

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 41

    Exemplo: 1) int entrada_analogica=3,val,i=0,f[10]; // Declarao de uma varivel do tipo integer, com o nome entrada_analogica inicializada com o valor 3, de variveis do mesmo tipo com o nome val no inicializada com nenhum valor, i inicializada com o valor 0 e de um vector f[] com 11 posies de memria do mesmo tipo (integer) (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) pinMode(entrada_analogica,INPUT); // Permite definir o pino 3 como INPUT (5) } (6) void loop(){ (7) for(i=0;i

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 42

    3.5.5. Funes Trigonomtricas

    3.5.5.1. sen(valor)

    Descrio: Instruo que retorna o clculo do seno, de um valor em radianos.

    Sintaxe: Resultado = sen(Valor em Radianos); Com Resultado 1; 1

    3.5.5.2. cos(valor)

    Descrio: Instruo que retorna o clculo do coseno, de um valor em radianos.

    Sintaxe: Resultado = cos(Valor em Radianos); Com Resultado 1; 1

    3.5.5.1. tan(valor)

    Descrio: Instruo que retorna o clculo da tangente, de um valor em radianos.

    Sintaxe: Resultado = tan(Valor em Radianos); Com Resultado ; +

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 43

    3.5.6. Nmeros Aleatrios

    3.5.6.1 randomSeed(valor)

    Descrio: Possibilita variar o ponto onde o algoritmo de sequncia aleatria comea, pois apesar de este ser muito longo (possuir muitos valores no seu intervalo), o seu intervalo apresenta-se constante. Ao fazer variar o ponto onde o algoritmo comea, menos probabilidades temos de repetir um nmero.

    Sintaxe: randomSeed(Valor); Exemplo: (1) void setup() { (2) () (3) randomSeed(analogRead(0)); //Possibilita fazer variar o ponto onde o algoritmo de sequncia aleatria comea. Se colocar-mos uma entrada aleatria, cada vez que a funo void setup() executada o valor atribudo diferente. (4) () (5) } (6) void loop(){ (7) (..) (8) }

    3.5.6.2. random()

    Descrio: Instruo que permite gerar nmeros aleatrios (ou melhor escrevendo - pseudo-aleatrios).

    Sintaxe: Resultado = random(Valor mximo possvel); Resultado = random(Valor mnimo possvel, Valor mximo possvel); O Valor m|ximo possvel n~o est| includo no intervalo a considerar e a inclus~o do Valor mnimo possvel opcional. Ficando a vari|vel Resultado compreendida no seguinte intervalo: Resultado Valor mnimo possvel; ( 1) . Exemplo: (1) long valor_random; // Declarao de uma varivel do tipo long de nome valor_random (2) void setup() { (3) ()

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 44

    (4) randomSeed(analogRead(0)); //Possibilita fazer variar o ponto onde o algoritmo de sequncia aleatria comea. Se colocar-mos uma entrada aleatria, cada vez que a funo void setup() executada o valor atribudo diferente. (5) () (6) } (7) void loop(){ (8) valor_random=random(10,20); // Valor de valor_random ser um valor compreendido entre o valor 10 e o valor 20 (9) (.) (10) }

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 45

    3.5.7. Interrupts

    3.5.7.1. attachInterrupt(interrupt, funo,modo)

    Descrio: Instruo que permite definir o funcionamento de interrupts externos. Ocorrendo a definio atravs desta instruo da funo a executar, do pino onde vai ocorrer o interrupt e o modo como se deve responder variao do sinal de entrada no pino a considerar.

    Sintaxe: attachInterrupt(interrupt, funo a executar, modo); O par}metro interrupt pode tomar os seguintes valores:

    Arduino duemilinove

    o Valor 0 -corresponde ao pino digital 2; o Valor 1 -corresponde ao pino digital 3.

    Arduino Mega

    o Valor 0 -corresponde ao pino digital 2; o Valor 1 -corresponde ao pino digital 3; o Valor 2 -corresponde ao pino digital 21; o Valor 3 -corresponde ao pino digital 20; o Valor 4 -corresponde ao pino digital 19; o Valor 5 -corresponde ao pino digital 18.

    Nota: A fun~o a executar, ao ser verificado o interrupt externo, no poder retornar qualquer valor (Ou seja, dever| ser do tipo void).

    O par}metro modo define o modo como ocorre o reconhecimento, de que ocorreu um interrupt externo. Podendo ter os seguintes valores:

    LOW O interrupt efectuado sempre que o valor

    lgico no pino 0.

    CHANGE O interrupt efectuado sempre que o valor

    no pino muda de valor.

    RISING O interrupt efectuado sempre que o valor

    lgico no pino muda de 0 para 1.

    FALLING

    O interrupt efectuado sempre que o valor lgico no pino muda de 1 para 0.

    Tabela 5 Condies possveis do par}metro modo

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 46

    3.5.7.2. detachInterrupt(interrupt)

    Descrio: Possibilita desabilitar um interrupt previamente estabelecido utilizando a instru~o attachInterupt().

    Sintaxe: detachInterrupt(interrupt); Os valores possveis para interrupt encontram-se enumerados no subcaptulo anterior (3.5.7.1.).

    3.5.7.3. interrupts()

    Descrio: Instruo que permite voltar a activar o uso de interrupes, depois de esta funcionalidade ter sido desactivada. O uso de interrupts encontra-se por defeito activado.

    Sintaxe: interrupts(); Exemplo: (1) void setup() { (2) () (3) } (4) void loop(){ (5) noInterrupts(); // Instruo que desactiva o uso de interrupts (6) Instruo 1; (7) (..) (8) interrupts(); // Instruo que activa o uso de interrupts (9) (..) (10) }

    3.5.7.4. noInterrupts()

    Descrio: Instruo que permite desactivar o uso de interrupes. O uso de interrupts encontra-se por defeito activado.

    Sintaxe: noInterrupts(); Exemplo: (1) void setup() { (2) ()

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 47

    (3) } (4) void loop(){ (5) noInterrupts(); // Instruo que desactiva o uso de interrupts (6) Instruo 1; (7) (..) (8) interrupts(); // Instruo que activa o uso de interrupts (9) (..) (10) }

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 48

    3.5.8. Comunicao Srie

    3.5.8.1. Serial.available()

    Descrio: Obtm o nmero de bytes que esto a ser recebidos por srie, podendo assim saber quando esto a ser recebidos dados ou no.

    Sintaxe: Nmero de bytes a receber (int) = Serial.available(); Exemplo: (1) int leitura_serie=0; //Declarao de uma varivel do tipo integer com o nome leitura_serie, inicializada com o valor 0 (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) } (5) void loop(){ (6) if(Serial.available()>0) // Condio if que verifica se esto a ser recebidos dados por Srie (7) leitura_serie=Serial.read(); // Caso se estejam a receber dados por srie, o seu valor guardado na varivel integer leitura_serie (8) } (9) }

    3.5.8.2. Serial.begin(int baud rate)

    Descrio: Instruo necessria para iniciar a comunicao srie, permitindo definir qual a baud rate da comunica~o. Os valores de velocidade de comunicao mais comuns para comunicao com um computador so: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 e 115200 (No entanto podem definir-se outros valores).

    Sintaxe: Serial.begin( int baud rate); Exemplo: (1) int leitura_serie=0; //Declarao de uma varivel do tipo integer com o nome leitura_serie, inicializada com o valor 0 (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) } (5) void loop(){ (6) if(Serial.available()>0) // Condio if que verifica se esto a ser recebidos dados por Srie (7) leitura_serie=Serial.read(); // Caso se estejam a receber dados por srie, o seu valor guardado na varivel integer leitura_serie (8) } (9) }

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 49

    3.5.8.3. Serial.read()

    Descrio: Permite a leitura dos dados recebidos por srie. Esta funo retorna o valor -1 se no houver dados disponveis.

    Sintaxe: Valor recebido (int) = Serial.read(); Exemplo: (1) int leitura_serie=0; ; //Declarao de uma varivel do tipo integer com o nome leitura_serie, inicializada com o valor 0 (2) void setup() { (3) Serial.begin(9600); // Permite a inicializao da comunicao Srie (4) } (5) void loop(){ (6) if(Serial.available()>0) ) // Condio if que verifica se esto a ser recebidos dados por Srie (7) leitura_serie=Serial.read(); // Caso se estejam a receber dados por srie, o seu valor guardado na varivel integer leitura_serie (8) } (9) }

    3.5.8.4. Serial.flush()

    Descrio: Efectua o flush (apaga) de todos os dados presentes no buffer de entrada no momento de execuo da instruo. O buffer de entrada tem uma capacidade de armazenamento de 64 bytes.

    Sintaxe: Serial.flush(); Exemplo: (1) void setup() { (2) Serial.begin(9600); // Permite a inicializao da comunicao Srie (3) } (4) void loop(){ (5) Serial.flush(); //Apaga o contedo do buffer de entrada (6) () (7) }

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 50

    3.5.8.5. Serial.print() vs Serial.println()

    Descrio: Instruo que permite o envio de dados pela porta srie. A nica diferena entre Serial.print e Serial.println() que a segunda instru~o adiciona ao dado enviado o caracter \r (carriage return) e o caracter \n (new line). Sintaxe: Serial.print(dado a enviar); Serial.print(dado a enviar, formato); O formato de envio pode ser decimal (DEC), hexadecimal (HEX), octal (OCT) ou binrio (BIN). O dado a enviar tambm pode tomar o formato de uma string. Exemplo: (1) void setup() { (2) Serial.begin(9600); // Permite a inicializao da comunicao Srie (3) } (4) void loop(){ (5) Serial.flush();//Apaga o contedo do buffer de entrada (6) Serial.println(CADETES AEL); //Envio da string CADETES AEL seguido do caracter \r e \n (7) }

    3.5.8.1. Serial.write()

    Descrio: Permite enviar dados em binrio pela porta srie. Esses dados podem ser enviados como um nico byte ou um conjunto de bytes.

    Sintaxe: Serial.write(valor); Serial.write(string); Serial.write(vector, comprimento); A vari|vel valor acima define o valor a ser enviado em bin|rio pela porta srie, o mesmo pode ser efectuado enviando uma string como um conjunto de bytes. Na ltima instruo apresentada acima, enviado um vector (vector) de tamanho comprimento.

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 51

    4. Recursos Avanados

    Este captulo tem como objectivo explorar algumas bibliotecas existentes para a plataforma de desenvolvimento Arduino, possibilitando assim expandir as suas possibilidades. As bibliotecas a ser expostas neste captulo so as mais usadas nos projectos de desenvolvimento, mas no representam a totalidade das bibliotecas existentes. Ser tambm aprofundado neste captulo a tem|tica taxa de amostragem no nosso contexto de estudo, tentando que a sua compreenso se torne maior.

    4.1. Flash

    A quantidade de memria SRAM disponvel normalmente muito mais pequena do que a memria flash disponvel e em programas em que necessrio recorrer utilizao de muitas variveis facilmente a memria disponvel se torna uma limitao. Uma soluo bvia, tendo em conta o que foi referido anteriormente, seria gravar o valor de algumas variveis em flash. Mas existe uma limitao, na medida que a gravao de dados na memria flash apenas pode ser efectuada quando o programa se encontra a ser carregado (durante o uploading) para a memria flash. O que leva a que apenas os valores de variveis constantes devam ser armazenados na memria flash, sendo utilizadas s quando necessrio (no se encontrando j a ocupar espao em SRAM).

    Para utilizar esta funcionalidade vais ser utilizada a biblioteca , devendo a mesma ser declarada no nosso sketch, esta biblioteca no se encontra disponvel no software de desenvolvimento devendo o seu download ser efectuado do site Arduiniana (http://arduiniana.org/libraries/flash/). Esta biblioteca baseia-se na biblioteca , tentado simplificar assim o seu uso.

    4.1.1. Sintaxe a Utilizar para Guardar Dados em Flash

    FLASH_STRING(Nome da string, String a guardar);

    FLASH_ARRAY(Tipo de varivel a ser guardada, Nome do vector, Valores a colocar no vector); FLASH_TABLE(Tipo de variveis a guardar na tabela, nome da tabela, nmero de colunas, valores a armazenar na tabela); FLASH_STRING_ARRAY(Nome do vector de strings, PSTR(string a armazenar), PSTR(String a armazenar 2), PSTR());

    Qualquer dvida em relao ao tipo de variveis possveis de utilizar, pode consultar o subcaptulo - Tipos de variveis disponveis (P|gina 23 26).

    Nota: A biblioteca baseada na biblioteca , como esta no suporta a criao de um vector de strings, o que esta biblioteca faz criar um vector com os endereos guardados em SRAM de strings individuais guardadas em Flash. Isto faz com que o uso desta instruo ocupe 2 bytes por cada string armazenada.

    4.1.2. Sintaxe a Utilizar para Ler Dados da Memria Flash

    Nome usado (String, vector,tabela, vector de strings)[indice];

    O acesso aos dados guardados em Flash em tudo semelhante utilizao de vectores (arrays). O que um dos pontos fortes da utilizao desta biblioteca.

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 52

    Existe mais sintaxe possvel por parte desta biblioteca, mas sem dvida foi aqui apresentado o mais importante (Guardar e ler). Para mais informaes pode ser consultado o site oficial desta biblioteca, j referido anteriormente.

    4.2. EEPROM

    O microcontrolador disponvel na placa de desenvolvimento Arduino Duemilinove (ATMega168) possui 512 bytes de memria EEPROM, segundo o datasheet do respectivo microcontrolador.

    Este tipo de memria tem a vantagem de manter a sua informao armazenada, mesmo aps desligarmos a sua alimentao, visto que pode ser de grande importncia conseguir manter certos dados, dependo da aplicao a implementar. Uma outra vantagem a possibilidade de guardar contedo nesta memria enquanto executamos o nosso sketch, o que no acontece com o armazenamento em flash. Esta biblioteca j se encontra disponvel no Software de desenvolvimento Arduino, no necessitando de ser adicionada.

    A principal limitao da memria EEPROM est na existncia de um limite de ciclos de leitura/escrita. O que pode ser uma limitao a curto prazo em aplicaes que recorram muito a este tipo de armazenamento (este tipo de informao encontra-se discriminada no datasheet do microcontrolador). O tempo de escrita num ATMega168 de 3.3 ms (informao retirada do seu datasheet).

    4.2.1. Sintaxe de Escrita em EEPROM

    EEPROM.write(Endereo, Valor a guardar);

    Com Endereo(int) 0,511 e Valor a guardar(byte) 0,255 .

    4.2.2. Sintaxe de Leitura em EEPROM

    EEPROM.read(Endereo);

    Esta instruo, e colocando em Endereo o mesmo valor que na instru~o EEPROM.write, permite obter o valor guardado em memria.

    Exemplo: (1) #include //Declarao da biblioteca (2)(..) (3) EEPROM.write(1,1); // Escrita no endereo 1 do valor inteiro 1 (4) void setup(){ (5) Instruo 1; (6) (..) (7) } (8) void loop(){ (9) int i=0; //Declarao de uma varivel do tipo integer de nome i, inicializada com o valor 0 (10) i = EEPROM.read(1); //Feita a leitura do endereo 1 e guardado o seu contedo na varivel de nome i (11) (..) (12) }

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 53

    4.3. Servomotor

    Um servomotor um pequeno dispositivo cujo veio pode ser posicionado numa determinada posio angular de acordo com um sinal de entrada. Enquanto esse sinal se mantiver constante e for enviado para o servomotor, o servo ir manter a sua posio angular. Ao variar o sinal de entrada possibilita uma variao a posio angular do veio. Os servomotores so muito usados no controlo de avies telecomandados, robots, barcos telecomandados, helicpteros telecomandados, entre outras possveis aplicaes.

    Fig. 19 Representao de um servomotor

    Fonte: Obtido a partir do Software open source Fritzing

    Um servomotor, como se pode ver na figura 19, possui trs entradas. Uma entrada a alimentao (normalmente 5V para servomotores standard), outra ser a massa e a ltima que falta referir ser o sinal de entrada. Este sinal de entrada ser um impulso PWM, em que fazendo variar o seu duty cicle, podemos variar a posio angular do servomotor. Isto em servomotores de posio, pois tambm existem servomotores de rotao contnua. Nesses servomotores a varia~o do duty cicle far| variar n~o a posi~o angular, mas a velocidade e sentido de rotao do servomotor. Existe possibilidade de modificar, sem grande dificuldade, um servomotor de posio para rotao contnua. Esta modificao permanente, no podendo ser reversvel. No entanto, o objectivo deste subcaptulo no se centra nisso, mas sim em como fazer a sua interaco com a plataforma de desenvolvimento Arduino.

    Fig. 20 Representao de um servomotor de posio mais pormenorizada Fonte: Retirado de Santos 2007, pg. 3

  • Arduino Introduo e Recursos Avanados Escola Naval

    ASPOF EN-AEL Pessanha Santos 54

    Pela anlise da figura 20, podemos constatar os componentes mais importantes de um

    servomotor de posio so os seguintes:

    Circuito de controlo (Control Circuit)

    Potencimetro (Potentiometer)

    Motor DC (Motor)

    O circuito de controlo, como o prprio nome indica, responsvel por controlar e mover o motor DC, com base nas informaes obtidas pela leitura do potencimetro e do sinal de entrada. O potencimetro, neste contexto, utilizado acoplado ao eixo de rotao para conseguir obter a posio angular do eixo.

    A enorme aplicabilidade dos servomotores leva a que, tendo em conta o universo da electrnica, seja