Interfaces fisicas para dispositivos moveis

Preview:

DESCRIPTION

Curso de interfaces fisicas para dispositivos moveis com arduino.

Citation preview

interfaces físicas para dispositivos móveis

Tiago Barros | tiago@tiagobarros.org

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!