O documento fornece uma introdução às interfaces físicas para dispositivos móveis, abordando conceitos como computação física, alternativas de interfaces como Arduino e Amarino, e protocolos de comunicação serial.
2. Apresentação
Tiago Barros - @tgfb
Mestre em Ciência da Computação, UFPE / 2007
B.Sc. Ciência da Computação, UFPE / 2003
Tec. Eletrônica, ETFPE / 1998
Engenheiro de Sistemas Sênior do C.E.S.A.R
Especialista em tecnologia, Grupo de Inovação
Professor de pós-graduação e especialização em diversos cursos:
C.E.S.A.R(Recife), Cin/UFPE/Motorola(Recife), Universidade
Positivo (Curitiba), Instituto FaberLudens/FISAM/UnC (Curitiba).
2
3. Conteúdo
• computação física
• alternativas de interfaces físicas para
dispositivos móveis
• plataforma Arduino
• protocolo de comunicação serial
• plataforma Amarino
• introdução à eletricidade e eletrônica
• sinais analógicos e digitais
• sensores e atuadores
3
6. computação física
• uso de computação e eletrônica [sensores e
atuadores] na prototipação de objetos físicos
para interação com seres humanos
• comportamento implementado por software
• utilização de microcontroladores
6
7. computação física
• o objetivo é interligar o mundo físico com o
mundo virtual
• usar a computação e a interação com a
tecnologia para o desenvolvimento das suas
atividades
• meio para comunicação e interação entre
pessoas
7
11. computação física
como os computadores nos veem?
• dedos
[teclado/mouse]
• olho
[monitor]
• duas orelhas
[caixas de som]
reflexo das entradas e saídas do computador
11
12. computação física
“mudar a forma que os
computadores nos veem
mudará como eles
interagem conosco”
Tom Igoe – Physical Computing
12
15. sistemas computacionais reativos
percepção do ambiente, recebendo estímulos
atavés de sensores;
e reação aos estímulos, de acordo com o seu
comportamento (software), através de
atuadores.
15
16. sistemas computacionais reativos
comunicação entre redes de sensores e
atuadores para formar um ambiente dinâmico e
interativo
interação de sensores e atuadores com
dispositivos móveis
16
25. plataforma arduino
• microcontrolador Atmel
• programação usando Wiring (subconjunto de
processing, baseado em C/C++)
• open-source: evolução da plataforma através
de contribuições dos usuários
25
31. plataforma arduino – ambiente
compilar
exibir serial
(verif. programa)
área de código
parar execução
novo
abrir
salvar
enviar programa
para placa área de status
31
32. plataforma arduino – ciclo de vida
escrever
corrigir erros compilar
enviar para placa
corrigir erros
verificar execução
32
35. plataforma arduino – linguagem
• linguagem baseada em C (mas bem mais fácil)
• comandos básicos
• pinMode() – define um pino com entrada ou saída
• digitalWrite() – liga ou desliga uma saída digital
• delay() – “espera” um determinado tempo
35
36. plataforma arduino – linguagem
• Exemplos
• pinMode(num_do_pino, OUTPUT);
• digitalWrite(num_do_pino, valor);
valor é LOW ou HIGH (0 ou 1, 0V ou 5V)
• delay(milisegundos);
36
37. plataforma arduino – linguagem
• constantes
LOW | HIGH – indica nível baixo (0V) e alto (5V) nos pinos
INPUT | OUTPUT – define se um pino vai ser pino de entrada ou
de saída
37
43. comunicação serial – RS232
• chip ATMEGA 328 só tem interface serial, não
tem USB
• nossa placa arduino possui um chip que
converte Serial para USB
• usamos o mesmo cabo USB pra enviar dados pro
PC via serial
43
44. comunicação serial – RS232
• o arduino possui uma biblioteca que
implementa comunicação serial
• Serial.begin();
• Serial.print();
• Serial.read();
44
45. comunicação serial – RS232
• Leds
• TX: dados enviados
para o PC
• RX: dados
recebidos do PC
45
51. bibliotecas do arduino
• é possível estender a
plataforma Arduino com
adição de componentes
de código, para controlar
sensores e atuadores
específicos.
• estes componentes são
chamados de bibliotecas
(libraries)
51
52. bibliotecas do arduino
• as bibliotecas são
geralmente disponibilizadas
como um zip que deve ser
descompactado dentro da
pasta libraries do
Arduino.
52
53. bibliotecas do arduino
• após reiniciar a IDE do
Arduino, a biblioteca estará
disponível no menu Sketch-
>Import Library
• a maioria das bibliotecas
para o Arduino pode ser
encontrada em
http://arduino.cc/en/Reference/Libraries
53
55. plataforma amarino
• toolkit constituído de uma aplicação android e
uma biblioteca arduino que permite envio de
mensagens entre os dois dispositivos
• utilização de serial sobre bluetooth
• MIT Media Lab
• http://www.amarino-toolkit.net/
55
56. plataforma amarino
• Instalação
• Baixar e descompactar a biblioteca
MeetAndroid (http://code.google.com/p/amarino/downloads/detail?
name=MeetAndroid_3.zip)
• Baixar a biblioteca Amarino para Android
(http://code.google.com/p/amarino/downloads/detail?name=AmarinoLibrary_v0_55.jar)
56
57. plataforma amarino
• Instalação
• Instalar a aplicação amarino e o plugin
bundle no dispositivo android, para os
primeiros testes
Amarino Plugin bundle
57
70. API MeetAndroid
MeetAndroid meetAndroid;
— cria um objeto do tipo MeetAndroid
meetAndroid.registerFunction (f, c);
— registra uma função f para o determinado comando c, que
pode ser um número de ‘0’ a ‘9’ ou uma letra, de ‘a’ a ‘z’ e de
‘A’ a ‘Z’.
meetAndroid.unregisterFunction (c);
— desregistra a função previamente registrada para o comando
c.
70
71. API MeetAndroid
meetAndroid.receive();
— Verifica se existem comandos a serem recebidos e chama a
função registrada caso receba algum comando.
meetAndroid.bufferLength();
— Retorna o tamanho do buffer de dados recebidos.
meetAndroid.getString(char[]);
— Copia a string recebida para o array de char passado como
parâmetro.
71
72. API MeetAndroid
meetAndroid.getInt();
— Retorna o valor do buffer como inteiro.
meetAndroid.getLong();
— Retorna o valor do buffer como long int.
meetAndroid.getFloat();
— Retorna o valor do buffer como float.
72
73. API MeetAndroid
meetAndroid.getIntValues(int[]);
— Retorna o valor do buffer como um array de inteiros que foram
enviados separados por ‘;’. A quantidade de valores é passada
para a função registrada através da variável numOfValues
(argumento 2 da função);
meetAndroid.getFloatValues(float[]);
— Retorna o valor do buffer como um array de floats, da mesma
forma que a anterior.
meetAndroid.send(value);
— Envia um valor (numérico ou string) para o dispositivo android.
73
75. prática
Modificar o exemplo para enviar “OK” ao
dispositivo android para cada comando recebido
Verificar o recebimento do “OK” no monitoring da
aplicação Amarino 2.0
75
80. eletricidade
“elétron extra”
“buraco”
Atomos com mais elétrons que
prótons estão carregados
negativamente (íon negativo)
Atomos com menos elétrons que
prótons estão carregados
positivamente (íon positivo)
80
81. eletricidade
cargas iguais se repelem cargas opostas se atraem
S N
cargas em movimento campo magnético em
geram campo magnético movimento
gera corrente elétrica
81
82. eletricidade – condutores e isolantes
condutor – permite o fluxo de elétrons
isolante – evita a passagem de elétrons
82
83. eletricidade – diferença de potencial (v)
cargas positivas
diferença de potencial V
ou tensão.
cargas negativas
quanto maior a tensão, mais “força” teem os elétrons
83
84. eletricidade – corrente elétrica (i)
fluxo de elétrons em um condutor
quanto maior a corrente,
maior a “quantidade” de elétrons
84
86. eletricidade – tipos de corrente elétrica
mesma polaridade no tempo (sentido continuo)
inversão de polaridade no tempo
86
87. eletricidade – resistência elétrica (r)
propriedade do material condutor em reduzir
a passagem dos elétrons
elétrons “se acumulam e batem”
no condutor, “dissipando” sua energia
(gerando calor)
87
88. eletricidade – lei de ohm
V=RxI
V
R = V/I
R I I = V/R
a diferença de potencial (V) entre dois pontos de um
condutor é proporcional à corrente elétrica (I) que o
percorre e à sua resistência (R)
88
89. eletricidade – circuito elétrico
carga
[consumidor]
+
R
gerador V
[fonte]
–
condutor i
[caminho]
89
92. plataforma arduino – linguagem
• comandos básicos
• analogWrite() – escreve um valor analógico no pino
• analogWrite(num_pino, valor);
valor entre 0 e 255
92
93. eletrônica – modulação PWM
a função analogWrite() escreve
“pulsos” muito rápidos no pino
digital (só funciona nos pinos
marcados com PWM).
o valor a ser escrito representa
o tempo que o pulso fica em
nível alto e varia de 0 a 255.
quanto mais tempo o pulso
permanecer em nível alto,
maior é a “tensão média” da
saída
93
96. eletrônica – resistores
oferecem resistência à passagem da corrente elétrica
resistência:
fixo
variável
tipos:
carvão [carbono]
filme
fio
transformam energia elétrica em energia térmica
[pode ser usado como atuador]
96
97. eletrônica – resistores
valores expressos em ohms
o corpo dos resistores possui um código de cores para identificar o
valor
97
105. sensores – chave (switch/button)
• interrompe a passagem da corrente elétrica
• liga/desliga o circuito
• sensor de toque
esquemático
105
106. plataforma arduino – linguagem
• Comandos
• digitalRead() – le um pino de entrada
• Exemplo:
• int chave = 0;
• chave = digitalRead(num_do_pino);
106
107. sensores
arduino lê tensões de
entrada (e não valores 0 e 1)
5 volts == HIGH (1)
0 volts == LOW (0)
sem conexão em um
pino, a entrada flutua
entre 0 e 5 volts
(HIGH e LOW) este resistor é necessário para
que o pino seja levado para 0
quando não estiver conectado
(chave aberta)
107
114. eletrônica – sinais analógicos e digitais
sinal com variação
discreta (valores
pré-definidos)
sinal com
variação
contínua no
tempo
114
115. eletrônica – conversão de sinais
valor é lido em intervalos regulares de tempo e
transformado em um número digital
115
116. eletrônica – conversão de sinais
vários valores, não só HIGH e LOW. quantiade de
valores é a resolução.
116
117. eletrônica – conversão de sinais
resolução de 8 bits = 256 valores
resolução de 16 bits = 65536 valores
117
118. eletrônica - resistores
• Como funciona um resistor variável?
• no arduino, o valor da tensão é transformado
em um valor digital entre 0 e 1023
118
120. sensores analógicos – prática
• ler o valor do resistor variável e ligar um LED se
esse valor passar de um determinado limite. Ao
acender o LED, informar o dispositivo android.
120
121. sensores analógicos – prática
• esquemático
Figura retirada de http://arduino.cc/
121
128. biblioteca amarino - prática
• fazer uma aplicação que mostre um gráfico de
linha no android, com o valor do sensor lido
pelo arduino.
• fazer uma aplicação que exiba um gradiente na
tela e altere o brilho de um LED de acordo com
a área do gradiente tocada
129
131. eletrônica – resistores LDR
• resistor variável sensível à luz
circuito para arduino
porque o resistor de 1k?
- para limitar a corrente
se o LDR assumir valores
muito baixos
132
136. atuadores sonoros
• Buzzer piezoelétrico
• formado por cerâmica
piezoelétrica e disco
metálico
• ao receber uma tensão
a cerâmica se
expande, quando
removemos a tensão
ele volta
137
137. atuadores sonoros
• Buzzer piezoelétrico
• 2 polos: um é ligado no
GND e outro no pino de
saída desejado
• aplicando uma tensão
variável produz
vibração que é
traduzida em som
138
138. atuadores sonoros
• como programar o arduino para tocar uma nota
musical?
• uma nota musical é um som em uma determinada
frequência
• a frequência de uma nota significa quantas vezes o
atuador sonoro vibra em 1 segundo
139
139. atuadores sonoros
1 segundo
• para fazer o atuador
baixa frequência
vibrar, escrevemos no
pino uma sequência de
valores HIGH e LOW,
tantas vezes por segundo período
quanto for a frequência
da nota alta frequência
• o tempo de cada
variação HIGH e LOW é
período
chamada de período e é
o inverso da frequência
140
140. atuadores sonoros
• programar o arduino para tocar uma nota
musical
void playTone(int period, int duration)
{
for (long i = 0; i < duration * 1000L; i += period* 2)
{
digitalWrite(speakerPin, HIGH);
delayMicroseconds(period);
digitalWrite(speakerPin, LOW);
delayMicroseconds(period);
}
}
141
141. atuadores sonoros
•como tocar uma nota musical?
timeHigh = periodo / 2 = 1 / (2 * frequência)
* nota frequência periodo tempo em nivel alto
* c (dó) 261 Hz 3830 1915
* d (ré) 294 Hz 3400 1700
* e (mi) 329 Hz 3038 1519
* f (fá) 349 Hz 2864 1432
* g (sol) 392 Hz 2550 1275
* a (lá) 440 Hz 2272 1136
* b (si) 493 Hz 2028 1014
* C (dó) 523 Hz 1912 956
Não é necessário escrever essas frequências, podemos
incluir o arquivo notes.h
142
143. função tone
• Arduino já possui uma função para tocar notas
tone(pin, frequency);
// emite uma determinada nota (representada pela
// frequência) no pino ocrrespondente
noTone(pin);
// para de emitir a frequência definida por tone()
// no pino correspondente
tone(pin, frequency, duration);
// emite uma determinada nota (representada pela
// frequência) no pino ocrrespondente durante uma
// determinada duração
144
147. arduino - referencias
• Lista dos comandos da linguagem em:
http://arduino.cc/en/Reference/HomePage
• Lista dos tutoriais em:
http://www.arduino.cc/en/Tutorial/HomePage
148