Arduino Workshop
Arduino Workshop
b reve
e introdução
{{{ ANTES DE COMEÇAR … }}}
Prazer, nós seremos as suas ferramentas! Nossos nomes s ão:
Download (Linux/Windows/MacOSX) →
http://arduino.cc
### CONHECENDO A INTERFACE ###
Tudo bem. Quer dizer então que o Arduino possui entradas e saídas digitais e analógicas. Mas, o
que isso significa?
E agora, sabendo dessas coisas, como faço para o Arduino desempenhar as tarefas de que preciso?
Assim como quando precisamos conversar com outros povos, para conversar com o Arduino,
precisamos aprender a sua linguagem. Por padrão, linguagens de alto nível para computadores são
baseadas no inglês, veja algumas construções que o Arduino
Arduino entende:
.setup()
Executado somente uma vez quando o microcontrolador é ligado
. loop()
.digitalRead(<pino>)
.analogRead(<pino>)
. random(<inicio>, <fim>)
.Serial.begin(9600)
.Serial.print(mensagem, <HEX/DEC/BIN/BYTE>)
.Serial.read()
Lê da porta serial
Pure Data foi desenvolvida por Miller Puckette com o objetivo de produzir e processar sinais de
áudio, porém, atualmente é utilizada para a produção e processamento de qualquer tipo de sinal. Ou
seja, podemos tanto trabalhor com sons quanto com gráficos e animações.
Misturando Pure Data com Arduino , tornamos o computador uma poderosa ferramenta para
amplificar nossas capacidades humanas de expressão.
__PISCANDO LEDS__
Na maioria das linguagens de programação, o primeiro programa que você aprende a escrever é
aquele que imprime "Olá mundo" na tela do computador.
computador. Como uma placa Arduino não tem tela,
em vez disso fazemos um LED piscar :-)
Os resistores possuem anéis coloridos. Eles servem para indicar o seu valor.
void setup(){
pinMode(ledPi
pinMode(ledPin,n, OUTPUT);
OUTPU T);
Serial.begin(9600);
}
void loop(){
int msg = Serial.read();
if ((char)msg == 'l') {
digitalWrite(ledPin, HIGH);
} else if ((char)msg == 'd') {
digitalWrite(ledPin, LOW);
}
}
__BRILHANDO LEDS__
Ao invés de fazer o LED somente ligar e desligar, podemos fazê-lo brilhar. Usamos uma saída um
pouco diferente do Arduino, um pino de saída digital que chamamos de PWM. Replique o circuito
anterior, só que agora, ao invés de usar o pino 13, use o pino 9, que permite saída PWM e grave o
código no Arduino para testá-lo.
int value = 0;
int ledpin = 9;
void setup(){
pinMode(ledpin,
pinMode(ledpin, OUTPUT);
}
void loop() {
for(value = 0; value <= 255; value+=5) {
analogWrite(ledpin, value);
delay(30);
}
for(value = 255; value >=0; value-=5) {
analogWrite(ledpin, value);
delay(30);
}
}
int ledPin = 9;
void setup(){
pinMode(ledPi
pinMode(ledPin,n, OUTPUT);
OUTPU T);
Serial.begin(9600);
}
void loop(){
int msg = Serial.read();
if (msg >= 0) {
analogWrite(ledPin, msg);
}
}
__BOTÕES__
O interruptor momentâneo (popular botão) é um componente que conecta dois pontos de um
circuito ao pressioná-lo. O exemplo a seguir liga um LED quando pressionamos o botão.
Quando o botão está livre (não pressionado), não há conexão entre as suas duas pernas, de forma
que o pino do Arduino está conectado aos 5V e ao ler o pino, obtemos HIGH. Quando o botão é
fechado (pressionado), ocorre a conexão entre suas pernas, de forma que o pino do Arduino é ligado
ao e obtemos LOW. (O pino ainda se mantém conectado aos 5 volts, mas o resistor de pull-up faz
com que o pino esteja mais próximo do GND.)
Se o pino digital for
f or desconectado da montagem, o LED poderá piscar de forma irregular.
ir regular. Isto
porque dizemos que a entrada está flutuando - isto é, estará entre valores de tensão elétrica
aleatórios entre HIGH e LOW.
LOW. É por isso que utiliza-se
utiliz a-se um resistor de pull-up ou pull-down no
circuito.
int ledPin = 13;
int inputPin = 2;
int val = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
}
void loop(){
val = digitalRead(inputPin);
digitalRead(inputPin);
if (val == HIGH) {
digitalWrite(ledPin,
digitalWrite(ledPin, LOW);
} else {
digitalWrite(ledPin,
digitalWrite(ledPin, HIGH);
}
}
_BOTÕES + PD__
Da mesma maneira que fizemos para os LEDs, podemos não só controlar o Arduino com o
computador, mas também fazer o inverso: controlar o computador com o Arduino! Para isso,
novamente, cole os códigos abaixo no Arduino e no Pure Data, aproveitando o mesmo circuito que
você montou para o botão.
Pure Data fornece inúmeros objetos (as caixinhas...) para lidarmos com todo tipo de sinal (sinal de
áudio, sinal de vídeo, …). O objeto que estamos usando nesse patch, por exemplo, faz a leitura de
um arquivo WAV qualquer.
qualquer. Com um pouco mais de trabalho, podemos criar facilmente
facil mente uma drum
machine.
int pinoBotao = 2;
void setup(){
pinMode(pinoBot
pinMode(pinoBotao,
ao, INPUT);
Serial.begin(9600);
}
void loop(){
int x = digitalRead(pinoBotao);
Serial.write(x);
}
__POTENCIÔMETROS__
Um potenciômetro é um simples botão giratório que
fornece uma resistência variável e que pode ser lida
pelo Arduino como um valor analógico. No
exemplo a seguir, esse valor é usado para controlar
a taxa que o LED estará piscando.
Se girarmos o potenciômetro, alteramos a resistência em cada lado do contato elétrico que vai
conectada à sua perna central. Isso provoca a mudança na proximidade da perna central aos 5 volts
ou ao terra, o que implica numa mudança no valor analógico de entrada. Quando o potenciômetro
for levado até o final da escala, teremos por exemplo zero volts a ser fornecido ao pino de entrada
do Arduino e, assim, ao lê-lo obteremos zero. Quando giramos o potenciômetro até o outro extremo
da escala, haverá 5 volts a ser fornecido ao pino do Arduino e, ao lê-lo, teremos 1023. Em qualquer
posição intermediária do potenciômetro, teremos um valor entre 0 e 1023, que será proporcional à
tensão elétrica sendo aplicada ao pino do Arduino.
int ledPin = 9;
int potPin = 0;
int value = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(potPin, INPUT);
}
void loop(){
value = analogRead(potPin);
delay(100);
analogWrite(ledPin, value/4);
}
__POTENCIÔMETROS
__POTENCIÔMETROS + PD__
Novamente, vamos incluir Pure Data e o computador na história. Monte o circuito para o
potenciômetro que você já viu e cole os respectivos código-fonte e patch no Arduino e Pure Data.
O que estamos fazendo é usando o potenciômetro para controlar o raio de uma esfera desenhada na
tela do computador. Podemos usar esse valor lido do potenciômetro para modificar qualquer
parâmetro de objetos em Pure Data (cor do objeto, posição na tela, rotação, tamanho, ...).
int potPin = 0;
int value = 0;
void setup() {
pinMode(potPin, INPUT);
Serial.begin(9600);
}
void loop(){
value = analogRead(potPin);
Serial.write(map(value, 0, 1023, 0, 127));
}
__LDR__
Um LDR, ou Light Dependent Diode faz o inverso que o LED. Ambos são diodos, diodos, mas ao invés de
emitir luz como fazem os LEDs, o LDR a recebe! Seu comportamento é muito parecido com o
potenciômetro, conforme a intensidade da luz aumentar/diminuir também irá aumentar/diminuir a
sua resistência, alterando a tensão do circuito e, por conseguinte, permitindo que tenhamos 1024
valores diferentes. Nada melhor do que testar seu comportamento! Replique o circuito seguinte e
cole o código no editor do Arduino.
int ledPin = 9;
int potPin = 0;
int value = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(potPin, INPUT);
}
void loop(){
value = analogRead(potPin);
analogRead(potPin);
delay(100);
analogWrite(ledPin, value/4);
}
__LDR + PD__
Vamos misturar novamente Arduino e Pure Data. Monte novamente o circuito para usar o LDR e
cole os códigos abaixo no Arduino e Pure Data.
Ao invés de reproduzirmos um arquivo de áudio, agora estamos usando o computador para criar
(sintetizar) o som! Usamos o LDR ligando no Arduino para modificar a frequência dessa onda
sonora. Porém, podemos utilizar outros objetos de Pure Data que lidam com áudio para gerarmos
qualquer som que desejarmos.
int entrada = 0;
int valor = 0;
void setup() {
pinMode(entrada,INPUT);
Serial.begin(9600);
}
void loop(){
valor = analogRead(entrada);
Serial.write(valor);
}
void setup() {
pinMode(ledPin,
pinMo de(ledPin, OUTPU
OUTPUT);
T);
Serial.begin(9600);
}
void loop () {
Val =analogRead(kno
=analo gRead(knockSensor);
ckSensor);
if (val >= THRESHOLD) {
statePin = !statePin;
digitalWrite(ledPin, statePin);
delay(10);
}
}
int piezo = 9;
int ldr = 0;
void setup() {
}
void loop () {
int sensorReading = analogRead(ldr);
int pitch
pi tch = map(sensorR
map(sensorReading,
eading, 400, 100 0, 100, 1000);
tone(piezo, pitch, 10);
}
__PIEZO + PD__
Juntando Pure Data à sopa de circuitos e códigos... monte o circuito que usamos para receber os
valores do piezoelétrico com o Arduino. Replique o patch em Pure Data e veja o que acontece...
int entrada = 0;
int valor = 0;
void setup() {
pinMode(entrada,INPUT);
Serial.begin(9600);
}
void loop(){
valor = analogRead(entrada);
Serial.write(valor);
}
__MOTORES__
Motores são muito interessantes quando desejamos modificar o mundo físico à nossa volta. Quando
lidamos com eles, temos de nos preocupar em como ligá-los e desligá-los na ordem correta, qual a
intensidade que eles irão girar, em qual sentido, … ou seja, são muitos detalhes para nos
preocuparmos! Para nos ajudar,
a judar, podemos usar chips especializados nessa tarefa. Existem vários
chips com essa finalidade. Vamos usar o CI L293D nesse caso. Replique o circuito e código em
Arduino para compreender melhor.
melhor.
int motor1Pin1
motor1Pin1 = 13; // pin 15 on L293D
int motor1Pin2 = 12; // pin 10 on L293D
int enablePin
enablePin = 11; // pin 9 on L293D
L293D
void setup() {
pinMode(motor1Pin1
pinMo de(motor1Pin1,, OUTPU
OUTPUT);
T);
pinMode(motor1Pin2
pinMo de(motor1Pin2,, OUTPU
OUTPUT);
T);
pinMode(enabl
pinMo de(enablePin,
ePin, OUTPU
OUTPUT);
T);
digitalWrite(enablePin,
digi talWrite(enablePin, HIGH
HIGH);
);
}
void loop()
loo p() {
digitalWrite(motor1Pin1,
digi talWrite(motor1Pin1, LOW);
LOW);
digitalWrite(motor1Pin2,
digi talWrite(motor1Pin2, HIGH
HIGH);
);
}
__MOTORES + PD__
Aproveitando o circuito que você criou para ligar um motor ao Arduino, modifique somente o
código e crie o patch em Pure Data.
>>EXEMPLOS<<
O que torna o software/hardware
software/hardware livre interessante é que temos disponível na internet uma
infinidade de projetos prontos para montarmos e sair usando. Experimente! Procure pelos projetos e
replique-os, modifique-os, use-os, abuse-os!
AUDUINO
sintetizador de áudio usando Arduino
http://code.google.com/p/tinkerit/wiki/Auduino