#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHT.h"
#define e 2.718281828459045235360287471352 //Constante de Eule
// Parametros ajustáveis
#define TEMPERATURAALVO 42.00 // Temperatura máxima
#define DIFERENCIALTEMP 2.00 // Variação da temperatura
#define RELEY 3 // Pino do Rele
#define DHTPIN 2 // Pino do sensor DHT
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
float temp = 0;
float humi = 0;
float humA = 0;
float ltemp = 0;
float lhumi = 0;
float lhumA = 0;
float i = 0;
float j = 0;
void setup()
{
dht.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Começa o display
display.clearDisplay();
display.setTextWrap(false);
//Legendas
display.fillRect(0, 0, 128, 18, WHITE); // Preenche o topo do display
display.setTextColor(BLACK); // Cor do texto
display.setTextSize(1); // Tamanho do texto
//Legenda da leitura
display.setCursor(10,10);
display.print("*C");
display.setCursor(59,10);
display.print("%R");
display.setCursor(101,10);
display.print("g/m3");
//Legenda da barra
display.setTextColor(WHITE);
display.setCursor(27,19);
display.print("80");
display.setCursor(27,57);
display.print("0");
display.setCursor(80,19);
display.print("100");
display.setCursor(86,57);
display.print("0");
display.display();
}
void loop()
{
temp = dht.readTemperature();
humi = dht. readHumidity();
humA = ((6.112 * (pow(e, ((17.67 * temp) / (temp + 243.5)))) * humi * 2.1674) / (273.15 + temp));
// Controla a temperatura
if (temp > (TEMPERATURAALVO + DIFERENCIALTEMP)) {digitalWrite(RELEY, LOW);}
if (temp < (TEMPERATURAALVO - DIFERENCIALTEMP)) {digitalWrite(RELEY, HIGH);}
// Escreve a leitura do sensor
display.fillRect(0, 0, 128, 9, WHITE);
display.setTextColor(BLACK);
display.setCursor(1,1);
display.print(temp);
display.setCursor(49,1);
display.print(humi);
display.setCursor(98,1);
display.print(humA);
display.display();
// Relaciona a leitura do sensor aos pixels do display, e cria uma barra representativa
// Temperatura
i = map(ltemp, 0,80,63,19);
j = map(temp, 0,80,63,19);
for (i; i<j; i++){
display.drawLine(5, i, 25, i, BLACK);
display.display();
} for (i; i>=j; i--){
display.drawLine(5, i, 25, i, WHITE);
display.display(); }
// Humidade Relativa
i = map(lhumi, 0,100,63,19);
j = map(humi, 0,100,63,19);
for (i; i<j; i++){
display.drawLine(54, i, 74, i, BLACK);
display.display();
} for (i; i>=j; i--){
display.drawLine(54, i, 74, i, WHITE);
display.display(); }
// Humidade Absoluta
i = map(lhumA, 0,100,63,19);
j = map(humA, 0,100,63,19);
for (i; i<j; i++){
display.drawLine(103, i, 123, i, BLACK);
display.display();
} for (i; i>=j; i--){
display.drawLine(103, i, 123, i, WHITE);
display.display(); }
//Grava os ultimos parametros
ltemp = temp;
lhumi = humi;
lhumA = humA;
}
Loading
ssd1306
ssd1306