Upload
tiago-barros
View
2.774
Download
2
Tags:
Embed Size (px)
DESCRIPTION
Curso de interfaces fisicas para dispositivos moveis com arduino.
Citation preview
interfaces físicas para dispositivos móveis
Tiago Barros | [email protected]
2
Apresentação
Tiago Barros - @tgfb
Mestre em Ciência da Computação, UFPE / 2007B.Sc. Ciência da Computação, UFPE / 2003Tec. Eletrônica, ETFPE / 1998
Engenheiro de Sistemas Sênior do C.E.S.A.REspecialista 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).
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
4
Pré-requisitos
• desenvolvimento de aplicativos Android
computação física
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
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
8
computação física
como vemos oscomputadores?
9
computação física
• teclado
• mouse
• monitor
• CPU
• caixas de som
como vemos os computadores?
10
computação física
como os computadores nos veem?
11
computação física
• dedos [teclado/mouse]
• olho [monitor]
• duas orelhas [caixas de som]
reflexo das entradas e saídas do computador
como os computadores nos veem?
12
computação física
“mudar a forma que os computadores nos
veem mudará como eles interagem
conosco”Tom Igoe – Physical Computing
13
Perguntas
sistemas computacionais reativos
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.
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
interfaces físicas para dispositivos móveis
18
interfaces físicas para dispositivos móveis
micro-controlador
sensor
atuador
sensor
comunicação
19
interfaces físicas para dispositivos móveis
android
20
interfaces físicas para dispositivos móveis
micro-controlador
sensor
atuador
sensor
comunicação
21
interfaces físicas para dispositivos móveis
micro-controlador
sensor
atuador
sensor
arduino
22
interfaces físicas para dispositivos móveis
micro-controlador
sensor
atuador
sensor
comunicação
23
interfaces físicas para dispositivos móveis
comunicação
amarino = +
plataforma arduino
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
26
plataforma arduino - hardware
unomini
lilypad
boarduino
paperduino megapro
27
plataforma arduino - hardware
• portas• 14 entradas/saídas digitais • 6 entradas analógicas
• memória• RAM: 1K• Flash (programa): 16k – 2k (bootloader)
• velocidade de processamento: 16MHz
28
plataforma arduino – hardware
29
plataforma arduino - instalação
• driver windows: FTDI Serial USB linux: não precisa instalar nada :-)
• software é só descompactar e executar
30
plataforma arduino - instalação
• Selecionando a placa e a porta serial
31
plataforma arduino – ambiente
área de código
área de status
compilar (verif. programa)
parar execução
novo
abrir
salvar
enviar programa para placa
exibir serial
32
plataforma arduino – ciclo de vida
escrever
compilar
enviar para placa
verificar execução
corrigir erros
corrigir erros
atuadores
34
plataforma arduino – estrutura do sketch
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
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);
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
38
atividade prática!
39
prática
• fazer o programa hello arduino, que pisca um led
• use o pino 13 de saída digital, a placa já possui um led ligado a ele :-)
40
plataforma arduino – hello arduino
41
Perguntas
protocolos de comunicação
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
44
comunicação serial – RS232
• o arduino possui uma biblioteca que implementa comunicação serial
• Serial.begin();
• Serial.print();
• Serial.read();
45
comunicação serial – RS232
• Leds• TX: dados
enviados para o PC
• RX: dados recebidos do PC
46
atividade prática!
47
comunicação serial - prática
“Hello Arduino” via serial
48
comunicação serial - prática
49
Perguntas
bibliotecas do arduino
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)
52
bibliotecas do arduino
• as bibliotecas são geralmente disponibilizadas como um zip que deve ser descompactado dentro da pasta libraries do Arduino.
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
plataforma amarino
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/
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)
57
plataforma amarino
• Instalação• Instalar a aplicação amarino e o plugin
bundle no dispositivo android, para os primeiros testes
Amarino Plugin bundle
58
mais prática!
59
eletrônica – protoboard
• antes disso: • Protoboard
60
eletrônica – jumpers
• jumpers
61
atividade prática!
62
prática
• Testando a comunicação
63
prática – código exemplo
64
prática
• aplicação Amarino 2.0
65
prática
• aplicação Amarino 2.0
66
prática
• aplicação Amarino 2.0
67
prática
• aplicação Amarino 2.0
68
prática
• aplicação Amarino 2.0
69
Perguntas
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.
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.
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.
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.
74
atividade prática!
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
76
Perguntas
77
voltando ao arduino...
conceitos básicos de eletricidade
79
eletricidade
eletricidade - interação entre partículas atômicas
universo formado de átomos
partículas atômicas:
prótons: cargas positivas
elétrons: cargas negativas
80
eletricidade
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)
“buraco”
“elétron extra”
81
eletricidade
cargas iguais se repelem
cargas opostas se atraem
cargas em movimento geram campo magnético
campo magnético em movimento gera corrente elétrica
NS
82
eletricidade – condutores e isolantes
isolante – evita a passagem de elétrons
condutor – permite o fluxo de elétrons
83
eletricidade – diferença de potencial (v)
cargas negativas
quanto maior a tensão, mais “força” teem os elétrons
diferença de potencial ou tensão.
cargas positivas
V
84
eletricidade – corrente elétrica (i)
quanto maior a corrente, maior a “quantidade” de
elétrons
fluxo de elétrons em um condutor
85
eletricidade – tipos de corrente elétrica
corrente contínua
corrente alternada
86
eletricidade – tipos de corrente elétrica
inversão de polaridade no tempo
mesma polaridade no tempo (sentido continuo)
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)
88
eletricidade – lei de ohm
V = R x I
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)
V
R I R = V/I
I = V/R
89
eletricidade – circuito elétrico
+
–
V
i
Rgerador[fonte]
condutor[caminho]
carga[consumidor]
90
Perguntas
atuadores
92
plataforma arduino – linguagem
• comandos básicos
• analogWrite() – escreve um valor analógico no pino
• analogWrite(num_pino, valor); valor entre 0 e 255
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
94
atividade prática!
95
antes dissomais um pouco de eletrônica...
96
eletrônica – resistores
oferecem resistência à passagem da corrente elétrica
transformam energia elétrica em energia térmica[pode ser usado como atuador]
tipos:
carvão [carbono]
filmefio
resistência:
fixovariável
97
eletrônica – resistores
valores expressos em ohms
o corpo dos resistores possui um código de cores para identificar o valor
98
agora sim, prática!
99
prática
• acender o LED com a intensidade de brilho correspondente ao valor enviado pelo evento de teste do android
100
prática
• circuito
Figura retirada de http://arduino.cc/
101
prática
• esquemático
Figura retirada de http://arduino.cc/
102
prática
• protoboard
Figura retirada de http://www.multilogica-shop.com/Aprendendo/Exemplos/Fading
103
Perguntas
sensores
105
sensores – chave (switch/button)
• interrompe a passagem da corrente elétrica• liga/desliga o circuito• sensor de toque
esquemático
106
plataforma arduino – linguagem
• Comandos• digitalRead() – le um pino de entrada
• Exemplo:• int chave = 0;• chave = digitalRead(num_do_pino);
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 umpino, a entrada flutuaentre 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)
108
atividade prática!
109
sensores - prática
• fazer o circuito e o programa para enviar ao dispositivo android o valor do sensor lido
110
sensores - prática
• esquemático
Figura retirada de http://arduino.cc/
111
sensores - prática
• protoboard
112
Perguntas
113
voltando à eletrônica...
114
eletrônica – sinais analógicos e digitais
sinal com variação contínua no tempo
sinal com variação discreta (valores pré-definidos)
115
eletrônica – conversão de sinais
valor é lido em intervalos regulares de tempo e transformado em um número digital
116
eletrônica – conversão de sinais
vários valores, não só HIGH e LOW. quantiade de valores é a resolução.
117
eletrônica – conversão de sinais
resolução de 8 bits = 256 valoresresolução de 16 bits = 65536 valores
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
119
atividade prática!
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.
121
sensores analógicos – prática
• esquemático
Figura retirada de http://arduino.cc/
122
sensores analógicos – prática
• circuito
Figura retirada de http://arduino.cc/
124
Perguntas
biblioteca amarino para android
126
Classe Amarino
• conexão• Amarino.connect(context, address);• Amarino.disconnect(context, address);
• Intents• AmarinoIntent.ACTION_CONNECTED• AmarinoIntent.ACTION_DISCONNECTED• AmarinoIntent.ACTION_CONNECTION_FAILED• AmarinoIntent.ACTION_PAIRING_REQUESTED
• Devemos registrar um BroadcastReceiver para receber os intents desejados
127
Classe Amarino
• comunicação• Amarino. sendDataToArduino(context, address,
command, data)
• Intents• AmarinoIntent.ACTION_SEND• AmarinoIntent.ACTION_RECEIVED
• Devemos registrar um BroadcastReceiver para receber os intents desejados
• API completa em: http://www.amarino-toolkit.net/tl_files/doc/index.html
128
atividade prática!
129
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
130
Perguntas
131
eletrônica – resistores LDR
• resistor variável sensível à luz
132
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
133
atividade prática!
134
entrada analógica - prática
ler valores do LDR e enviar para o dispositivo android
135
Perguntas
atuadores sonoros
137
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
138
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
139
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
140
atuadores sonoros
• para fazer o atuador vibrar, escrevemos no pino uma sequência de valores HIGH e LOW, tantas vezes por segundo quanto for a frequência da nota
• o tempo de cada variação HIGH e LOW é chamada de período e é o inverso da frequência
baixa frequência
alta frequência
período
período
1 segundo
• para fazer o atuador vibrar, escrevemos no pino uma sequência de valores HIGH e LOW, tantas vezes por segundo quanto for a frequência da nota
• o tempo de cada variação HIGH e LOW é chamada de período e é o inverso da frequência
141
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); }}
142
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
143
atuadores sonoros
•como tocar uma nota musical?
notes.h#define NOTE_B0 31#define NOTE_C1 33#define NOTE_CS1 35#define NOTE_D1 37#define NOTE_DS1 39#define NOTE_E1 41#define NOTE_F1 44#define NOTE_FS1 46#define NOTE_G1 49#define NOTE_GS1 52...
144
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
145
atividade prática!
146
atuadores sonoros - prática
• Tocar uma nota ao receber um evento do android
147
perguntas?
148
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
149
projeto
150
projeto da disciplina
• desenvolver um dispositivo interativo que utilize os conceitos aprendidos.
Obrigado!