Hoje vamos ver a integração de todos os componentes que já vimos para implementar o projeto de acionamento automático de ar condicionado. É importante frisar que foram adicionados componentes ao projeto que não foram pensados anteriormente e que vão acrescentar mais algumas funcionalidades. No projeto original estavam previstos os componentes conforme relatei em post anterior: Projeto 1 - Acionamento de ar condicionado via infravermelho. Adicionei mais dois componentes: o Tiny RTC DS1307 e o alto-falante.
Esquema de ligação:
O esquema de ligação acima não aparece os pinos de ligação de cada componente mas segui o mesmo padrão que coloquei nos posts sobre cada um dos componentes. É só seguir as ligações de cada componente apresentado.
O sketch:
Segue abaixo sketch com comentários:
#include<dht11.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <IRremote.h>
#include <SPI.h>
#include <Ethernet.h>
#include <String.h>
#include "RTClib.h"
// Objeto irsend para emissor infrared
IRsend irsend;
// Objeto rtc (relogio de tempo real)
RTC_DS1307 rtc;
//codigo rawcode capturado do ar condiconado via IRRecvDump
unsigned int rawCode[92] = {8950,4300,650,500,700,450,650,1600,650,500,600,1650,700,450,650,500,650,500,650,450,600,1700,600,550,550,550,600,1700,600,500,600,550,600,550,600,550,600,500,700,450,600,550,600,550,600,500,600,550,600,550,600,550,550,550,600,550,600,550,600,550,550,550,600,550,600,550,600,500,600,550,650,500,600,550,600,500,600,550,600,550,600,550,550,1700,600,550,600,550,550,1700,700};
float sinVal;
int toneVal;
// Objeto LCD com 2 linhas e 16 caracteres por linha
LiquidCrystal_I2C lcd(0x20,16,2);
//objeto sensor para DHT11 (sensor de temperatura)
dht11 sensor;
void setup() {
Serial.begin(9600); // Inicia conexao serial para monitoramento
lcd.begin(16,2); // inicializa o lcd
lcd.backlight();
pinMode(8,OUTPUT); //pino 8 para saida do alto falante
#ifdef AVR
Wire.begin();
#else
Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
rtc.begin(); //inicia o objeto rtc
//Verifica se o RTC esta funcionando
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
// Ajusta o rtc para a data e hora em que o sketch foi compilado
}
}
void loop() {
DateTime now = rtc.now(); // carrega a data e hora do RTC
Serial.print("Lendo sensor: ");
int chk = sensor.read(2); //le a temperatura
//Verifica o status do DHT11
switch(chk) {
case DHTLIB_OK:
Serial.println("OK");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println("Erro no checksum");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.println("Tempo esgotado");
break;
default:
Serial.println("Erro desconhecido");
}
// Monitora a umidade e temperatura para a conexao serial
Serial.print("Umidade (%): ");
Serial.println(sensor.humidity);
Serial.print("Temperatura (graus Celsius): ");
Serial.println(sensor.temperature);
// Carrega os valores de temperatura e umidade do sensor nas variaveis correspondentes
int menorValorTemp = sensor.temperature;
int valorUmidade = sensor.humidity;
//Se a temperatura for maior que 26 graus Celsius
if (menorValorTemp > 21) {
// Exibe o valor da temperatura lida pelo sensor
lcd.clear(); //limpa o display do LCD.
lcd.print("Temp: "); //imprime a string no display do LCD.
lcd.print(menorValorTemp); // imprime a temperatura no LCD
lcd.write(B11011111); //Simbolo de graus celsius
lcd.print("C");
lcd.setCursor(0,1); //posiciona o cursor na coluna 0 linha 1 do LCD.
lcd.print("TEMP. ALTA!"); //Imprime a string no display do LCD.
//Envia sinal sonoro para o pino 8 - alto falante
for (int x=0; x<180; x++) {
// converte graus para radianos e depois obtem o valor do seno
sinVal = (sin(x*(3.1416/180)));
toneVal = 2000+(int(sinVal*1000));
tone(8, toneVal);
delay(2);
}
// Aciona o ar condicionado novamente
irsend.sendRaw(rawCode,92,38); // envia o codigo IR para ligar o AC
//Aguarda 5 minutos para enviar novamente o codigo IR caso a temperatura nao baixe
delay(60000);
}
else
{
// Temperatura normal
lcd.clear(); //limpa o display do LCD.
lcd.print("Temp: "); //imprime a string no display do LCD.
lcd.print(menorValorTemp); // Imprime o valor da temperatura
lcd.write(B11011111); //Simbolo de graus celsius
lcd.print("C");
//Exibindo valor da leitura da umidade no display LCD.
lcd.setCursor(0,1); //posiciona o cursor na coluna 0 linha 1 do LCD.
lcd.print("Umidade: "); //imprime a string no display do LCD.
lcd.print(valorUmidade); // Imprime o valor da umidade
lcd.print("%");
delay(5000);
//Exibe a data e hora no LCD
lcd.clear();
lcd.print("DATA: ");
lcd.print(now.day(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.year(), DEC);
lcd.setCursor(0,1);
lcd.print("HORA: ");
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
delay(2000);
noTone(8);
}
delay(2000);
}
Acabei incluindo o RTC por conta de poder registrar data e hora dos acionamentos em um cartão SD ou qualquer coisa parecida. O alto-falante será para emitir alerta sonoro caso a temperatura aumente. Bom pessoal, esta é a primeira versão do projeto. Funcionou muito bem porém os componentes estão não estão acomodados apropriadamente e precisamos pensar em colocá-los em um painel ou caixa. Vamos ver isso no próximo post.
Até mais!
Esse esquema de ligação foi por feito aonde..tikercad
ResponderExcluirFoi feito no Fritzing
Excluir