CP IOT
https://wokwi.com/projects/441565966843910145
RM559433 FELIPE DAMASCENO
RM557356 ALEX RIBEIRO MAIA
RM560306 Natália de Oliveira Santos
RM560066 Amanda Galdino
#include "DHT.h"
#define DHTPIN 2 // Pino do DHT22
#define DHTTYPE DHT22 // Tipo do sensor
// LEDs
#define LED_TEMP 3 // LED vermelho (temperatura alta)
#define LED_UMID 6 // LED azul (umidade baixa)
// Botões
#define BTN_MODE 7 // Alterna entre modo temperatura / umidade
#define BTN_SAVE 9 // Salva o setpoint atual
// Potenciômetro
#define POT A0
DHT dht(DHTPIN, DHTTYPE);
// Variáveis de setpoint
float setTemp = 25.0;
float setUmid = 50.0;
// Controle de modo
int modo = 0; // 0 = temperatura, 1 = umidade
// Controle de debounce
unsigned long lastDebounce = 0;
const unsigned long debounceDelay = 200;
void setup() {
Serial.begin(9600);
dht.begin();
pinMode(LED_TEMP, OUTPUT);
pinMode(LED_UMID, OUTPUT);
pinMode(BTN_MODE, INPUT_PULLUP);
pinMode(BTN_SAVE, INPUT_PULLUP);
Serial.println("=== Estacao Meteorologica Interativa ===");
}
void loop() {
// Leitura dos sensores
float temperatura = dht.readTemperature();
float umidade = dht.readHumidity();
// Leitura do potenciômetro mapeada conforme o modo
int potValue = analogRead(POT);
float valorAjuste;
if (modo == 0) {
valorAjuste = map(potValue, 0, 1023, 15, 35); // Temp 15–35 °C
} else {
valorAjuste = map(potValue, 0, 1023, 20, 80); // Umid 20–80 %
}
// Troca de modo
if (digitalRead(BTN_MODE) == LOW && millis() - lastDebounce > debounceDelay) {
modo = !modo;
lastDebounce = millis();
Serial.print(">> Modo alterado para: ");
Serial.println(modo == 0 ? "Temperatura" : "Umidade");
}
// Salvar setpoint
if (digitalRead(BTN_SAVE) == LOW && millis() - lastDebounce > debounceDelay) {
if (modo == 0) {
setTemp = valorAjuste;
Serial.print("Novo setpoint de Temperatura: ");
Serial.print(setTemp);
Serial.println(" °C");
} else {
setUmid = valorAjuste;
Serial.print("Novo setpoint de Umidade: ");
Serial.print(setUmid);
Serial.println(" %");
}
lastDebounce = millis();
}
// Controle de LEDs (alarmes)
if (temperatura > setTemp) {
digitalWrite(LED_TEMP, HIGH);
Serial.println("⚠️ ALARME! TEMPERATURA ALTA!");
} else {
digitalWrite(LED_TEMP, LOW);
}
if (umidade < setUmid) {
digitalWrite(LED_UMID, HIGH);
Serial.println("⚠️ ALARME! UMIDADE BAIXA!");
} else {
digitalWrite(LED_UMID, LOW);
}
// Exibição no monitor serial
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.print(" °C | Umidade: ");
Serial.print(umidade);
Serial.println(" %");
Serial.print("Modo atual: ");
Serial.println(modo == 0 ? "Ajuste de Temperatura" : "Ajuste de Umidade");
Serial.print("Valor do potenciometro: ");
Serial.println(valorAjuste);
Serial.print("SetPoint Temp: ");
Serial.print(setTemp);
Serial.print(" °C | SetPoint Umid: ");
Serial.print(setUmid);
Serial.println(" %");
Serial.println("-----------------------------");
delay(1000);
}