Escolar Documentos
Profissional Documentos
Cultura Documentos
Escola Naval
ESCOLA NAVAL
DEPARTAMENTO DE ENGENHEIROS NAVAIS
RAMO DE ARMAS E ELECTRNICA
Arduino
Introduo e Recursos Avanados
Nuno Pessanha Santos
ASPOF EN-AEL
nuno.pessanha.santos@marinha.pt
2009
ASPOF EN-AEL Pessanha Santos
Escola Naval
Escola Naval
ndice
1.
Introduo ............................................................................................................................ 7
2.
2.1.1.
Microprocessador ................................................................................................ 9
2.1.2.
Microcontrolador ................................................................................................. 9
2.1.3.
2.1.4.
2.2.
3.
Hardware ...................................................................................................................... 8
Software ..................................................................................................................... 15
2.2.1.
2.2.2.
2.2.3.
3.1.1
void setup()......................................................................................................... 19
3.1.2
void loop()........................................................................................................... 19
3.1.3.
Resumindo ......................................................................................................... 20
3.2.
Ciclos ........................................................................................................................... 21
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
3.3.
3.3.1
3.3.2.
3.3.3.
3.3.4.
3.3.5.
3.3.6.
3.3.7.
3.4.
3.4.1.
char(x) ................................................................................................................. 30
3.4.2.
byte(x) ................................................................................................................ 30
Escola Naval
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.
3.5.1.1.
pinMode() ....................................................................................................... 31
3.5.1.2
digitalWrite() ...................................................................................................... 32
3.5.1.3.
digitalRead()................................................................................................... 33
3.5.2.
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.
3.5.3.4.
delayMicroseconds (microsegundos)........................................................... 37
3.5.4.
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.
3.5.4.5.
3.5.4.6.
3.5.4.7.
sqrt(valor) ....................................................................................................... 41
3.5.5.
3.5.5.1.
sen(valor) ........................................................................................................ 42
3.5.5.2.
cos(valor) ........................................................................................................ 42
3.5.5.1.
tan(valor) ........................................................................................................ 42
3.5.6.
3.5.6.1
randomSeed(valor) ............................................................................................ 43
3.5.6.2.
random() ......................................................................................................... 43
3.5.7.
Interrupts................................................................................................................ 45
3.5.7.1.
3.5.7.2.
detachInterrupt(interrupt)............................................................................ 46
interrupts() ..................................................................................................... 46
3.5.7.4.
noInterrupts() ................................................................................................. 46
3.5.8.
4.
Escola Naval
3.5.8.1.
Serial.available() ............................................................................................ 48
3.5.8.2.
3.5.8.3.
Serial.read() .................................................................................................... 49
3.5.8.4.
Serial.flush() ................................................................................................... 49
3.5.8.5.
3.5.8.1.
Serial.write() .................................................................................................. 50
Flash ............................................................................................................................ 51
4.1.1.
4.1.2.
4.2.
EEPROM ..................................................................................................................... 52
4.2.1.
4.2.2.
4.3.
Servomotor ................................................................................................................ 53
4.3.1.
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.
4.4.1.
4.4.1.1.
4.4.1.2.
4.4.1.3.
read() ............................................................................................................... 60
4.4.1.4.
4.5.
4.6.
4.6.1.
4.6.2.
4.6.3.
Escola Naval
5.
Concluso ........................................................................................................................... 68
6.
Bibliografia ......................................................................................................................... 69
1.
Escola Naval
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.
2.
Escola Naval
Hardware vs Software
2.1.
Hardware
Escola Naval
2.1.1.
Microprocessador
Memria RAM
Microprocessador
Perifricos
Clock
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.
Etc
CPU
A/D
ROM
RAM
Etc
Porta Srie
UART
Porta Paralela
Etc
D/A
Temporizadores
(Timers)
Etc
Escola Naval
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.
10
Escola Naval
Flash
SRAM
EEPROM
ATMega168
16 KBytes
(2 KBytes Bootloader)
1024 Bytes
512 Bytes
ATMega328
32 KBytes
(2 KBytes Bootloader)
2048 Bytes
1024 Bytes
ATMega1280
128 KBytes
(4 KBytes Bootloader)
8192 Bytes
4096 Bytes
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:
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)
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 <EEPROM.h> e para a memria Flash pode-se
recorrer biblioteca <pgmspace.h> ou <Flash.h>.
Neste tutorial apenas vo ser abordadas a biblioteca <EEPROM.h> e <Flash.h>,
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.
11
2.1.4.
Escola Naval
Pinout Disponvel
14
(6 com Pulse Width Modulation (PWM))
6
3
1
1
1
1
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.
Frequncia constante
12
Escola Naval
A teoria por detr|s deste fenmeno pode ser facilmente descrita. Analisemos a
seguinte equao:
1
=
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.
13
Escola Naval
INTERNAL
EXTERNAL
14
Escola Naval
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-
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.
15
Escola Naval
16
Escola Naval
Editar
Compilar
Uploading
Executar
17
Escola Naval
2.2.3.
3.
ndice de Instrues
Instrues de controlo.
18
Escola Naval
3.1.
Funes Base
3.1.1
void setup()
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)
19
Escola Naval
3.1.3.
Resumindo
20
3.2.
Escola Naval
Ciclos
3.2.1
Ciclo If.else
X igual a Y
X diferente de Y (no igual)
X maior que Y
X maior ou igual a Y
X menor que Y
X menor ou igual a Y
Tabela 4 Condies possveis
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
21
Escola Naval
3.2.2
Ciclo for
22
Escola Naval
(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
23
Escola Naval
3.2.4
Ciclo while
24
3.2.5
Escola Naval
Ciclo do.while
25
3.3.
Escola Naval
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<=10); // Se a condio se verificar repete o ciclo, caso no se verifique o
ciclo termina
(15) }
26
3.3.2.
Escola Naval
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.
27
3.3.4.
Escola Naval
3.3.5.
28
3.3.6.
Escola Naval
3.3.7.
29
3.4.
Escola Naval
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);
ASPOF EN-AEL Pessanha Santos
30
3.5.
Escola Naval
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) }
31
Escola Naval
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) }
32
Escola Naval
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) }
33
3.5.2.
Escola Naval
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) }
34
Escola Naval
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) }
35
3.5.3.
Escola Naval
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) }
36
Escola Naval
37
Escola Naval
38
3.5.4.
Escola Naval
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 0
valor valor < 0
Exemplo:
int modulo=0;
modulo = abs(-5) // O valor atribudo varivel modulo seria o valor 5
39
Escola Naval
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
40
Escola Naval
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<=10;i++){ //Inicio do ciclo for
(8) val=analogRead(entrada_analogica); // Permite a leitura analgica do valor do
pino 3 atribuindo o seu valor varivel val
(10) map(val,0,1023,0,500); // Passa o valor da varivel val que se encontra
numa escala de valores entre 0 e 1023 (entrada analgica), para um valor entre 0 e
500
(11) f[i]=val;
(12) }
(13) }
3.5.4.7. sqrt(valor)
Descrio: Permite o clculo da raiz quadrado de um determinado valor.
Sintaxe:
Valor obtido = sqrt(valor);
Exemplo:
int valor=0;
valor = sqrt(9) // O valor atribudo varivel valor seria o valor 3, pois 9 = 3.
41
3.5.5.
Escola Naval
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 ; +
42
3.5.6.
Escola Naval
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) ()
43
Escola Naval
44
3.5.7.
Escola Naval
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
o
Arduino Mega
o
o
o
o
o
o
CHANGE
RISING
FALLING
45
Escola Naval
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) ()
46
Escola Naval
(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) }
47
3.5.8.
Escola Naval
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) }
48
Escola Naval
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) }
49
Escola Naval
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.
50
4.
Escola Naval
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
51
Escola Naval
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
52
4.3.
Escola Naval
Servomotor
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.
53
Escola Naval
54
Escola Naval
4.3.1.2. detach()
Descrio: Permite eliminar a liga~o entre uma vari|vel do Servo a um dos pinos
possveis de utilizar pela biblioteca <Servo.h> (Pinos 9 e 10). Se nenhum dos pinos
possveis estiver atribudo a uma vari|vel do tipo Servo, os pinos 9 e 10 podem ser
utilizados normalmente.
Sintaxe:
Servo.detach();
Servo Varivel do tipo Servo pode ser declarada da seguinte forma:
Servo nome_a_atribuir;
Exemplo:
(1) #include<Servo.h> // Declarao da biblioteca <Servo.h>
(2) Servo Exemplo; // Criao de uma varivel do tipo Servo, com o nome de Exemplo
(3) void setup(){
(4) Exemplo.attach(10); // Atribuio da varivel do tipo Servo Exemplo, ao pino digital
10
(5) (..)
(6) void loop(){
(7) Exemplo.detach(); // Elimina a ligao entre a varivel do tipo Servo Exemploe pino
digital 10
(8) analogWrite(10, 255); // Como nenhuma varivel do tipo Servo se encontra atribuda,
podem-se usar as funcionalidades PWM dos pinos 9 e 10
(9) }
4.3.1.3. write()
Descrio: Permite movimentar o eixo de um servomotor de posio para o ngulo
pretendido. No caso de um servomotor de rotao contnua o valor 0 corresponder
velocidade de rotao mxima num sentido, o valor 180 a velocidade de rotao
mxima noutro sentido e o valor 90 ser o ponto em que o servomotor se encontrar
parado.
Sintaxe:
Servo.write(ngulo);
Servo Vari|vel do tipo Servo pode ser declarada da seguinte forma:
Servo nome_a_atribuir;
ngulo 0,180
Exemplo:
(1) #include<Servo.h> // Declarao da biblioteca <Servo.h>
(2) Servo Exemplo; // Criao de uma varivel do tipo Servo, com o nome de Exemplo
ASPOF EN-AEL Pessanha Santos
55
Escola Naval
(3) Servo Exemplo_2; // Criao de uma varivel do tipo Servo, com o nome de
Exemplo_2
(4) void setup(){
(5) Exemplo.attach(10); // Atribuio da varivel do tipo Servo Exemplo, ao pino digital
10
(6) Exemplo_2.attach(9); // Atribuio da varivel do tipo Servo Exemplo_2, ao pino
digital 9
(7) (..)
(8) void loop(){
(9) Exemplo.write(0); // Faz com que um servomotor p.ex. de posio se movimente para a
posio correspondente ao ngulo 0
(1) Exemplo_2.write(90); // Faz com que um servomotor p.ex. de rotao contnua pare a
sua rotao
(11) }
4.3.1.4. read()
Descrio: Instruo que retorna o valor do ltimo ngulo utilizado, recorrendo
instru~o Servo.write(ngulo).
Sintaxe:
ngulo (int) = Servo.read();
Servo Varivel do tipo Servo pode ser declarada da seguinte forma:
Servo nome_a_atribuir;
Exemplo:
(1) #include<Servo.h> // Declarao da biblioteca <Servo.h>
(2) int angulo = 0; // Declarao de uma varivel do tipo integer de nome angulo,
atribuindo-lhe o valor de 0
(3) Servo Exemplo; // Criao de uma varivel do tipo Servo, com o nome de Exemplo
(4) void setup(){
(5) Exemplo.attach(10); // Atribuio da varivel do tipo Servo Exemplo, ao pino digital
10
(6) (..)
(7) void loop(){
(8) Exemplo.write(angulo); // Faz com que um servomotor p.ex. de posio se movimente
para a posio correspondente ao valor da varivel angulo
(9) angulo = (Exemplo.read() + 1); // Vai incrementado uma unidade ao ltimo valor de
ngulo utilizado recorrendo instruo Exemplo.write(angulo)
(10) }
4.3.1.5. attached()
Descrio: Instru~o que permite verificar se uma vari|vel do tipo Servo se encontra
atribuda a um pino especfico.
Sintaxe:
Estado (int) = Servo.attached();
Servo Vari|vel do tipo Servo pode ser declarada da seguinte forma:
56
Escola Naval
Servo nome_a_atribuir;
Estado 0,1 , ou seja, s pode tomar o valor true (valor 1) ou false (valor
0).
Exemplo:
(1) #include<Servo.h> // Declarao da biblioteca <Servo.h>
(2) int atribuido=0; // Declarao de uma varivel do tipo integer de nome atribuido,
atribuindo-lhe o valor de 0
(3) Servo Exemplo; // Criao de uma varivel do tipo Servo, com o nome de Exemplo
(4) void setup(){
(5) Exemplo.attach(10); // Atribuio da varivel do tipo Servo Exemplo, ao pino digital
10
(6) (..)
(7) void loop(){
(8) atribuido = Exemplo.attached(); // Atribui o valor 1 varivel atribudo caso a varivel
do tipo Servo Exemplo se encontra associada a algum pino, caso contrrio retorna o
valor 0
(9) if (atribuido ==1){ //Se a varivel estiver do tipo Servo Exemplo estiver atribuda a
condio verificada
(10) Exemplo.write(180); // Faz com que um servomotor p.ex. de posio se movimente
para a posio correspondente ao valor 180
(11) }
(12) (..)
(13) }
O uso desta biblioteca simplifica a operao com servomotores, o que no implica que a
movimentao dos servomotores no seja feita com recurso directamente instruo
analogWrite(), ou seja, gerar os sinais PWM directamente. Tal , obviamente, possvel mas
mais trabalhoso, existindo esta biblioteca para simplificar esse trabalho de implementao.
Com este subcaptulo espera-se dar noes bsicas de funcionamento e uso de
servomotores, estando a partir daqui apenas dependente da criatividade de cada um na
implementao e aprofundamento do conhecimento sobre esta temtica.
57
4.4.
Escola Naval
Software Serial
58
Escola Naval
59
Escola Naval
4.4.1.3. read()
Descrio: Instruo que possibilita a leitura de um caracter proveniente do pino
definido como Rx. A instru~o SoftwareSerial.read() espera que chegue um caracter
e retorna o seu valor, sendo preciso ter em ateno que os dados que cheguam sem
haver uma leituraa aguardar ser~o perdidos (n~o existncia de buffer de recepo).
Sintaxe:
Valor Leitura (int/char) = SoftwareSerial.read();
SoftwareSerial Vari|vel do tipo SoftwareSerial, sendo definida da seguinte
forma:
SoftwareSerial Nome_varivel = SoftwareSerial(Pino de Rx, Pino de Tx);
Tomando depois a seguinte sintaxe:
Valor Leitura (int/char) = Nome_varivel.read();
Exemplo:
(1) #include<SoftwareSerial.h> // Declarao da biblioteca <SoftwareSerial.h>
(2) SoftwareSerial Exemplo = SoftwareSerial(4,5); // Declarao de uma varivel do tipo
SoftwareSerial de nome Exemplo, atribuindo-lhe o pino de Rx 4 e o pino de Tx 5
(3) char recebido; //Declarao de uma varivel do tipo char de nome recebido
(4) void setup(){
(5) pinMode(4, INPUT); // Define o pino 4 como INPUT
(6) pinMode(5, IOUTPUT); // Define o pino 5 como OUTPUT
(7) Exemplo.begin(9600); // Define a velocidade de comunicao com uma Baud rate de
9600
(8) void loop(){
(9) recebido = Exemplo.read(); //Possibilita guardar um valor recebido no pino de Rx, na
varivel do tipo char recebido
(10) }
60
Escola Naval
SoftwareSerial.println(dado a enviar);
SoftwareSerial Vari|vel do tipo SoftwareSerial, sendo definida da seguinte
forma:
SoftwareSerial Nome_varivel = SoftwareSerial(Pino de Rx, Pino de Tx);
Tomando depois a seguinte sintaxe:
Nome_varivel. print(dado a enviar);
Nome_varivel. println(dado a enviar);
Exemplo:
(1) #include<SoftwareSerial.h> // Declarao da biblioteca <SoftwareSerial.h>
(2) SoftwareSerial Exemplo = SoftwareSerial(4,5); // Declarao de uma varivel do tipo
SoftwareSerial de nome Exemplo, atribuindo-lhe o pino de Rx 4 e o pino de Tx 5
(3) char recebido; //Declarao de uma varivel do tipo char de nome recebido
(4) void setup(){
(5) pinMode(4, INPUT); // Define o pino 4 como INPUT
(6) pinMode(5, IOUTPUT); // Define o pino 5 como OUTPUT
(7) Exemplo.begin(9600); // Define a velocidade de comunicao com uma Baud rate de
9600
(8) void loop(){
(9) recebido = Exemplo.read(); //Possibilita guardar um valor recebido no pino de Rx, na
varivel do tipo char recebido
(10) Exemplo.print(recebido); // Envia a varivel do tipo char de nome recebido, atravs
do pino definido com Tx (pino 5)
(11) }
61
4.5.
Escola Naval
FIRMATA vs Processing
No objectivo deste tutorial abordar a sintaxe utilizada pela biblioteca FIRMATA, mas
sim dar a conhecer a sua existncia. Esta biblioteca foi elaborada de forma a criar um
protocolo genrico de comunicao entre o Arduino e um Software no especfico para essa
aplicao, bastando que o Software tenha capacidade de comunicao por porta srie, desde
que isso acontea possvel haver um controlo por parte de Software do Arduino.
A distribuio padro do sketch elaborado utilizando esta biblioteca toma o nome de
standard Firmata, podendo este ser completamente adaptado para a aplica~o especfica
de cada utilizador. Uma implementao muito procurada por artistas e designers a
implementao do Arduino com o Software open source Processing. Este Software permite
uma programao visual, ou seja, permite atravs de instrues de programao fazer
objectos visuais (p.ex. quadrados, crculos, linhas, entre outros). Permitindo, assim, desenhar
o que se pretende, bem como criar verdadeiras obras de arte.
De acordo com Shiffman, 2008, este software foi desenvolvido por Benjamin Fry e
Casey Reas, enquanto alunos no MIT Media Lab em 2001. Em Shiffman, 2008, o Software de
desenvolvimento Processing apenas abordado como uma ferramenta de ensino de
programao, ou seja, o principal foco no o Software em si mas os conceitos
computacionais por detrs dele. O que leva a que seja uma leitura aconselhada para quem
quer saber mais, no s sobre o Software em si, mas sobre a linguagem de programao java.
Visto o Processing ser baseado na linguagem java, uma linguagem de programa~o
largamente difundida e utilizada.
O Processing pode ser obtido gratuitamente atravs do seu site oficial
(www.processing.org), na seco downloads. Esto disponveis verses para Windows, Linux e
Macintosh OS.
A interac~o entre o Processing e o Arduino pode ser facilmente apreendida
recorrendo ao separador Playground, do site oficial Arduino (www.arduino.cc).
Este subcaptulo no refere obviamente a tudo o que h a saber sobre esta temtica
sendo o seu principal objectivo, como foi referido anteriormente, dar a conhecer novas
possibilidades de implementao utilizando o Arduino.
62
Escola Naval
4.6.
()
()
1
C/D
2
Quantizer
()
()
3
Encoder
63
Escola Naval
64
Escola Naval
Mas no entanto existe uma forma de configurar este factor de divis~o, fazendo variar
o contedo do bit ADPS0, ADPS1 e ADPS2 (Como se pode constatar pela anlise da figura
27).
Estes bits so parte integrante do registo ADCSRA, que constitudo da seguinte
forma:
Bit
(0x7A)
ADEN
ADSC
ADATE
ADIF
ADIE
ADPS2
ADPS1
ADPS0
Read/Write
Valor
Inicial
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
ADPS1
ADPS0
Factor de
diviso
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
2
2
4
8
16
32
64
128
(16 )
()
Pela anlise da tabela anterior, podemos afirmar ento que a maior frequncia de
amostragem que poderemos obter se situa nos 8 MHz. O que leva a que a que para haver uma
reconstruo sem perda de informao de um possvel sinal amostrado, o mesmo dever ter
uma frequncia mxima de 4 MHz. No entanto os valores apresentados na tabela 8 so
65
Escola Naval
66
Escola Naval
Taxa de amostragem
()
8
16
31
50
63
83
125
67
5.
Escola Naval
Concluso
Espera-se com este tutorial abrir as portas para um entendimento mais aprofundado
desta plataforma de desenvolvimento. No correspondendo este documento a tudo o que
existe para aprender e desenvolver sobre este tema. Muitos assuntos ficaram por abordar e
caber ao leitor caso tenha manifesto interesse (confunde-se muitas vezes com necessidade),
pesquisar e desenvolver uma temtica especfica.
A placa de desenvolvimento Arduino encontra-se em franca expanso, estando a sua
utilizao generalizada quer na rea da electrnica, artes e muitas mais. O que leva a que esta
plataforma tenha muitos seguidores e estando a crescer e a desenvolver-se a cada minuto que
passa. O que agora uma novidade de implementao, muito provavelmente quando estiver
a ler este tutorial ser uma coisa comum. Pois o Arduino est a conquistar o seu espao, e j
uma referncia.
Quem diria que um projecto acadmico chegaria to longe, provavelmente ningum
diria. O que faz com que as pessoas que acreditaram, estejam desde j de parabns pelo
magnfico trabalho. Deste exemplo real s podemos retirar que a persistncia e dedicao so
o que nos leva mais longe, pois os criadores desta plataforma de desenvolvimento no so os
melhores. Mas sim os que acreditaram e trabalharam para isso, o que se revela sempre muito
importante.
O que preciso ter uma atitude de contnua procura pelo conhecimento.
68
6.
Escola Naval
Bibliografia
Arduiniana. (2009). "Arduino software jewellry and wisdom." Retrieved 4 August 2009,
2009, from http://arduiniana.org/.
Arduino. (2006, 14 July
http://www.arduino.cc.
2009).
Retrieved
21
July
2009,
2009,
from
2009,
from
69