segunda-feira, 27 de janeiro de 2014

Arduino - Buzzer

Objetivo: Controlar o Buzzer (mini alto-falante)

Como base, vamos usar o capítulo 7 do SainSmart Uno Starter Kits Manual:
Download do site SainSmart.com

Em caso de problemas para acessar o documento, tente:
download Tutorial

Componentes:

- Arduino, conectado a computador via USB
- Buzzer
- breadboard (placa de conexão) e cabos de conexão
- Opcionais: LED tricolor, 4 resistores de 220 Ohms

Projetos:

. Exemplo do Manual - Sirene
Código do Exemplo do Manual alterado para gerar apenas 2 ciclos:
https://docs.google.com/file/d/0B2SYabtePBegbW01VmE2OGFoTkk

. Outro Exemplo do Manual - Melodia

Código do Exemplo do Manual (alterado para usar a porta 7:
https://docs.google.com/file/d/0B2SYabtePBegZEsyRTVrcG9WZTQ
Se precisar, arquivo com a biblioteca das frequências das notas musicais:
https://docs.google.com/file/d/0B2SYabtePBegdVZMU1FFTnc0MFE/

. Do-Ré-Mi

Código do Do-Ré-Mi:
https://docs.google.com/file/d/0B2SYabtePBegZEsyRTVrcG9WZTQ
Se precisar, arquivo com a biblioteca das frequências das notas musicais:
https://docs.google.com/file/d/0B2SYabtePBegdVZMU1FFTnc0MFE/

. Compositor

Código do Compositor:
https://docs.google.com/file/d/0B2SYabtePBegdWhpdGJBOEVmZzA

Vídeo com a montagem do projeto e as alterações:

terça-feira, 21 de janeiro de 2014

Arduino - LED Tricolor

Objetivo: Controlar LED tricolor

Como base, vamos usar o capítulo 6 do SainSmart Uno Starter Kits Manual:
Download do site SainSmart.com

Em caso de problemas para acessar o documento, tente:
download Tutorial

Projetos:

. Exemplo do Manual

Código do Exemplo do Manual alterado para usar portas 9, 10 e 11:
https://docs.google.com/file/d/0B2SYabtePBegbjlTbm9hbFpkeEU

. Montar um semáforo

Código do Semáforo:
https://docs.google.com/file/d/0B2SYabtePBegbjlTbm9hbFpkeEU

. Gerador de Cores

Código do Gerador de Cores:
https://drive.google.com/file/d/0B2SYabtePBegUDVZbmY5SEUwSG8

. LED Psicodélico

Código do LED Psicodélico
https://drive.google.com/file/d/0B2SYabtePBegQVN0Q3lRRjVZYlE

Vídeo com a montagem do projeto e as alterações:

segunda-feira, 20 de janeiro de 2014

Arduino - Porta Analógica - Controle de Brilho do LED

Objetivo: Controlar a intensidade do brilho do LED externo, usando porta em modo analógico.

Como base, vamos usar o capítulo 5 do SainSmart Uno Starter Kits Manual:
Download do site SainSmart.com

Em caso de problemas para acessar o documento, tente:
download Tutorial

Além do exemplo do manual, vamos:
- Simular uma porta analógica, ligando e desligando rapidamente uma porta digital
- Fazer uma nova versão do painel da Supermáquina

Vídeo com a montagem do projeto e as alterações:


Código da Simulação de Porta Analógica:
https://docs.google.com/file/d/0B2SYabtePBegQzV2M3g2bjJaNmc/edit

/*
Simulando PWM
simulando PWM com digitalWrite
autor: @vintesegundos
*/

int led1=9;   // LED 1 = pino 9

int intensidadeMinima=20;   // Faixa da Intensidade de 20 a 200
int intensidadeMaxima=200;   
int passo = 1;// Qtde. de Brilho que muda a cada passo
int ciclo = 20;   // fator de ajuste para que a piscar do LED nao seja percebido

int intensidade = intensidadeMinima;   // Intensidade inicial LEDs = Intensidade Minima

// a rotina de setup() roda uma vez, ao se apertar o botão de RESET
void setup() {
   pinMode(led1, OUTPUT);   // Pino 9 = Saida
}

// a rotina loop roda repetida e eternamente
void loop() {

   // Liga o led por uma parte do periodo
   digitalWrite(led1, HIGH);
   delay (intensidade/ciclo);

   // Desliga o led pelo resto do periodo
   digitalWrite(led1, LOW);
   delay ((intensidadeMaxima-intensidade)/ciclo);

   // aumenta (ou diminui) a intensidade para o proximo ciclo
   intensidade = intensidade + passo;

   // se chegou no limite inferior ou superior, altera a direcao
   if (intensidade == intensidadeMaxima || intensidade == intensidadeMinima) {
      passo = -passo;
   }
}

/* fim do codigo */


Código da Comparação do PWM em portas em modo digital e modo analógico:
https://docs.google.com/file/d/0B2SYabtePBegT1RnQXd2QmlIWGc/edit

/*
Simulando PWM
simulando PWM com digitalWrite e comparando com analogWrite
autor: @vintesegundos
*/

int led1=9;   // LED 1 = pino 9

int intensidadeMinima=20;   // Faixa da Intensidade de 20 a 200
int intensidadeMaxima=200;   // Fim da faixa
int passo = 1;   // Qtde. de Brilho que muda a cada passo
int ciclo = 20;   // fator de ajuste para que a piscar do LED nao seja percebido

int intensidade = intensidadeMinima;   // Intensidade inicial LEDs = Intensidade Minima

// a rotina de setup() roda uma vez, ao se apertar o botão de RESET
void setup() {
   pinMode(led1, OUTPUT);   // Pino 9 = Saida
}

// a rotina loop roda repetida e eternamente
void loop() {

   // Liga o led por uma parte do periodo
   digitalWrite(led1, HIGH);
   delay (intensidade/ciclo);

   // Desliga o led pelo resto do periodo
   digitalWrite(led1, LOW);
   delay ((intensidadeMaxima-intensidade)/ciclo);

   // aumenta (ou diminui) a intensidade para o proximo ciclo
   intensidade = intensidade + passo;

   // se chegou no limite inferior ou superior, altera a direcao
   if (intensidade == intensidadeMaxima || intensidade == intensidadeMinima) {
      passo = -passo;
   }
}

/* fim do codigo */


Código da Supermáquina (Versão 3):
https://docs.google.com/file/d/0B2SYabtePBegZjItNEdyQm5NX0U/edit

/*
Supermáquina 3
Versão 3 do painel imitando a supermáquina
autor: @vintesegundos
*/

int led1=9;   // 4 portas analógicas 9,10,11 e 3
int led2=10;
int led3=11;
int led4=3;

int intensidadeMinima=0;   // Faixa de Brilho: de 0 a 200
int intensidadeMaxima=200;
int intensidadeMaximaPonta=250;
int passo = 10;   // Qtde. de Brilho que muda a cada passo

int ledApagando = led1;   // Estado inicial
int ledAcendendo = led2;
int intensidadeApagando = intensidadeMaxima;
int intensidadeAcendendo = intensidadeMinima;
int sentido = 0;

// a rotina de setup() roda uma vez, ao se apertar o botão de RESET
void setup() {
   pinMode(led1, OUTPUT); // Pino 9 = Saida
   pinMode(led2, OUTPUT); // Pino 10 = Saida
   pinMode(led3, OUTPUT); // Pino 11 = Saida
   pinMode(led4, OUTPUT); // Pino 3 = Saida

}

// a rotina loop roda repetida e eternamente
void loop() {

   // assinala o valor da intensidade ao LED
   analogWrite(ledApagando, intensidadeApagando);
   analogWrite(ledAcendendo, intensidadeAcendendo);

   // atualiza os valores para o próximo passo
   intensidadeApagando = intensidadeApagando - passo;
   intensidadeAcendendo = intensidadeAcendendo + passo;
   
   // Verifica se eh hora de mudar de par de LEDs acendendo e apagando
   if (intensidadeApagando == intensidadeMinima) {

      intensidadeApagando=intensidadeMaxima;
      intensidadeAcendendo=intensidadeMinima;

      switch (ledApagando){
         case 9:
            ledApagando=led2;
            ledAcendendo=led3;
            sentido=0;
            break;
         case 10:
            if (sentido==0){
               ledApagando=led3;
               ledAcendendo=led4;
            }
            else {
               ledApagando=led1;
               ledAcendendo=led2;
               delay(150);
            }
            break;
         case 11:
            if (sentido==0){
               ledApagando=led4;
               ledAcendendo=led3;
               delay(150);
            }
            else {
               ledApagando=led2;
               ledAcendendo=led1;
            }
            break;
         case 3:
            ledApagando=led3;
            ledAcendendo=led2;
            sentido=1;
            break;
      }
   }

   // espera 12 ms
   delay(12);
}

/* fim do codigo */


sexta-feira, 17 de janeiro de 2014

Arduino - Controle de LEDs Externos

O objetivo deste POST é controlar LEDs (pequenas lâmpadas coloridas) usando as portas digitais do Arduíno.

Como base, vamos usar o capítulo 4 do SainSmart Uno Starter Kits Manual:
Download do site SainSmart.com

Em caso de problemas para acessar o documento, tente:
download Tutorial

Vídeo com a montagem do projeto e as alterações:



Código para o LED piscando:
https://docs.google.com/file/d/0B7iDnVrlNgi4ekFvRlV6aHRDVTg/edit

/*
Controle de LED
*/

int ledPin8=8;   //selecionar uma porta digital de I/O

// codigo executado apenas uma vez
void setup()
{
   pinMode(ledPin8,OUTPUT);   // assinala a porta como Saida
}

// codigo executado repetidamente
void loop()
{
   digitalWrite(ledPin8,HIGH);   // liga o led 8
   delay(1000);   // espera 1000ms (1 segundo)
   digitalWrite(ledPin8,LOW);   // apaga o led 8
   delay(1000);   // delay 1000ms, or 1 second
}

/* fim do codigo */



Código para Pisca Pisca:
https://docs.google.com/file/d/0B7iDnVrlNgi4dzBiOHFwQTVTTUE/edit
/*
Controle de LED
LED azul pisca alternadamente com LED vermelho
*/

int ledPin8=8;   //selecionar uma porta digital de I/O
int ledPin9=9;

void setup()
{
   pinMode(ledPin8,OUTPUT);   //assina a porta como Saida
   pinMode(ledPin9,OUTPUT);
}

void loop()
{
   digitalWrite(ledPin8,HIGH); //liga o led 8
   digitalWrite(ledPin9,LOW); //desliga o led 9
   delay(1000); //espera 1000ms (1 segundo)
   digitalWrite(ledPin8,LOW); //apaga o led 8
   digitalWrite(ledPin9,HIGH); //liga o led 9
   delay(1000); //delay 1000ms, or 1 second
}

/* fim do codigo */



Código para Semáforo:
https://docs.google.com/file/d/0B7iDnVrlNgi4TldpZ1RydjF5SkE/edit

/*
Semaforo
*/

int ledPin8=8;   // selecionar uma porta digital de I/O
int ledPin9=9;
int ledPin10=10;

void setup()
{
   pinMode(ledPin8,OUTPUT);   // assinala a porta como Saida
   pinMode(ledPin9,OUTPUT);
   pinMode(ledPin10,OUTPUT);
}

void loop()
{
   digitalWrite(ledPin9,LOW);   // desliga o led 9 (amarelo)
   digitalWrite(ledPin8,HIGH);   // liga o led 8 (vermelho)
   delay(4000);   // espera 4000ms (4 segundos)
   digitalWrite(ledPin8,LOW);   // apaga o led 8 (vermelho)
   digitalWrite(ledPin10,HIGH);   // liga o led 10 (verde)
   delay(3000);   // espera 3000ms (3 segundos)
   digitalWrite(ledPin10,LOW);   // apaga o led 10 (verde)
   digitalWrite(ledPin9,HIGH);   // liga o led 9 (amarelo)
   delay(1000);   // espera 1000ms (1 segundo)
}
/* fim do codigo */



Código para Supermáquina:
https://docs.google.com/file/d/0B7iDnVrlNgi4Y3hNY3diUUY3aDA/edit

/*
Supermaquina
Imita o painel de KITT, o carro do seriado supermaquina
*/

int ledPin8=8;   // selecionar uma porta digital de I/O
int ledPin9=9;
int ledPin10=10;
int ledPin11=11;

void setup()
{
   pinMode(ledPin8,OUTPUT);   // assinala a porta como Saida
   pinMode(ledPin9,OUTPUT);
   pinMode(ledPin10,OUTPUT);
   pinMode(ledPin11,OUTPUT);
}

void loop()
{
   digitalWrite(ledPin8,HIGH);   // liga o led 8
   delay(100);   // espera 100ms

   digitalWrite(ledPin9,LOW);   // desliga o led 9
   delay(400);

   digitalWrite(ledPin9,HIGH);   //liga o led 9
   delay(100);

   digitalWrite(ledPin8,LOW);   // apaga o led 8
   delay(200);

   digitalWrite(ledPin10,HIGH);   // liga o led 10
   delay(100);

   digitalWrite(ledPin9,LOW);   // apaga o led 9
   delay(200);

   digitalWrite(ledPin11,HIGH);   // liga o led 11
   delay(100);

   digitalWrite(ledPin10,LOW);   // apaga o led 10
   delay(400);

   digitalWrite(ledPin10,HIGH);   // liga o led 10
   delay(100);
   
   digitalWrite(ledPin11,LOW);   // apaga o led 11
   delay(200);

   digitalWrite(ledPin9,HIGH);   // liga o led 9
   delay(100);

   digitalWrite(ledPin10,LOW);   // apaga o led 10
   delay(200);
}

/* fim do codigo */



LED
LED é um diodo emissor de luz, que pode ser de várias cores.
Tem polaridade: o pino mais comprido é positivo,
o lado em que a base do LED é achatada é o negativo.
http://pt.wikipedia.org/wiki/Led

Instalando Ambiente de Desenvolvimento

A instalação do Ambiente de Desenvolvimento do Arduino é feita em poucos minutos:



Endereço do download:
http://arduino.cc/en/Main/Software

Código "Blink":
https://docs.google.com/file/d/0B7iDnVrlNgi4NVdPWkFLaFBuemM/edit

/*
   Blink
   Liga o LED da placa do Arduino por um segundo,
   depois desliga por um segundo, repetidamente

   Pino 13 tem um LED conectado na maioria dos Arduinos
*/

int led = 13;   // dah o nome de 'led' para a porta 13

// A rotina setup() roda uma vez, na inicializacao do programa
void setup()
{
   pinMode(led, OUTPUT);   // indica a porta led como Saida.
}

// As instrucoes da rotina loop rodam repetidamente o tempo todo
void loop()
{
   digitalWrite(led, HIGH);   // acende o Led
   delay(1000);   // espera 1000ms (1 segundo)
   digitalWrite(led, LOW);   // apaga o Led
   delay(1000);   // espera 1000ms (1 segundo)
}

/* fim do codigo */



Código "Alo Mundo":
https://docs.google.com/file/d/0B7iDnVrlNgi4WUozNVZRYzI4TGs/edit

/*
Alo Mundo
Envia texto para o computador via porta serial
*/

// codigo roda uma vez:
void setup()
{
   Serial.begin(9600);   // inicializa serial, velocidade 9600 bps
   Serial.println("Alo, Mundo Cruel");   // envia texto para o Computador
}

// codigo que roda repetidamente
void loop()
{
}

/* fim do codigo */



Comentário nos códigos:
// comentário - tudo na linha que vem à direita de '//' é ignorado pelo computador
/*
tudo o que está entre
esses delimitadores é considerado comentário,
mesmo que em múltiplas linhas.
*/

quarta-feira, 15 de janeiro de 2014

Introdução

Como tenho curiosidade em aprender mais sobre o Arduíno, comecei esse blog para mostrar minha evolução.

O blog pode ser interessante para quem também quer saber mais sobre o Arduíno e evitar os erros que eu vou cometer.

Para começar, eu obtive um kit com um Arduíno UNO R3 e vários componentes, suficientes para desenvolver mais de 10 projetos diferentes:



Você pode adquirir um kit igual esse no site do fabricante:
http://www.sainsmart.com

Ou de outros varejistas, como por exemplo, a Amazon.

Video apresentando o conteúdo do kit: