// ETEC Aristóteles Ferreira.
// Lucas Nascimento 3P1.
// ----------------------------------------------------- //
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <math.h>
const int OneWireBus = 4;
OneWire oneWire(OneWireBus);
DallasTemperature sensors(&oneWire);
#define DHTPIN 5
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int RED_PIN = 17;
const int GREEN_PIN = 18;
const int BLUE_PIN = 19;
const int RED2_PIN = 2;
const int GREEN2_PIN = 0;
const int BLUE2_PIN = 16;
const int NTC_PIN = 34;
float lerTemperaturaNTC() {
const float BETA = 3950;
const float T0 = 298.15;
const float R0 = 10000.0;
const float SERIES_RESISTOR = 10000.0;
float somaTemperaturas = 0.0;
for (int i = 0; i < 10; i++) {
int adcValue = analogRead(NTC_PIN);
float v = adcValue / 4095.0;
float resistenciaNTC = SERIES_RESISTOR * (1.0 / v - 1.0);
float temperaturaK = 1.0 / (1.0 / T0 + log(resistenciaNTC / R0) / BETA);
float temperaturaC = temperaturaK - 273.15;
somaTemperaturas += temperaturaC;
delay(50);
}
return somaTemperaturas / 10.0;
}
void setup() {
Serial.begin(115200);
sensors.begin();
dht.begin();
lcd.init();
lcd.backlight();
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
pinMode(RED2_PIN, OUTPUT);
pinMode(GREEN2_PIN, OUTPUT);
pinMode(BLUE2_PIN, OUTPUT);
}
void loop() {
float temperaturaDHT = dht.readTemperature();
float umidadeDHT = dht.readHumidity();
Serial.print("DHT22 Temperatura: ");
Serial.print(temperaturaDHT);
Serial.println(" ºC");
Serial.print("DHT22 Umidade: ");
Serial.print(umidadeDHT);
Serial.println(" %");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DHT Temp:");
lcd.print(temperaturaDHT, 1);
lcd.setCursor(0, 1);
lcd.print("DHT Umid:");
lcd.print(umidadeDHT, 1);
lcd.print("%");
delay(3000);
sensors.requestTemperatures();
float temperaturaDS = sensors.getTempCByIndex(0);
Serial.print("DS18B20: ");
Serial.print(temperaturaDS);
Serial.println(" ºC");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DS18B20 Temp:");
lcd.setCursor(0, 1);
lcd.print(temperaturaDS, 1);
lcd.print(" C");
if (temperaturaDS > 30.0) {
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
} else if (temperaturaDS >= 20.0 && temperaturaDS <= 30.0) {
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, LOW);
} else if (temperaturaDS < 20.0) {
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, HIGH);
}
delay(3000);
float temperaturaNTC = lerTemperaturaNTC();
Serial.print("NTC Temp: ");
Serial.print(temperaturaNTC);
Serial.println(" ºC");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("NTC Temp:");
lcd.setCursor(0, 1);
lcd.print(temperaturaNTC, 1);
lcd.print(" C");
if (temperaturaNTC > temperaturaDS) {
digitalWrite(RED2_PIN, HIGH);
digitalWrite(GREEN2_PIN, LOW);
digitalWrite(BLUE2_PIN, LOW);
} else if (temperaturaNTC == temperaturaDS) {
digitalWrite(RED2_PIN, LOW);
digitalWrite(GREEN2_PIN, HIGH);
digitalWrite(BLUE2_PIN, LOW);
} else if (temperaturaNTC < temperaturaDS) {
digitalWrite(RED2_PIN, LOW);
digitalWrite(GREEN2_PIN, LOW);
digitalWrite(BLUE2_PIN, HIGH);
}
delay(3000);
}
// ----------------------------------------------------- //