Você está na página 1de 20

Computadores fazem arte

uma breve introduo

{{{ ANTES DE COMEAR


Prazer, ns seremos as suas ferramentas! Nossos nomes so:

!!!

E esta a protoboard, onde iremos experimentar todos os nossos circuitos!

As linhas em azul indicam como a protoboard funciona internamente. Os pinos de cada linha esto todos conectados.

""" ARD#$NO %%%


Arduino uma iniciativa de se criar um ambiente para desenvolvimento de hardware livre. Arduino no s a plaquinha que faz a comunicao de sensores/atuadores com o computador, mas tambm uma linguagem de programao e um ambiente de desenvolvimento integrado.

Com Arduino podemos conectar diversos tipos de sensores (botes, potenci metros, !"#s, ...$ e capturar sensaes do mundo f%sico para o mundo abstrato do computador. &u o inverso' usar o computador para, atravs de atuadores (motores, !("s, )$ modificar o mundo f%sico onde vivemos. *anto a placa Arduino quando a lin+ua+em e o editor so livres. &u se,a, podemos criar nossa prpria verso da placa, da lin+ua+em ou do editor livremente- .rova disso que e/istem dezenas verses da plaquinha' FreeDuino, Severino, Lilypad Arduino, ) "o0nload (!inu//1indo0s/2ac&34$ 5 http://arduino.cc

### CONH C NDO A !N" #FAC ###

..inos di+itais 6789 (verde$ ..inos di+itais (#4,*4$ :,8 (verde$ .#eset (azul$ ..inos anal+icos (azul$ .;limentao <v e =v (laran,a$ .*erra (verde e laran,a$ .;limentao e/terna =v > 86v (rosa$ .?3@ (amarelo$ .Aumper para mudar a alimentao do "iecimila (ro/o$
$$$ !N"#OD%&!NDO CONC !"OS $$$ *udo bem. Buer dizer ento que o ;rduino possui entradas e sa%das di+itais e anal+icas. 2as, o que isso si+nificaC Buando usamos estes termos, estamos tratando da representao numrica de informao. Do mundo que nos rodeia, no +eral, a informao anal+ica. .e+uemos como e/emplo a variao de temperatura, hora estE 8F +raus, hora 6:, 9<... &u se,a, temos muitos valores. & ;rduino trabalha muito bem com informaes que variem de : at 8:6F, e so nos pinos anal+icos que iremos li+ar a maioria dos sensores. ;tualmente, os computadores usam o sistema de representao binEria para realizar cElculos, ou se,a, eles reconhecem apenas valores : (desli+ado, : volts$ ou 8 (li+ado, < volts$. .or isso temos os pinos di+itais, onde li+amos coisas como botes, que possuem apenas dois estados, li+ado ou desli+ado.

(nto se computadores conhecem apenas : e 8, como conse+uimos ,o+ar para a sa%da dele valores anal+icosC @em, e/iste uma tcnica chamada .12 (.ulse 1idth 2odulation$ que nos a,uda nisso. &scilando rapidamente uma sa%da di+ital, entre : e 8, tem7se a impresso de que a quantidade de ener+ia enviada para o circuito variEvel. Essa tcnica pode ser utilizada para variar a intensidade luminosa de um led, a velocidade de um motor, etc. Por exemplo, deixando 100% do tempo a sada em 1, a energia no circuito ser sempre total. Deixando 50% do tempo a sada em 1, teremos a impresso de que a energia no circuito ser a metade. No Arduino, as portas 9, 10 e 11 podem ser usadas como PWM.

''' CON( #SANDO CO) O A#D%!NO ''' ( a+ora, sabendo dessas coisas, como fao para o ;rduino desempenhar as tarefas de que precisoC ;ssim como quando precisamos conversar com outros povos, para conversar com o ;rduino, precisamos aprender a sua lin+ua+em. .or padro, lin+ua+ens de alto n%vel para computadores so baseadas no in+lGs, ve,a al+umas construes que o ;rduino entende' .setup($
Executado somente uma vez quando o microcontrolador ligado

.loop()
Roda repetidamente o programa dentro desse bloco

.pinMode(<pino>, <INPUT/OUTPUT>)
Configura um pino como entrada ou como sada

.digitalWrite(<pino>, <HIGH/LOW>)
Configura o estado de uma sada digital como HIGH ou L !

.digitalRead(<pino>)
L" o estado de uma entrada digital

.analogWrite(<pino>, <valor: 0-255>)


Escreve um valor em uma sada anal#gica

.analogRead(<pino>)
L" o estado de uma entrada anal#gica .delaH(InJ$ $ausa o processamento durante n milsimos de segundo

.random(<inicio>, <fim>)
Retorna um n%mero entre inicio e fim

.Serial.begin( !00)
Inicializa a comunica&'o serial com um determinado boundrate

.Serial.print(m"n#a$"m, <H%&/'%(/)IN/)*T%>)
Envia uma mensagem( do tipo especificado para a porta serial

.Serial.read()
L" da porta serial

*** +%# DA"A ,,,

2uitos ,E ouviram falar de linguagens de programao quando falamos em -omputao. &s nomes .ava, C//, +yt0on, podem at serem conhecidos por al+uns. *odas elas so e/emplos de lin+ua+ens de pro+ramao. +ure Data tambm uma lin+ua+em de pro+ramao, porm, ao invs dessas lin+ua+ens que citamos, que se baseiam na escrita de te/tos (que chamamos de -1digo23onte ou simplesmente -1digo$, +ure Data no lida com te/tos, mas com ob,etos +rEficos. K por isso que a chamamos de linguagem de programao visual.

+ure Data foi desenvolvida por )iller +u-4ette com o ob,etivo de produzir e processar sinais de Eudio, porm, atualmente utilizada para a produo e processamento de qualquer tipo de sinal. &u se,a, podemos tanto trabalhor com sons quanto com +rEficos e animaes. 2isturando +ure Data com Arduino, tornamos o computador uma poderosa ferramenta para amplificar nossas capacidades humanas de e/presso. "o0nload (!inu//1indo0s/2ac&34$ 5 http://puredata.info

&&'$SCANDO (EDS&&

Da maioria das lin+ua+ens de pro+ramao, o primeiro pro+rama que vocG aprende a escrever aquele que imprime "Ol mundo" na tela do computador. Como uma placa Arduino no tem tela, em vez disso fazemos um !(" piscar '7$ &s !("s (ou Light Emitting Diode, ou "iodo (missor de !uz$ tGm polaridade, isto , eles apenas acendem se vocG orientar as suas perninhas (terminais$ corretamente. ; perna mais lon+a normalmente o positivo (L$ que vai conectado ao pino 56. ; perna mais curta conecta7se ao 7ND 8" ##A9M o corpo do !(" normalmente terE um pequeno chanfro achatado indicando essa perna. 3e o !(" no acender, tente inverter os terminais (vocG no danificarE o !(" se li+E7lo invertido por um curto per%odo... no tenha medo...$.

int ledPin = 13; void setup(){ pinMode(ledPin, OUTPUT); } void loop(){ digitalWrite(ledPin, H !H); dela"(1###); digitalWrite(ledPin, $OW); dela"(1###); }

&s resistores possuem anis coloridos. (les servem para indicar o seu valor.

&&'$SCANDO (EDS ) 'D&&


.odemos utilizar o computador para controlar o Arduino. .ara isso +eralmente usamos uma lin+ua+em de pro+ramao. ;qui usaremos Pure Data, uma linguagem de programao visual.

.ara isso temos que fazer o -1digo (pro+rama$ que e/ecuta no Arduino se comunicar com o cdi+o que e/ecutado no computador, em Pure Data. Namos aproveitar o mesmo circuito que vocG construiu para piscar o !(", mas a+ora modificando o cdi+o Arduino. *ambm usaremos um -1digo em Pure Data, que chamamos de patch. ;bra seu Arduino e seu Pure Data e cole os respectivos cdi+os. int led.in O 89M void setup($P pin2ode(led.in, &?*.?*$M 3erial.be+in(=Q::$M R void loop($P int ms+ O 3erial.read($M if ((char$ms+ OO SlS$ P di+ital1rite(led.in, TUVT$M R else if ((char$ms+ OO SdS$ P di+ital1rite(led.in, !&1$M R R

&&*R$(+ANDO (EDS&&
;o invs de fazer o !(" somente li+ar e desli+ar, podemos fazG7lo brilhar. ?samos uma sa%da um pouco diferente do Arduino, um pino de sa%da di+ital que chamamos de .12. #eplique o circuito anterior, s que a+ora, ao invs de usar o pino 89, use o pino :, que permite sa%da .12 e +rave o cdi+o no Arduino para testE7lo.
int value = #; int ledpin = %; void setup(){ pinMode(ledpin, OUTPUT); } void loop() { &or(value = #; value '= ()); value*=)) { analogWrite(ledpin, value); dela"(3#); } &or(value = ()); value +=#; value,=)) { analogWrite(ledpin, value); dela"(3#); } }

&&*R$(+ANDO (EDS ) 'D&&


;ssim como fizemos um !(" piscar com Pure Data, podemos fazG7lo brilhar tambm. ;proveite o mesmo circuito que vocG criou para fazer um led brilhar (conectando o positivo do !(" no pino :

do Arduino e o ne+ativo no 7ND). 2odifique apenas o cdi+o no Arduino e replique o patch abai/o em Pure Data. int led.in O =M void setup($P pin2ode(led.in, &?*.?*$M 3erial.be+in(=Q::$M R void loop($P int ms+ O 3erial.read($M if (ms+ JO :$ P analo+1rite(led.in, ms+$M R R

&&*OT,ES&&
& interruptor momentWneo (popular boto$ um componente que conecta dois pontos de um circuito ao pressionE7lo. & e/emplo a se+uir li+a um !(" quando pressionamos o boto. Buando o boto estE livre (no pressionado$, no hE cone/o entre as suas duas pernas, de forma que o pino do Arduino estE conectado aos ;( e ao ler o pino, obtemos H!7H. Buando o boto fechado (pressionado$, ocorre a cone/o entre suas pernas, de forma que o pino do Arduino li+ado ao e obtemos LO<. (& pino ainda se mantm conectado aos ; volts, mas o resistor de pull-up faz com que o pino este,a mais prximo do VD".$ 3e o pino di+ital for desconectado da monta+em, o !(" poderE piscar de forma irre+ular. Usto porque dizemos que a entrada estE flutuando 7 isto , estarE entre valores de tenso eltrica aleatrios entre TUVT e !&1. K por isso que utiliza7se um resistor de pull-up ou pull-down no circuito.
int ledPin = 13; int inputPin = (; int val = #; void setup() { pinMode(ledPin, OUTPUT); pinMode(inputPin, -PUT); } void loop(){ val = digital.ead(inputPin); i& (val == H !H) { digitalWrite(ledPin, $OW); } else { digitalWrite(ledPin, H !H); } }

&*OT,ES ) 'D&&
"a mesma maneira que fizemos para os !("s, podemos no s controlar o Arduino com o computador, mas tambm fazer o inverso' controlar o computador com o Arduino- .ara isso, novamente, cole os cdi+os abai/o no Arduino e no Pure Data, aproveitando o mesmo circuito que vocG montou para o boto. Pure Data fornece inXmeros ob,etos (as cai/inhas...$ para lidarmos com todo tipo de sinal (sinal de Eudio, sinal de v%deo, )$. & ob,eto que estamos usando nesse patch, por e/emplo, faz a leitura de um arquivo A! qualquer. Com um pouco mais de trabalho, podemos criar facilmente uma drum machine. int pino@otao O 6M void setup($P pin2ode(pino@otao, UD.?*$M 3erial.be+in(=Q::$M R void loop($P int / O di+ital#ead(pino@otao$M 3erial.0rite(/$M R

&&'OTENC$-METROS&&

?m potenci"metro um simples boto +iratrio que fornece uma resistGncia variEvel e que pode ser lida pelo Arduino como um valor anal+ico. Do e/emplo a se+uir, esse valor usado para controlar a ta/a que o !(" estarE piscando. Conectamos trGs fios Y placa Arduino. & primeiro vai do terra do Arduino a partir da perna esquerda do potenci metro (ele possui +eralmente trGs pernas$. & se+undo fio vai dos ; volts do Arduino Y perna direita. & terceiro e Xltimo fio vai da entrada anal1gi-a = Y perna central do potenci metro. 3e +irarmos o potenci metro, alteramos a resistGncia em cada lado do contato eltrico que vai conectada Y sua perna central. Usso provoca a mudana na proximidade da perna central aos ; volts ou ao terra, o que implica numa mudana no valor anal+ico de entrada. Buando o potenci metro for levado at o final da escala, teremos por e/emplo zero volts a ser fornecido ao pino de entrada do Arduino e, assim, ao lG7lo obteremos zero. Buando +iramos o potenci metro at o outro e/tremo da escala, haverE < volts a ser fornecido ao pino do Arduino e, ao lG7lo, teremos 8:69. (m qualquer posio intermediEria do potenci metro, teremos um valor entre > e 5>=6, que serE proporcional Y tenso eltrica sendo aplicada ao pino do Arduino.
int ledPin = %; int potPin = #; int value = #; void setup() { pinMode(ledPin, OUTPUT); pinMode(potPin, -PUT); } void loop(){ value = analog.ead(potPin); dela"(1##); analogWrite(ledPin, value/0); }

&&'OTENC$-METROS ) 'D&&

Dovamente, vamos incluir Pure Data e o computador na histria. 2onte o circuito para o potenci metro que vocG ,E viu e cole os respectivos -1digo23onte e pat-0 no Arduino e Pure Data. & que estamos fazendo usando o potenci metro para controlar o raio de uma esfera desenhada na tela do computador. .odemos usar esse valor lido do potenci metro para modificar qualquer parWmetro de ob,etos em Pure Data (cor do ob,eto, posio na tela, rotao, tamanho, ...$. int pot.in O :M int value O :M void setup($ P pin2ode(pot.in, UD.?*$M 3erial.be+in(=Q::$M R void loop($P value O analo+#ead(pot.in$M 3erial.0rite(map(value, :, 8:69, :, 86Z$$M R

&&(DR&&
?m !"#, ou Light Dependent Diode faz o inverso que o !(". ;mbos so diodos, mas ao invs de emitir luz como fazem os !("s, o !"# a recebe- 3eu comportamento muito parecido com o potenci metro, conforme a intensidade da luz aumentar/diminuir tambm irE aumentar/diminuir a sua resistGncia, alterando a tenso do circuito e, por conse+uinte, permitindo que tenhamos 8:6F valores diferentes. Dada melhor do que testar seu comportamento- #eplique o circuito se+uinte e cole o -1digo no editor do Arduino.
int ledPin = %; int potPin = #; int value = #; void setup() { pinMode(ledPin, OUTPUT); pinMode(potPin, -PUT); } void loop(){ value = analog.ead(potPin); dela"(1##); analogWrite(ledPin, value/0); }

&&(DR ) 'D&&
Namos misturar novamente Arduino e Pure Data. 2onte novamente o circuito para usar o !"# e cole os cdi+os abai/o no Arduino e Pure Data. ;o invs de reproduzirmos um arquivo de Eudio, a+ora estamos usando o computador para criar (sintetizar$ o som- ?samos o !"# li+ando no Arduino para modificar a frequGncia dessa onda sonora. .orm, podemos utilizar outros ob,etos de Pure Data que lidam com Eudio para +erarmos qualquer som que dese,armos.

int entrada O :M int valor O :M void setup($ P pin2ode(entrada,UD.?*$M 3erial.be+in(=Q::$M R void loop($P valor O analo+#ead(entrada$M 3erial.0rite(valor$M R

&&'$E.O /omo entrada&&

.otenci metros variam sua resistGncia quando +iramos seu boto. !"#s variam a resistGncia conforme a intensidade de luz. .iezoeltricos so cristais +eram uma tenso conforme a presso incidida sobre eles. .odemos usE7los para capturar vibraes no ambiente. 3o tambm Xteis como sa%da' fazendo7os vibrar em uma determinada frequGncia, podemos produzir sons2as vamos primeiramente usE7los como entrada, para isso, replique o circuito se+uinte e cole o cdi+o-

int led.in O 89M int [noc[3ensor O :M bHte val O :M int state.in O !&1M int *T#(3T&!" O 8::M void setup($ P pin2ode(led.in, &?*.?*$M 3erial.be+in(=Q::$M R void loop($ P Nal Oanalo+#ead([noc[3ensor$M if (val JO *T#(3T&!"$ P state.in O -state.inM di+ital1rite(led.in, state.in$M delaH(8:$M R R

&&'$E.O /omo sa0da&&

;+ora sim vamos usar o piezoeltrico como sa%da. #eplique o circuito e o cdi+o em seu mundo real e abstrato. Vere som. ;bstratoC #ealC
int piezo O =M int ldr O :M void setup($ P R void loop($ P int sensor#eadin+ O analo+#ead(ldr$M int pitch O map(sensor#eadin+, F::, 8:::, 8::, 8:::$M tone(piezo, pitch, 8:$M R

&&'$E.O ) 'D&&
Auntando Pure Data Y sopa de circuitos e cdi+os... monte o circuito que usamos para receber os valores do piezoeltrico com o Arduino. #eplique o patch em Pure Data e ve,a o que acontece...

int entrada O :M int valor O :M void setup($ P pin2ode(entrada,UD.?*$M 3erial.be+in(=Q::$M R void loop($P valor O analo+#ead(entrada$M 3erial.0rite(valor$M R

&&MOTORES&&

2otores so muito interessantes quando dese,amos modificar o mundo f%sico Y nossa volta. Buando lidamos com eles, temos de nos preocupar em como li+E7los e desli+E7los na ordem correta, qual a intensidade que eles iro +irar, em qual sentido, ) ou se,a, so muitos detalhes para nos preocuparmos- .ara nos a,udar, podemos usar chip# especializados nessa tarefa. (/istem vErios chip# com essa finalidade. Namos usar o C! L=:6D nesse caso. #eplique o circuito e cdi+o em Arduino para compreender melhor.

int motor8.in8 O 89M // pin 8< on !6=9" int motor8.in6 O 86M // pin 8: on !6=9" int enable.in O 88M // pin = on !6=9" void setup($ P pin2ode(motor8.in8, &?*.?*$M pin2ode(motor8.in6, &?*.?*$M pin2ode(enable.in, &?*.?*$M di+ital1rite(enable.in, TUVT$M R void loop($ P di+ital1rite(motor8.in8, !&1$M di+ital1rite(motor8.in6, TUVT$M R

&&MOTORES ) 'D&&
;proveitando o circuito que vocG criou para li+ar um motor ao Arduino, modifique somente o

cdi+o e crie o patch em Pure Data.

11E2EM'(OS33
& que torna o software/hardware livre interessante que temos dispon%vel na internet uma infinidade de pro,etos prontos para montarmos e sair usando. (/perimente- .rocure pelos pro,etos e replique7os, modifique7os, use7os, abuse7os-

AUDUINO sintetizador de udio usando Arduino http://code.google.com/p/tinkerit/wiki/Auduino ARDUINO PUNK CONSOLE sintetizador e sequenciador de udio usando Arduino
http://www.beavisaudio.com/projects/digital/ArduinoPunkConsole/

444 RE5ER6NC$AS 444


1 1 1 1 1 1 1 1 1 Arduino 1 http://arduino.cc Pure Data 1 http://puredata.info Coletivo MuSA 1 http://musa.cc Artesanato de Volts 1 http://artesanato.devolts.org des).(centro 1 http://pub.descentro.org Robtica Livre 1 http://roboticalivre.org Metareciclagem 1 http://rede.metareciclagem.org Estdio Livre 1 http://estudiolivre.org MSST 1 http://devolts.org/msst

>> EVENTOS
Sub>Valadares (JUNHO 2010) 1 http://submidialogias.descentro.org/

FISL (JULHO 2010) 1 http://fisl.software.org LatinoWare (OUTUBRO 2010) 1 http://latinoware.org SoLiSC (NOVEMBRO 2010) 1 http://solisc.org.br

Patrocnio:

; cerve,a da +arotada nerd-

Chico j dizia: Computadores fazem arte, artistas fazem dinheiro. Usem:

Você também pode gostar