27 maio 2013

Problemas com associação de arquivos .INO

Aproveitando que no post anterior falei sobre a nova IDE do Arduino, você já teve problemas com a associação dos arquivos com extensão .INO, ou seja, ao clicar no nome_do_programa.ino, ao invés de abrir a nova IDE, ele continua abrindo a versão antiga ?

Eu tive esse problema, mas por mais que eu tenha mexido no Windows, cancelando e refazendo a associação, o Windows continuava abrindo a IDE antiga, e como eu sempre instalo a IDE manualmente, baixando o arquivo zip, é normal que alguma coisa saia errado.

O que acabou funcionando foi mexer no Registro do Windows, alterando o caminho da pasta e apontando para a versão nova da IDE. Como fazer isso ? Siga os passos abaixo.

No Windows, clique no menu INICIAR, depois em EXECUTAR, e digite REGEDIT. A seguinte tela será aberta :

associacao arquivo ino

No menu Edit, escolha a opção PROCURAR :

Tela Regedit - procurar

digite o nome da pasta atual, a minha, no caso, era "ARDUINO-1.0.4" :

Tela Regedit - localizando pasta Arduino

O comando fará uma varredura no Registro e encontrará uma chave parecida com essa :

Tela Regedit - Pasta encontrada

No lado direito da tela, clique 2 vezes na chave que apareceu (DEFAULT, conforme indicado na imagem acima) , e será aberta uma tela para edição da chave :

Tela Regedit - Alterando chave

basta mudar o nome da pasta para a pasta atual da IDE. No meu caso, mudei para ARDUINO-1.0.5. Clique em OK e a chave será alterada :

Tela Regedit - Chave alterada

Pronto. Arquivos de programas do Arduino abrindo normalmente na nova versão da IDE. Não se esqueça que mexer no registro requer cuidado para que não haja alterações em informações essenciais para o sistema. Faça sempre um backup do registro antes de iniciar o procedimento.

26 maio 2013

Nova versão IDE Arduino - 1.0.5

Já saiu a versão nova da IDE do Arduino, versão 1.0.5. Instalei e usei sem grandes problemas.

Baixe nesse link, ou então copie e cole esse endereço no seu navegador :

http://arduino.cc/en/Main/Software

Não esqueça de atualizar a pasta de bibliotecas, copiando da versão anterior as bibliotecas específicas que você baixou : HC-SR04, DHT11, Display Nokia, etc.

Display LCD Nokia 5110 e Sensor de temperatura DHT11

Como comentei no post anterior, segue esquema do circuito usando o display lcd Nokia 5110 junto com o sensor de temperatura e umidade DHT11, que você pode adquirir na FilipeFlop.

lcd nokia 5110 e dht11 arduino
Basicamente eu juntei os 2 post que eu fiz sobre o assunto, e, ao invés de mandar o resultado para o monitor serial, estou enviando para o display, gerando o resultado abaixo :

LCD Nokia 5110 Arduino e DHT11



 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
80
81
82
83
84
85
86
87
88
89
90
91
92
//Programa : Display Nokia 5110 e sensor de temperatura DHT11
//Autor : Arduino e Cia

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <dht.h>

#define dht_dpin A1 //Pino DATA do Sensor ligado na porta Analogica A1

dht DHT;

// pin 8 - Serial clock out (SCLK)
// pin 9 - Serial data out (DIN)
// pin 10 - Data/Command select (D/C)
// pin 11 - LCD chip select (CS/CE)
// pin 12 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12);

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

// Variáveis que guardam a umidade máxima e mínima 
int maxhum = -100, minhum = 100; 
int temperatura,umidade;


static unsigned char PROGMEM grau[] =
{ B00001100, B00010010, B00001100, B00000000,}; //Array simbolo grau

void setup()
{
  Serial.begin(9600);
  display.begin();
  display.setContrast(50); //Ajusta o contraste do display
  display.clearDisplay();   //Apaga o buffer e o display
  display.setTextSize(1);  //Seta o tamanho do texto
  display.drawRect(0,0, 84,48, BLACK); //Desenha o retangulo da borda
  display.drawRect(1,1, 82,46, BLACK); //Desenha o retangulo da borda
  display.display();
}

void loop()
{
  DHT.read11(dht_dpin); //Lê as informações do sensor
  temperatura = DHT.temperature;
  umidade = DHT.humidity;

  //Armazena a temperatura máxima na variável maxtemp
  if(temperatura > maxtemp) {maxtemp = temperatura;} 

  //Armazena a temperatura minima na variável mintemp
  if(temperatura < mintemp) {mintemp = temperatura;} 

  //Armazena a umidade máxima na variável maxhum
  if(umidade > maxhum) {maxhum = umidade;} 

  //Armazena a umidade minima na variável minhum
  if(umidade < minhum) {minhum = umidade;} 

  display.setTextColor(BLACK,WHITE); //Seta a cor do texto
  display.setCursor(3,5);  //Seta a posição do cursor
  display.print("Temp : ");  
  display.print(temperatura);
  //Desenha o simbolo do grau na posicao 56,5
  display.drawBitmap(56,5, grau, 8, 4, BLACK); 
  display.setCursor(65,5);
  display.println("C");
  display.setCursor(3,13);
  display.print("Umid : ");
  display.print(umidade);
  display.println(" %\n");

  display.setCursor(3,24);
  display.print("Max:");
  display.print(maxtemp);
  display.drawBitmap(37,24, grau, 8, 4, BLACK);
  display.setCursor(46,24);
  display.print("C/");
  display.print(maxhum);
  display.println(" %");
  display.setCursor(3,32);
  display.print("Min:");
  display.print(mintemp);
  display.drawBitmap(37,32, grau, 8, 4, BLACK);
  display.setCursor(46,32);
  display.print("C/");
  display.print(minhum);
  display.println(" %");
  display.display();

  delay(2000); //Aduarda 2 segundos e reinicia o processo
 }

Usei 4 variáveis para armazenamento dos valores máximo e mínimo de  temperatura e umidade, mostrando-as no final da tela. Usei também a função da biblioteca (display.drawRect) para desenho da borda.

Por ser um display gráfico, você consegue posicionar os caracteres no pixel desejado, não ficando restrito ao espaço de um caracter. Repare nas linhas contendo "display.setCursor", onde se pode usar qualquer valor  para posicionar o texto no display e evitar as bordas.

20 maio 2013

Sensor de umidade e temperatura DHT11

O sensor DHT11 é um sensor de temperatura e umidade , que permite medir temperaturas de 0 a 50 Celsius, e umidade na faixa de 20 a 90%. Não é um sensor extremamente rápido e preciso, por isso não é recomendada a utilização em ambientes de alto risco.

Sua faixa de precisão para temperatura é de 2 graus, e de umidade, 5%. Esse sensor pode ser adquirido na FilipeFlop, e o datasheet do DHT11 você encontra aqui.

O sensor em si tem 4 pinos, mas o pino 3 não é utilizado :

sensor de umidade temperatura dht11

O mais comum é encontrá-lo em forma de módulo, onde temos apenas 3 pinos : Vcc, Data e Gnd :
Módulo DHT11
Modulo DHT11 - Fundo

A ligação do sensor é bem simples, utilizando apenas uma porta do Arduino :

Circuito DHT11 e Arduino


O programa abaixo lê as informações do sensor, e apresenta essas informações no serial monitor do Arduino. A biblioteca para uso com o DHT11 você encontra aqui.

 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
//Programa : Sensor de umidade e temperatura DHT11
//Autor : Arduino e Cia

#include <dht.h>

#define dht_dpin A1 //Pino DATA do Sensor ligado na porta Analogica A1

dht DHT; //Inicializa o sensor

void setup()
{
  Serial.begin(9600);
  delay(1000);//Aguarda 1 seg antes de acessar as informações do sensor
}

void loop()
{
  DHT.read11(dht_dpin); //Lê as informações do sensor
  Serial.print("Umidade = ");
  Serial.print(DHT.humidity);
  Serial.print(" %  ");
  Serial.print("Temperatura = ");
  Serial.print(DHT.temperature); 
  Serial.println(" Celsius  ");

  //Não diminuir o valor abaixo. O ideal é a leitura a cada 2 segundos
  delay(2000);  
}

Execute o programa, abra o serial monitor e você terá uma tela como essa, contendo as informações de temperatura e umidade :

Sensor temperatura DHT11 - Serial Monitor

Aproveitando o post anterior, sobre o display Nokia 5110, que tal juntarmos tudo e apresentarmos esses dados de temperatura e umidade no display ? Assunto para o próximo artigo. Até lá !

14 maio 2013

Display LCD Nokia 5110

Hoje o assunto é o display LCD Nokia 5110, que é um módulo contendo um display monocromático com resolução de 84 x 48 pixels, o que permite algumas variações interessantes, como letras maiores e alguns efeitos gráficos.

display lcd nokia 5110 Arduino

Também tive alguns problemas para fazer esse display funcionar perfeitamente, porque se você procurar no Google, verá que quase todas as buscas apontam para a famosa biblioteca do Philips PCD8544. Ok, funcionou depois de várias tentativas, mas eu queria alguma coisa mais prática. Acabei encontrando uma biblioteca disponibilizada pela Adafruit, que comercializa este tipo de display no exterior.

Antes de mais nada, gostaria de frisar que este procedimento foi testado no display AZUL, que funciona com 5v. Se você tem um display desses na cor vermelha, tudo bem, mas use resistores limitadores de corrente, para que o seu display não seja danificado. O display vermelho, pelo que pesquisei, funciona apenas com 3,3 v.

Montar a biblioteca necessária para que esse display funcione é um capítulo à parte, mas vou resumir da seguinte maneira :

1 - Baixe a biblioteca principal e coloque na pasta \Libraries\PCD8544
2 - Baixe a biblioteca gráfica e coloque na mesma pasta

Resumido, vamos ao procedimento. Monte o circuito, observando a ligação :

  • Pino 12 do Arduino ligado no Pino 1 (RST) do display
  • Pino 11 do Arduino ligado no Pino 2 (CE) do display
  • Pino 10 do Arduino ligado no Pino 3 (DC) do display
  • Pino 9 do Arduino ligado no Pino 4 (Din) do display
  • Pino 8 do Arduino Ligado no Pino 5 (Clk) do display
  • Vcc no pino 6 (Vcc) do display
  • Vcc com resistor de 220 ohms no pino 7 (BL) do display
  • GND no pino 8 (GND) do display

display lcd nokia 5110



Circuito em funcionamento - Display Nokia 5110


As bibliotecas foram armazenadas pela Adafruit num site chamado GITHUB. Acesse a biblioteca principal nesse link, ou copie e cole no seu navegador :

https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library

Aparecerá uma tela como esta, e você deve clicar em ZIP (seta vermelha), para baixar os arquivos desta biblioteca :

Display LCD Nokia 5110 - Biblioteca


Conforme comentei, descompacte e coloque os arquivos numa pasta chamada PCD8544, dentro da pasta Libraries da IDE do seu Arduino.

Repita o procedimento para a biblioteca gráfica :

https://github.com/adafruit/Adafruit-GFX-Library

Sua pasta PCD8544 deve ficar mais ou menos assim :

Display LCD Nokia 5110 - Biblioteca instalada


Pronto. Para testar, carregue o programa 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
//Programa : Teste display Nokia 5110 usando biblioteca Adafruit
//Autor : Arduino e Cia

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// pin 8 - Serial clock out (SCLK)
// pin 9 - Serial data out (DIN)
// pin 10 - Data/Command select (D/C)
// pin 11 - LCD chip select (CS/CE)
// pin 12 - LCD reset (RST)

Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12);

void setup()   
{
  Serial.begin(9600);
  display.begin();
  display.setContrast(50); //Ajusta o contraste do display
  display.clearDisplay();   //Apaga o buffer e o display
  display.setTextSize(1);  //Seta o tamanho do texto
  display.setTextColor(BLACK); //Seta a cor do texto
  display.setCursor(0,0);  //Seta a posição do cursor
  display.println("Arduino & Cia!");  

  //Texto invertido - Branco com fundo preto
  display.setTextColor(WHITE, BLACK); 

  display.println("Arduino & Cia!");

  display.setTextSize(2); 
  display.setTextColor(BLACK);
  display.print("Arduino");
  display.display();
  delay(2000);
}

void loop()
{
  // Codigo adicional
}

Para finalizar, carregue o programa de exemplo da biblioteca, que mostra o uso das funções de círculo, retângulo, triângulo e gráficos. Carregue o programa de exemplo a partir da IDE do Arduino :

ARQUIVO -> EXEMPLOS -> pcd8544 -> PCDTEST

Por hoje é só. até a próxima !


11 maio 2013

08 maio 2013

Medidor de distância com o sensor ultrassônico HC-SR04

Hoje apresento o circuito de um medidor de distância usando o sensor ultrassônico HC-SR04, o display LCD Winstar WH1602A e claro, o Arduino.

HC-SR04 Arduino Sensor Ultrassonico
Como comentei no post anterior, o HC-SR04 pode ser usado para medir distâncias de até 4m com precisão de 3mm (dados do datasheet do produto) e identificar a presença de objetos ou captar movimentos.

Isso nos permite criar alarmes, sensores de presença, sistemas de escuta, sensores de estacionamento, sensores de obstáculos para serem usados em robôs, e muitas outras aplicações.

Resumindo o funcionamento : é enviado um sinal ultrassônico pelo módulo, o mesmo detecta o retorno deste sinal (eco), e com base no tempo entre esses dois eventos, gera um sinal que permite medir a distância até o objeto.

O circuito é praticamente idêntico ao que usei nos outros projetos usando o WH1602A, com a diferença que no pino 15 (backlight, ou luz de fundo) eu coloquei uma pequena resistência para limitar a corrente.

Circuito Arduino Uno HC-SR04
O programa usa a biblioteca Ultrasonic, que voce pode baixar neste link. O programa faz a leitura dos dados do sensor, calcula a distancia em centímetros e polegadas, e apresenta os dados no LCD 16x2. 

Você não tem LCD ? Não tem problema. Os mesmos dados são enviados para o serial monitor. ;-)

 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 : Medidor de distancia com HC-SR04
//Autor : Arduino e Cia

#include <Ultrasonic.h>     //Carrega a biblioteca Ultrasonic
#include <LiquidCrystal.h>  //Carrega a biblioteca LCD

//Define o pino do Arduino a ser utilizado com o pino Trigger do sensor
#define PINO_TRIGGER  13 

//Define o pino do Arduino a ser utilizado com o pino Echo do sensor
#define PINO_ECHO     10 

//Inicializa o sensor ultrasonico
Ultrasonic ultrasonic(PINO_TRIGGER, PINO_ECHO); 

//Define os pinos que serão ligados ao LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 

void setup()
{
  Serial.begin(9600); //Inicializa a serial
  lcd.begin(16,2); //Inicializa LCD
  lcd.clear();     //Limpa o LCD
}

void loop()
{
  float cmMsec, inMsec;

  //Le os dados do sensor, com o tempo de retorno do sinal
  long microsec = ultrasonic.timing();  

  //Calcula a distancia em centimetros
  cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM); 

  //Calcula a distancia em polegadas
  inMsec = ultrasonic.convert(microsec, Ultrasonic::IN); 

  //Apresenta os dados, em centimetros, no LCD e na Serial
  lcd.setCursor(0,0);
  lcd.print("Cent.: ");
  lcd.print("        ");
  lcd.setCursor(7,0);
  lcd.print(cmMsec);

  Serial.print("Cent: ");
  Serial.print(cmMsec);

  //Apresenta os dados, em polegadas, no LCD e na Serial  
  lcd.setCursor(0,1);
  lcd.print("Pol. : ");
  lcd.print("        ");
  lcd.setCursor(7,1);
  lcd.print(inMsec);

  Serial.print(", Pol. : ");
  Serial.println(inMsec);

  delay(1000);
}

Recomendo também a leitura do artigo Controle de vagas de estacionamento com o sensor HC-SR04, onde utilizo a biblioteca NewPing para controlar vários sensores ultrassônicos ao mesmo tempo.

06 maio 2013

Ligando uma lâmpada com relé

Escrevi um post a um tempo atrás sobre a ligação de uma lâmpada utilizando o módulo relé :

http://www.arduinoecia.com.br/2013/02/ligando-uma-lampada-com-rele.html

O módulo relé já tem embutido na placa todos os componentes necessários para acionar o relé. Por esse motivo, o módulo é bem prático, basta ligar e usar.

Mas se você já comprou o seu relé na FilipeFlop , os componentes e/ou prefere montar o circuito sozinho, basta seguir o esquema abaixo. Montei um esquema com led para fins de testes, mas no final do post coloquei o circuito para ligação com uma lâmpada. 

Arduino ligando led rele


Componentes :

  • Rele 5v (utilizei o modelo da foto, mas pode ser um similar, observando a pinagem)
  • 1 Diodo 1N4007 (ou similar)
  • 1 Transistor BC548 (ou equivalente NPN)
  • 2 resistores de 10 K
  • Led

rele arduino


Monte o circuito abaixo, observando a posição dos componentes e a a polaridade do diodo :

Circuito ligando led com relé
 O programa abaixo acende e apaga o led em intervalos de 5 segundos : 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
// Programa de teste do modulo rele
// Autor : Arduino e Cia

//define a porta a ser utilizada para o acionamento do rele
int sinalparaorele = 4; 

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

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

Se você precisa ligar uma lâmpada ou outro dispositivo 110/220 volts (observando as especificações do relé), faça esta ligação :

Arduino ligando relé em 110 ou 220 volts
Atualizado : Veja neste artigo uma variação deste circuito, mostrando como utilizar um botão para controlar o acionamento do relé.


03 maio 2013

Sensor Ultrassônico HC-SR04

Algumas informações sobre o sensor ultrassônico HC-SR04, um módulo barato e fácil de encontrar.

sensor ultrassonico


Com esse sensor alimentado com 5V , pode-se montar um detector de objetos, alarmes, ou simplesmente utiliza-lo para medir distâncias entre 2 cm e 4 m. É também um ótimo componente para ser utilizado em projetos de robôs.

HC-SR04 Verso


No próximo artigo vou montar um circuito "medidor", que capta o sinal do módulo e exibe as informações em um LCD 16x2.

A propósito, o datasheet do HC-SR04 você encontra aqui.

02 maio 2013

Video - LCD 16x2 + DS1307 + Numeros Grandes

Publiquei no Youtube um pequeno vídeo baseado no artigo anterior, sobre o relógio com números grandes usando o LCD Winstar WH1602A :