Documente Academic
Documente Profesional
Documente Cultură
www.revistadoarduino.com.br
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Experimentos
com o Arduino
www.revistadoarduino.com.br
2013
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Prefcio
Prefcio
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Brites
Prefcio
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Sumrio
Prefcio 5
Apresentao 12
13
14
14
Captulo 1 - Microcontroladores
15
26
36
Um pouco de histria
27
A placa do Arduino
28
Os Ports digitais de E/S
31
As entradas analgicas e a sada PWM 33
Resumo do captulo 2
34
Introduo
Instalao do IDE do Arduino
Sumrio
Introduo
16
O microcontrolador AVR
18
A CPU e os registradores internos
20
Memrias e clock 21
Programao
22
Aplicaes
23
Resumo do captulo 1
24
37
38
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Aplicaes
19
A barra de Menus
42
File 42
Edit 44
Sketch 45
Tools 46
Help 47
A Barra de Controles
47
As Barras de Mensagens
48
49
Introduo
50
A estrutura da linguagem do Arduino
51
Constantes
51
Variveis
51
Funes
52
As principais funes da linguagem do Arduino
53
pinMode(pino,modo) 54
digitalRead(pino)
55
digitalWrite(pino,valor)
55
analogRead(pino)
56
analogWrite(pino,valor)
56
delay(ms)
57
millis( )
57
random(min,max)
57
Serial.begin(taxa)
58
Serial.println(dado) 58
59
59
59
59
60
Sumrio
Os operadores
Operadores aritmticos
Operadores lgicos
Operadores de comparao
Operadores compostos
Os principais comandos da linguagem
60
O comando if 60
O comando while 62
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
O Comando do ... while 63
O Comando for 63
Matrizes
64
Resumo do captulo 4
65
Introduo
Experimento #1 Hello Word!
Experimento #2 Gerao de udio
Experimento #3 Entrada Analgica
Experimento #4 Sada Analgica
Experimento #5 Controle de Motores
5.1 - Controlando um motor CC
5.2 - Servo-motores
5.3 - Motores de passo
5.4 - Vibra-motor
Experimento #6 LEDs e Mostradores
6.1 - LEDs
6.2 - Mostradores de 7 segmentos
6.3 - Um contador de dois dgitos
6.4 - LCD
Experimento #7 Solenoides, Reles e Acopladores
7.1 - Solenoide
7.2 - Rels
7.3 - Acoplador tico
Experimento #8 Sensores
8.1 - LDRs
8.2 - Fototransistores e Fotodiodos
8.3 - Transdutores Piezoeltricos
8.4 - Temperatura
Resumo do captulo 5
67
63
69
73
75
77
81
81
83
87
89
90
90
94
96
104
107
108
109
110
112
112
113
115
117
Sumrio
119
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
size(largura,altura)
129
point(x,y)
129
line(x1,y1,x2,y2)
130
triangle(x1,y1,x2,y2,x3,y3)
130
quad(x1,y1,x2,y2,x3,y3,x4,y4)
131
rect(x,y,largura,altura)
131
ellipse(x,y,largura,altura)
131
arc(x,y,largura,altura,inicio,fim) 132
Outras funes importantes de desenho plano
133
smooth( )
133
strokeWeight( )
134
strokeJoin( )
134
strokeCap( )
135
Plotando grficos simples
136
Resumo do captulo 6
139
Introduo
143
Experimento #9 Comunicao serial
144
Experimento #10 Mdulo de Desenvolvimento
150
Experimento #11 Shield matriz de contatos
154
Experimento #12 Monitor de batimentos cardiacos 157
Parte 1: Vendo os pulsos cardacos
157
Parte 2: Uma interface grfica em Processing 163
Introduo
O circuito proposto do Arduino
Descrio do Circuito
A placa de Circuito Impresso
Alimentando o Arduino
169
Sumrio
Apendices:
1 - Monte seu prprio Arduino
170
171
172
176
177
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Introduo
178
Gravando o bootloader 182
Conectando o Arduino a um computador
185
Descrio do Circuito
186
3 - Cartilha de Programao
Introduo
A estrutura da Linguagem
As portas de E/S e suas funes em C
189
189
191
201
Sumrio
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Apresentao
Apresentao
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
13
Apresentao
14
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Microcontroladores
Captulo 1
Introduo
O microcontrolador AVR
A CPU e os registradores internos
Memrias e clock
Programao
Aplicaes
Resumo do captulo 1
Captulo
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
16
Captulo 1
Microcontroladores
Introduo
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
17
indutores e chaves mecanicas de vrios polos e posies. O circuito final era dedicado
a uma s aplicao e no era muito fcil fazer correes ou melhoramentos uma vez
montado, pois era preciso cortar filetes na placa de circuito impresso, refazer soldas
e mesmo montar outros componentes sobre os j existentes. Os microcontroladores
vieram para facilitar a vida dos projetistas e experimentadores de circuitos eletronicos
mais complexos j que muitos dos fios e das trilhas metlicas e vrios componentes
discretos nas placas podem ser substituidos por linhas de cdigo de programas que
rodam nesses novos componentes. Linhas de programas so muito mais fceis de
mudar que componentes soldados numa placa de circuito impresso. Somente com
a reescrita de umas poucas linhas do cdigo de um programa podemos mudar
radicalmente o funcionamento do nosso circuito e testar novas possibilidades no
mesmo perodo de tempo que levaramos para trocar alguns resistores numa placa.
Para isso o tcnico e o engenheiro eletronico precisam de um conhecimento mnimo
de uma linguagem de programao dedicada a esses novos dispositivos.
18
O microcontrolador AVR
A sigla AVR vem de Advanced Virtual RISC ou Alf and Vegard RISC, os nomes dos
projetistas desse microcontrolador. RISC vem de Reduced Instruction Set Computer,
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
19
20
21
Memrias e clock
22
Programao
J sabemos que um microcontrolador um pequeno computador em um chip; porem
no bastam a CPU, a memria e os circuitos de entrada e sada para ele funcionar,
necessrio tambem um programa que instrua esse hardware o que tem que ser
feito. O hardware a parte fsica, visvel, o corpo do computador; o programa, ou
software, a parte invisvel ou alma deste. O programa fica residente em algum tipo
de memria do computador. Nos computadores pessoais PC ou Mac o programa fica
no disco rgido; nos microcontroladores ele fica na memria de programa interna
do tipo Flash. A memria Flash uma verso da memria EEPROM (Electrically
ErasableProgrammable ROM) e onde so gravados o bootloader, que um programa
opcional de inicializao do microcontrolador, e posteriormente os programas do
usurio.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
23
Aplicaes
Um microcontrolador uma ferramenta poderosa que permite ao projetista
eletronico criar sistemas complexos sob controle de um programa. Encontramos
microcontroladores em todos os aparelhos eletronicos que nos cercam, como
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
24
telefones celulares e GPS, televisores e seus controles remotos, fornos de microondas e refrigeradores, impressoras e mouses, e at naqueles cartes de crdito e
dbito que possuem o j to conhecido chip que carregamos em nossos bolsos. Um
automvel moderno pode ter at dez microcontroladores embarcados: dois ou tres
para monitorao e controle do motor e transmisso, outro para os freios ABS, outro
para os instrumentos no painel, para os alarmes e trancas das portas. O circuito
mais simples que podemos montar com um microcontrolador ATmega328 precisa
somente de um cristal de 16 Mhz, dois capacitores ceramicos de 22pF, um resistor
de 10K e uma chave de reset, conforme vemos na figura 3, acima. para alimentlo qualquer fonte regulada que fornea 5 volts CC serve. Se nesse circuito simples
conectarmos um sensor de temperatura no pino 23 (a linha 0 do Port C) e um
transistor acionando um rel no pino 19 (linha 5 do Port B) , por exemplo; e na
memria Flash do microcontrolador carregarmos um programa de umas poucas
linhas poderemos controlar a temperatura interna de um forno eltrico mantendo-a
entre dois limites previamente escolhidos. E se ainda conectarmos diretamente a
outros pinos do microcontrolador um teclado simples e um mostrador LCD ou de
7-segmentos, bastaria incluirmos mais algumas linhas de cdigo em nosso programa
para entrarmos com os limites de temperatura desejados pelo teclado e termos a
leitura instantanea da temperatura interna do forno no mostrador digital.
Resumo do captulo 1
Um microcontrolador um nico circuito integrado que pode ter de 8 a at mais
de 100 pinos e que inclui uma CPU, memria e circuitos de entrada e sada. Alguns
modelos podem vir com contadores/temporizadores decimais, conversores A/D,
comparadores de tenso e circuitos de comunicao serial, tudo embutido no mesmo
encapsulamento. Os microcontroladores como qualquer computador funcionam
seguindo uma lista de instrues armazenadas em forma de cdigos binrios em
uma memria de programa. Essas instrues, so escritas em Assembly, C, BASIC
ou Pascal, e apanhadas uma a uma da memria e decodificadas por circuitos lgicos
internos CPU e ento executadas. A CPU a parte do microcontrolador responsvel
pelas operaes matemticas e pelas operaes lgicas; a memria separada em dois
tipos conforme sua funo: memria de programa, do tipo Flash, e memria de dados,
do tipo RAM; os Ports formam os circuitos de entrada e sada do microcontrolador.
O primeiro Arduino foi projetado com o microcontrolador ATmega8 da Atmel
em 2005. Os mais novos Arduinos vm com o ATmega1280 que tem 16 vezes
mais memria de programa e tres vezes mais pinos de E/S. Registradores so
blocos digitais formados por grupos de 8 ou 16 flip-flops do tipo D ou JK e so
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
25
usados pela CPU para guardar resultados de operaes internas e troca de dados
com circuitos externos. O ATmega328 possui um grupo de 32 registradores de uso
geral de 8 bits conectados diretamente a ALU, a Unidade de Lgica e Aritmtica.
Outros registradores presentes em qualquer microcontrolador so: o Contador de
Programas, o Registrador de Instrues e o Decodificador de Instrues. Cada grupo
de Ports tambem um registrador de 8 bits conectados fisicamente aos pinos do
microcontrolador. No ATmega328 seis dos 23 pinos de entrada e sada que formam
os Ports so diretamente conectados a um conversor A/D de 10 bits de resoluo,
enquanto outros seis pinos podem ser programados para a funo de sada PWM, ou
modulao por largura de pulso.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Captulo
O Hardware do Arduino
Captulo 2
Um pouco de historia
A placa do Arduino
Os ports digitais de E/S
As entradas analgicas e a saida PWM
Resumo do captulo 2
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
27
Captulo 2
O hardware do Arduino
Um pouco de histria
28
A placa do Arduino
O Arduino composto por duas partes principais: um hardware, um conjunto bsico
de componentes eletronicos montados numa placa de circuito impresso, que a
plataforma para o desenvolvimento de prottipos; e um software, um aplicativo, o
bootloader, residente na memria de programas do microcontrolador embarcado
no Arduino. Existe tambem uma interface grfica, um programa que roda num
computador padro PC em ambiente Windows ou Linux, ou ainda numa mquina
Apple com o sistema operacional Mac OS X. nessa interface grfica ou Ambiente
de Desenvolvimento Integrado (IDE Integrated Development Environment) que o
leitor vai criar seus programas e depois carregar para o hardware do Arduino. So
esses programas, ou na linguagem do Arduino: sketches, que vo dizer ao hardware
o que deve ser feito.
ARDUINO
Processador
Memria flash
Memria RAM
Memria EEPROM
Pinos digitais
Pinos analgicos
Sadas PWM
Diecimila
ATmega8
8K
1K
512 bytes
14
6
3
ATmega328
32 K
2K
1K
14
6
6
ATmega1280
128 K
8K
4K
54
16
14
29
O circuito do conversor RS-232 originalmente foi projetado com transistores
bipolares BC557. Depois surgiram verses como o Arduino Freeduino MaxSerial
que utilizavam o circuito integrado conversor MAX232N. A funo do conversor
RS-232 apenas compatibilizar os nveis TTL do ATmega8 com os nveis de tenso
padronizados do protocolo RS-232 na comunicao com um computador PC ou
Apple.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
30
31
32
33
ligar e desligar sua entrada de sua sada, so conhecidas como tri-state buffers. A
qualquer momento as sadas Q dos registradores DDR e PORT podem ser lidas pela
CPU atraves do controle de clock de outras duas chaves digitais. Esses registradores
so resetados quando o microcontrolador inicializado ou resetado e todos os pinos
so colocados em estado de alta impedancia.
34
Sistemas digitais tambem podem gerar sinais analgicos com circuitos conversores
digitais-analgicos (D/A). Embora o microcontrolador AVR usado no Arduino no
tenha um conversor D/A interno, possvel gerar voltagens analgicas de 0 a 5 volts
em alguns de seus pinos de sadas digitais empregando uma tcnica conhecida por
PWM (Pulse Width Modulation) ou Modulao por Largura de Pulso. Com essa
tcnica pode-se construir um sistema eletronico que gera em sua sada um trem de
pulsos TTL de cadencia fixa mas com a largura dos seus pulsos positivos variando
de acordo com uma combinao de bits programada em um registrador de uso geral
(GPR) do microcontrolador. Esse trem de pulsos PWM s precisa passar por um
filtro RC passa-baixas semelhante quele usado em fontes de alimentao para se
obter uma tenso CC de 0 a 5 volts. No Arduino esses pinos PWM so os pinos
digitais 3, 5, 6 e 9 a 11.
Resumo do captulo 2
O primeiro Arduino foi criado em janeiro de 2005 na Italia por David Cuartielles e
Massimo Banzi. O objetivo era criar uma plataforma de hardware que fosse facilmente
programvel por no especialistas em computadores. Todo o projeto Arduino foi
concebido segundo o princpio do open source, onde todos os programas e circuitos
so de domnio pblico.
O Arduino composto por duas partes principais: um hardware, um microcontrolador
e alguns componentes eletronicos montados numa placa de circuito impresso; e um
software residente na memria de programas do microcontrolador e tambem uma
interface grfica que roda num computador padro PC ou numa mquina Apple.
O hardware do Arduino baseado nos microcontroladores AVR ATmega8,
ATmega168, ATmega328 ou ATmega1280. Para se interligar ao mundo exterior o
Arduino possui um conjunto de dois conectores: um com 14 pinos para entradas ou
sadas de sinais digitais e um de 6 pinos para entrada de sinais analgicos.
Ports so a conexo fsica entre a CPU e o mundo exterior, so grupos de 8 pinos
do microcontrolador que so fisicamente conectados a registradores de 8 bits no
circuito digital de E/S e por onde podemos enviar ou receber qualquer combinao de
nveis lgicos na forma de 1 byte. Cada Port tem dois registradores: o registrador de
direo de dados DDR e o registrador de dados propriamente dito ou simplesmente
PORT. O equivalente ao DDR nos microcontroladores PIC o registrador TRIS.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
35
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Captulo
O IDE do Arduino
Captulo 3
Introduo
Instalao do IDE
Aplicaes
A barra de Menus
A barra de Controle
A barra de Mensagens
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
37
Captulo 3
O IDE do Arduino
Introduo
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
38
39
A primeira coisa que voc precisa fazer no IDE selecionar em uma lista de menu
o modelo da placa do Arduino que voc leitor possui. Para isso, na barra de menus,
clique na opo Tools e selecione Board. Na lista de opes que abrir selecione o
modelo do seu Arduino. Se, por exemplo, a sua placa for o modelo Duemilanove com
o ATmega328 selecione a segunda opo, como na figura 9. Se voc tiver um modelo
mais antigo com o ATmega8 ou ATmega168 selecione uma das duas ltimas opes.
40
41
Logo nas primeiras linhas do cdigo fonte listado no IDE vemos que entre os caracteres
/* e */ existe um pequeno texto que explica o que o sketch faz, so comentrios que
so ignorados quando da compilao do programa que vai ser gravado no Arduino.
Igualmente, so comentrios de uma s linha os textos escritos aps os caracteres //.
Esse sketch configura o pino 13 do Arduino como sada digital, onde est conectado
um LED verde. Tudo o que esse sketch faz acender o LED por um segundo, apag-lo
durante mais um segundo e repetir esse processo indefinidamente.
A parte do sketch Blink que faz isso est na Listagem abaixo:
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
A funo digitalWrite (13, HIGH) envia uma tenso de 5 volts (HIGH=5 volts) para o
pino 13 para acender o LED verde; a funo delay (1000) pausa o programa por 1000
milissegundos (1 segundo); a funo digitalWrite (13, LOW) envia 0 volt (LOW=terra)
para o pino 13 e apaga o LED; e novamente ocorre uma pausa no programa de 1
segundo. No captulo 4 veremos essas e outras funes da linguagem C do Arduino
em mais detalhes.
Agora maximize a janela do IDE e modifique somente essa parte do sketch entre
as chaves { e } da funo loop( ), acrescentando mais quatro linhas conforme a
listagem abaixo:
void loop() {
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
delay(200);
digitalWrite(13, HIGH);
delay(200);
digitalWrite(13, LOW);
delay(200);
}
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
42
A barra de Menus
A barra de menus do IDE do Arduino possui cinco ttulos: File, Edit, Sketch, Tools e
Help.
padro em todo aplicativo Windows, e suas opes, com as teclas de atalhos entre
parenteses, so as seguintes:
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
43
Abre uma nova janela de edio de sketches sobre aquela j ativa na tela do
IDE.
New (Ctlr+N)
Open... (Ctrl+O)
Sketchbook
Examples
Abre uma lista com uma coleo de sketches prontos para voc carregar,
eventualmente modificar, e testar.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Close (Ctrl+W)
44
Save (Ctrl+S)
Grava na memria Flash do Arduino o sketch ativo. Faz a mesma funo do
boto Upload na barra de controle.
Print (Ctrl+P)
Preferences (Ctrl+,)
Quit (Ctrl+Q)
Abre uma janela para apontar a localizao da pasta de sketches, entre outras
opes.
Redo (Ctrl+Y)
Cut (Ctrl+X)
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Comment/Uncomment (Ctrl+/)
Desloca todo o texto na linha onde est o cursor duas posies direita.
Desloca todo o texto na linha onde est o cursor duas posies esquerda.
xpArduino_Ed2-0512120022/Marlon Jos do Carmo
Copy (Ctrl+C)
45
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Stop
46
Import Library
Add File
TOOLS
Archive Sketch
Board
Serial Port
Burn Bootloader
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
47
A Barra de Controles
Verify
Stop
New
Open
Save
Upload
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
48
Serial Monitor
O boto com uma seta para a direita que aparece alinhado com a aba com o nome do
sketch serve para voc abrir outras abas e editar outros sketches no mesmo IDE.
As Barras de Mensagens
Por fim, o IDE do Arduino tem em sua parte inferior tres barras de mensagens. A
primeira a barra de status, normalmente azul, onde no IDE aparecem informaes
durante o processo de compilao. Esta barra muda para marron se uma mensagem
de erro for mostrada. A segunda barra sempre preta e exibe mensagens em letras
brancas com o tamanho do arquivo compilado; ou em letras vermelhas se ocorrereram
erros durante o processo de compilao do sketch. A ltima barra informa a posio
do cursor na janela de edio. Veja figura 13.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
A linguagem do Arduino
Captulo 4
Introduo
A estrutura da Linguagem
Constantes
Variveis
Funes
Os Operadores
Os principais comandos da Linguagem
Matrizes
Captulo
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
50
int i=0;
//contador de pinos e segmentos
int j=0;
//contador de digitos
int pinoDigital[7]={5,6,7,8,9,10,11}; //matriz 1D com os pinos usados
// segmentos: a b c d e f g
int digito[10][7]={ //
matriz 2D com os segmentos
{1,1,1,1,1,1,0},
//digito 0
{0,1,1,0,0,0,0},
//digito 1
{1,1,0,1,1,0,1},
//digito 2
{1,1,1,1,0,0,1},
//digito 3
{0,1,1,0,0,1,1},
//digito 4
{1,0,1,1,0,1,1},
//digito 5
{1,0, 1,1,1,1,1},
//digito 6
{1,1,1,0,0,0,0},
//digito 7
{1,1,1,1,1,1,1},
//digito 8
{1,1,1,1,0,1,1}
//digito 9
};
void setup() {
for(i=0; i<7; i++)
pinMode(pinoDigital[i],OUTPUT); //cada pino como saida
pinMode(12,OUTPUT);
//pino 12 saida, base do transistor
Captulo 4
A linguagem de Programao do
Arduino
Introduo
51
do Arduino. Alto o nvel de +5 volts, ligado; baixo o nvel de terra, ou zero volt,
desligado.
Variveis
Variveis so nomes que os programas associam a posies de memria. Como a
prpria palavra sugere, o contedo dessas posies de memria pode mudar durante
a execuo do programa. Todas as variveis devem ser declaradas logo no incio do
programa, antes de ser chamadas. Declaramos uma varivel definindo para ela um
tipo, um nome e, opcionalmente, um valor inicial que pode ser mudado por funes
dentro do programa. Os nomes dados s variveis devem sempre comear por uma
letra ou um trao sublinhado, como em _ledPin. Na linha de cdigo abaixo, do sketch
Blink que vimos no captulo 3, definimos uma varivel com o nome ledPin do tipo
int e lhe atribuimos o valor 13.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
52
As variveis podem ser do tipo int (integer), que armazenam nmeros inteiros, sem
casa decimal, positivos ou negativos de at 2 bytes na RAM; tambem podem ser do
tipo long (long), que guardam valores inteiros de at 4 bytes; ou podem ser tambem
do tipo boolean, para valores de at 1 byte; podem ser tambem do tipo float (float),
que guardam valores em ponto flutuante, com casas decimais, de at 4 bytes; ou ainda
podem ser do tipo char (character) de 1 byte que guardam um caracter ASCII.
Funes
Todo programa, ou sketch, do Arduino composto por duas partes principais: a
funo setup( ) e a funo loop( ). Funo um conceito que vem da Matemtica
e que relaciona um argumento a um valor numrico por meio de uma regra de
associao, ou formula. Funes em linguagens de programao so como subrrotinas
ou procedimentos, so pequenos blocos de programas usados para montar
oprograma principal. Em C todas as funes recebem um nome seguido por um
par de parenteses, como em main( ). Elas podem ser escritas pelo programador para
realizar tarefas repetitivas simples ou podem ser incorporadas prontas ao programa
principal em forma de bibliotecas (library, em ingles). As funes podem ou no
computar valores; as primeiras retornam um valor como resultado de uma operao;
as segundas no retornam valor nenhum, podem apenas executar outras funes que
tambem podem ou no retornar valores. Na linguagem C a funo main( ) a nica
obrigatria; na linguagem de programao do Arduino as funes setup( ) e loop( )
so as nicas obrigatrias.
Toda funo deve ter um nome, e os procedimentos que ela vai executar podero vir
entre uma chave de abertura { e uma de fechamento }, como na funo setup( )
abaixo, do sketch Blink, que chama a funo pinMode( ) para configurar o pino 13 do
Arduino como sada.
void setup( ) {
pinMode(13, OUTPUT);
}
Observe que o corpo da funo, os procedimentos entre as chaves { e }, deve
obrigatoriamente ser finalizada com ponto-e-vrgula; sua omisso causar erro
quando da compilao do sketch. A declarao void antes da funo setup( ) indica
que nenhum valor retornado por essa funo, ela apenas chama uma outra funo
que configura um pino do Arduino. Dentro dos parenteses do nome da funo
vm os parmetros que a funo deve receber; no fragmento de cdigo acima, a
funo pinMode( ) recebe dois parmetros, o nmero do pino e como ele deve ser
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
53
A funo loop( ) chamada logo depois da funo setup( ) e todos os seus procedimentos
para controle do fluxo de dados nos pinos do Arduino so executados repetidamente,
da o nome loop. Vejamos de novo o contedo da funo loop( ) no sketch Blink:
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
54
1. pinMode(pino,modo);
2. digitalRead(pino);
3. digitalWrite(pino,valor);
4. analogRead(pino);
5. analogWrite(pino,valor);
6. delay(ms);
7. millis( );
8. random(min,max);
9. Serial.begin(taxa);
10.Serial.println(dado);
As 5 primeiras funes formam o bloco de controle de entrada (sensores) e de sada
(atuadores). As outras cinco so funes utilitrias. Vejamos cada uma delas.
1. pinMode(pino,modo)
Um pino um canal fsico atraves do qual o Arduino vai se comunicar com o mundo
externo. O Arduino tem 20 desses canais fsicos, sendo 14 digitais e 6 analgicos,
que so numerados de 0 a 13 e de 14 a 19, respectivamente. Esses 6 pinos analogicos
podem ser configurados tambem como pinos digitais, totalizando assim 20 pinos
digitais. Nos pinos digitais s so permitidos dois tipos de sinais: ou alto (+5 volts) ou
baixo (terra). Se o sinal vem do Arduino o pino est configurado como sada; se o sinal
vem de um circuito externo, o pino entrada. A funo pinMode( ) sempre usada
dentro da funo setup( ) e serve para estabelecer a direo do fluxo de informaes
em um determinado pino do Arduino. Essa funo recebe dois parmetros, um
pino, o nmero do pino que queremos configurar; o outro parametro modo que
determina a direo do fluxo de dados, se do Arduino para fora ou se de fora para o
Arduino. J conhecemos essa funo quando vimos o sketch Blink:
pinMode(13, OUTPUT);
Aqui ela configura o pino 13 do Arduino para ser um canal de sada para um circuito
externo, no caso do Blink, um LED. Se quisermos que pino 2 se comporte como
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
55
pinMode(2, INPUT);
Depois que o Arduino resetado todos os seus pinos so automaticamente configurados
como entrada; desse modo, aps o reset, no h necessidade de explicitamente
declarar qualquer pino como entrada com a funo pinMode( ). Quando um pino
est configurado como entrada, ele fica em estado de alta impedncia esperando
que uma voltagem qualquer o afete. Nesse estado at mesmo a eletricidade esttica
do seu dedo pode afetar o pino. Quando esse pino est como sada seu estado de
baixa impedncia, e quando alto, pode suprir at 40 miliamperes de corrente para
um circuito externo a ele conectado.
2. digitalRead(pino)
Essa funo l o estado lgico de um pino do Arduino que foi configurado previamente
como entrada. Ela usada para ler o estado de uma chave ou qualquer outro elemento
que retorne 1 ou 0, verdadeiro ou falso, ligado ou desligado. No exemplo abaixo a
varivel chave do tipo int vai guardar o estado lgico lido no pino 2.
int chave = digitalRead(2);
3. digitalWrite(pino,valor)
Essa funo envia para pino um nvel lgico alto ou baixo, conforme especificado em
valor. O pino deve ser configurado previamente como sada pela funo pinMode( ),
como em:
pinMode(13,OUTPUT);
digitalWrite(13,HIGH);
Aqui o pino 13, configurado como sada, recebe +5 volts com uma corrente mxima
de 40 mA do Arduino, e pode acender um LED se em srie com um resistor de 220
ohms limitador de corrente. No comum ver nos livros sobre Arduino, mas essas
funes podem ser reescritas substituindo as constantes OUTPUT e HIGH por 1,
assim:
pinMode(13,1);
digitalWrite(13,1);
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
56
// ou pinMode(10, 0);
// ou digitalWrite(10, 1);
4. analogRead(pino)
Essa funo l o valor de um dos 6 pinos analgicos do Arduino, e retorna um inteiro
entre 0 e 1023 que representa o nvel da tenso analgica entre 0 e 5 volts presente no
pino especificado. Exemplo:
int sensor = analogRead(14);
Aqui a varivel sensor guarda o valor convertido para um inteiro entre 0 e 1023 da
tenso analgica no pino 14 do Arduino (pino analgico 0). Para uma tenso de 2,5
volts no pino 14, por exemplo, a funo analogRead( ) vai retornar o valor de 512 para
a varivel sensor. Voc tambem pode escrever comando acima da seguinte forma:
int sensor = analogRead(A0);
O pino 14 pino analgico A0, o pino 15 A1; e assim at o pino 19 que o pino
analgico A5 do Arduino.
5. analogWrite(pino,valor)
Um Arduino com o ATmega328 possui 6 pinos, dentre os 14 pinos digitais, que
tambem podem gerar sadas com PWM (Pulse Width Modulation). So os pinos
3,5,6,9,10 e 11. PWM uma tcnica para gerar tenses analgicas com sinais digitais.
A funo analogWrite( ) gera uma onda quadrada de frequencia fixa no pino analgico
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
57
especificado cuja largura do pulso, a parte positiva da onda, por valor, um dos
argumentos que lhe so passados. Essa onda quadrada modulada vai gerar tenses
analgicas mdias de 0 volt quando valor for 0, e 5 volts quando valor for 255. A
funo abaixo vai gerar uma tenso mdia de 2,5 volts no pino digital 10 do Arduino.
analogWrite(10,128); // envia 2,5 volts para o pino 10
Note que, diferente dos pinos digitais, no necessrio configurar previamente um
pino analgico como entrada ou mesmo como sada com a funo pinMode().
6. delay(ms)
A funo delay( ) interrompe o programa que est sendo executado por um perodo de
tempo em milissegundos passado pelo parmetro ms. Assim para pausar a execuo
de um sketch por 1 segundo escrevemos:
delay(1000);
// pausa de 1 segundo
7. millis( )
A funo millis( ), diferentemente da funo delay( ), no pede nenhum parmetro e
somente retorna o nmero de milissegundos decorridos desde o momento em que o
programa foi iniciado. Como essa funo no suspende as atividades do Arduino ela
pode ser usada para medir o tempo entre dois ou mais eventos.
8. random(min,max)
A funo random( ) retorna um nmero aleatrio entre os valores min e max
passados como parmetros. Exemplo:
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
58
9. Serial.begin(taxa)
Todo Arduino tem ao menos uma porta serial de comunicao, RS-232 ou USB. Essa
comunicao implementada utilizando a USART interna do microcontrolador
ATmega328, e feita pelos pinos digitais 0 e 1, sendo o primeiro o pino de recepo
(RxD) e o segundo o de transmisso (TxD). A funo Serial.begin( ) abre esse canal
serial de comunicao entre o Arduino e um computador PC ou Apple e recebe como
parmetro a taxa de transferncia em bits por segundo (baud). Essa velocidade pode
variar entre 300 a 115200 baud. Exemplo:
Serial.begin(9600);
10. Serial.println(dado)
Uma vez estabelecida a conexo serial entre o Arduino e o PC, a funo Serial.println(
) inicia a transmisso de caracteres ASCII no sentido do Arduino para o computador.
Para monitorar essa transmisso de dados pressione o boto Serial Monitor na barra
de controle do IDE do Arduino, e na janela do terminal que surgir na tela selecione a
mesma taxa de transmisso especificada no programa. Vejamos um exemplo:
void setup( ) {
Serial.begin(9600); // estabelece conexo serial em 9600 bits/s
}
void loop( ) {
Serial.println( Hello World! ); // inicia a transmisso serial da
// frase Hello World!
delay(2000);
// pausa de 2 segundos entre
// cada transmisso
}
O sketch acima imprime na janela do terminal uma nova linha com a mensagem
Hello World! a cada dois segundos.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Os operadores
59
1. Operadores aritmticos
Os operadores aritmticos retornam o resultado de uma operao aritmtica entre
dois operandos. So eles:
Operador
Soma
Subtrao
Produto
Diviso
Smbolo Exemplo
+
*
/
a=x+2
b=y-3
i=j*4
n=k/5
Retorno
2. Operadores lgicos
Esses operadores comparam duas expresses e retornam 1 ou 0 (verdadeiro ou falso).
So tres os operadores lgicos:
Operador Smbolo Exemplo
AND
OR
NOT
&&
||
!
Retorno
3. Operadores de comparao
Comparam duas variveis ou constantes e retornam 1 ou 0 (verdadeiro ou falso). So
seis os operadores de comparao no Arduino:
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Comparao
Diferena
Menor que
Maior que
Menor ou igual
Maior ou igual
60
x==y
x!=y
x<y
x>y
x<=y
x>=y
Retorna 1 se x igual a y, 0 se no
Retorna 1 se x diferente de y
Retorna 1 se x menor que y
Retorna 1 se x maior que y
Retorna 1 se x menor ou igual a y
Retorna 1 se x maior ou igual a y
4. Operadores compostos
Os operadores compostos combinam um operador aritmtico com o operador de
atribuio = para simplificar expresses:
Operador Smbolo
Soma
Subtrao
Produto
Diviso
Incremento
Decremento
+=
-=
*=
/=
++
--
Exemplo
x+=y
x -=y
x*=y
x /=y
x++
x--
Equivalncia
x = x+y
x = x -y
x=x*y
x=x/y
x=x+1
x=x-1
1.
2.
3.
4.
if
while
do while
for
1. O comando if
O comando if um comando de seleo, tambem chamado de comando condicional;
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
61
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
62
2. O comando while
Em C os tres comandos de iterao while, do...while e for so formados por uma
condio e um bloco de comandos. O comando while vai executar continuamente o
bloco de comandos entre as chaves enquanto a condio for verdadeira (diferente de
zero). Sua sintaxe a seguinte:
while (condio) {
bloco de comandos;
}
No exemplo abaixo a varivel x decrementada a cada dois segundos a partir de 10
at atingir 0, quando a condio do comando while se torna falsa e o loop quebrado.
Teste-a carregando-a no Arduino e ativando seu monitor serial.
int x=10;
// o valor 10 atribuido a x
void setup() {
Serial.begin(9600); // porta serial em 9600
}
void loop() {
while (x<=10 && x>0) {
// verifica se x est
// entre 0 e 10
Serial.println(x);
// se sim, transmite o
// valor de x
delay(2000); // pausa 2 segundos
x--; // decrementa x e volta
// ao teste
} // se x>10 interrompe programa.
}
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
63
O comando do ... while funciona de forma parecida com o comando while, s que a
condio agora testada no final do bloco de comandos e no no incio. Se a condio
testada for verdadeira o bloco de comandos executado mais uma vez.Repare que
a linha while(condio) vem depois do bloco de comandos e terminada com ;
(ponto-e-vrgula). No do ... while o bloco de comandos executado ao menos uma
vez, no incio, independente da condio ser verdadeira ou falsa. Veja a sintaxe:
do {
bloco de comandos;
}
while (condio);
4. O Comando for
O comando for usado para repetir um bloco de comandos um determinado nmero
de vezes. Sua sintaxe:
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
64
Matrizes
Uma matriz uma coleo de variveis do mesmo tipo que podem ser individualmente
acessadas por meio de um identificador, chamado de ndice. Cada um desses
elementos tem um endereo de sua posio dentro da matriz, que referenciado por
um nmero associado ao nome da matriz. As matrizes, como as variveis, devem ser
declaradas e podem tambem ser inicializadas com valores conforme o seu tipo. Sua
forma geral a seguinte:
int nomeMatriz [ ] = { valor1, valor2, valor3, ...}
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
65
As matrizes podem ser declaradas somente com o seu tamanho; os valores podem
ser passados a posteriori, fazendo-se referencia aos ndices dos seus elementos, da
seguinte forma:
int nomeMatriz [ 10 ]; //matriz do tipo int com 10 elementos
nomeMatriz [ 4 ] = 64; //inteiro 64 na 5 posio de nomeMatriz
Observe que o inteiro 64 no armazenado na 4 posio de nomeMatriz[ ], mas na
5 porque a posio 0 que a primeira posio da matriz.
Para recuperar um valor em uma posio qualquer de uma matriz usamos uma
varivel da seguinte forma:
x = int nomeMatriz [ 4 ];
// x = 64
Resumo do captulo 4
Nesse captulo vimos que:
- so constantes na linguagem do Arduino: TRUE/FALSE, HIGH/LOW e OUTPUT/
INPUT; cada uma dessas constantes pode ser substituda no cdigo fonte por 1/0.
- variveis so posies fsicas na memria RAM, e porisso os contedos dessas
posies podem mudar durante a execuo do programa. As variveis e seu tipo
devem ser declaradas logo no incio do programa.
- uma funo como uma subrrotina, um bloco de comandos desenhado para uma
dada finalidade. Um conjunto de junes formam o programa principal.
- os operadores aritmticos retornam o resultado de uma operao aritmtica entre
dois operandos; como em (b= x + 2), onde a soma dos operandos x e 2 atribuido a b.
- operadores lgicos comparam duas expresses lgicas e retornam 1 ou 0 (verdadeiro
ou falso) como resultado da comparao; a expresso (!x > 0) retorna 1 se x no for
maior que 0.
- os operadores de comparao comparam duas variveis ou constantes e tambem
retornam 1 ou 0 como resultado; a expresso (x= =3) retorna 1 se x for igual a 3.
- os operadores compostos combinam um operador aritmtico com o operador de
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
66
- o comando if testa somente uma vez a expresso entre parenteses, se esta for
verdadeira (diferente de zero) o bloco de comandos entre as chaves executado.
- o comando while tambem testa a expresso entre parenteses, mas somente se a
expresso for verdadeira o bloco de comandos entre as chaves executado; aps a
execuo do bloco a expresso testada novamente e se esta ainda for verdadeira o
mesmo bloco de comando novamente executado.
- j no comando do...while o seu bloco de comandos executado ao menos uma vez,
porque sua condio no testada logo no incio do comando mas somente no final;
e tambem enquanto esta for verdadeira o mesmo bloco de comando repetidamente
executado.
- o comando for usado para repetir um mesmo bloco de comandos um determinado
nmero de vezes determinado por um contador que incrementa (ou decrementa) a
cada execuo.
- devemos sempre declarar uma matriz no incio do programa com um nome e o
tipo de valores que nela ser armazenado; uma matriz pode ser inicializada j com
todos os valores de seus elementos, ou somente com o nmero de elementos que vai
receber, o seu tamanho; para armazenar um elemento devemos indicar o nome da
matriz e a posio desse elemento dentro da matriz; para recuperar um elemento de
uma matriz devemos nomear uma varivel com o nome da matriz e a posio do
elemento dentro dela.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Primeiras Experiencias
Introduo
Experimento #1 - Hello Word!
Experimento #2 - Gerao de Audio
Experimento #3 - Entrada Analgica
Experimento #4 - Sada Analgica
Experimento #5 - Controle de Motores
Experimento #6 - LEDs e Mostradores
Experimento #7 - Solenoides, Reles e Acopladores
Experimento #8 - Sensores
Captulo 5
Captulo
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
68
Captulo 5
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
69
70
Figura 14: Circuito para o experimento#1
Agora s precisamos acrescentar uma chave do tipo push-button e um resistor de 10
K ohms, conforme o circuito da figura 14, ao nosso Arduino. Quase todas as verses
de hardware do Arduino j vem com um LED e um resistor de 220 ohms conectados
no pino digital 13. Se o seu Arduino no tem esse LED voc pode montar esses dois
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
71
A funo loop( ), que chamada logo em seguida, contem o cdigo que vai verificar
continuamente o estado do pino 2. No corpo dessa funo existe uma varivel local,
buttonState, do tipo int, que recebe como parametro o estado lgico do pino digital
2, que lido pela funo digitalRead( ). A deciso de acender ou no o LED tomada
dentro do comando if. Se a varivel buttonState for verdadeira, isto , se o estado do
pino 2 for HIGH, a funo digitalWrite( ) vai enviar +5 volts para o pino 13 e assim
acender o LED. Se essa varivel local for falsa o pino 13 vai receber o nvel terra da
funo digitalWrite( ) e o LED permanecer apagado. importante relembrar que o
sinal simples de igual = um operador de atribuio, enquanto o duplo igual = =
um operador de comparao.
Agora abra o IDE do Arduino no seu PC ou Apple e copie todo o cdigo fonte para
a janela de edio, e pressione o boto verify na barra de controle. Se no houver
erros de digitao, aps a compilao do cdigo fonte, a barra de mensagens vai
indicar que o tamanho do sketch 968 bytes. Salve o sketch pressionando o boto
Save (o quinto da esquerda para a direita) como, por exemplo, HelloWorld. Agora
conecte o cabo RS232 (ou USB) entre o seu computador e o Arduino e ligue a fonte de
alimentao. O LED no pino 13 no dever acender ainda, a chave est aberta. Agora
pressione a chave e veja se o LED acende. Solte a chave e veja se o LED apaga. Se tudo
funcionou... Parabns! Voc acaba de testar seu primeiro programa no Arduino! Se
no funcionou, tudo bem!, verifique se voc fez as ligaes nos pinos certos ou se no
problema de mau contato na fiao.
Agora, s para testar novas possibilidades, vamos reescrever nosso programa com
algumas mudanas, a verso 2 do HelloWorld. Veja a listagem abaixo.
#define LED 13
#define CHAVE 2
void setup( ) {
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
72
73
E essa outra verso abaixo? Qual a diferena desta para a verso anterior?
int flipFlop = 1;
#define LED 13
void setup( ) {
pinMode(LED,1);
}
void loop( ) {
(digitalRead(2) == 1)? digitalWrite(LED,flipFlop)
:digitalWrite(LED,!flipFlop);
while (digitalRead(2) == 0) { }
}
// por 500 us
// envia terra para pino 3
// por 500 us
74
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
75
O parmetro pino recebe o nmero do pino do Arduino por onde vai sair o sinal
sonoro; o parmetro frequencia determina o nmero de pulsos gerados por segundo
(hertz); e durao d a durao do sinal em milissegundos. Se o parmetro durao
for omitido o tom gerado ser contnuo.
Experimente o sketch abaixo com essa nova funo, primeiro com a ltima linha da
funo loop( ) desabilitada (com as duas barras de comentrio) e depois com esta
linha habilitada (sem //) e a penltima linha desabilitada (com //).
void setup( ) {
pinMode(3,1);
}
void loop( ) {
while (digitalRead(2) == 1) // enquanto pino 2 for alto
tone( 3,1000,2000 ); // gera um tom de 1Khz durante 2 s
// tone(3,1000);
}
Tente modificar o sketch acima para aceitar mais uma chave no pino 4, por exemplo,
e programar uma delas para aumentar e a outra para diminuir a frequencia de sada.
Voc tambem pode criar funes que, quando chamadas por chaves mecnicas,
gerem as frequencias das notas musicais. Experimente!
76
// acende led
// pot determina pausa em ms
// apaga led
// pot determina pausa em ms
Agora analise esse mesmo sketch reescrito abaixo usando um flip-flop virtual:
int flipFlop=1;
// variavel flipFlop inicializada
void setup( ) {
pinMode(13, 1);
}
void loop( ) {
digitalWrite(13, flipFlop); // acende/apaga led
delay(analogRead(A0));
// pot determina pausa em ms
flipFlop = !flipFlop;
// inverte ultimo estado do led.
}
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
77
78
baseados em dois nveis lgicos alto e baixo. J vimos que o Arduino possui um
conversor A/D interno que pode ler uma tenso analgica em uma de suas entradas
analgicas e transformar essa informao em um sinal de sada digital sequencial de
1s e 0s.
Sabemos que o perodo de um sinal digital medido entre duas subidas de pulsos
adjacentes, tambem chamados de pulsos positivos do sinal. Veja a figura 15 abaixo.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
79
O parmetro pino indica qual dos pinos PWM ser usado para gerar a tenso
analgica, o parmetro valor qualquer valor inteiro entre 0 e 255.
Figura 16: Sinais PWM com duty cycle de 50%, 70% e 20%
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
80
Nesse sketch observe que na funo setup( ) no configuramos o pino PWM 10 como
sada, isso porque os pinos analgicos, diferentemente dos digitais, no precisam
ser configurados nem como entrada nem como sada, basta enviar o comando
analogWrite( ) ou analogRead( ); mas essa funo deve ser sempre incluida, mesmo
que vazia, no cdigo fonte. O nico comando dentro da funo loop( ) l o nvel de
tenso no pino A0, divide esse nvel por 4 para compatibiliz-lo com a sada PWM
que de 0 a 255, e envia o resultado para o pino 10. Teste o programa e experimente
substituir o potenciometro por um circuito divisor de tenso com um LDR.
Figura 17
Figura 18
81
int brightness = 0;
// how bright the LED is
int fadeAmount = 5;
// how many points to fade the LED by
void setup() {
// declare pin 10 to be an output
/* pinMode(10, OUTPUT); obs: essa linha pode ser omitida */
}
void loop() {
analogWrite(10, brightness); // set the brightness of pin 10
brightness = brightness + fadeAmount;// change the brightness
// for next time through the loop
if (brightness == 0 || brightness == 255) {
fadeAmount = - fadeAmount ; // reverse the direction of the
// fading at the ends of the fade
}
delay(30); // wait for 30 milliseconds to see the dimming effect
}
Nesse sketch o autor usou uma ttica interessante para testar a varivel brightness
dentro do comando if; se essa varivel alcana um dos extremos da sada PWM, 0
ou 255, a varivel fadeAmount, que somada a (ou subtraida de) brightness, passa
de 5 para -5 e vice-versa. A funo setup( ) pode ser deixada vazia porque no
necessrio configurar um pino analgico como sada ou como entrada.
82
que 5 volts, como aquele retirado de uma velha impressora, incorpore sada do
Arduino um driver com um transistor de baixa ou mdia potencia como o da figura
19.
void setup() {
pinMode(10, OUTPUT); //base transistor no pino 10
}
void loop() {
analogWrite(10, analogRead(A0)/4);
}
83
5.2 - Servo-motores
Tambem com pulsos PWM podemos controlar facilmente um outro tipo de motor, os
servo-motores. Servomotores ou simplesmente servos so sistemas eletro-mecanicos
compactos constituidos por um pequeno motor CC, um conjunto de engrenagens e
um circuito de controle eletronico com realimentao, que so usados principlamente
em aeromodelos e outros sistemas controlados remotamente por radio-frequencia.
Mas as aplicaes dos servos vo muito alm, desde brinquedos e controles de
varreduras de reas externas com cmeras de vdeo a sistemas de rastreamento de
satlites e robs. Diferentemente dos motores comuns que tm um eixo central que
gira continuamente, os servos normalmente no completam uma rotao completa,
mas em passos de 10 desde 00 at 1800. Assim, sob controle eletronico externo,
possvel posicionar o eixo de um servo em qualquer angulo entre esses valores. Dentro
da caixa de um servo, acoplado a uma de suas engrenagens, existe um potenciometro
que, funcionando como sensor de posio, realimenta o circuito de controle do
motor. Na figura 20 abaixo vemos um modelo de servo que usaremos em nossas
experincias.
Normalmente os servos tm 3 fios com cores diferentes: o fio vermelho o de
alimentao e deve ser ligado a uma fonte de 5 volts; o fio preto ou marrom o
comum e deve ser ligado ao terra da fonte; e o amarelo ou laranja o fio de controle
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
84
de rotao que deve ser conectado sada do sistema que vai posicionar o eixo do
servo atraves de um sinal PWM.
So duas as principais especificaes para todo servo: seu torque dado em kg/cm,
que em essencia representa a fora do servo; e sua velocidade de rotao, dada em
segundos/graus. O pequeno servo da foto abaixo, por exemplo, tem um torque de
1,5kg/cm e velocidade mxima de 0,3 seg/60 graus, ou seja, ele pode movimentar
uma carga de 1500 gramas por centmetro com uma rotao de 600 em 300 ms,
quando alimentado com 4,8 volts. Os servos so usados para acionar pequenos
sistemas mecanicos, como garras, braos ou plataformas com rodas, e porisso
comum virem acompanhados de pequenos adaptadores com furos feitos de plstico
rgido ou alumnio que podem ser montados no seu eixo rotativo, e alguns parafusos.
85
86
biblioteca Servo.h; o sketch acima reescrito utilizando essa biblioteca fica bastante
enxuto, confira:
#include <Servo.h>
// importa biblioteca Servo.h
Servo meuServo;
// criao do objeto meuServo
void setup() {
meuServo.attach(10);
// vincula meuServo ao pino 10
meuServo.write(90);
// move eixo servo para 90 graus
}
void loop() {
/* aqui vo os seus comandos */
}
Note que todo o comando para mover o eixo do servo para 900 est dentro da funo
setup( ). Dentro da funo loop( ) vo os comandos complementares da aplicao que
voc projetou; por exemplo, o acionamento de um aviso sonoro ou uma solenoide.
O sketch abaixo rotaciona o eixo do servo continuamente entre seus dois extremos. A
funo criada servoPulse( ) que monta o sinal PWM que aciona o eixo.
int controlPin = 10;
// controle fio laranja no pino 10
int servoAngle =0;
// angulo de excurso do servoint
int pulseWd;
// largura do pulso do servo
void setup() {
pinMode(controlPin,1);
}
void loop () {
// passos de 1 grau
for (servoAngle = 0; servoAngle <= 2000; servoAngle ++)
servoPulse(controlPin, servoAngle);
// chama servoPulse
for (servoAngle = 2000; servoAngle >= 0; servoAngle - - )
servoPulse(controlPin, servoAngle);
}
void servoPulse (controlPin, servoAngle) {
pulseWd = (servoAngle) + 1000; // converte angulo para uS
digitalWrite(controlPin, 1);
// aciona servo durante
delayMicroseconds(pulseWd);
// pulseWd ms
digitalWrite(controlPin, 0);
// e para servo
delay(20);
}
Utilizando a biblioteca Servo.h o sketch acima pode ser muito simplificado, veja a
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
87
int i=0;
unsigned int j=300;
#include <Servo.h>
// inclui biblioteca Servo.h
Servo meuServo; // cria objeto meuServo
void setup() {
meuServo.attach(10);
// meuServo no pino 10
//Serial.begin(9600);
}
void loop() {
(i <= 180)? meuServo.write(i): meuServo.write(j);
i++;
j- -;
delay(20);
//Serial.println(i);//Serial.println(j);
}
Tambem podemos fazer experiencias com motores de passo como nosso Arduino.
Motores de passo, ou stepper motors em ingls, so um tipo especial de motor de
corrente contnua que no giram continuamente, mas em incrementos fixos ou
passos (stepping) que so controlados externamente por pulsos digitais. Para cada
pulso recebido o motor de passo gira um certo grau. Um motor desse tipo que
precise de 100 passos para fazer uma revoluo completa, por exemplo, tem um
passo de 3,60 (3600/100). Motores de passo so usados principalmente em sistemas
eletro-mecanicos que requeiram perfeito posicionamento linear, aliado a partidas e
paradas rpidas tanto no modo direto quanto no modo reverso; como impressoras,
escaneadores, traadores grficos (plotters), acionadores de disco rgido e de CD/
DVD e tambem robs.
Esses motores tm normalmente dois enrolamentos independentes que podem ter
ou no tomada central (center tap). Aqueles com tomada central nos enrolamentos
so motores do tipo unipolar e podem ter 5, 6 ou 8 fios para interligao; os sem
tomada central so do tipo bipolar e tm somente 4 fios de interligao. Os motores
bipolares podem ter seus enrolamentos totalmente separados em quatro bobinas
independentes e assim as tomadas devem ser formadas externamente interligando os
extremos dessas bobinas. Na figura 23 vemos como so dois dos tipos de enrolamentos
de motores de passo.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
88
89
+
+
A2
+
+
-
B1
+
+
B2
+
+
-
5.4 - Vibra-motor
Existe mais um tipo de motor que podemos fazer experincias com o Arduino, o
vibra-motor ou motor vibratrio. um pequeno motor CC que tem no seu eixo presa
uma pequena massa metlica em forma de meia-lua que o desequilibra quando gira,
fazendo-o vibrar. So esses motores que fazem vibrar o telefone celular quando esto
no modo vibra-call. Veja na figura 25 dois desses motores; o menor foi retirado de
um telefone celular e o maior de controle com joystick do videogame playstation 2.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
90
6.1 - LEDs
Nesse experimento vamos usar um LED RGB e misturar suas cores aleatoriamente.
Os LEDs RGB so fisicamente parecidos com os LEDs comuns, porem com quatro
terminais; internamente so formados por tres LEDs de tres cores diferentes um
vermelho (Red), um verde (Green) e um azul (Blue) montados em um mesmo
encapsulamento de 5 mm de diamentro. Os catodos de cada um desses LEDs so
interligados em um terminal comum, o mais comprido dos quatro; os anodos
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
91
Figura 26:
Para esse experimento conecte um LED RGB e tres resistores de 390 ohms conforme
a figura 26 e carregue o sketch abaixo no Arduino. Voc pode usar tres LEDs comuns
de cores diferentes de dois terminais no lugar do LED RGB, mas no esquea de
colocar em srie com cada LED um resistor de 390 ohms. Para maior difuso da luz
emitida lixe o encapsulamento do LED com uma lixa fina de papel.
int i=255;
// variavel entre 0 a 255
int j=1000;
// intervalo entre mudanca cores
void setup() { }
// nenhuma configurao
void loop() {
analogWrite(9,random(i)); // led vermelho no pino 9
analogWrite(10,random(i)); // led verde no pino 10
analogWrite(11,random(i)); // led azul no pino 11
delay(j); // pausa de j milisegundos.
}
Nesse skretch a funo random( ) gera nmeros aleatrios entre zero e o valor
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
92
Nesse skretch a funo random( ) gera nmeros aleatrios entre zero e o valor
atribuido varivel i; a funo analogWrite( ) dentro de loop( ) gera pulsos PWM
baseados no retorno de random( ) em cada um dos pinos onde esto conectados os
LEDs; a funo delay( ) pausa o programa por j milisegundos.
Monte o LED RGB, ou os tres LEDs discretos de cores diferentes, no interior de uma
bola de ping-pong ou outro objeto translcido como uma pea mdia de cristal bruto
ou polido, e observe o efeito luminoso multicolorido resultante desse experimento.
Experimente mudar o valor das variveis i e j.
Nesse outro experimento solde fios a tres potenciometros de 10 K ohms conforme a
figura 27 e interligue aos pinos analgicos A0, A1 e A2 do Arduino, carregue o sketch
abaixo e misture manualmente as cores dos LEDs.
void setup() { }
// nenhuma configurao
void loop( ) {
analogWrite(9, (analogRead(A0)/4));//led verm pino 9 pot A0
analogWrite(10,(analogRead(A1)/4));//led verde pino 10 pot A1
analogWrite(11,(analogRead(A2)/4));//led azul pino 11 pot A2.
}
Esse sketch l as posies dos cursores dos potenciometros de 10 K ohms nos pinos
analgicos A0, A1 e A2 e as divide por 4, para ajustar a faixa de leitura de 0 a 1023
para a de escrita de 0 a 255, e acende os LEDs nos pinos digitais PWM 9, 10 e 11.
Nesse outro experimento interessante vamos usar um LED bicolor, um resistor de
270 ohms e um potenciometro de 10 K ohms conectados ao Arduino conforme o
circuito da figura 28. Esse LED bicolor formado internamente por um LED verde
e um vermelho em anti-paralelo. Pra acender um dos LEDs um dos dois terminais
deve receber um nvel lgico alto e o outro baixo; para acender o segundo LED basta
inverter esses nveis lgicos. Os terminais do LED bicolor devem ser conectados
a dois pinos digitais do Arduino, um deles em srie com um resistor limitador de
corrente. O potenciometro vai variar o nvel entre os valores 0 e 5 volts na entrada
analgica A0. Veja abaixo o sketch para esse experimento. A varivel pinNivel e seu
complemento !pinNivel que vo acender um dos LEDs, e quando complementados
vo acender o outro LED. O tempo em que os dois LEDs acendem alternadamente
funo da posio do cursor do potenciometro.
int pinLedA=7;
int pinLedB=2;
int pinNivel;
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
93
void setup() {
pinMode(pinLedA,OUTPUT);
// pino digital 7 como saida
pinMode(pinLedB,OUTPUT);
// pino digital 2 como saida
}
void loop() {
digitalWrite(pinLedA, pinNivel); // estado logico no pino 7
digitalWrite(pinLedB, !pinNivel); // oposto do pino 7 no pino 2
delay(analogRead(A0));
// pausa dependente do pot
// no pino A0
pinNivel=!pinNivel; // inverte estados logicos
Figura 27
Agora um desafio para o leitor: monte o circuito da figura 29 com quatro LEDs de
cores diferentes e escreva um sketch para faz-los piscar um a um sequencialmente
direita e esquerda; e depois de forma acumulativa, ou seja, os LEDs vo acendendo
da esquerda para a direita e apagando em sentido inverso. Experimente tambem
acend-los aleatoriamente usando a funo random( ).
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
94
Figura 28
Mas com multiplexao digital podemos acender um s LED de cada vez de ummesmo
grupo de segmentos numa velocidade tal que vemos o nmero desse grupo devido
ao fenmeno da persistncia tica.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
95
O lao de repetio for, dentro de setup( ), simplifica a configurao como sada dos
sete pinos do Arduino que vo aos segmentos; o pino 12 configurado como sada
para controlar a base do transistor BC547 que vai colocar terra no catodo comum
do mostrador. Dentro da funo loop( ) os dois laos de repetio for fazem uma
varredura na matriz 2D e ativam somente os segmentos correspondentes a cada
dgito que dever ser mostrado; a seguir o transistor mostra o dgito ao conduzir por
um segundo. A varivel global i aproveitada duas vezes, uma para contar segmentos
e uma para contar pinos.
int i=0;
//contador de pinos e segmentos
int j=0;
//contador de digitos
int pinoDigital[7]={5,6,7,8,9,10,11}; //matriz 1D com os pinos usados
// segmentos: a b c d e f g
int digito[10][7]={
//matriz 2D com os segmentos
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
{1,1,1,1,1,1,0},
{0,1,1,0,0,0,0},
{1,1,0,1,1,0,1},
{1,1,1,1,0,0,1},
{0,1,1,0,0,1,1},
{1,0,1,1,0,1,1},
{1,0, 1,1,1,1,1},
{1,1,1,0,0,0,0},
{1,1,1,1,1,1,1},
{1,1,1,1,0,1,1}
//digito 0
//digito 1
//digito 2
//digito 3
//digito 4
//digito 5
//digito 6
//digito 7
//digito 8
//digito 9
96
};
void setup() {
for(i=0; i<7; i++)
pinMode(pinoDigital[i],OUTPUT); //cada pino como saida
pinMode(12,OUTPUT);
//pino 12 saida, base do transistor
}
void loop() {
for (j=0; j<10; j++) {
for (i=0; i<7; i++)
digitalWrite(pinoDigital[i],digito[j][i]);//ativa cada pino do Arduino
digitalWrite(12,HIGH);
//ativa todo o mostrador
delay(1000);
//pausa de 1 segundo
}
}
97
no Arduino foi feito com os pinos de uma barra de pinos com passo de 2,54 mm.
O sketch para esse circuito foi aproveitado do cdigo visto acima. Veja a listagem
abaixo.
Esse o maior sketch que at agora montamos e porisso vamos divid-lo em partes para
melhor entend-lo. Primeiramente, no topo da listagem, temos a declarao de uma
matriz bidimensional que usaremos para montar os 10 dgitos com seus 7 segmentos
em cada mostrador e uma matriz simples para configurar os pinos do Arduino como
sadas para esses segmentos e para os dois transistores que ativam os mostradores.
A seguir vm as declaraes de todas as variveis usadas no programa com seus
comentrios. Dentro da funo setup( ) configuramos os pinos usados do Arduino;
repare que numa nica linha configuramos todos os pinos que usaremos como sada
chamando cada um desses pinos de uma matriz simples dentro de um comando
de iterao for; tambem ativamos o resistor de pull-up no pino 2 porque queremos
contar as bordas de descida dos pulsos gerados por um circuito multivibrador astvel
com o temporizador LM555 nesse pino.
Dentro da funo loop( ) chamamos tres funes criadas especialmente para esse
experimento e uma prpria do Arduino, a funo attachInterrupt( ). Veja a listagem
do cdigo abaixo.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
98
Figura 31: Circuito completo do contador de 2 dgitos
99
100
//
//
//Funo que mostra os digitos:
void displayOn(int catodePin,int number) {
digitalWrite(catodePin,HIGH);
//habilita transistor no catodo
for(i=0;i<7; i++)
digitalWrite(outputPin[i],digit[number][i]); //ativa pinos/segmentos
delay(10);
//10 mS para persistncia tica
digitalWrite(catodePin,LOW);
//desabilita mostrador.
}
//Funo para contagem dos pulsos:
void counters() {
j++; //incrementa unidades na descida do pulso
(j==10)? j=0, k++ : j; //se unidades=10 limpa unidades e incrementa k
(k==10)? k=0 : k;
//se dezenas=10 limpa k, seno mantem valor de k
}
/*-----------Fim do programa ----------------*/
A primeira funo chamada a funo clock( ) que gera uma onda quadrada de
perodo positivo de 10 ms e negativo de 1000 ms, durante o qual os pulsos de entrada
no pino 2 sero contados. A funo displayOn( ) recebe dois parmetros, o nmero
do pino que controla o transistor de unidades ou de dezenas dos mostradores, e o
dgito que dever ser resgatado da matriz bidimensional e exibido nos mostrados de
7-segmentos; ela chamada duas vezes, uma para exibir as unidades e outra para as
dezenas da contagem. A funo attachInterrupt( ), conhecida como ISR (Interrupt
Service Routine), chama a funo counters( ) quando ocorre uma interrupo nos
pinos digitais 2 ou 3. Sua sintaxe a seguinte:
attachInterrupt (pino de interrupo, funo chamada, modo de disparo);
So tres os parmetros requeridos por essa funo. Primeiro vem um nmero que
indica qual pino digital vai detetar a interrupo: 0 para o pino 2 e 1 para o 3. Depois
deve ser passado o nome da funo que vai ser chamada quando a interrrupo
ocorrer. Por ltimo o modo que a interrupo dever ser disparada, se na borda de
subida do pulso no pino de interrupo, se na borda de descida, se quando o pulso
for baixo ou se na mudana de nvel desse pulso. Uma descrio mais detalhada
dessa funo pode ser vista na Cartilha para Programao em C para o Arduino,
no final do livro. Em nosso sketch estamos fazendo a chamada da funo counters( )
na borda de descida do pulso no pino digital 2.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
101
F = 1,4 / (R1 +2*R2)*C1
Vamos testar agora nosso contador de dois dgitos usando uma nova funo da
linguagem do Arduino, a funo PulseIn( ). Primeiramente vamos implement-lo
no Terminal Serial do Arduino. Veja a listagem abaixo.
//
int inputPin=2;
float pulseWidth;
// periodo total do pulso de entrada
void setup() {
pinMode(inputPin,INPUT); //configura o pino 2 como entrada
Serial.begin(9600);
//inicia porta serial em 9600
}
void loop() {
pulseWidth=(pulseIn(inputPin,LOW) + pulseIn(inputPin,HIGH));
Serial.println(int(1/((pulseWidth)/1000000))); //converte para freq
delay(1000); //pausa.
}
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
102
O parmetro pino o nmero do pino digital do Arduino que vai receber o pulso a ser
medido; o parmetro valor indica se esse pulso vai ser alto (HIGH) ou baixo (LOW);
o parmetro espera opcional e determina quanto tempo em microssegundos a
funo vai esperar pela ocorrncia do pulso; se esse parmetro no for enviado o
tempo de espera da funo por default de um segundo. Por exemplo, se o parmetro
valor LOW, quando o estado lgico em pino for baixo, e aps o tempo definido por
espera, a funo PulseIn( ) inicia a contagem do tempo em microssegundos at o
estado em pino mudar para alto. Nesse sketch a varivel pulseWidthguarda a soma da
largura de um pulso baixo e a de um pulso alto consecutivo, que forma um perodo
completo, em microssegundos, no pino 2 do Arduino. A varivel pulseFreq guarda o
valor da frequencia desse sinal de entrada, que o inverso do perodo, guardado em
pulseWidth, dividido por 1000000.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
103
Lista de Componentes
CI1
LM555
R1
10K ohms
R2
6,8 K ohms
C1
100 nF
Para finalizar esse tpico vamos montar um contador de dois dgitos com dois
mostradores de 7-segmentos usando a funo PulseIn( ), veja o sketch:
//CONTADOR DE DOIS DGITOS (PulseIn)
//
//segmentos:
abcdefg
int digit[10][7]={ {1,1,1,1,1,1,0},
//digito 0
{0,1,1,0,0,0,0},
//digito 1
{1,1,0,1,1,0,1},
//digito 2
{1,1,1,1,0,0,1},
//digito 3
{0,1,1,0,0,1,1},
//digito 4
{1,0,1,1,0,1,1},
//digito 5
{1,0,1,1,1,1,1},
//digito 6
{1,1,1,0,0,0,0},
//digito 7
{1,1,1,1,1,1,1},
//digito 8
{1,1,1,1,0,1,1}
//digito 9
};
int outputPin[9]={5,6,7,8,9,10,11,12,13};
int inputPin = 2;
//pino entrada dos pulsos do 555
int i=0;
//contador pinos e segmentos
int j=0;
//contador de unidades
int k=0;
//contador de dezenas
int m=0;
//contador j
int n=0;
//contador k
int number;
//digito da matriz 2D
int catodePin;
//controla o catodo do mostrador
float pulseWidth;
//porta para o sinal de entrada
float pulseFreq;
//frequencia do sinal de entrada
//
void setup() {
for(i=0; i<9; i++)
pinMode(outputPin[i],OUTPUT);
//pinos digitais 5 a 13 saidas
pinMode(inputPin,INPUT);
//pino 2 como entrada
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
104
digitalWrite(inputPin,HIGH);
//ativa resistor de pull-up
}
void loop() {
pulseWidth=(pulseIn(inputPin,LOW) + pulseIn(inputPin,HIGH));
pulseFreq=(1/(pulseWidth/1000000)); //calcula frequencia do sinal
displayOn(12,int(pulseFreq)%10);
//mostra unidades
displayOn(13,int(pulseFreq)/10);
//mostra dezenas
}
//
void displayOn(int catodePin,int number) {
digitalWrite(catodePin,HIGH);
//habilita transistor do mostrador
for(i=0;i<7; i++)
digitalWrite(outputPin[i],digit[number][i]);
//ativa pinos/segmentos
delay(10);
//10 mS para persistncia tica
digitalWrite(catodePin,LOW);
//desabilita mostrador.
}
/*-----------Fim do programa ----------------*/
Como um teste para o que voc, leitor, aprendeu, experimente reescrever o sketch
acima para medir o duty cycle (ciclo de trabalho) do sinal que entra no pino 2.
6.4 - LCD
Os mostradores de cristal lquido, ou LCD (Liquid Crystal Display), h muito vm
substituindo os mostradores de 7 segmentos como interface visual homem-mquina.
Eles foram criados especialmente para ser interligados com microcontroladores. Os
mais comuns, do tipo monocromtico, esto nos relgios digitais, nas calculadoras,
nos fornos de microondas, nas impressoras, nos instrumentos de teste, nos aparelhos
biomdicos, nos paineis dos automveis, enfim em todo lugar onde existe um
microcontrolador. Os LCDs do tipo policromtico, que vem substituindo os tubos de
raios catdicos, ou CRT (Catode Rays Tube), esto nos monitores de vdeo, aparelhos
de televiso, instrumentos mais complexos de medio e mdicos, e os miniaturizados
nas cmeras fotogrficas e telefones celulares. Em nossos experimentos com o Arduino
vamos utilizar um tipo de LCD monocromtico que j se tornou padro em sistemas
embarcados o HD44780 da japonesa Hitachi, de duas linhas por 16 caracteres por
linha. Na verdade esse mostrador uma pequena placa de circuito impresso de cerca
de 4,5 x 8 cm onde esto montados um microcontrolador alguns componentes SMD
e o mostrador LCD propriamente dito. Veja a figura 34.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
105
106
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
107
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
108
7.1 - Solenoide
Uma solenoide em sua forma mais simples composta por uma bobina cilindrica
e um eixo de ferro que corre livre em seu interior. Uma das extremidades desse
eixo normalmente acoplada a algum mecanismo que puxado quando a bobina
energizada. Pequenas solenoides podem ser adquiridas em lojas de material eletronico
ou aproveitadas de antigos aparelhos eletronicos, como os videocassetes. Na figura
36 abaixo temos dois tipos de solenoides, o da direita foi retirado de um videocassete
Panasonic. A corrente requerida por uma solenoide dessas para atrair seu eixo de
ferro de cerca de 1 ampere, no podendo portanto ser ligada diretamente a um pino
do Arduino, que fornece no mximo 40 miliamperes. Para isso precisamos de um
circuito de interface como o da figura 37 com um s transistor.
Utilize qualquer transistor NPN de mdia potencia, como o TIP120, desde que
montado em um pequeno dissipador de calor. O diodo polarizado reversamente em
paralelo com a bobina uma proteo contra a tenso reversa que surge nos terminais
da solenoide quando esta desenergizada. O sketch para acionar a solenoide deve
somente fazer um dos pinos digitais do Arduino alto, e para desligar fazer esse mesmo
pino baixo, como no cdigo abaixo.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
109
//
void setup() {
pinMode(2,OUTPUT);
// pino digital 2 como saida
}
void loop() {
digitalWrite(2,HIGH);
// +5 volts no pino 2
delay(500); // pausa de 0,5 segundo
digitalWrite(2,LOW);
// terra no pino 2.
}
7.2 - Rels
Quando desejamos isolar eletricamente um circuito de grande potencia do nosso
circuito de controle normalmente recorremos aos rels. Rels so como solenoides
com uma armadura que aciona um conjunto de contatos mecanicos. O Arduino pode
energizar um rel de 12 volts ou mais com o mesmo circuito da figura 37; no lugar
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
110
energizar um rel de 12 volts ou mais com o mesmo circuito da figura 37; no lugar
da solenoide conectamos a bobina do rel, inclusive com o diodo de proteo. Para
pequenos rels de 5 volts que normalmente consomem uma corrente muito baixa o
transistor TIP 120 pode ser substituido por um 2N2222, ou equivalente de pequena
potencia.
111
por RL, ao Arduino. Observe que o terra do circuito externo isolado do terra do
Arduino. Se o resistor de pull-up interno do ATmega168 for ativado no pino 10 do
Arduino no ser necessrio usar um resistor externo no circuito, como no sketch
abaixo.
//
void setup() {
pinMode(10,INPUT); // pino 10 configurado com entrada
digitalWrite(10,HIGH); // ativa resistor de pull-up no pino 10
}
void loop() {
/* seu codigo aqui */
}
Outra forma de isolar o Arduino de um circuito externo com um acoplador tico est
no circuito da figura 39. Aqui o transmissor do acoplador vai a um circuito externo.
Observe que aqui tambem o terra do circuito externo isolado do terra do Arduino.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
112
Experimento #8 Sensores
Os sensores eletronicos so extenses de nossos sentidos. Com os sensores podemos
detetar quase todos os fenomenos fsicos que, uma vez convertidos em sinais
eltricos e amplificados, podem ser observados com medidores e registradores
grficos, ou podem ser digitalizados e tratados por sistemas computadorizados.
Os sensores eletronicos respondem a estmulos externos como luz, temperatura,
vibrao, movimento, acelerao, campo magnetico e outros. Nessa seo vamos
fazer experimentos com alguns desses sensores e o Arduino.
8.1 - LDRs
Comecemos com o fotorresistor, ou LDR (Light Dependent Resistor), um sensor
de luz muito fcil de encontrar no comrcio de componentes eletronicos que, na
ausncia da luz tem uma resistncia eltrica de cerca de 100Kohms, mas que diminui
gradativamente conforme a intensidade luminosa que nele incide. A variao da
resistncia de um LDR pode ser mudada para variao de tenso com um simples
circuito divisor de tenso. Veja a figura 40. No circuito da esquerda a tenso de
sada inversamente proporcional luz incidente no LDR; no circuito da direita ao
contrrio, a tenso de sada uma funo direta da intensidade de luz no LDR.
113
Agora carregue esse outro sketch e clique no boto do Serial Monitor do IDE para
observar na janela que surgir a variao no pino analgico A0.
//
void setup() {
Serial.begin(9600);
//inicia porta serial em 9600 b/s
}
void loop() {
Serial.println(analogRead(A0)); //envia leitura pino 14
delay(1000); //pausa 1 segundo.
}
Se voc precisar de respostas mais rpidas o LDR pode ser substituido por um
fototransistor do tipo TIL78 ou equivalente. Veja o circuito na figura 39 abaixo. Os
fototransistores normalmente so montados em encapsulamentos de LEDs de 3 mm
com dois terminais somente; a base do transistor no tem conexo externa e o coletor
o terminal mais curto (aquele que tem o chanfro como nos LEDs).
No sketch desse experimento, abaixo, se o teste do comando condicional if for
verdadeiro, nvel alto no pino digital 2, o fototransistor est cortado pois no existe
luz incidente, o LED no pino 13 ficar apagado; com luz o fototransistor conduz
aterrando o pino 2 e fazendo com que teste seja falso, o que faz o LED acender. Troque
o fototransistor por um fotodiodo infra-vermelho do tipo TIL100 ou equivalente,
conforme o circuito da direita da figura 41, e com o mesmo sketch abaixo teste
qualquer controle remoto de aparelhos de udio ou TV.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
114
//
void setup(){
pinMode(13,OUTPUT);
}
void loop(){
if(digitalRead(2)) digitalWrite(13,LOW); //teste do pino 2
else digitalWrite(13,HIGH);
//LED acende com luz.
}
Esse mesmo sketch pode ainda ser reescrito usando o operador ternrio ?, veja
listagem abaixo.
//
void setup() {
pinMode(13,OUTPUT);
}
void loop() {
digitalRead(2)?digitalWrite(13,LOW):digitalWrite(13,HIGH);
}
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
115
Solde um par de fios em cada face do elemento piezoeltrico e os conecte aos pinos
A0 e terra do Arduino. Conecte tambem entre esses pinos, portanto em paralelo com
o elemento, um resistor de 1 Mohm e carregue o sketch abaixo no seu Arduino.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
116
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
117
void loop() {
int pinSensor=analogRead(A0);//variavel local guarda valor A0
if(pinSensor) {
digitalWrite(13,HIGH);
//se existir sinal em A0 acende LED
Serial.println(pinSensor); //envia leitura para porta serial
delay(300);
//pausa entre leituras
}
else digitalWrite(13,LOW); //sem sinal em A0 apaga LED.
}
8.4 - Temperatura
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
118
119
Resumo do captulo 5
Nesse captulo vimos que:
- todas as variveis devem ser declaradas em qualquer parte do programa antes de
ser usadas. Quando declaramos uma varivel dizemos ao compilador que tipo de
dado ser armazenada nesa varivel.
- so variveis globais aquelas que so declaradas fora do corpo de qualquer funo
e porisso podem ser usadas e alteradas por qualquer comando do programa; elas so
normalmente declaradas logo nas primeiras linhas do cdigo.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
120
- tenses analgicas de at 5 volts podem ser geradas em qualquer dos seis pinos
PWM do Arduino utilizando a funo analogWrite( ).
- A funo attachInterrupt( ) uma ISR (Interrupt Service Routine) da linguagem do
Arduino que pode monitorar os pinos digitais 2 e 3 e chamar uma outra funo se o
estado lgico nesses pinos for alterado.
- A funo PulseIn( ) serve para medir o perodo em microssegundos de um pulso
alto ou baixo em qualquer pino digital do Arduino.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
121
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
A linguagem Processing
Introduo
As Funes de Desenho da Linguagem
Outras Funes importantes de Desenho Plano
Plotando Grficos simples
Captulo 6
Captulo
Resumo do Captulo 6
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
123
Captulo 6
A Linguagem Processing
[ Princpios Bsicos ]
xpArduino_Ed2-0512120022/Marlon Jos do Carmo
Introduo
124
125
Mas vamos comear nossas experincias com alguma coisa muito mais simples;
primeiro vamos carregar no Arduino o primeiro programa que vimos no captulo 2, o
sketch Blink, aquele que carregamos de File > Examples > Digital e que modificamos
para fazer o LED no pino 13 ficar aceso por dois segundos e dar duas piscadas curtas
de 200 milissegundos. Vamos incluir mais algumas linhas no cdigo para que nosso
Arduino se comunique com o um computador pela porta serial. Veja abaixo como
ficou o sketch.
void setup() {
pinMode(13, OUTPUT); //pino 13 saida
Serial.begin(9600);
//inicia comunicao serial
}
void loop() {
digitalWrite(13, HIGH);
//LED pino 13 aceso
Serial.print(1);
//envia caracter 1 porta serial
delay(2000);
//pausa 2 seg
digitalWrite(13, LOW);
//LED apagado
Serial.print(0);
//envia caracater 0 porta serial
delay(200);
//pausa 0,2 seg
digitalWrite(13, HIGH); //LED aceso
Serial.print(1);
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
126
Adicionamos as linhas que enviam para o computador via porta serial os caracteres 1,
quando o LED do pino 13 do Arduino acende, e 0, quando o LED apaga. Esse sketch
deve ser carregado no Arduino a partir do seu IDE. Depois de carregado verifique se
o LED no pino 13 pisca como descrito acima; ative o Serial Monitor, stimo boto
da barra de controle do IDE, e observe que, em sincronismo com as piscadas do LED,
aparece uma sequncia de 0s e 1s no Monitor, como na figura 43, e que so enviados
pelo Arduino para porta serial para ser capturados por algum outro programa que
esteja sendo executado no seu computador. Se tudo funcionou como descrito acima
voc pode agora fechar o monitor serial e abrir o PDE da linguagem Processing e
copiar na sua janela de edio o seguinte cdigo:
import processing.serial.*; //importa biblioteca serial
Serial port; //cria o objeto port serial
void setup() {
size(200,200);
//cria uma janela de 200x200 pixels
port=new Serial(this,COM3 , 9600);// inicia serial COM1 9600
}
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
127
void draw() {
//funo equivalente a loop()
while(port.available()>0) { //testa existencia de dados na porta
background(255); //fundo branco na janela criada
if (port.read()==49) { //verifica se dado lido 1 (ascii 49)
fill (#00FF00); //se sim escolhe cor verde
ellipse(100,100,100,100); //e desenha circulo na janela
}
else {
//se dado no 1
fill (255);
//seleciona cor branca
ellipse(100,100,100,100); //e desenha circulo na janela
}
}
}
Antes de executar esse sketch perca mais alguns minutos e confira cada linha do cdigo;
veja se no esqueceu algum ponto-e-vrgula no fim de cada linha de comando ou algum
colchete de fechamento de bloco. Verifique tambem se a porta serial configurada no
sketch do Processing - dentro de setup( ) em port=new Serial(this,COM3 , 9600)
- a mesma configurada no IDE do Arduino. Depois de executar o sketch clicando
no primeiro boto da barra de controle do PDE do Processing o que voc v? O LED
do pino 13 do Arduino surgiu numa janela na telado seu computador! Repare que
o LED real e o LED virtual esto em sincronismo, piscam ao mesmo tempo. O seu
primeiro programa na linguagem Processing est funcionando!
Agora vamos entender cada uma das linhas
desse cdigo em Processing. A primeira
linha depois dos comentrios importa a
biblioteca de comunicao serial dessa
linguagem; a segunda linha cria o objeto
port que ser usado para montar as funes
de comunicao serial com o computador. O
conceito de objeto, que foge das pretenes
desse nosso livro, vem das linguagens
orientadas a objeto, como a C++.
Como na linguagem do Arduino, temos
em Processing uma funo setup( ) onde
configuramos alguns comportamentos do
programa que vamos executar. A funo
size( ) cria uma janela de 200x200 pixels
onde sero exibidos os objetos grficos que
Figura 46: LED virtual com Processing
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
128
1- size(largura,altura)
2- point(x,y)
3- line(x1,y1,x2,y2)
4- triangle(x1,y1,x2,y2,x3,y3)
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
5- quad(x1,y1,x2,y2,x3,y3,x4,y4)
6- rect(x,y,largura,altura)
7- ellipse(x,y,largura,altura)
8- arc(x,y,largura,altura,inicio,fim)
129
1 - size(largura,altura)
Essa funo no propriamente uma funo de desenho, mas aquela que define na tela
do computador as dimenses da janela dentro da qual o desenho ser mostrado. So
dois os parmetros requeridos por essa funo; o primeiro, largura, define a largura
da janela; o segundo, altura, define a altura dessa janela. No primeiro experimento
desse captulo criamos uma janela quadrangular de 200x200 pixels com a seguinte
linha de cdigo:
2 - point(x,y)
Para posicionar um simples pixel em algum ponto de uma janela criada com a funo
size( ) usamos a funo point( ), que requer tambem somente dois parmetros, as
coordenadas cartesianas x e y. A coordenada x a medida em pixels da distancia
desde o lado esquerdo da janela at o ponto; a coordenada y a medida em pixels da
distancia desde o topo da janela at o ponto. Experimente marcar um ponto preto
no meio de uma janela retangular branca de 400x200 pixels executando o seguinte
cdigo no PDE do Processing:
background(255);
size(400,200);
point(200,100);
130
3 - line(x1,y1,x2,y2)
Essa a funo do Processing prpria para traar linhas; so requeridos quatro
parmetros: dois para marcar onde a linha deve comear e dois outros para marcar
onde a linha deve terminar. O primeiro par de coordenadas, de ndice 1, marca o
extremo esquerdo da linha; o segundo par, de ndice 2, marca o extremo direito da
linha.
background(255);
// fundo da janela branco
size(400,200);
// tamanho da janela
line(5 0,150,350,50); // desenha linha diagonal na janela.
Essa linha ser desenhada a partir da posio 50 pixels da borda esquerda da janela
e 150 pixels a partir do topo da janela; o final da linha estar a 350 pixels da borda
esquerda da janela e 50 pixels do topo dessa janela.
4 - triangle(x1,y1,x2,y2,x3,y3)
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
131
// triangulo retangulo
// triangulo isosceles
// triangulo escaleno
5 - quad(x1,y1,x2,y2,x3,y3,x4,y4)
6 - rect(x,y,largura,altura)
Um quadriltero retngulo, ou simplesmente retngulo, mais facilmente desenhado
com a funo rect( ), que requer apenas dois pares de parmetros; o primeiro par so
as coordenadas cartesianas x e y do ponto, em relao s bordas esquerda e superior
da janela, a partir do qual o retngulo vai ser desenhado; o par seguinte so a largura
e a altura do retngulo.
background(255);
size(400,200);
rect(50,50,300,100);
7 - ellipse(x,y,largura,altura)
Para desenhar uma elpse ou um crculo a funo ellipse( ) requer os mesmos tipos
de parmetros da funo que desenha o retngulo; primeiro vem as coordenadas x e
y, agora, do centro da figura; depois a largura e a altura. Para desenhar um crculo os
parmetros largura e altura devem ser iguais.
background(255);
size(400,200);
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
132
8 - arc(x,y,largura,altura,inicio,fim)
Arcos de crculos so desenhados com a funo arc( ), que exige mais dois parmetros
que a funo ellipse( ). Os dois primeiros parmetros so as coordenadas x e y do
centro do arco; os dois parmetros seguintes definem a largura e a altura do arco;
os dois ltimos marcam o ngulo, em radianos, de incio e de trmino do arco. Da
Geometria sabemos que ngulos medidos em radianos so mltiplos e submltiplos
do nmero (3,1416), e que um crculo completo (3600) tem 2 radianos. Veja
como alguns arcos podem ser traados, copiando e executando o cdigo a seguir.
133
1 smooth( )
2 strokeWeight( )
3 strokeJoin( )
4 strokeCap( )
1 smooth( )
134
// desenha um circulo
// desenha uma linha diagonal
// funo de suavizao ativada
// mesmo circulo suavizado
// mesma diagonal suavizada.
2 strokeWeight( )
A funo strokeWeight( ) recebe um nico parmetro para definir a espessura do
traado das figuras desenhadas.
size(400,200);
background(255);
smooth();
strokeWeight(2);
ellipse(75,100,100,100);
point(75,100);
strokeWeight(4);
line(275,150,350,50);
strokeWeight(8);
ellipse(200,100,100,100);
point(200,100);
strokeWeight(12);
line(300,150,375,50);
3 strokeJoin( )
Essa funo define o tipo de juno que liga os traos em um desenho de acordo com
o parmetro passado; se reto, cortado ou arredondado.
size(400,200);
background(255);
smooth();
strokeWeight(12);
strokeJoin(BEVEL);
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
135
Figura 50: A funo strokeWeight( ) da linguagem Processing
O parmetro BEVEL corta (chanfra) os cantos externos das junes dos traos;
ROUND arredonda esses cantos; e MITER, que o parmetro default, mantem
esses cantos.
4 - strokeCap( )
136
//Processing grafico de uma senoide
//desenha senoide numa janela 360x240
size(360,240);
// tamanho da janela
float angulo = 0.0;
// angulo da funo seno
float resGrafica=360.0;
// resoluo grafica
int amplitude=100;
// nivel p-p da senoide
for(int i=0; i < resGrafica; i++) {
// eixo-x com resGrafica pontos
strokeWeight(2);
// espessura da linha da senoide
smooth();
// suaviza contorno dos pontos
point(i, 120+amplitude*sin(angulo));
// desenha a senoide
angulo += TWO_PI/resGrafica;
// passo = 6.28/resoluo.
}
Como esse sketch s ser executado apenas uma vez, ainda no precisamos das
funes loop( ) e draw( ). Inicialmente dimensionamos uma janela de 360x240 pixels
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
137
com a funo size( ). A cor do fundo dessa janela por default cinza. Criamos as
variveis em ponto flutuante angulo e resGrafica, e a varivel inteira amplitude.
A varivel angulo guarda os valores dos ngulos que sero passados como parmetros
funo seno, sin( ); a varivel resGrafica determina a resoluo do grfico que
queremos plotar, ou seja, o nmero de fatias da nossa senoide; a varivel amplitude
determina o nvel pico-a-pico da senoide plotada. O comando de iterao for traa
os pontos ao longo do eixo horizontal do grfico. A funo strokeWeight() determina
o nmero de pixels de cada ponto do traado da senoide, e a funo smooth() torna o
traado grfico mais suave.
a funo point( ) que desenha a senoide dentro da janela criada no incio do
programa; essa funo recebe como parmetros os valores do contador i para
percorrer o eixo horizontal, e os valores dos senos dos ngulos para plotar o eixo
vertical. Algumas experincias podem ser feitas nesse sketch, por exemplo mudando
os valores das variveis resGrafica e amplitude, suprimindo a funo strokeWeight(
) ou a funo smooth( ) ou trocando a funo sin( ) por cos( ) e observando o que
acontece com o traado grfico. Experimente tambem trocar a funo sin(angulo)
por random(-1,1).
Vamos agora plotar um grfico interessante, o grfico do rudo Perlin usando a funo
noise( ). O rudo Perlin uma funo matemtica usada em programas grficos para
simular efeitos naturais como fogo, fumaa, nuvens e folhagens. Veja o sketch a seguir
e o grfico na figura 50.
//processing - experimento#
//plota ruido Perlin numa janela 360x240
size(360,240);
//tamanho da janela
float p=0.0;
//variavel ponto flutuante do passo
int amplitude=300;
//nivel p-p do ruido gerado
for(int i=0; i < width; i++) {
//tempo no eixo-x
strokeWeight(3);
//pixels dos pontos do traado
smooth();
//suaviza contorno dos pontos
point(i, amplitude*noise(p));
//ruido amplificado no eixo-y
p+=0.01;
//passo no eixo-x.
}
A funo noise( ) que aparece como parmetro da funo point( ) gera uma sequncia
de nmeros aleatrios entre 0,0 e 1,0 e seu parmetro incrementado em passos de
0,01.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
138
139
Resumo do captulo 6
- Processing uma linguagem de programao de computadores criada segundo
o conceito de software livre como uma ferramenta para desenvolvimento de
projetos grficos e interativos para artistas e designers com pouco conhecimento de
programao de computadores.
- Com a funo size( ) definimos na tela do computador as dimenses altura x largura
da janela dentro da qual um desenho em Processing ser mostrado.
- Para posicionar um simples pixel em qualquer ponto de uma janela criada com a
funo size( ) usamos a funo point( ) que requer os parmetros da abcissa e da
ordenada do ponto.
- Linhas so traadas com a funo line( ) que requer quatro parmetros: dois para
marcar o incio da linha e dois outros para marcar o final da linha.
- Para desenhar um tringulo utilizamos a funo triangle( ) que requer um par de
parmetros para cada um dos tres vrtices do tringulo.
140
- Linhas com aparncia serrilhada podem ser melhor definidas com a funo smooth
( ) que suaviza os contornos das figuras geomtricas desenhadas na janela de aplicao
criada com size( ).
- Para definir a espessura do traado das figuras desenhadas usamos a funo
strokeWeight( ) que requer um nico parmetro.
- A funo StrokeJoin( ) define o tipo de canto, se reto, cortado ou arredondado, que
liga as junes em um desenho.
- A funo strokeCap( ) a equivalente da funo StrokeJoin( ) para linhas; seus
parmetros so ROUND para arredondar os extremos da linha e SQUARE, para
faz-los retos.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
141
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Captulo
Captulo 7
Introduo
Experimento #9 - Comunicao Serial
Experimento #10 - Mdulo de Desenvolvimento
Experimento #11 - Shield Matriz de Contatos
Experimento #12 - Monitor de Batimentos Cardacos
Resumo do Captulo 7
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
143
Captulo 7
Introduo
Esse captulo ser todo dedicado a experimentos com o Arduino e a linguagem
Processing. Chegou a hora de juntarmos tudo o que vimos em todos os captulos
anteriores e comearmos a criar nossos prprios projetos inteligentes com o
microcontrolador que existe no Arduino. A partir de agora o Arduino de fato
somente uma plataforma para nos tornarmos experts em um tipo de microcontrolador,
o Atmel AVR ATmega328 (e por extenso em toda a familia AVR). Um circuito
eletrnico desenvolvido com a plataforma Arduino pode ser depois controlado
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
144
145
Para maior compreenso do que foi dito carregue o seguinte sketch no seu Arduino
e ative o terminal no IDE.
// Teste de retorno das funes available( ) e read( )
//
void setup() {
Serial.begin(9600); //inicia a porta serial
}
void loop() {
Serial.print(Retorno de available(): ); //envia frase terminal
Serial.println(Serial.available());
//envia total de dados
delay(1000); //pausa 1 seg
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
146
Serial.print(Retorno de read(): ); //envia frase
Serial.println(Serial.read());
//envia dado disponivel porta
delay(1000); //pausa 1 seg.
}
Figura 53: Testando as funes available( ) e read( )
Ao ativar o terminal serial voc ver que a cada segundo o retorno da funo available(
) ser 0 e o da funo read( ) ser -1, isso ocorre porque nenhum dado est disponvel
na porta serial do seu computador. A tela do terminal serial dever ficar como na figura
51. Agora experimente digitar um s caracter no campo esquerda do boto Send
do terminal, e aps envi-lo, observar o que surge na tela do terminal. Depois envie,
por exemplo, as letras abcde juntas e veja de novo o resultado. Observe que a funo
available( ) informa inicialmente que existe 5 caracteres a ser enviados; e a funo
read( ) mostra o cdigo ASCII do primeiro deles, o cdigo 97 que corresponde letra
a. Os outros caracteres vo sendo enviados sequencialmente enquanto available( )
vai decrementando at 0 de novo.
Para nosso primeiro experimento com recepo de dados pelo seu computador
vamos montar novamente o circuito da figura 23, aquele com um LED tricolor (ou
tres LEDs de cores diferentes) e tres resistores de 390 ohms, e usar os mesmos pinos
digitais do Arduino daquele experimento, os pinos 9, 10 e 11.
Carregue o sketch abaixo no seu Arduino e no teclado do seu computador digite
qualquer uma das letras r, g ou b e as envie pelo terminal serial para acender um de
cada vez os LEDs com o Arduino, ora o vermelho, ora o verde, ora o azul.
Nesse sketch criamos uma funo que vai acender cada LED, a funo acendeLed( ),
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
147
declarada logo na primeira linha do cdigo. A porta serial iniciada em 9600 bits/s
dentro de setup( ), onde tambem, em uma nica linha, o comando for configura os
tres pinos que vamos usar como sadas. Dentro de loop( ) aparece a funo available(
) sendo testada por um comando if pela presena de dados disponveis na porta para
leitura. Se available( ) retornar qualquer valor diferente de zero o comando switch...
case executado. Veja a listagem abaixo.
//Teste dos LEDs RGB
//
int acendeLed(int j);
//funo para acender LED
void setup() {
Serial.begin(9600);
//inicia porta serial em 9600 b/s
for(int i=9;i<=11;i++) pinMode(i,1); //pinos 9 a 11 como saida
}
void loop() {
if(Serial.available()) {
//teste da presena de dados
switch(Serial.read()) {
//deciso baseada leitura da porta
case (r):acendeLed(9);
//se r acende LED vermelho
break;
case (g):acendeLed(10); //se g acende LED verde
break;
case (b):acendeLed(11); //se b acende LED azul
break;
default:Serial.println(Escolha r, g ou b);
//mensagem de erro
}
}
}
int acendeLed(int j) {
//pino j passado a funo
for(int i=9;i<=11;i++) digitalWrite(i,0);
//apaga todos LEDs
digitalWrite(j,1);
//acende LED de acordo com j.
}
O comando switch...case( ) nos permite testar uma mesma varivel para varios
valores possveis, e assim tomar uma deciso. Se existe um dado novo na porta serial
o comando switch...case( ) verifica se esse dado a letra r (red), g (green), ou b (blue).
Se no for nenhuma dessas letras uma mensagem de erro enviada ao terminal;
se for qualquer uma dessas tres letras a funo acendeLed( ) chamada e a ela
passada o nmero do pino correspondente pela varivel j, declarada no incio do
cdigo junto com a funo. Essa funo recebe o nmero do pino, 9, 10 ou 11, apaga
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
148
qualquer LED que esteja aceso e acende somente aquele LED que corresponde ao
pino passado como parmetro.
Essa capacidade de enviar e receber dados pela porta serial entre o Arduino e um
computador pode ser usada como uma ferramenta de depurao (debugger) no
desenvolvimento de seus programas. Por exemplo, se o leitor quiser conferir o valor
intantaneo de uma varivel qualquer em algum ponto do programa pode acrescentar
a funo println( ) nesse ponto do cdigo e enviar essa varivel para o monitor serial,
como fizemos acima no sketch que testa os retornos das funes available( ) e read( ).
Nosso primeiro experimento integrado do Arduino com a linguagem Processing
foi aquela em que criamos, no captulo 6, um LED virtual na tela do computador
que piscava em sincronismo com o LED real no pino 13 do Arduino. Essa interface
Arduino-Processing feita via cabo serial RS-232 ou USB entre o Arduino e o PC (ou
MAC). O programa gravado no ATmega328 do Arduino e o programa no computador,
compilado a partir de um cdigo fonte em Processing, trocam dados por uma porta
serial. Nesse experimento vamos conectar duas chaves mecanicas e dois resistores
de 10 K ohms em dois pinos digitais do Arduino e visualizar o acionamento dessas
chaves na tela do computador.
Uma chave deve ser conectada entre o pino digital 2 e o pino com a tenso de 5 volts;
um resistor de 10 K ohms deve ser conectado desse mesmo pino 2 para o pino de
terra. A mesma coisa deve ser feita no pino digital 3. Depois abra o IDE do Arduino
e copie e compile o cdigo fonte abaixo. Grave o programa no Arduino.
// Teste com duas chaves mecanicas
//
void setup( ) {
Serial.begin(9600);
//inicia porta serial em 9600 b/s
}
void loop( ) {
if(digitalRead(2))
Serial.write(A);//se chave A do Arduino fechada envia A
if(digitalRead(3))
Serial.write(B);//se chave B do Arduino fechada envia B
if(!digitalRead(2)&&!digitalRead(3))
Serial.write(0); //se A E B abertas envia 0.
}
Agora abra o Monitor Serial do IDE do Arduino e pressione cada chave e verifique se
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
149
no Monitor aparece os caracteres ASCII 68 para uma das chaves e o caracter 69 para
a outra chave; se nenhuma delas estiver pressionada o ASCII 0 dever ser observado.
Desabilite o Monitor Serial do Arduino e minimize o seu IDE. Agora abra o PDE do
Processing e copie o cdigo a seguir para a janela de edio.
150
na janela que surgir escolha a fonte ArialMT na lista e o tamanho 48 no campo size.
A linguagem Processing muito semelhante linguagem do Arduino; ambas
so baseadas na linguagem C, e seus ambientes de desenvolvimento baseados na
linguagem Java. O IDE do Arduino abre os arquivos fontes da linguagem Processing,
e vice-versa; muitas vezes at os compilam com a extenso trocada.
151
leitor investir um pouco de seu tempo na montagem de uma placa de interface com
os principais componentes, para estudar o Arduino.
Hardware
152
barras de pinos digital e analgica para que se encaixem corretamente nos conectores
fmea do Arduino. Depois de montado o mdulo e conferida cada ligao encaixe o
shield no Arduino. A alimentao para o circuito vir do seu computador pelo cabo
USB, por onde o Arduino e o seu computador tambem vo se comunicar.
Software
Podemos testar as funes digitalRead( ) e digitalWrite( ) de entrada e sada digitais
da linguagem do Arduino junto com as chaves e os LEDs desse shield com o sketch
abaixo.
// Teste das 4 chaves com os 4 LEDs
//
int pinSwitch=2;
//mude para 3,4 ou 5
int pinLed=16;
//mude para 17, 18 ou 19
void setup() {
pinMode(pinLed,1);
//pino do LED selecionado saida
void loop() {
(digitalRead(pinSwitch) == 1)? digitalWrite(pinLed,1):
digitalWrite(pinLed,0);
}
Lista de componentes
R1 a R4 e R9
R5 a R8
P1 e P2
LED1 a LED4
LED5
S1 a S5
C1 a C3
Outros
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
153
154
para selecionar um LED de cada vez podemos criar um bargraph para testar os
quatro LEDs com um s potenciometro. Veja a listagem abaixo.
int pinSensor=14;
//pot no pino 14 ou 15
int statusLed=LOW;
void setup() {
for(int i=16; i<=19; i++) pinMode(i,OUTPUT); //16 a 19 saidas
void loop() {
for (int i=16; i<=19; i++) {
int pinLed=i;
delay(analogRead(pinSensor)); //leitura do pot
digitalWrite(pinLed,statusLed); //acende/apaga LED
statusLed=!statusLed;
//inverte estado anterior.
}
Experimente modificar o sketch acima para inverter a sequencia de acionamento dos
LEDs ou tente escrever um outro que utilize tambem as quatro chaves no mesmo
cdigo.
155
As matrizes de contatos, tambem conhecidas por protoboards, so ainda uma tima
soluo quando queremos testar algum circuito novo. E se pudermos conectar
esse circuito ao nosso computador via porta serial a experincia fica muito mais
interessante. muito fcil montar uma pequena matriz de contatos sobre o Arduino
e us-lo como interface entre um circuito experimental e o nosso computador. Nessa
montagem, na figura abaixo,tem como base uma pequena placa de fibra de vidro de
65x52 mm com perfurao padro 2,54 mm.
Hardware
A pequena matriz de contatos de 45 x 35 mm vem com uma fina camada de adesivo
protegida por uma fita plstica que dever ser retirada antes de sua fixao na placa
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
156
Lista de componentes
R1
LED1
S1
C1 a C3
B1 e B2
C1 a C3
Outros
Pequenos circuitos com transistores e CIs montados nessa matriz de contatos e nela
alimentados com 5 volts podem ter acesso direto aos pinos digitais 0 a 7 e a todos
os pinos analgicos do Arduino. Todas as conexes entre os contatos da matriz e
os pinos do Arduino sero feitas por jumps. Como no shield de entradas e sadas
do experimento #2, aqui temos tambm um boto de reset e um LED vermelho
de 3 mm que indica que o Arduino est alimentado. Observe que existe tambm
dois conjuntos de bornes, um de quatro pinos e identificados pelas letras A,B,C e
D eoutro de dois pinos com 5 volts e terra, para conexes entre a matriz e circuitos
experimentais externos. Junto a cada um desses bornes e tambm junto aos conectores
digital, analgico e de alimentao do Arduino, existe uma pequena barra de pinos
torneados, do tipo usado para circuitos integrados DIL, onde devero ser conectados
os jumps para a matriz de contatos. O proximo experimento desse capitulo o leitor
poder montar j nesse shield um Monitor de Batimentos Cardiacos.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
157
Hardware
Nosso prottipo foi montado numa pequena placa perfurada de 3,5 x 5,5 cm para ser
encaixada sobre o Arduino como um shield. Veja a figura 57. Os componentes so
interligados com pequenos fios no lado da solda da placa.
Nesse projeto utilizamos o par de amplificadores operacionais dentro do LM358N. O
circuito completo est na figura 58, e um projeto por ns adaptado para o Arduino
a partir de um circuito originalmente publicado pela revista inglesa Elektor em 2008,
sob o ttulo Stress-O-Meter. Esse tipo de monitor de batimentos cardacos uma
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
158
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
159
Como fonte de luz para o sensor usamos um LED vermelho comum de 3 mm. O
experimentador deve posicionar o lado oposto unha de seu dedo indicador sobre
o LDR, e a juno entre a ponta e o meio do
dedo sobre o LED. A luz que emitida pelo
LED atravessa a pele da juno e refletida
pelo osso sobre uma pequena concentrao
de artrias bem em cima do LDR. O volume
de sangue nesse grupo de artrias pulsa
em sintonia com as contraes do msculo
cardaco. Essa informao vai modular a
resistncia do LDR.
No circuito do monitor o resistor R1 limita
Figura 62: Sensor montado
a corrente direta atraves de LED1 em cerca
de 20 mA. O LDR e o resistor R2 formam um circuito divisor de tenso cuja sada
pulsante ser funo da resistncia do LDR que funo da luz refletida pelo dedo
do experimentador. Esses pulsos de muito baixa frequencia, entre 1 e 2 hertz, seguem
para um filtro passa-altas formado por C1 e R3 e amplificado pelo primeiro opAmp
do LM358N na configurao no-inversor com ganho de 120. C2 e R5 formam um
filtro passa-baixas centrado em 1,5 Hz. Essa frequencia corresponde a 90 pulsos por
minuto, que a metade da frequencia maxima do corao humano.
O potenciometro P1, que a resistencia de carga do primeiro amplificador, controla
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
160
Software
Depois de conferir mais de uma vez toda a fiao, encaixe o shield no seu Arduino,
conecte o sensor e depois o cabo USB no seu computador. Para ver os batimentos
cardacos de uma pessoa carregue no seu Arduino o sketch da listagem abaixo.
int pinLed = 3;
volatile int state = 0;
void setup() {
pinMode(pinLed, OUTPUT); //pino 3 saida
attachInterrupt(0, pulse, CHANGE);//pino 2 entrada interrupo
}
void loop() {
digitalWrite(pinLed, state);
//LED pisca com batimentos
}
void pulse() {
state = !state;
//complementa state.
}
Esse sketch configura o pino digital 3 como sada para LED2 no circuito, e o pino
digital 2 como entrada de interrupo para a funo attachInterrupt( ) que chama
a funo pulse( ) toda vez que uma interrupo externa ocorrer nesse pino. J
conhecemos a funo attachInterrupt( ) do captulo 5, quando montamos o contador
de dois dgitos. Vimos que ela requer tres parmetros. O primeiro dever ser o dgito
0 para o pino digital 2, ou 1 para o pino digital 3 do Arduino; o segundo parmetro a
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
161
funo que ser chamada quando a interrupo ocorrer; e o ltimo parmetro define
o momento em relao ao sinal no pino digital especificado em que a interrupo
ocorrer, que poder ser de quatro modos: CHANGE, na mudana do nvel no pino;
LOW, quando o pino for baixo; RISING, quando o pino mudar de baixo para alto; ou
FALLING, quando o pino mudar de alto para baixo.
Nesse sketch toda vez que o nvel lgico no pino digital 2 mudar, a funo pulse() ser
chamada, e esta vai somente complementar (mudar o estado da) a varivel state. Essa
varivel state vai mudar de acordo com os batimentos do corao do experimentador
e fazer o LED2 acender ou apagar conforme seu estado na funo digitalWrite( ).
Para testar o circuito basta o leitor repousar a ponta de seu dedo indicador sobre
o sensor e girar o cursor do potenciometro P1 para o mnimo ganho at o LED
no pino 3 apagar. Depois v aumentando o ganho at que o LED comece a piscar
com os batimentos do seu corao. Depois de algum treino pressionando mais ou
pressionando menos o dedo sobre o sensor possvel achar o ponto timo para ver
oLED piscar regularmente. O ajuste fino feito com o potenciometro.
Lista de componentes
R1 e R10
R2
R3 e R6
R4
R5
R7
R8
R9
P1
LED1 e LED2
LDR
S1
C1 e C3
C2 e C4
CI1
Outros
Podemos enviar nossos batimentos cardacos pela porta serial para o computador
e ver no terminal serial do Windows ou do Arduino sua forma digital como uma
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
162
ao sketch acima uma linha para iniciar a porta serial em 9600 bps e os comandos if
que testam a varivel state; se esta for falsa o caracter 45 ser enviado para o terminal
serial com a funo Serial.write( ); se state for verdadeira o caracter 95 ser enviado.
Veja a listagem abaixo e a forma dos pulsos na figura 60. As pausas de 10 ms entre as
transmisses evitam a sobrecarga do buffer da porta serial.
// Enviando os pulsos cardiacos pela porta serial
//
int pinLed = 3;
//pino 3 saida
volatile int state = 0;
void setup() {
pinMode(pinLed, OUTPUT);
attachInterrupt(0, pulse, CHANGE); //pino entrada interrupo
Serial.begin(9600); //porta serial 9600 b/s
}
void loop() {
digitalWrite(pinLed, state);
//LED pisca com batimentos
if(!state) Serial.write(45);
//envia ascii 45 se falso
delay(10);
if(state)Serial.write(95);
//envia ascii 95 se verdadeiro
delay(10); //pausa 10 ms
}
void pulse(){
state = !state;
//complementa state.
}
Figura 63: Pulsos captados com o Monitor de batimentos cardacos
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
163
Figura 64: interface grfica para o Monitor de Batimentos Cardacos
Hardware
Na primeira parte desse projeto os pulsos de sada do amplificador do sensor iam
direto para o pino digital 2 do Arduino que com o primeiro sketch fazia um LED no
pino digital 3 piscar de acordo com os batimentos cardacos do experimentador. O
segundo sketch mostrava na tela do terminal esses batimentos em forma de pulsos
digitais. Agora em vez de conectar no pino 2 vamos conectar a sada do amplificador
diretamente ao primeiro pino analgico do Arduino, o pino 14.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Software
164
165
166
167
batimentos por minuto acumulado na varivel counter, que incrementada toda vez
que o nvel do sinal de entrada igual ou maior que aquele apontado pela varivel
trigger. As funes grade( ), texto( ) e pulser( ) so declaradas no final da listagem e
so chamadas para desenhar as linhas de grade, posicionar textos e um marcador de
segundos no canto superior esquerdo na tela.
A tela do instrumento de 500 x 400 pixels dividida em 10 colunas verticais e oito
horizontais, como a tela de um osciloscpio, com a funo line( ). No eixo x marcada
a faixa de batimentos por minuto de 30 a 120 bpm e no eixo y o nvel relativo de 0 a
100%, com a funo text( ). As funes rect( ) e line( ) j foram explicadas no captulo
6.
A altura da barra vermelha d uma indicao em tempo real da amplitude do sinal na
entrada do amplificador com o sensor tico. A posio dessa barra no eixo x d uma
indicao da frequencia de batimentos cardacos do experimentador.
Carregue e execute esse sketch em Processing no PDE e coloque seu dedo indicador
sobre o sensor tico do monitor de batimentos cardacos. Comece girando o
potenciometro no hardware do monitor para o mnimo ganho e observe a barra
vermelha esquerda da tela. Agora v muito suavemente aumentando o ganho at
que a barra vermelha comece a pulsar, porem sem se deslocar ainda da esquerdada
tela. Veja at que nvel relativo o pico do sinal alcana e tente control-lo com o
potenciometro. Aumente mais o ganho do circuito at que a barra comece a se
deslocar sobre o eixo horizontal onde esto marcados as frequencias de batimentos
cardacos. Esse o momento para voc ajustar seu dedo no sensor para um sinal
estvel de cerca de um pouco mais de um pulso por segundo. A melhor leitura
conseguida quando a barra vermelha d vrios repiques abaixo do nvel 25 e uma
s incurso longa at 75 nesse tempo. Tome como referncia de tempo o pequeno
retangulo vermelho no canto superior esquerdo da tela que pisca a cada segundo, que
equivale a 60 batimentos por minuto. A sensibilidade do sistema pode ser ajustada
tambem mudando o valor da varivel trigger no cdigo Processing; valores proximos
de 25 aumentam muito a sensibilidade.
Em suas experincias como esse instrumento de biofeedback voc pode comprovar
que a taxa de batimentos cardacos funo da respirao; controlando a respirao
voc pode controlar seu rtmo cardaco. Experimente tambem controlar a taxa de
batimentos tentando mover mentalmente a barra vermelha mais para esquerda
ou mais para a direita. Voc pode tentar um experimento muito interessante que
controlar seus batimentos cardacos de modo a sincronizar os picos da barra vermelha
com a frequencia do marcador de segundos no canto superior esquerdo. Se voc
conseguir esse sincronismo seu corao estar dando uma batida por segundo. Voc
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
168
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Apendices
Introduo
O circuito proposto
Desc rio do Circuito
A placa de Circuito impresso
Alimentando o Arduino
2- Programador de Bootloader
Introduo
Gravando o bootloader
Conectando o Arduino a um Computador
descrio do circuito
3- Cartilha de Programao
Apendices
Introduo
Mapa das Entradas e Sadas do Arduino
As portas de E/S e suas Funes em C
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
170
Apendice 1
171
O leitor pode adquirir em sites de comercio eletronico tanto aqui no Brasil quanto l
fora um Arduino j montado e testado; existem muitas opes de modelos conforme o
microcontrolador embarcado, desde o mais simples com o ATmega168 e comunicao
RS-232 ou USB at aqueles com o ATmega1280 com mais memria de programa e mais
entradas e sadas digitais. Mas tambem o leitor poder montar seu proprio Arduino a
partir de componentes facilmente encontrados em lojas de componentes eletronicos.
Nesse caso propomos um circuito bsico com o microcontrolador ATmega8 ou com
o ATmega168, alguns resistores e capacitores, um regulador de tenso comum e um
conjunto de conectores do tipo mini-latch. A placa de circuito impresso proposta
de face simples e poder ser confeccionada por qualquer mtodo caseiro, como o j
consagrado mtodo trmico a partir de uma impresso laser. A fonte de alimentao
externa placa e pode ser qualquer carregador de baterias de aparelhos portteis,
como o de telefones celulares, que fornea tenses entre 9 e 15 volts CC. O circuito
o da figura 63.
Tanto o ATmega8 quanto o ATmega168 pode ser utilizado na montagem do nosso
Arduino. Observe que no circuito no aparece o conversor TTL-RS232. Preferimos
separar esse circuito da placa principal por uma boa razo: dar a opo ao montador
de escolher que tipo de comunicao serial o seu Arduino ter com seu computador,
se RS-232 ou USB. Para a comunicao RS-232 existe o conversor MAX232 que um
circuito integrado muito fcil de encontrar em lojas de componentes eletronicos, e
por ser do tipo DIL de 16 pinos tambem muito fcil de montar em uma pequena
placa de circuito impresso e ser conectado por um cabo diretamente entre uma porta
RS-232 do computador e o conector SERIAL que aparece no diagrama da figura 63.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
172
Descrio do Circuito
O microcontrolador ATmega328 alimentado com 5 volts nos pinos 7 e 20 provenientes
do regulador de tenso integrado LM7805, se o jumper JMP1 estiver na posio EXT.
Os capacitores C1 a C4 formam os filtros CC de entrada e de sada do regulador. No
conector J1 entramos com uma tenso de 9 volts a 15 volts de uma fonte externa ou de
um carregador comum de baterias com o positivo no pino central. O diodo D1 serve
de proteo para o circuito caso a entrada de alimentao esteja invertida. O LED1,
vermelho, acende se a tenso de alimentao do circuito estiver correta. Essa mesma
tenso externa tambem disponibilizada
no primeiro pino do conector POWER.
A tenso de 5 volts do regulador LM7805
alem de ser disponibilizada nos pinos dos
conectores POWER e SENSOR segue
tambem para o conector SERIAL para
alimentar a placa externa com o conversor
RS-232. direitado diagrama temos o
microcontrolador e os conectores ICSP,
os dois digitais e o analgico.
Figura 65:
So 14 pinos digitais (D0 a D13) e 6 analgicos (A0 a A5 ou 14 a 19). O pino de
entrada de referncia (AREF) para o conversor A/D do Arduino fica no segundo
conector digital. O LED de teste e o pino 3 do ICSP esto ligados no pino digital
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
173
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
174
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Lista de componentes
Item
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Componente
Soquete DIL 28 pinos
ATmega8
Cristal 16 Mhz
Regulador LM-7805
Diodo 1N4148
LED 5 mm vermelho
LED 5 mm verde
Capacitor 100uFx25V
Capacitor 10uFx25V
Capacitor 100nFx100V
Capacitor 22pFx100V
Resistor 220 ohms x 1/8W
Resistor 10 Kohms x 1/8W
Boto tipo campanhia
Jumper 3 pinos
Mini-latch 8 pinos fmea
Mini-latch 6 pinos fmea
Mini-latch 6 pinos fmea
19
20
21
22
Qtde
01
01
01
01
01
01
01
01
01
03
02
2
1
1
1
2
1
1
1
1
1
1
175
Obs.
Ou 2x DIL de 14 pinos
ou ATmega168
Ou ressonador cermico 16 Mhz
No precisa dissipador
Qualquer um da srie 1N414x
Tipo axial
Tipo axial
Tipo poliester
Dispensados se usar ressonador
Tipo cermico
Micro-chave para circuito impresso
Jumper com espaamento 2,54 mm
Para os pinos digitais
Para os pinos analgicos
Para os pinos de tenses externas
Para a placa serial
Para a entrada de sensor
Para o ICSP
Tipo para circuito impresso
176
tenso e os dois LEDs. O LED vermelho acende para indicar que o Arduino est
corretamente alimentado e o LED verde o que vai conectado ao pino digital D13 do
Arduino e indica quando carregamos programas para o microcontrolador. Em nosso
Arduino utilizamos um ressonador cermico de 16 Mhz em vez do cristal e dois
capacitores de 22pF que aparecem no diagrama. Nossa placa tem somente quatro
pequenos jumpers.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
177
Alimentando o Arduino
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
178
Apendice 2
Montagem do programador de
bootloader
Introduo
179
onde ficam gravadas as instrues que a CPU vai buscar para executar as ordens
que o projetista definiu para o sistema microcontrolado. Esse tipo de memria pode
ser regravada quando necessrio corrigir ou redefinir algumas funes que esse
sistema controla. Essa gravao (e regravao) da memria flash realizada por um
circuito programador externo conectado entre o sistema onde o microcontrolador
est embarcado e um computador, onde roda um aplicativo de programao. Esse
processo, conhecido como ICSP (In-Circuit Serial Programming), ou programao
serial no circuito feito de forma serial e no necessrio retirar o microcontrolador
de seu circuito. para isso que serve o conector ICSP no Arduino.
180
alguns resistores, tres diodos zener de 5,1 volts e um s transistor NPN de uso geral
para se montar o programador. So necessrias uma linha de sincronismo de relgio
(clock) e uma linha de entrada e outra de sada serial dos bits que vo ser gravados na
memria flash. Essas linhas devem estar disponveis, junto com as linhas de reset, de
5 volts e de terra, no conector padronizado ICSP de seis pinos.
181
182
Pronto! O PonyProg2000 j est configurado para ser usado com o nosso programador
serial. Deixe o PonyProg2000 aberto na tela do seu PC e insira um microcontrolador
ATmega168 novo no soquete de 28 pinos no Arduino. Agora interligue o conector
fmea ICSP de 6 pinos do programador no seu Arduino, que deve estar sem
alimentao, observando com cuidado a correta correspondncia entre os pinos.
Conecte o circuito com o conector
fmea DB-9 do programador
no computador PC e alimente o
Arduino. Os leds vermelhos no
Arduino e no programador devero
acender. De volta tela principal
do PonyProg2000 clique no boto
Read Device, o primeiro esquerda
na segunda linha de botes. Uma
pequena janela de Status deve surgir
indicando o progresso da leitura de
toda a memria flash do ATmega168,
veja a figura 72; aps alguns segundos
uma outra janela sinaliza o fim do
processo com exito; veja a figura 73.
Figura 73: Configurando o PonyProg2000
D OK nessa pequena janela e observe que toda a rea de visualizao de dados no
PonyProg2000 mostra somente FF at a ltima posio de memria do ATmega168
novo.
Gravando o bootloader
Agora precisamos testar nosso circuito gravando um programa na memria flash do
microcontrolador. Vamos fazer isso gravando o bootloader do Arduino. No captulo
1 vimos que o bootloader um pequeno programa que fica residente no bootblock,
uma pequena parte da memria flash do microcontrolador. Toda vez que o Arduino
resetado esse bootloader automaticamente
executado para verificar se existe algum
pacote de dados novos disponveis na porta
serial sendo enviado pelo computador
PC. Se existe, o bootloader recebe esse
pacote de dados e o grava na memoria
flash antes do bootblock. No ATmega168 o
Figura 74: Janela de status
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
183
bootloader do Arduino ocupa cerca de 2k dos 16kbytes de sua memria flash. No site
oficial do Arduino existe muitas verses de bootloader disponiveis para baixar para
todos os microcontroladores AVR usados no Arduino. Em nosso projeto vamos usar
o bootloader ATmegaBOOT_168_diecimila.hex que j est, entre outros arquivos,
no seu computador na pasta Arduino-0021/hardware/arduino/bootloaders/
atmega. Se voc abrir esse arquivo com
o Bloco de Notas do Windows vai ver a
listagem de caracteres no formato Intel
hexadecimal, que o padro mundialmente
adotado para gravaoem memrias e
microcontroladores.
Figura 75: janela de notificao
184
185
186
Descrio do Circuito
Os capacitores C3 e C4 no esto desenhados incorretamente no circuito, como a
princpio se pode pensar, eles so mesmo invertidos nesse tipo de circuito conversor
de tenso, conhecido como charge pump.
O programador serial com um transistor que montamos antes serviu somente para
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
187
188
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
189
Pinos Digitais
Pinos analgicos
Pinos de Alimentao
Funo em C:
analogRead( )
Apendice 3
Cartilha de Programao
para o Arduino
Introduo
190
Cartilha de Programao em C para o ARDUINO
Escrita, produzida e originalmente distribuida livremente na web para
download pelo autor Joo Alexandre da Silveira.
Com informaes e inspiraes tomadas de:
Arduino Programming Notebook - Brian W. Evans
Experimentos com o ARDUINO - Joo Alexandre da Silveira
Programming Interactivity - Josua Noble
The C Programming Language - Kernighan and Ritche
Let Us C - Yashavant Kanetkar
C for Engineers and Scientists - Gary Bronson
www.arduino.cc
www.revistadoarduino.com.br
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
191
/*...*/ - comentrio em vrias linhas: qualquer texto colocado entre esses simbolos
tambem ignorado pelo programa.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
192
Exemplo:
/*
Nesse cdigo a funo setup( ) ativa a porta serial em 9600 bits/s e a funo loop( ) fica transmitindo a frase Hello World! pela porta serial a cada 2 segundos.
*/
void setup( ) {
Serial.begin(9600);
}
void loop( ) {
Serial.println( Hello World! );
delay(2000);
}
Escopo da Varivel o limite ou abrangncia da varivel. Uma varivel pode ser declarada em qualquer parte do programa. Se for declarada
logo no incio, antes da funo setup( ), ela tem o escopo de Varivel Global, e porisso ela pode ser vista e usada por qualquer funo no programa.
Se declarada dentro de uma funo ela tem o escopo de Varivel Local, e
s pode ser usada por essa funo.
VARIVEIS so
posies na memria de
programa do Arduino
marcadas com um nome
e o tipo de informao
que iro guardar. Essas
posies podem estar
Declarao da Varivel como as funes, toda varivel deve ser
vazias ou podem recedeclarada antes de ser chamada. Essa declarao consiste em atribuir
ber um valor inicial. Os previamente um tipo e um nome varivel.
valores das variveis podem ser alterados pelo
Tipos de variveis:
programa.
193
Exemplo:
/* Esse programa escrito em C do Arduino aumenta e diminui gradativamente o brilho de um LED
conectado no pino PWM 10 do Arduino. */
int i=0;
// declarao da varivel global inteira i iniciada com 0
void ledOn( );
// declarao da funo criada ledOn do tipo void
void setup( ) {
pinMode(10,OUTPUT); // aqui 2 parmetros so passados funo pinMode( )
}
void loop( ) {
for (i=0; i <= 255; i++) ledOn( );
// aumenta o brilho do led
for (i=255; i >= 0; i--) ledOn( );
// diminui o brilho do led
}
void ledOn( ) {
// funo que acende o led
analogWrite (10, i); // o n do pino e o valor de i so passados funo analogWrite( )
delay (10);
}
A.2 - MATRIZES
MATRIZES so colees
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
194
Smbolos compostos so aqueles que combinam os smbolos aritmticos entre si e com o sinal de atribuio:
x ++
// x=x+1
x --
// x=x-1
x += y
// x=x+y
x -= y
// x=x-y
x *= y
// x=x*y
x /= y
// x=x/y
Operadores de comparao comparam uma varivel com
uma constante, ou variveis entre si. So usados para testar se uma
condio verdadeira.
x == y
// x igual a y
x != y
// x no igual a y
x < y
// x menor que y
x > y
// x maior que y
x <= y
// x menor ou igual a y
x >= y
// x maior ou igual a y
Operadores lgicos so usados para comparar duas expresses,
retornam 1 ou 0 (verdadeiro/falso).
&&
AND porta lgica E
||
OR
porta lgica OU
!
NOT porta lgica NO
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
195
Exemplo
Notas
delay(ms)
delay(1000);
delayMicroseconds(us)
delayMicroseconds(1000);
As mesmas observaes
acima para a funo
delay(ms) so vlidas aqui.
millis( )
random(min,max)
abs(x)
map(valor,min1,max1,min2,max2)
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
196
if um controle de fluxo usado para selecionar uma ou mais instrues baseado no resultado de um
teste de comparao. Todas as instrues entre as chaves { e } so executadas somente se o resultado desse teste for verdadeiro; se no, essas instrues no so executadas. Verdadeiro qualquer resultado, mesmo negativo, diferente de zero. Falso um resultado zero.
if (expresso) {
bloco de instrues; // se expresso for verdadeira, bloco de instrues executado
}
da instruo
anterior
O comando if
da instruo
anterior
NO
NO
EXPRESSO
verdadeira?
EXPRESSO
verdadeira?
SIM
SIM
BLOCO DE
INSTRUES
para a prxima
instruo
O comando if...else
BLOCO DE
INSTRUES 1
ELSE
BLOCO DE
INSTRUES 2
para a prxima
instruo
if (expresso) {
bloco de instrues1; // se expresso for verdadeira, bloco de instrues1 executado
}
else {
bloco de instrues2; // se expresso for falsa, bloco de instrues2 executado
}
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
197
pode-se criar mais um outro comando, o if...else if. No exemplo abaixo se expresso1 for verdadeira o bloco de instrues1 executado; se expresso1 for falsa mas expresso2 for verdadeira bloco de instrues2 executado; e se expresso1 e expresso2 forem falsas o bloco de
instrues3 executado.
da instruo
anterior
O comando if...else if
da instruo
anterior
O comando switch...case
EXPRESSO
EXPRESSO 1
verdadeira?
NO
1?
SIM
BLOCO DE
INSTRUES 1
EXPRESSO 2
verdadeira?
BLOCO DE
INSTRUES 1
NO
NO
2?
SIM
BLOCO DE
INSTRUES 2
SIM
SIM
BLOCO DE
INSTRUES 2
NO
BLOCO DE
INSTRUES 3
3?
SIM
BLOCO DE
INSTRUES 3
NO
BLOCO DE
INSTRUES 4
(default)
para a prxima
instruo
if (expresso1) {
bloco de comandos1;
}
else if (expresso2) {
bloco de instrues2;
}
else {
bloco de comandos3;
}
para a prxima
instruo
switch (expresso) {
case 1: bloco de instrues1;
break;
case 2: bloco de instrues2;
break;
case 3: bloco de instrues3;
break;
default: bloco de instrues4;
}
switch...case
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
198
while Uma das operaes mais frequentes que os programas executam repetir um grupo de
instrues at que uma condio inicialmente verdadeira se torne falsa. para isso que serve o comando while. A sua sintaxe a seguinte:
while (expresso) {
bloco de instrues;
}
da instruo
anterior
O comando while
LOOP
EXPRESSO
verdadeira?
BLOCO DE
INSTRUES
da instruo
anterior
O comando do...while
BLOCO DE
INSTRUES
SIM
NO
EXPRESSO
verdadeira?
LOOP
SIM
NO
para a prxima
instruo
para a prxima
instruo
do...while
Para que o bloco de instrues seja executado ao menos uma vez, ele deslocado
para a entrada da caixa de decises, antes do teste de validade:
do {
bloco de instrues;
}
while (expresso);
Aqui o bloco de instrues ser executado primeiro e s ento o parmetro expresso avaliado.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
199
for Inserindo-se no loop do comando while um contador que registre cada execuo do bloco de
instrues cria-se o comando for. Esse contador deve ter uma varivel de controle que deve ser
previamente inicializada com um tipo e um valor. A sua sintaxe a seguinte:
for (varivel; expresso;incremento) {
bloco de instrues;
}
A varivel inicializada normalmente com 0 ou 1; o parmetro expresso deve conter o valor mximo
(ou mnimo) que o contador deve alcanar; e incremento o valor que ser incrementado (ou decrementado) da varivel cada vez que o bloco de instrues executado. Observe que cada parmetro
entre parnteses separado por ponto e vrgula.
da instruo
anterior
O comando for
inicializao
VARIVEL
do contador
Exemplo:
CONTADOR
LOOP
BLOCO DE
INSTRUES
EXPRESSO
verdadeira?
SIM
NO
para a prxima
instruo
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
200
O operador ternrio ?
Note o uso e a posio entre as duas instrues de dois pontos na sintaxe desse operador.
Exemplo:
int x = 8;
y = (x > 10) ? 15 : 20;
Aqui o valor de y vai depender da avaliao da expresso do operador ternrio; como o valor de x
vale 8, a expresso (x>10) falsa, porisso o inteiro 20 ser atribuido a y; se o valor atribuido a x
fosse maior que 10, y seria 15. Essa mesma expresso com o comando if...else ficaria assim:
int x = 8;
if (x > 10) {
y = 15;
}
else
y = 20;
da instruo
anterior
O operador ternrio
EXPRESSO
verdadeira ?
NO
SIM
INSTRUO 2
INSTRUO 1
para a prxima
instruo
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
201
Pinos Digitais
Pinos de Alimentao
Pinos analgicos
usados para leitura de
sinais de sensores
Funo em C:
analogRead( )
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
202
Exemplo
Notas
pinMode(pino,modo)
pinMode(2,OUTPUT);
digitalRead(pino)
digitalWrite(pino,valor)
digitalWrite(2,HIGH);
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
203
No programa abaixo essas tres funes so utilizadas para acender um led no pino 2 toda vez que
uma chave normalmente aberta no pino 3 for pressionada.
void setup() {
pinMode(2,OUTPUT);
pinMode(3,INPUT);
}
void loop() {
int chave = digitalRead(3);
digitalWrite(2,chave);
}
O cdigo dentro da funo loop( ) acima pode ainda ser simplificado da seguinte forma:
void loop() {
digitalWrite(2,digitalRead(3)); // led (pino 2) acende se chave (pino 3) for pressionada.
}
Funo
Exemplo
Notas
analogWrite(pino,valor)
analogWrite(10,128);
est em 0;
CHANGE - dispara sempre que o pino muda de
estado (de 0 para 1, ou
vice-versa);
RISING - somente
quando o pino muda de 0
para 1;
FALLING - somente
quando o pino muda de 1
para 0.
pulseIn(pino,valor,espera)
pulseIn(4,HIGH);
Essa funo mede a largura em microssegundos de um pulso em qualquer pino digital. O parmetro valor diz funo que
tipo de pulso deve ser medido, se HIGH
ou LOW. O parmetro espera (time out)
opcional e se passado funo faz com que
a medida do pulso s comece aps o tempo
em microssegundos ali especificado.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
204
So 6 pinos em uma s barra com o nome ANALOG IN, localizada no lado oposto s barras dos pinos digitais. So numerados de 0 a 5, agora da
esquerda para a direita. Esses pinos so usados para leitura de sinais analgicos de sensores conectados ao Arduino, e podem ser de quaisquer valores entre zero a 5 volts. Os pinos de entradas
analgicas no precisam ser previamente configurados com a funo pinMode( ).
Funo
Exemplo
analogRead(pino)
Notas
reconhecidos pela linguagem C do Arduino tanto
como A0 a A5 como 14
a 19. Assim, a mesma
expresso acima pode ser
escrita tambem da seguinte forma: int sensor
= analogRead(14);
Uma observao importante em relao a esses pinos analgicos que eles podem ser configurados
tambem como pinos digitais pela funo pinMode( ), aumentando assim o nmero desses pinos para 20.
Assim, a expresso pinMode(14,OUTPUT); transforma o pino analgico A0 em pino de sada digital
como qualquer outro presente nas duas barras de pinos digitais.
Exemplo:
O cdigo a seguir l uma tenso CC no pino analgico A5 (pino 19) e envia esse valor digitalizado para
controlar o brilho de um led no pino PWM 10:
void setup( ) { }
void loop( )
{
analogWrite(10,analogRead(A5)/4);
}
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
205
Funo
Exemplo
Notas
Serial.begin(taxa)
Serial.begin(9600);
Nesse exemplo essa funo fixa a
taxa de comunicao em 9600 bps.
Os pinos digitais 0 e 1 no podem
ser utilizados como entrada ou
como sada de dados quando a porta
serial habilitada por essa funo.
Serial.end( )
Desabilita a porta serial para permitir o uso dos pinos digitais 0 e 1 para
entrada ou sada de dados.
Serial.available( )
O valor 0 retornado
quando no h nenhuma
informao para ser
resgatada na porta
serial.
Serial.read( )
O valor -1 retornado
quando no h nenhuma
informao para ser
resgatada na porta
serial.
Serial.print(valor,formato)
Serial.print(1.23456);
// transmite 1.23 (default)
Serial.print(1.23456,3);
// transmite 1.234
Essa funo envia para a porta seSerial.print(Al
Mundo!);
// transmite a frase (string)
rial um caracter ASCII, que pode ser
Serial.print(A);
// transmite o caracter A
capturado por um terminal de comuniSerial.print(A,BIN);
//
transmite 01000001
cao. O segundo parmetro, formato,
Serial.print(A,OCT);
//
transmite o octal 101
opcional e especifica com quantas caSerial.print(A,HEX);
//
transmite o hexa 41
sas decimais ou com que base numrica
Serial.print(A,DEC);
//
transmite o decimal 65
vai ser o nmero transmitido.
Serial.println(valor,formato)
Como a anterior essa funo envia para a porta serial um caracter ASCII com os mesmos parmetros
opcionais de formato, porem acrescenta ao final da transmisso o caracter Carriage Return (retorno
ao incio da linha) e o caracter New Line (mudana para a prxima linha).
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
206
Todas essas funes em C para comunicao serial podem se testadas com o cdigo abaixo e ativando o Terminal de Comunicao do Arduino:
void setup( ) {
Serial.begin(9600);
//inicia a porta serial em 9600 bps
}
void loop( ) {
Serial.print(Retorno de available( ): );
//envia frase ao terminal
Serial.println(Serial.available());
//transmite total de bytes disponveis
delay(1000); //pausa 1 seg
Serial.print(Retorno de read( ): );
//envia frase
Serial.println(Serial.read( ));
//transmite primeiro byte disponvel na porta
delay(1000); //pausa 1 seg.
}
O Terminal Serial do Arduino mostrar inicialmente todo segundo o retorno da funo available(
), que ser 0, e o da funo read( ), que ser -1. Isso ocorre porque nenhum dado est disponvel
na porta serial do computador. Entre no Terminal do Arduino e transmita, por exemplo, as letras
ABCDE juntas (digite no campo ao lado do boto Send) e observe que a funo available( ) informa
inicialmente que existem 5 caracteres no buffer para ser enviados; e a funo read( ) mostra o
cdigo ASCII decimal 65 do primeiro deles, que corresponde letra A. Os outros caracteres vo
sendo enviados sequencialmente enquanto available( ) vai decrementando at 0 de novo.
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
ndice Remissivo
ndice Remissivo
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
ndice Remissivo
208
character 52
chip 24
ciclo de trabalho 78
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
209
DDR 31
delay 41, 54
delay( ) 77
delayMicroseconds 74
Diecimila 29
digitalRead( ) 54, 71, 152
digitalWrite( ) 41, 54, 71, 74, 152
diretivas do preprocessador 72
domnio pblico 28
do ... while 63
draw( ) 128
Duemilanove 39
duty cycle 78
EEPROM 22
elemento piezoeltrico 115
ellipse( ) 128, 131, 132
else 61, 72
entrada e sada 17
fill( ) 128
Flash 23
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
210
jumper 174
211
map( ) 166
matriz 2D 95
matriz de contatos 71, 155
Matrizes 64
memria 17
memria de programa 17
memria flash 21, 180
microcontrolador 13, 17, 20, 174
millis 54, 57
Modulao por Largura de Pulso 78
monitor serial 125
Mostrador de 7 segmentos 90, 94
motor 77
motores de passo 87
Motores eltricos 81
multiplexador 33
noise( ) 137
open source 28
operaes lgicas 18
operador de atribuio 71
operador de comparao 59, 71
operador de deslocamento direita 164
operador de deslocamento esquerda 164
Operadores 59
operadores aritmticos 59
Operadores compostos 60
Operadores lgicos 59
operador ternrio 61, 72
operandos 59
OUTPUT/INPUT 51
parmetro 53
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
212
quad( ) 131
random( ) 54, 92
read( ) 128, 145
rect( ) 131, 166
registrador de direo de dados 31
Registrador de Instrues 20
registradores 19
reset 156
ressonador cermico 21, 174, 176
RGB 90
RISC 18
RS-232 29, 71, 144
rudo Perlin 137
sada/entrada 51
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
213
Temperatura 117
temporizadores 21
tone() 74
Transdutores Piezoeltricos 115
triangle( ) 131
TRUE/FALSE 51
USART 58
USB 31, 71, 144, 175
varivel global 71
varivel local 71
verdadeiro/falso 51, 61
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
214
web 77
while 62
while( ) 119
Windows 28, 161
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)
Copyright 2013 Joo Alexandre da Silveira | ordemnatural@outlook.com | www.revistadoarduino.com.br | Todos os direitos reservados.
A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao de direitos autorais. (Lei 9.610/98)