/* ***************************************************************
* Sobre o autor deste projeto:
* Engenheiro eletronico com ampla formaçao e pratica em automação
*
* Especializado em equipamentos para cinemas
* Brasileiro natural de Sao Paulo mora atualmente em Joao Pessoa
* ***************************************************************
* Sobre este projeto:
* Trata-se de uma aplicacao IoT (Internet das coisas) aproveitando
* os recursos do site Cayenne dedicado a este tipo de aplicacoes,
* o objetivo foi criar uma tomada inteligente para controlar um ventilador por exemplo,
* de acordo a uma temperatura pre ajustada pelo usuario, atraves de um potenciomento.
* \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
* O sistema usa um ESP8266-12E da DOIT, uma sensor DHT11 que afere a umidade, e a
* temperatura ambiente, um transistor BC557 PNP, um resistor de 1k um modulo rele bobina 5VCC
* com um contato inversor de 10A, um dysplay LCD, jumpers diversos, uma fonte 220VAC/9VCC
* 1 Amper, uma tomada norma brasileira 10A para embutir uma caixa plastica
* trabalhada para conter o projeto em si.
* \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
* Todo o projeto esta disponivel no meu website que aloja o meu Blog
* www.carloskwiek.com.br onde existem outros projetos que disponibilizo.
* \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
* Este projeto foi testado e funcionou perfeitamente, mas não existe garantias
* que ele vá funcionar caso você coloque em pratica, fica por conta e risco de quem o faca.
* \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
* ATENCAO A MANIPULACAO DE CORRENTE ELETRICA EXIGE CONHECIMENTO PREVIO,
* EU ASSUMO QUE QUEM DECIDA FAZER USO DESTE PROJETO CONHECE OS RISCOS, E
* SABE MANIPULAR COM O DEVIDO CUIDADO A REDE ELETRICA.
* \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
* Contatos para receber duvidas, criticas, elogios, visite meu Blog. ou ck@carloskwiek.com.br
* \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
* Espero que desfrute deste projeto, e minha maior recompensa.
* \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
*/
#include "CayenneDefines.h"
#include "BlynkSimpleEsp8266.h"
#include "CayenneWiFiClient.h"
#include <DHT.h>
#include "Wire.h"
#include <LiquidCrystal_I2C.h>
//#define CAYENNE_DEBUG // Descomente se quiser ver mensagens de degug
#define CAYENNE_PRINT Serial // Comente se quiser lieberar espaço
#define DHTTYPE DHT11
#define DHTPIN 14 // Port onde esta conectado o pino data do DHT11
float pot = A0; // Port onde esta conectado o potenciometro (Setpoint)
float valor = 0; // Variavel que armazena o valor lido no potencioment
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Cayenne token. Voce pode obter esse token na sua dashboard Cayenne.
char token[] = "9oiow7qtem"; // Seu token ID
// Introduza o nome de sua rede local (ssid) e senha de sua rede local (password.
char ssid[] = "Ckwiek";
char password[] = "ck127952*#";
DHT dht(DHTPIN, DHTTYPE);
// Modulo I2C display no endereco 0x27
LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3, POSITIVE);
void setup() {
lcd.begin(20,4);
Serial.begin(9600);
Cayenne.begin(token, ssid, password);
dht.begin();
float valor = analogRead (pot);
pinMode(D6, OUTPUT);
pinMode(D7, INPUT);
}
void loop() {
Cayenne.run();
// Espera um segundo para estabilizar as leituras do sensor
delay(1000);
// Le a temperatura ou umidade a cada 250 milisegundos!
float h = dht.readHumidity();
// Le a temperatura em Celsius)
float t = dht.readTemperature();
// Verifica se o sensor esta funcionando normalmente).
if (isnan(h) || isnan(t)) {
Serial.println("Falha na leitura do sensor DHT11!");
return;
}
float valor = analogRead (pot); // Armazena o valor de pot na variavel valor
Serial.print ("Setpoint");
Serial.println (valor/1023*100); // divide o valor maximo de pot pelo seu valor e multiplica por 100
Serial.print("Humidity: ");
Serial.print(h);
Serial.println(" %\t");
Serial.print("Temperature:");
Serial.println(t);
lcd.setCursor (0,0);
lcd.print("Temperatura:");
lcd.setCursor (14,0);
lcd.print((t));
lcd.setCursor (0,1);
lcd.print("Umidade:");
lcd.setCursor (14,1);
lcd.print((h));
lcd.setCursor(0,2);
lcd.print ("Seletor Temp:");
lcd.setCursor(14,2);
lcd.print (valor/1023*100);
lcd.setCursor(1,3);
lcd.print ("carloskwiek.com.br");
Cayenne.virtualWrite(V3,valor/1023*100); // imprime no widget virtual na dashboard a variavel valor divido mil multiplicado por cem
if (valor/1023*100 < (t) ) // Se valor dividido 10 é menor que temperatura
{
digitalWrite(D6, LOW); // Coloca o GPIO no estado alto (A logica do ESP8266 é invertida)
//Serial.println ("LOW"); //serve so para debug, você pode comentar se quiser
}
else if(valor/1023*100 >(t) ) // Se valor dividido 10 é maior que temperatura
{
digitalWrite(D6, HIGH); // Coloca o GPIO no estado baixo (A logica do ESP8266 é invertida)
//Serial.println ("HIGH"); //serve so para debug, você pode comentar se quiser
}
}
// Esaa funcao e chamada quando um widget requer dados do pin virtual
CAYENNE_OUT(V0)
{
Cayenne.virtualWrite(V0, dht.readTemperature()); // Imprime Temperatura em celsius no pin virtual V0
}
CAYENNE_OUT(V1)
{
Cayenne.virtualWrite(V1, dht.readHumidity()); // Imprime Umidade em porcentagem no pin virtual V1
}
/*
* FIM
* www.carloskwiek.com.br
*/
Comments