Escolar Documentos
Profissional Documentos
Cultura Documentos
Workshop Arduino
Workshop Arduino
1kB de RAM
Escrita em C/C++
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Estrutura de um programa
Header
Variveis globais
Setup
Loop
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Tipos de dados bsicos
oat, double
string, array
O Arduino um microcontrolador
de 8 bits!!! O GCC transforma alguns dos tipos
de dados em cdigo RISC do ATMEGA168
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Arduino API
Constantes utilizadas e modo de denio
HIGH | LOW
INPUT | OUTPUT
true | false
Notao decimal
123 | 123U | 123L | 123UL
Notao octal
0137
Notao hexadecimal
0x9F
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
HIGH
Em modo INPUT um pino HIGH quando lido com a funo
digitalRead tem um valor TRUE quando a tenso no pino igual ou
superior a 3V
Em modo OUTPUT um pino HIGH apresenta uma tenso de sada
de 5V (source) at 50mA
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
LOW
Em modo INPUT um pino LOW quando lido com a funo
digitalRead tem um valor FALSE quando a tenso no pino igual ou
inferior a 2V
Em modo OUTPUT um pino LOW colocado a 0V. Desta forma
ele pode absorver (sink) at 40mA de corrente.
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Extras
PROGMEM
Indica ao compilador que deve guardar os dados de uma varivel na memria ash
em vez de utilizar a memria RAM. Especicado em: <avr/pgmspace.h>
dataType varName[] PROGMEM = {d0, ..., dn};
Ex:
char message[] = Hello World; // 12 bytes em RAM
char message[] PROGMEM = Hello World; // 12 bytes em FLASH
Desvantagens:
Os dados guardados na memria FLASH devem ser lidos com utilizao de uma API
especca (pgm_read_word, pgm_read_word_near, ...)
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Registos especiais I
Existem trs portas especiais no Arduino, que permitem a leitura simultnea de
vrias entradas digitais, aumentando a ecincia das operaes de I/O.
PORTB (pinos 8 a 13)
PORTC (pinos de input analgico)
PORTD (pinos 0 a 7)
Cada porta dispem dos seguintes registos:
DDRD - Data Direction Register (para a porta D)
PORTD - O registo da porta D
PIND - Registo de input dos pinos da porta D (read-only)
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Registos especiais II
Exemplo de leitura da PORTAD (pinos 0 a 7)
// pinos 2 a 7 para output, pinos 0 e 1 inalterados
DDRD = DDRD | B11111100;
// coloca os pinos 3, 5 e 7 a HIGH
PORTD = B10101000;
// l os pinos 2 a 7
byte data = PIND & B11111100;
A utilizao destas portas torna o cdigo mais difcil de depurar.
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
HAL
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Abstraes de Hardware I
Digital I/O
Analog I/O
Advanced I/O
Temporizadores
Comunicao srie
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Digital I/O
pinMode(pin, mode)
Dene os modos dos pinos 0 a 13, sendo que o pino 0 e o pino 1 esto geralmente
reservados para a porta srie (RX/TX). Os pinos de entrada analgicos (0 a 5) tambm
podem ser utilizados como pinos de entrada digital (14 a 19)
digitalWrite(pin, value)
Escreve o valor TRUE ou FALSE no pino.
digitalRead(pin)
L o valor de um pino (TRUE ou FALSE). Se o pino no estiver ligado a leitura poder
oscilar.
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Analog I/O
analogRead(pin)
L um valor analgico (0 a 5V) nos pinos 0 a 5. A resoluo do ADC de 10bits, permitindo
mapear tenses de entrada em valores inteiros at 1023 com uma resoluo de 4.9mV por
valor. O tempo de converso e leitura de 100uS (10ks amostras por segundo)
analogWrite(pin)
Escreve um valor analgico (PWM) com uma frequncia de 490Hz. Esta funo s est
disponvel nos pinos 3, 5, 6, 9, 10 e 11
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
PWM vs Sinal Analgico
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Sinal PWM
output = (on_time / off_time) * max_voltage
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Caractersticas do sinal PWM
Larguro do impulso numa gama de valores mnimo e mximo
Perodo do impulso = 1 / impulsos por segundo
Tenso do impulso em valores bem denidos ex: 0 a 5V
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Aplicaes do sinal PWM I
Interface de dados para sensores ou circuitos externos.
O valor a enviar proporcional ao perodo do impulso.
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Aplicaes do sinal PWM II
Frequencia PWM de 50Hz
Impulsos desde 1 a 2 milisegundo
1 milisec = posio a 0
2 milisec = posio a 180
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Aplicaes do sinal PWM III
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Advanced I/O
shiftOut(dataPin, clockPin, bitOrder, value)
Envia um conjunto de 8 bits um a um pela ordem indicada (MSBFIRST, LSBFIRST). Quando o
bit escrito, o pino do clock activado dando indicao de que o valor j est disponvel.
Este modo de comunicao conhecido por SPI (Synchronous Protocol Interface). Os dois
dispositivos esto sempre sincronizados e comunicam perto do limite de velocidade mxima.
unsigned long pulseIn(pin, value)
unsigned long pulseIn(pin, value, timeout)
L um valor PWM de um pino de I/O digital. A leitura do impulso digital sincronizada no
valor indicado (HIGH ou LOW) sendo medido o tempo decorrido at que o valor de
entrada mude de estado. Retorna valores de leitura veis para impulso entre 10uS e 3
minutos.
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
shiftOut(dPin, cPin, order, value)
Temporizadores
unsigned long millis()
Nmero de millisegundos decorridos desde o incio de execuo do programa.
delay(ms)
Esta funo gasta ciclos de relgio at ter decorrido o tempo indicado em milisegundos.
Quando se utiliza um valor inteiro superior a 32726 deve-se utilizar o prexo UL.
delayMicroseconds(us)
Esta funo gasta ciclos de relgio at ter decorrido o tempo indicado em microsegundos.
A actual implementao desta funo garante resultados at um valor de 16383 uS.
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Comunicao Srie
Comunicao Srie I
Serial.begin(speed)
Congura a porta srie (pinos 0 e 1) para comunicar com a velocidade indicada.
int Serial.available()
Nmero de bytes (caracteres) disponveis na porta srie.
int Serial.read()
L um byte da porta srie.
Serial.ush()
Limpa os dados da porta srie, isto : qualquer chamada a Serial.available() ou Serial.read()
retornam os dados mais recentes depois da ltima chamada a esta funo.
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Comunicao Srie II
Serial.print(b)
Envia pela porta srie qualquer tipo de valor inteiro em formato ASCII
Serial.print(b, fmt)
Envia pela porta srie qualquer tipo de valor inteiro em formato ASCII de acordo com um
dos seguintes formatos: DEC, HEX, OCT, BIN, BYTE
Serial.print(str)
Envia pela porta srie uma string ASCII.
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Comunicao Srie III
Serial.println()
Envia pela porta srie os caracteres ASCII 13 \r e ASCII 10 \n
Serial.println(b)
Serial.println(b, fmt)
Serial.println(str)
Ver famlia de funes Serial.print(). Estas funes colocam os dados na porta srie
juntamente com os caracteres ASCII 13 e 10
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Abstraes de Hardware II
Interrupts
Interrupts externos
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Interrupts
interrupts()
Activa o modo de interrupt depois deste ter sido desactivo pela funo noInterrupts(). Os
interrupts permitem a execuo de tarefas em background. Por omisso, o Arduino executa
sempre com este modo activo.
noInterrupts()
Desactiva o modo de interrupts. Algumas funes podem produzir resultados inesperados
se este modo estiver desactivo, em especial funes de tempo e comunicao de dados com
o exterior. Contudo, em seces crticas de cdigo conveniente desligar os interrupts.
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Interrupts Externos
attachInterrupt(interrupt, function, mode)
Activa um interrupt externo (0, 1 nos pinos 2, 3) e associa a funo indicada ao interrupt.
A funo ser executada quando o modo indicado for detectado na porta correspondente.
Os modos de activao so: LOW, CHANGE, RISING, FALLING
Qualquer varivel modicada pela funo associada deve ser declarada como volatil
detachInterrupt(interrupt)
Desliga um interrupt externo.
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Bibliotecas Bsicas
Math
Trigonometria
Nmeros aleatrios
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Math
abs(x)
min(x, y)
max(x, y)
constrain(x, a, b)
Restringe um nmero x gama de valores [a, b] para todos os tipos de dados.
map(value, fromLow, fromHigh, toLow, toHigh)
Mapeia um valor da gama [fromLow, fromHigh] para a gama [toLow, toHigh].
pow(base, exponent)
Calcula a potncia da base. Esta funo permite a utilizao de fraes, teis para gerar
mapeamentos exponenciais de valores ou curvas (ex: curva de comportamento de um
sensor)
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
GP2D12/GP2D15
Fig.5 Analog Output Voltage vs. Surface
Illuminance of Reflective Object
Fig.4 Distance Characteristics
Fig.6 Analog Output Voltage vs.Distance to
Reflective Object
0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80
L H
H L
Hystersis width
Distance to reflective object L (cm)
(Non detection)
(Detection)
O
u
t
p
u
t
(
V
)
Output H
Output L
Output switching point distance
L=243cm
GP2D15
A
n
a
l
o
g
o
u
t
p
u
t
v
o
l
t
a
g
e
V
O
(
V
)
Surface illuminance of reflective object (lx)
0
3.0
2.8
2.4
2.0
1.6
1.2
0.8
0.4
0 14000 12000 10000 4000 8000 2000 6000
Light source
equivalent to
sun light
GP2D12
Reflective object
Kodak Co., Ltd.
gray cards R-27
(reflective ratio : 90%)
L=10cm
L=30cm
L=60cm
GP2D12
illuminance
meter
Draft Reflectivity
White 90%
Gray 18%
Distance to reflective object L (cm)
A
n
a
l
o
g
o
u
t
p
u
t
v
o
l
t
a
g
e
V
O
(
V
)
0 50 80 60 70 40 30 20 10
0
3.0
2.8
2.4
2.0
1.6
1.2
0.8
0.4
White
Gray
GP2D12
Fig.7 Analog Output Voltage vs.Ambient
Temperature
Fig.8 Analog Output Voltage vs.Detection
Distance
A
n
a
l
o
g
o
u
t
p
u
t
v
o
l
t
a
g
e
V
O
(
V
)
30 90 40 70 50 60 80 0 !10 10 !20 20
0
3.0
2.8
2.4
2.0
1.6
1.2
0.8
0.4
Ambient temperature T
a
(C)
L=10cm
L=15cm
L=20cm
L=50cm
L=40cm L=30cm
L=60cm L=70cm L=80cm
GP2D12
A
n
a
l
o
g
o
u
t
p
u
t
v
o
l
t
a
g
e
V
O
(
V
)
!3 5 2 3 !1 4 0 !4 1 !5 !2
0
3.0
2.8
2.4
2.0
1.6
1.2
0.8
0.4
Detection distance X (cm)
L(Distance to
reflective object)
Kodak Co., Ltd. gray cards R-27
(reflective ratio : 90%)
Sensor
GP2D12
X(Detection
distance)
!X(Detection
distance)
L=10cm
L=20cm
L=30cm
L=40cm
L=80cm
GP2D12
Curva de comportamento
do sensor Sharp GP2D12
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Exemplo da funo POW
Trigonometria
As seguintes funes esto disponveis:
sin(angle)
cos(angle)
tan(angle)
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Nmeros aleatrios
randomSeed(seed)
long random(max)
long random(min, max)
A funo random utiliza o seu valor de seed se este no for espececado.
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Bibliotecas avanadas I
SoftwareSerial
Wire
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
EEPROM interna
O Arduino tem 512 bytes de memria permanente (EEPROM)
interna (ATMEGA168) com capacidade para 100000 ciclos de
escrita.
byte EEPROM.read(address)
EEPROM.write(address, value)
Leitura/escrita da EEPROM. Gama de endereos de 0 a 511.
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
SoftwareSerial
O Arduino tem suporte nativo para comunicao e dados atravs
da porta srie (pinos 0 e 1), sendo que pode receber at 64
bytes na UART. Esta biblioteca implementa uma porta srie por
software com as seguintes limitaes:
low-speed (10kbits/s)
Metro
MsTimer2
Firmata
SimpleMessageSystem
(C) 2008, Filipe Valpereiro,
http://www.inmotion.pt
Eventos peridicos