sexta-feira, 29 de novembro de 2013

Meu primeiro projeto com Arduino - Termohigrômetro com medidor de luminosidade

Comecei a mexer com eletrônica há muitos anos, mas devido aos estudos e ao trabalho estou há muito tempo afastado. Sou do tempo ainda dos circuitos com transístores (BCs, TIPs, BDs, etc.) e CIs Cmos e TTL. Um amigo me falou sobre o Arduino e suas diversas possibilidades, e resolvi tentar algo. Montei um Termohigrômetro para monitorar a temperatura e principalmente a umidade no quarto do meu filho, para ligar um umidificador quando estiver muito seco. Aproveitei e coloquei também um LDR para monitorizar a luminosidade e com isso acionar um led branco para uma leve iluminação do quarto sempre que o LDR detectar ausência de luz.


  • Protótipo:




Lista de componentes externos ao Arduino Uno utilizados:
  • 3 resistores de 680 ohms
  • 1 resistor de 10k
  • 1 display LCD 16 x 2 linhas
  • 1 potenciômetro de 10k
  • 1 sensor DHT11 (temperatura e umidade)
  • 1 Led RGB anodo comum
  • 1 LDR


  • Tabela de conexão do display LCD ao Arduino:
Pino do Display
Pino do Arduino Uno
1
GND
2
+Vcc
3
Pino 2 Pot 10k (meio)
4
12
5
GND
6
11
11
5
12
4
13
3
14
2
15
+Vcc
16
GND


  • Sketch do projeto:
#include <dht11.h>
#include <Wire.h>
#include <LiquidCrystal.h>
const int sensorLuz = 0; //pino analogico A0 em que o sensor de luz está conectado

int valorSensorLuz = 0; //variavel usada para ler o valor do sensor de luz

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
dht11 DHT11;

#define DHT11PIN 7

void setup()
{
Serial.begin(9600);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(6, OUTPUT);
lcd.begin(16, 2);
}

void loop()
{
valorSensorLuz = analogRead(sensorLuz); //lê o valor do sensor de Luz LDR 
int chk = DHT11.read(DHT11PIN);

lcd.setCursor(0, 0);
lcd.print(" Quarto do Manu ");
lcd.setCursor(0, 1);
lcd.print("Luz: ");
lcd.print(valorSensorLuz);
lcd.print("/1023     ");
delay(4000);
lcd.clear();
lcd.print("t=");
lcd.print((float)DHT11.temperature, 0);
lcd.write(B11011111);
lcd.print("C");//simbolo de grau
lcd.print("  Umid=");
lcd.print((float)DHT11.humidity, 0);
lcd.print("%");
delay(4000);

if(DHT11.temperature < 17)
{lcd.setCursor(0, 1);
lcd.print("  Muito Tosse!  ");
delay(3000);}

else 
if(DHT11.temperature > 22)
{lcd.setCursor(0, 1);
lcd.print("Calor p/ C***lho!");
delay(3000); }

else
{lcd.setCursor(0, 1);
lcd.print("Temp. agradavel!");
delay(3000);
}

//Obs.: Led RGB anodo comum ligado ao positivo, portanto os comandos de acendimento devem ser negativos.

//acende o LED azul conectado ao pino 8 do Arduino caso a temperatura esteja abaixo de 15ºC
if(DHT11.temperature < 17)
{digitalWrite(8, LOW);}
else
{digitalWrite(8, HIGH);}


//acende o LED verde conectado ao pino 9 do Arduino caso a temperatura esteja entre 15ºC e 22ºC
if(DHT11.temperature >= 17 && DHT11.temperature <= 22)
{digitalWrite(9, LOW);}
else
{digitalWrite(9, HIGH);}


//acende o LED vermelho conectado ao pino 10 do Arduino caso a temperatura seja maior que 22ºC
if(DHT11.temperature > 22)
{digitalWrite(10, LOW);}
else
{digitalWrite(10, HIGH);}


//acende o LED branco com o catodo (K) conectado ao pino 6 do Arduino caso a luminosidade esteja abaixo de 10, de um máximo de 1023
if(valorSensorLuz < 15)
{digitalWrite(6, LOW);}
else
{digitalWrite(6, HIGH);}


}


  • Protótipo para teste


  • Projeto final