Professional Documents
Culture Documents
Apresentao
Pr-requisitos
Contedo
computao fsica conceitos bsicos de eletricidade e eletrnica plataforma arduino sensores e atuadores analgicos e digitais bibliotecas do arduino
servo library nunchuk library capsense library atuadores sonoros GLCD library (LCD)
4
computao fsica
computao fsica
uso de computao e eletrnica [sensores e atuadores] na prototipao de objetos fsicos para interao com seres humanos
comportamento implementado por software utilizao de microcontroladores
computao fsica
o objetivo interligar o mundo fsico com o mundo virtual
usar a computao e a interao com a tecnologia para o desenvolvimento das suas atividades meio para comunicao e interao entre pessoas
7
computao fsica
computao fsica
teclado mouse monitor CPU caixas de som
computao fsica
computao fsica
dedos [teclado/mouse]
olho [monitor]
duas orelhas [caixas de som]
computao fsica
mudar a forma que os computadores nos veem mudar como eles interagem conosco
Tom Igoe Physical Computing
12
Perguntas
14
eletricidade
universo formado de tomos partculas atmicas:
eletricidade
eltron extra
buraco Atomos com mais eltrons que prtons esto carregados negativamente (on negativo) Atomos com menos eltrons que prtons esto carregados positivamente (on positivo)
18
eletricidade
20
cargas positivas
cargas negativas
corrente contnua
corrente alternada
23
V=RxI
V
R I
R = V/I I = V/R
a diferena de potencial (V) entre dois pontos de um condutor proporcional corrente eltrica (I) que o percorre e sua resistncia (R)
26
condutor [caminho]
27
i V
28
e agora, computao...
29
plataforma Arduino
plataforma arduino
microcontrolador Atmel
programao usando Wiring (subconjunto de processing, baseado em C/C++) open-source: evoluo da plataforma atravs de contribuies dos usurios
31
lilypad
boarduino
mini
Duemilanove
paperduino
pro
32
mega
33
portas
54 entradas/sadas digitais 16 entradas analgicas
memria
RAM: 8K Flash (programa): 128k 4k (bootloader)
35
entradas analgicas
16 pinos de entrada analgica com resoluo de 10 bits (0 1023)
36
sadas analgicas
12 pinos de sada analgica (PWM) com resoluo de 8 bits (0 255)
37
portas seriais
4 portas seriais
os objetos Serial(conectado USB), Serial1, Serial2 e Serial3 so utilizados para acessar essas portas.
38
driver windows: FTDI Serial USB linux: no precisa instalar nada :-) software s descompactar e executar
39
40
salvar
enviar programa para placa
41
rea de status
42
43
44
constantes
LOW | HIGH indica nvel baixo (0V) e alto (5V) nos pinos INPUT | OUTPUT define se um pino vai ser pino de entrada ou de sada
45
atividade prtica!
46
prtica
fazer o programa hello arduino, que pisca um led
use o pino 13 de sada digital, a placa j possui um led ligado a ele :-)
47
48
Perguntas
49
50
51
mais prtica!
52
eletrnica protoboard
antes disso:
Protoboard
53
eletrnica protoboard
jumpers
54
eletrnica resistores
oferecem resistncia passagem da corrente eltrica
resistncia: fixo varivel
transformam energia eltrica em energia trmica [pode ser usado como atuador]
56
eletrnica resistores
valores expressos em ohms o corpo dos resistores possui um cdigo de cores para identificar o valor
57
prtica
modificar o programa hello arduino para acender o led com efeito de fading (acender gradativamente)
dica: use analogWrite() em vez de digitalWrite(), variando os valores escritos, de 0 a 255
59
prtica
circuito
60
prtica
esquemtico
61
prtica
protoboard
Perguntas
63
sensores
esquemtico
65
66
sensores
este resistor necessrio para que o pino seja levado para 0 quando no estiver conectado (chave aberta)
67
atividade prtica!
68
sensores - prtica
fazer o circuito e o programa para acender o led 13 de acordo com sinal de entrada do pino 2
69
sensores - prtica
esquemtico
70
sensores - prtica
protoboard
71
sensores - prtica
72
voltando eletrnica...
73
74
75
76
77
eletrnica - resistores
Como funciona um resistor varivel?
atividade prtica!
79
80
81
82
83
Perguntas
84
protocolos de comunicao
86
Serial.read();
87
88
atividade prtica!
89
90
91
92
93
atividade prtica!
94
95
perguntas?
96
interrupes
o arduino mega possui 6 pinos que podem ser ligados a interrupes de entrada e sada (IO).
uma interrupo de IO uma funo que executada quando existe uma mudana de estado no pino correspondente, independente do ponto em que se encontra a execuo do programa.
98
interrupes
a funo attachInterrupt(); permite configurar uma funo para ser executada caso haja uma mudana no pino de IO correspondente:
Interrupo Interrupo Interrupo Interrupo Interrupo Interrupo 0 1 2 3 4 5 pino pino pino pino pino pino 2 3 21 20 19 18
99
interrupes
exemplo:
attachInterrupt(num, function, mode);
Mode: LOW, CHANGE, RISING, FALLING
int state = LOW; void setup () { attachInterrupt(0, changeState, RISING); } void changeState() { state = !state; }
100
atividade prtica!
101
prtica
montar circuito de leitura de sinal digital usando interrupes. boto pressionado muda o estado do LED
102
perguntas?
103
bibliotecas do arduino
bibliotecas do arduino
possvel estender a plataforma Arduino com adio de componentes de cdigo, para controlar sensores e atuadores especficos. estes componentes so chamados de bibliotecas (libraries)
105
bibliotecas do arduino
as bibliotecas so geralmente disponibilizadas como um zip que deve ser descompactado dentro da pasta libraries do Arduino.
106
bibliotecas do arduino
aps reiniciar o Arduino, a biblioteca estar disponvel no menu Sketch->Import Library a maioria das bibliotecas para o Arduino pode ser encontrada em
http://arduino.cc/en/Reference/Libraries
107
servo library
biblioteca servo
servo motores so um tipo especial de motor que possui controle sobre a sua posio
eles no so feitos para girar livremente, em vez disto, movimentam-se para a posio escolhida dentro de um limite, que geralmente 180 graus.
109
biblioteca servo
um servo motor possui 3 fios dois para alimentao e um terceiro para controlar sua posio. este controle feito atravs da modulao por largura de pulso (PWM).
110
biblioteca servo
A conexo com os servos feita da seguinte forma: Fio preto ou marrom: GND Fio vermelho: 5V Fio amarelo ou laranja: pino de controle (sada digital)
111
biblioteca servo
usando a biblioteca servo: para usar esta biblioteca, necessrio import-la para o nosso programa, atravs do menu:
Sketch->Import Library->Servo
aparecer a seguinte linha no seu programa indicando que a biblioteca foi importada
#include <Servo.h>
biblioteca servo
usando a biblioteca servo:
motor1.attach(pino); // associa a varivel ao // pino em que o servo // motor est ligado
motor1.write(angulo); // angulo para o qual o // servo dever girar, entre // 0 e 180 graus ang = motor1.read(); // retorna o angulo em que o // servo se encontra
113
atividade prtica!
114
115
perguntas?
116
nunchuck library
biblioteca nunchuck
possvel utilizar o nunchuck do WII como dispositivo de entrada. o nunchuck um dispositivo que utiliza a interface IC para comunicao. Esta interface possui 2 fios de comunicao: SDA(dados) e SCL(clock). o arduino possui uma biblioteca chamada Wire que implementa o IC. a biblioteca Nunchuck foi desenvolvida utilizando a biblioteca Wire, por isso as duas precisam ser importadas no sketch.
118
biblioteca nunchuck
o nunchuck possui um acelermetro de 3 eixos, um joystick analgico de 2 eixos e 2 botes.
119
biblioteca nunchuck
conexes com o Arduino Mega: Fio Vermelho: Fio Preto: Fio Amarelo(SDA): Fio Azul(SCL): 3.3V GND Pino 20 Pino 21
biblioteca nunchuck
usando a biblioteca nunchuck:
nunchuck.begin(); // inicializa a biblioteca, // deve ser chamada no // setup();
// // // // l novos valores dos sensores do nunchuck, deve ser chamada continuamente dentro do loop(); define os valores atuais do joystick como os valores centrais
nunchuck.update();
nunchuck.calibrateJoy(); // // // //
121
biblioteca nunchuck
usando a biblioteca nunchuck:
x = nunchuck.readAccelX(); // l o valor do // acelermetro no eixo // X
Mesmo para readAccelY(); e readAccelZ(); x = nunchuck.readAngleX(); // l o valor do angulo // (entre 0 e 180) no // eixo X Mesmo para readAngleY(); e readAngleZ();
122
biblioteca nunchuck
usando a biblioteca nunchuck:
z = nunchuck.readZ(); // l o valor atual do boto // Z (0 liberado, 1 // pressionado)
Mesmo para readC(); z = nunchuck.zPressed(); // retorna se o boto Z // foi pressionado Mesmo para cPressed();
123
biblioteca nunchuck
usando a biblioteca nunchuck:
x = nunchuck.readJoyX(); // l o valor atual do // joystick no eixo X // (0 255)
Mesmo para readJoyY(); x = nunchuck.leftJoy(); // retorna se o joystick // foi para a esquerda // (informao digital)
124
atividade prtica!
125
126
atividade prtica!
127
128
perguntas?
129
capsense library
Figura retirada de
http://www.arduino.cc/playground/Main/CapSense
132
133
134
atividade prtica!
135
136
perguntas?
137
atuadores sonoros
atuadores sonoros
auto falantes
bobina em volta de um im corrente eltrica na bobina produz campo magntico campo magntico varivel faz a membrana se deslocar, produzindo som
139
atuadores sonoros
140
atuadores sonoros
1 segundo
para fazer o atuador vibrar, escrevemos no pino uma sequncia de valores HIGH e LOW, tantas vezes por segundo quanto for a frequncia da nota o tempo de cada variao HIGH e LOW chamada de perodo e o inverso da frequncia
141
baixa frequncia
perodo
alta frequncia
perodo
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 * frequncia) * * * * * * * * * nota c (d) d (r) e (mi) f (f) g (sol) a (l) b (si) C (d) frequncia 261 Hz 294 Hz 329 Hz 349 Hz 392 Hz 440 Hz 493 Hz 523 Hz periodo 3830 3400 3038 2864 2550 2272 2028 1912 tempo em nivel alto 1915 1700 1519 1432 1275 1136 1014 956
143
atuadores sonoros
como tocar uma nota musical? notes.h
#define #define #define #define #define #define #define #define #define #define ... NOTE_B0 NOTE_C1 NOTE_CS1 NOTE_D1 NOTE_DS1 NOTE_E1 NOTE_F1 NOTE_FS1 NOTE_G1 NOTE_GS1 31 33 35 37 39 41 44 46 49 52
144
funo tone
Arduino j possui uma funo para tocar notas
tone(pin, frequency); // emite uma determinada nota (representada pela // frequncia) no pino ocrrespondente noTone(pin); // para de emitir a frequncia definida por tone() // no pino correspondente
tone(pin, frequency, duration); // emite uma determinada nota (representada pela // frequncia) no pino ocrrespondente durante uma // determinada durao
145
atividade prtica!
146
Usar alguns switches ou sensores capacitivos para tocar uma nota quando pressionados, criando um teclado.
147
perguntas?
148
IR Remote library
biblioteca IR Remote
esta biblioteca permite enviar e receber dados atravs de atuadores e sensores infravermelhos. a luz infravermelha no visvel ao olho humano, entretanto est presente em vrios dispositivos emissores de luz, como lmpadas incandescentes e o prprio sol. assim, a comunicao infravermelho sofre interferncia destes fatores.
150
biblioteca IR Remote
para reduzir a interferncia de outras fontes de luz infravermelha, os dispositivos utilizam a modulao de sinal.
151
biblioteca IR Remote
um receptor sintonizado de infravermelho um dispositivo capaz de detectar pulsos de infravermelho a frequncias de 36kHz a 40kHz, sendo 38kHz a mais comumente utilizada.
ao detectar esta frequncia o receptor pe o nivel 0 em sua sada, caso a frequncia no seja detectada, a sada tem nvel lgico 1.
152
biblioteca IR Remote
o transmissor utilizado para comunicao infravermelho um LED, parecido com um LED comum mas que emite luz infravermelha. no possvel verificar se o LED infravermelho est aceso a olho nu, entretanto olh-lo atravs de uma cmera (de celular, pode exemplo) vai mostrar se ele est aceso ou no.
153
biblioteca IR Remote
circuito
154
biblioteca IR Remote
circuito
*No Arduino Mega, a biblioteca IRRemote envia dados atravs do pino 9 Tambm necessrio setar o pinMode(9, OUTPUT);
155
biblioteca IR Remote
recepo de infravermelho
IRrecv irrecv(pin); // cria um objeto para recepo de infravermelho // (receiver), com o sensor conectado ao pin. decode_results results; // cria um objeto para armazenar o resultado // da decodificao do sinal recebido
156
biblioteca IR Remote
recepo de infravermelho
X = irrecv.decode(&results); // decodifica o sinal caso haja algum dado // recebido. Neste caso, retorna valor diferente // de zero. Y = results.value; // results.value contm o valor do comando // recebido irrecv.resume(); // prepara o objeto para receber o prximo valor
157
biblioteca IR Remote
recepo de infravermelho exemplo de cdigo
int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // inicia o receiver } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); // Recebe o prximo valor } }
158
biblioteca IR Remote
transmisso de infravermelho
IRsend irsend; // cria um objeto para transmisso de // infravermelho. No arduino mega, este objeto // transmite no pino 9. irsend.sendSony(dado, nBits); irsend.sendNEC(dado, nBits); irsend.sendRC5(dado, nBits); irsend.sendRC6(dado, nBits); // envia o dado com o determinado numero de bits // utilizando o protocolo especificado
159
atividade prtica!
160
161
perguntas?
162
GLCD library
biblioteca GLCD
a biblioteca GLCD permite controlar displays Grficos LCD. Foi feita inicialmente para o display grfico com controlador KS0108, mas atualmente suporta outros controladores.
164
biblioteca GLCD
o display grfico que estamos utilizando possui o controlador KS0108B. Este display possui 20 pinos. a conexo deste display com o arduino mega se d de acordo com a tabela ao lado.
Pino LCD Arduino
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 GND 5V --36 35 37 22 23 24 25 26 27 28 29 33 34 ----5V ---
Pot
1 --2 ----------------------------3 --220R
165
Pot
1 --2 ----------------------------3 --220R
166
biblioteca GLCD
GLCD.Init(mode); // inicializa a biblioteca GLCD de acordo com o // modo que pode ser: INVERTED ou NON-INVERTED GLCD.SetDisplayMode(mode); // define o estado do display de acordo com o // modo que pode ser: INVERTED ou NON_INVERTED GLCD.ClearScreen(color); // apaga a tela inteira com a cor desejada, que // pode ser: WHITE ou BLACK
167
biblioteca GLCD
Sistema de coordenadas
168
biblioteca GLCD
GLCD.SetDot(x, y, color); // desenha um ponto nas coordenadas x,y com a cor // desejada (BLACK ou WHITE) GLCD.DrawVLine(x, y, height, color); // desenha uma linha vertical, comeando em x,y // com altura height e com cor definida em color GLCD.DrawHLine(x, y, width, color); // desenha uma linha horizontal, comeando em x,y // com altura width e com cor definida em color GLCD.DrawLine(x1, y1, x2, y2, color); // desenha uma linha comeando em x1,y1 // e terminando em x2,y2 com a cor desejada
169
atividade prtica!
170
Pot
1 --2 ----------------------------3 --220R
171
perguntas?
172
biblioteca GLCD
GLCD.DrawRect(x, y, width, height, color); // desenha um retangulo com canto superior // esquerdo em x,y e com largura e altura // definidas por width e height
GLCD.FillRect(x, y, width, height, color); // desenha um retangulo preenchido, da mesma forma // que a funo anterior
GLCD.InvertRect(x, y, width, height); // inverte as cores dos pontos (pixels) de uma // rea comeando em x,y e com rea width,height
173
biblioteca GLCD
GLCD.DrawRoundRect(x, y, w, h, radius, color); // desenha um retangulo com cantos arredondados // definidos por radius, que pode ter valor entre // 1 e metadade da altura ou largura do retangulo
174
atividade prtica!
175
perguntas?
177
basta clicar duas vezes no arquivo jar e este ser executado, abrindo uma janela para converso. Arrastar um bitmap sobre esta janela ir converter o bitmap em cdigo que pode ser carregado no Arduino. Este cdigo gerado no arquivo nome_da_imagem.h
178
179
atividade prtica!
180
181
perguntas?
182
184
185
atividade prtica!
186
187
perguntas?
188
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
189
Obrigado!