Академический Документы
Профессиональный Документы
Культура Документы
Apresentao
Pr-requisitos
Contedo
Reviso Arduino Bsico Bibliotecas do Arduino Servo Library Nunchuk Library CapSense Library Atuadores sonoros GLCD Library (LCD)
4
dvidas?
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)
7
condutor [caminho]
plataforma arduino
microcontrolador Atmel
programao usando Wiring (subconjunto de processing, baseado em C/C++) open-source: evoluo da plataforma atravs de contribuies dos usurios
lilypad boarduino
mini
Duemilanove
paperduino
pro
10
mega
11
portas
54 entradas/sadas digitais 16 entradas analgicas
memria
RAM: 8K Flash (programa): 128k 4k (bootloader)
13
entradas analgicas
14 pinos de entrada analgica com resoluo de 10 bits (0 1023)
14
sadas analgicas
12 pinos de sada analgica (PWM) com resoluo de 8 bits (0 255)
15
portas seriais
4 portas seriais os objetos Serial(conectado USB), Serial1, Serial2 e Serial3 so utilizados para acessar essas portas.
16
driver
windows: FTDI Serial USB linux: no precisa instalar nada :-) software s descompactar e executar
17
18
rea de cdigo parar execuo novo abrir salvar enviar programa para placa
19
rea de status
20
delay(milisegundos);
21
atividade prtica!
22
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 :-)
23
24
perguntas?
25
eletrnica protoboard
26
eletrnica jumpers
27
28
atividade prtica!
29
prtica
montar os diversos circuitos para entradas e sadas analgicas e digitais.
30
perguntas?
31
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.
33
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
34
interrupes
exemplo:
attachInterrupt(num, function, mode);
Mode: LOW, CHANGE, RISING, FALLING
int state = LOW; void setup () { attachInterrupt(0, changeState, RISING); } void changeState() { state = !state; }
35
atividade prtica!
36
prtica
montar circuito de leitura de sinal digital usando interrupes. boto pressionado muda o estado do LED
37
perguntas?
38
bibliotecas do arduino
bibliotecas do arduino
possvel estender a plataforma Arduino com adio de componentes de cdigo, para controlar sensores e atuadores especficos.
bibliotecas do arduino
as bibliotecas so geralmente disponibilizadas como um zip que deve ser descompactado dentro da pasta libraries do Arduino.
41
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
42
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.
44
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).
45
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)
46
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
48
atividade prtica!
49
50
perguntas?
51
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.
53
biblioteca nunchuck
o nunchuck possui um acelermetro de 3 eixos, um joystick analgico de 2 eixos e 2 botes.
cada um destes sensores pode ser lido atravs da biblioteca Nunchuck.
54
biblioteca nunchuck
conexes com o Arduino Mega:
Fio Vermelho: 3.3V Fio Preto: GND Fio Amarelo(SDA): Pino 20 Fio Azul(SCL): 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(); // // // //
56
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();
57
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();
58
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)
59
atividade prtica!
60
61
atividade prtica!
62
63
perguntas?
64
capsense library
Figura retirada de
http://www.arduino.cc/playground/Main/CapSense
67
68
69
atividade prtica!
70
71
perguntas?
72
atuadores sonoros
atuadores sonoros
Buzzer piezoeltrico
formado por cermica piezoeltrica e disco metlico ao receber uma tenso a cermica se expande, quando removemos a tenso ele volta
74
atuadores sonoros
Buzzer piezoeltrico
2 polos: um ligado no GND e outro no pino de sada desejado aplicando uma tenso varivel produz vibrao que traduzida em som
75
atuadores sonoros
76
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
77
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); } }
78
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
79
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
80
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
81
atividade prtica!
82
perguntas?
84
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.
86
biblioteca IR Remote
para reduzir a interferncia de outras fontes de luz infravermelha, os dispositivos utilizam a modulao de sinal.
87
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.
88
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.
89
biblioteca IR Remote
circuito
90
biblioteca IR Remote
circuito
*No Arduino Mega, a biblioteca IRRemote envia dados atravs do pino 9 Tambm necessrio setar o pinMode(9, OUTPUT);
91
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 irrecv.enableIRIn(); // Inicia o receiver
92
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.
93
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 } }
94
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
95
atividade prtica!
96
perguntas?
98
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.
100
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
101
Pot
1 --2 ----------------------------3 --220R
102
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
103
biblioteca GLCD
Sistema de coordenadas
104
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
105
atividade prtica!
106
Pot
1 --2 ----------------------------3 --220R
107
perguntas?
108
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
109
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 GLCD.DrawCircle(x, y, r, color); // desenha um circulo centralizado em x,y e com // raio r GLCD.FillCircle(x, y, r, color); // desenha um circulo preenchido, centralizado em // x,y e com raio r
110
atividade prtica!
111
perguntas?
113
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
114
115
atividade prtica!
116
117
perguntas?
118
120
121
atividade prtica!
122
123
perguntas?
124
arduino - referencias
http://arduino.cc/en/Reference/HomePage
Lista dos tutoriais em: http://www.arduino.cc/en/Tutorial/HomePage
125
Obrigado!