27 fevereiro 2013

Por onde eu começo ?

Creio que alguns tenham ficado confusos sobre o blog ter começado praticamente já com os projetos, sem "ensinar" a programar o Arduino.

Arduino onde começar
Entendo que existe material suficiente na internet para quem quer começar a utilizar o Arduino, e não vale a pena ficar reescrevendo esse artigos.


Mas apenas para falar um pouco sobre como eu comecei a aprender sobre o Arduino :

  • Pesquisei sobre o Arduino na internet : projetos, custos, possibilidades, prós e contras.
  • Comprei um Arduino Uno (veja o artigo Qual placa Arduino comprar ?, no qual eu faço um comparativo entre as principais placas do mercado)
  • Entrei no site oficial do Arduino (www.arduino.cc) e baixei a IDE (ambiente de programação). Como já falei anteriormente, é um dos lugares mais confiáveis para baixar a IDE e evitar surpresas desagradáveis.
  • Garimpei na internet alguns programas de exemplo, e também usei os exemplos contidos na própria IDE
  • A partir daí, comecei a desenvolver meus próprios programas

Tenho experiencia com eletronica e programação, o que obviamente facilita um pouco as coisas, mas para quem não tem essa experiência, um pouco de curiosidade e vontade de aprender resolvem o problema. Como eu disse, o material na internet é farto, e sempre haverá gente disposta a ajudar, como este que vos escreve. ;-)

Gosta de livros ? Se dá melhor lendo um manual em papel ? Ótimo, uma excelente dica para quem está começando a estudar Arduino é o livro Arduíno Básico, de Michael McRoberts, como destaco neste post.


Cada um tem seu ritmo e um método de estudo preferido. O importante é não ficar parado. Encontre o melhor caminho para você, e mãos à obra !

22 fevereiro 2013

Resistor de elevação

Por acaso você já montou um circuito básico pra acender um led, utilizando um botao, e ele não funcionou direito ? Tipo... acendeu quando não deveria e não acendeu quando deveria ? Pois é, isso pode ser culpa do resistor de elevação (ou resistor pull-up).

Opa ! O que é isso ?

Bom, resistor de elevação é um componente (resistor) que você coloca em determinado circuito, para que o circuito não fique "perdido" quando nada está acontecendo. Parece complicado ? Nem tanto, vamos a um exemplo prático. Você faz um circuito simples, como este abaixo :

resistor pull up arduino

usando o  seguinte programa :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
// Projeto : Circuito teste resistor de elevacao
// Autor : Arduino & Cia

void setup()
{
  pinMode(10,OUTPUT); // Pino led
  pinMode(6,INPUT);   // Pino botão
}

void loop()
{ 
  int leitura=digitalRead(6);
  if (leitura == 0)
  { 
     digitalWrite(10,1);
  }
  else
  {
     digitalWrite(10,0);
  }
}

Quando vc está apertando o botão, tudo bem, o Arduino sabe que ali está passando corrente, etc e tal, e acende o led, mas e quando o botão não está apertado ? Qual o estado ? Positivo, negativo, ou indefinido ? É justamente nesse estado "indefinido" que as coisas começam a complicar, gerando resultados diversos, e o Arduino se perde para saber o que está acontecendo no circuito. O resultado é um led que fica meio aceso, meio apagado, piscando às vezes, ou seja, perdido.

Utilizando o circuito anterior e uma pequena resistência (destacada no círculo vermelho), o problema desaparece. Mas qual a mágica ? Não há mágica. Utilizando um resistor de elevação, como este componente é chamado, você define um estado (HIGH) para o botão, quando o mesmo não é pressionado. Veja o circuito abaixo :

Circuito com resistor de elevação / pull-up
Felizmente o Arduíno tem uma função que permite que você acione um resistor de elevação interno, sem precisar adicionar componentes à placa. Para ativa-lo, basta adicionar a linha abaixo no programa :

digitalWrite(6,HIGH);

Seu programa fica assim :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
void setup()

{
  pinMode(10,OUTPUT); // Pino led
  pinMode(6,INPUT);   // Pino botão
  digitalWrite(6,HIGH); // Ativa o resistor de elevação
}

void loop()
{
  //Codigo aqui
}

Desta maneira, você pode usar normalmente o circuito da figura 1, sem se preocupar em colocar mais componentes no circuito.

Obviamente existe uma resposta "eletrônica" para essa questão do resistor de elevação, mas achei que a explicação ficaria melhor em termos gerais, sem muitos detalhes técnicos.

Ah ! da mesma forma que o "pull-up", existe o resistor "pull-down", que ligado ao circuito, mantém o sinal em estado LOW (baixo). ;-)

Comentários para enriquecer o post serão bem vindos. Até a próxima !

19 fevereiro 2013

LM35 - Sensor de Temperatura

O LM35 é um sensor de temperatura fabricado pela National Semiconductor. Varia a tensão de saída (pino Vout) de acordo com a temperatura medida na superfície do sensor. No Arduino, usamos uma das entradas analógicas para ler esta tensão do LM35 e calcular a temperatura.

sensor de temperatura LM35
 
No circuito abaixo, podemos ver a ligação do LM35, assim como os 3 leds na protoboard, que acendem de acordo com a variação da temperatura. Todo esse material você encontra no Kit Arduino Iniciante , disponível na loja FILIPEFLOP :

Circuito LM35 Arduino
Ao executar o programa, o LM35 vai enviar informações pela entrada analógica do Arduino, que por sua vez vai tratar essas informações, converter a tensão do sensor para graus celsius e fahrenheit, armazenar os valores máximo e mínimo, e enviar essas informações pela serial, além de acender os leds.

Após compilar e transferir o programa para o Arduino, abra o Monitor Serial da IDE do Arduino e você verá uma tela parecida com esta :

LM35 - Serial monitor

Existem outros sensores de temperatura mais modernos, como o DS18B20, que é um sensor digital, possui bibliotecas próprias, possibilidade de ligar mais de um sensor na mesma porta do Arduino, e várias outras vantagens. Vou testar este sensor posteriormente e farei um post específico.

E já que falamos em datasheet no post anterior, abaixo os links para os datasheets dos sensores citados :

Datasheet LM35 : 

Datasheet DS18B20 :


Abaixo, o programa relativo ao circuito apresentado nesse post :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//Programa : Sensor de temperatura LM35
//Arduino & Cia

int pin = 0; // Pino analogico para ligacao do LM35

// Variaveis que armazenam a temperatura em Celsius e Fahrenheit
int tempc = 0,tempf=0; 
int samples[8]; // Array para precisão na medição

// Variáveis que guardam a temperatura máxima e mínima
int maxtemp = -100,mintemp = 100; 
int i;

void setup()
{
  Serial.begin(9600);     // Inicializa comunicação serial
  pinMode(13, OUTPUT);    // Define pino 13 como saída (led verde)
  pinMode(12, OUTPUT);    // Define pino 12 como saída (led vermelho)
  pinMode(11, OUTPUT);    // Define pino 11 como saída (led amarelo)
}

void loop()
{
  for(i = 0;i<=7;i++){ // Loop que faz a leitura da temperatura 8 vezes
    samples[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
    //A cada leitura, incrementa o valor da variavel tempc
    tempc = tempc + samples[i]; 
  delay(100);
}

// Divide a variavel tempc por 8, para obter precisão na medição
tempc = tempc/8.0; 
//Converte a temperatura em Fahrenheit e armazena na variável tempf
tempf = (tempc * 9)/ 5 + 32; 
//Armazena a temperatura máxima na variável maxtemp
if(tempc > maxtemp) {maxtemp = tempc;} 
//Armazena a temperatura máxima na vari[avel mintemp
if(tempc < mintemp) {mintemp = tempc;} 

//Se a temperatura estiver abaixo de 25, acende o led verde
if(tempc < 25) 
  {
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
    digitalWrite(11, LOW);
  }

//Se a temperatura estiver acima de 28, acende o led vermelho
if(tempc > 28) 
  {
    digitalWrite(12, HIGH);
    digitalWrite(13, LOW);
    digitalWrite(11, LOW);
  }

//Se a temperatura estiver acima de 25 e abaixo de 28, acende o led amarelo
if((tempc > 25) && (tempc < 28)) 
  {
    digitalWrite(11, HIGH);
    digitalWrite(12, LOW);
    digitalWrite(13, LOW);
  }

// As linhas abaixo enviam para o monitor serial a temperatura em 
// Celsius e Fahrenheit,
// e também as temperaturas máxima e mínima registradas

Serial.print(tempc,DEC);
Serial.print(" Cels., ");
Serial.print(tempf,DEC);
Serial.print(" Fahr. -> ");
Serial.print(" Min : ");
Serial.print(mintemp,DEC);
Serial.print("  Max: ");
Serial.println(maxtemp,DEC);

tempc = 0;
delay(1000); // Aguarda 1 segundo e reinicia o processo
}

Até a próxima !


17 fevereiro 2013

Datasheet

O que é e para que serve um datasheet ?

Ok, vc montou o seu circuito, tudo funcionou perfeitamente, o led acendeu, o botão funcionou, o motor girou mas... você não ficou satisfeito. Quer mais detalhes sobre a pinagem dos componentes, sobre a razão do circuito ter usado um resistor de 100K e não um de 50 ohms, ou até mesmo ter mais informações sobre como determinado componente funciona.

É aí que entram os datasheets, que são "manuais detalhados" dos componentes, fornecendo informações como potência, resistência, dimensões, pinagem, e tudo o mais que você precisa não só para entender como o componente funciona, mas também para não danificá-lo na hora de montar o circuito.

Abaixo, o datasheet do relé CP1CR, que usamos anteriormente para acender uma lâmpada :



datasheet

Nem sempre é fácil encontrar um datasheet, especialmente de componentes não tão comuns ou muito antigos, mas o nosso amigo Google ajuda em muito nessa tarefa. Em algumas pesquisas que eu fiz, encontrei sites que "vendem" datasheets, principalmente de componentes mais raros, mas se vocë se dedicar na pesquisa, certamente vai achar o que procura, até porque o interesse do fabricante é que você utilize os componentes de maneira correta.


16 fevereiro 2013

Sequencial de Leds - Circuito e Codigo

Neste post vou apresentar o circuito do sequencial de leds, referente ao vídeo que comentei anteriormente.

No circuito, utilizei resistores de 10 K, e nas extremidades, resistores de 4,7 K, apenas para dar um efeito diferente. O potenciômetro é de 10 K, mas pode ser utilizado um de menor valor.

Não esqueça de, SEMPRE, desligar o cabo usb ou o conector de força quando estiver montando o circuito.


sequencial de leds arduino
 Quem tem o livro Arduino Básico vai notar que o código é praticamente igual ao apresentado no livro (Projeto 6). Fiz algumas alterações de nomes de variáveis e coloquei uma linha para escrever o valor da entrada analógica na saída serial, apenas para fins de acompanhamento. Experimente abrir o monitor serial da IDE, girar o potenciometro e veja como os valores vão se alterando, conforme a figura abaixo :




 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// Programa : Sequencial de Leds com potenciometro
// Baseado no projeto sequencial de leds do Livro 
// Arduino Basico - Autor Michael Roberts
// Alteracoes : Arduino & Cia

//Cria um array para os pinos dos Leds
byte Pinosled[]={4,5,6,7,8,9,10,11,12,13};

int ledDelay; // Intervalo entre as alterações

int direcao = 1; // Direcao do "movimento"

int ledatual = 0;

unsigned long changeTime;

//Pino analogico 2 definido como entrada para o potenciometro
int potPin = 2; 

void setup()
{
  Serial.begin(9600); // Inicializa a comunicacao serial
  for (int x=0; x<10; x++) // Loop que define todos os pinos como saída
  {
    pinMode(Pinosled[x],OUTPUT);
  }
  changeTime=millis();
}

void loop()

{
  // Varia o valor de ledDelay conforme o valor do potenciometro, 
  // alterando a velocidade do efeito
  ledDelay = analogRead(potPin); 

  // Escreve o valor de leitura do potenciometro na saida serial
  Serial.println(ledDelay); 

  // Verifica se já transcorreram ledDelay ms desde a última alteração
  if ((millis() - changeTime) > ledDelay) 

  {
    changeLED();
    changeTime = millis();
  }
}

void changeLED()
{
  for (int x=0; x<10; x++)   //Apaga todos os LEDs
  {
    digitalWrite(Pinosled[x], LOW);
  }
  digitalWrite(Pinosled[ledatual], HIGH); // Acende o LED atual
  ledatual += direcao;  //incrementa de acordo com o valor de direction
  //altera a direção se tivermos atingido o fim
  if (ledatual == 9) {direcao = -1;}
  if (ledatual == 0) {direcao = 1;}
}

13 fevereiro 2013

Sequencial de Leds - Introdução

No próximo artigo, vou apresentar o circuito e programa de um  "Sequencial de leds", com velocidade controlada por um potenciometro, conforme publicado por mim no Youtube.

Não viu o vídeo ainda ? Então veja...  :-)



Até lá !

06 fevereiro 2013

Ligando uma lâmpada com módulo relé


Conforme prometido, segue esquema para ligação de uma lâmpada utilizando módulo relé. Procurei deixar o circuito o mais simples possível, para melhor entendimento.

Se você prefere montar seu próprio circuito, utilizando transistor, diodo e o próprio relé, recomendo a leitura deste post :


Não vou aqui me aprofundar sobre o assunto relé, pois há muito material disponível na internet. Basicamente, um relé é um "interruptor" acionado por uma determinada tensão. Ao se aplicar a tensão nos terminais de entrada, uma bobina é acionada, ativando ou desativando o contato interno (ligando ou desligando uma chave).

No circuito abaixo, NC corresponde ao contato NORMAL FECHADO (NORMAL CLOSE), C ao Comum, e NO ao NORMAL ABERTO (NORMAL OPEN).


ligando lampada rele
O programa abaixo ativa a porta 7 do Arduino, acionando a bobina do relé, que por sua vez acende a lâmpada. Depois de 5 segundos, o ciclo é reiniciado.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Programa de teste do modulo rele
// Autor : Arduino e Cia.
//
// Ligar o pino S do rele no pino 7 do Arduino
// Ligar o pino + do rele no pino 5V do Arduino
// Ligar o pino - do rele no pino GND do Arduino

//define a saida a ser utilizada para o acionamento do rele
int sinalparaorele = 7; 

void setup()
{
  pinMode(sinalparaorele, OUTPUT); //Define o pino como saida
}

void loop()

{
  digitalWrite(sinalparaorele, HIGH); //Aciona o rele
  delay(5000); //Aguarda 5 segundos
  digitalWrite(sinalparaorele, LOW); //Desliga o rele
  delay(5000); //Aguarda 5 segundos e reinicia o processo
}

Um exemplo simples, mas que ilustra bem o funcionamento do módulo. Até mais !

Atualizado : Veja neste artigo uma variação deste circuito, mostrando como utilizar um botão para controlar o acionamento do relé.


05 fevereiro 2013

Módulo relé Arduino

Hoje vou falar sobre o módulo relé para Arduino, como o da foto abaixo :

Arduino relé

Com ele você pode acionar lâmpadas, equipamentos eletrônicos, motores, enfim, há uma série de possibilidades. E sem precisar montar complicados circuitos para isso, já que essa placa tem praticamente tudo o que é necessário : diodo, transistor, relé (óbvio) e conectores.

Características dessa placa :
  •  Controle AC / DC
  •  Permite controle de cargas 220V AC
  •  LED indicador de status
  •  Contatos Normal Aberto e Normal Fechado
Prefere montar seu próprio módulo relê ? Sem problema algum, afinal esta é uma das motivações para mexer com o Arduino, mas se você não quer "perder" tempo correndo atrás de componentes e montando um circuito, esta placa é uma ótima opção. Sempre tenho uma dessas de reserva, caso esteja com pressa e falte(m) componente(s) para montar o circuito sozinho.

Amanhã vou falar sobre o esquema de ligação do módulo relé, que é bem simples. Até !