// ETECAF
// SISTEMAS EMBARCADOS 2
// SEM2 - 3 BIMESTRE - 2024
// TRABALHO LCD+I2C+DHT+POT+RGB+LED+MILLIS+MEDIA
// SALVAR ESTE ARQUIVO ASSIM:
// LCD+I2C+DHT+POT+RGB+LED+MILLIS+MEDIA_(INICIAIS DOS NOMES)
// EXEMPLO - SE FOSSE O MEU
// LCD+I2C+DHT+POT+RGB+LED+MILLIS+MEDIA_CBSF
//****** ESCREVA SEU NOME COMPLETO ABAIXO ********
// Breno Correia Lociks
//************************************************
// CADA PARTE DO CÓDIGO DEVE SER EXPLICADA.
// EM ESPECIAL:
// ==> COMO FOI FEITA A MÉDIA DE CADA UMA DAS MEDIÇÕES
// TEMPERATURA;
// UMIDADE;
// POSIÇÃO DO POTENCIÔMETRO
// ==> EXPLIQUE TAMBÉM O USO DO MILLIS
// VARIÁVEIS GLOBAIS
// NAO ESQUEÇA DE EXPLICAR CADA UMA
// BIBLIOTECAS
#include <LiquidCrystal_I2C.h> // Inclui a biblioteca para controle do LCD I2C
#include <dht.h> // Inclui a biblioteca para controle do sensor DHT
// DEFINIÇÕES
#define dataPin 2 // Define o pino digital 8 para o sensor DHT
#define Red 3 // Define o pino digital 2 para o LED vermelho do RGB
#define Green 4 // Define o pino digital 3 para o LED verde do RGB
#define Blue 5 // Define o pino digital 4 para o LED azul do RGB
#define led_tmp 6 // Define o pino digital 6 para o LED que indica alta temperatura
#define led_umd 7 // Define o pino digital 7 para o LED que indica alta umidade
// CRIAÇÃO DOS OBJETOS PARA O LCD I2C E PARA O SENSOR DHT
LiquidCrystal_I2C lcd(0x25, 16, 2); // Cria o objeto "lcd" para o LCD I2C com endereço 0x27 e display de 16x2 caracteres
dht DHT; // Cria o objeto "DHT" para o sensor DHT
void setup() {
// CONFIGURAÇÕES
// NÃO ESQUEÇA DE EXPLICAR CADA UMA
// CONFIGURAÇÃO DOS PINOS
pinMode(Red, OUTPUT); // Configura o pino do LED vermelho do RGB como saída
pinMode(Green, OUTPUT); // Configura o pino do LED verde do RGB como saída
pinMode(Blue, OUTPUT); // Configura o pino do LED azul do RGB como saída
pinMode(led_tmp, OUTPUT); // Configura o pino do LED de alta temperatura como saída
pinMode(led_umd, OUTPUT); // Configura o pino do LED de alta umidade como saída
// CONFIGURAÇÕES DE INICIALIZAÇÃO DO LCD
lcd.init(); // Inicializa o LCD I2C
lcd.setBacklight(HIGH); // Liga a luz de fundo do LCD I2C
}
void loop() {
// PROGRAMA PRINCIPAL
// NÃO ESQUEÇA DE EXPLICAR CADA PARTE
// LEITURA DO POTENCIÔMETRO e MAPEAMENTO DO ÂNGULO
int pot = analogRead(A3); // Cria a variável "pot" para armazenar o valor lido no potenciômetro ligado no pino analógico A3
// LEITURA DO SENSOR DHT
int readData = DHT.read11(dataPin); // Cria a variável "readData" para armazenar os dados lidos pelo sensor DHT
float t = DHT.temperature; // Cria a variável "t" para armazenar a temperatura lida pelo sensor DHT
float h = DHT.humidity; // Cria a variável "h" para armazenar a umidade lida pelo sensor DHT
// MAPEAMENTO DA MÉDIA PARA O ÂNGULO
int angPot = map(pot, 0, 1023, 0, 270); // Cria a variável "angMed" para armazenar o mapeamento da média de leitura do potenciômetro para um intervalo de 0 a 270 graus de ângulo
// CONTROLE DO RGB
if (angPot < 90) { // Verifica se o ângulo do potenciômetro é maior ou igual 90 graus
digitalWrite(Red, 1);
}
else {
digitalWrite(Red, 0);
}
if (angPot > 90 && angPot < 180) { // Verifica se o ângulo do potenciômetro é maior ou igual 90 graus
digitalWrite(Green, 1);
}
else {
digitalWrite(Green, 0);
}
if (angPot > 180) { // Verifica se o ângulo do potenciômetro é maior ou igual 90 graus
digitalWrite(Blue, 1);
}
else {
digitalWrite(Blue, 0);
}
if (t >= 26) { // Verifica se a média de temperatura é maior ou igual a 40 graus Celsius
digitalWrite(led_tmp, 1); // Acende o LED de alta temperatura
}
else { // Caso contrário
digitalWrite(led_tmp, 0); // Apaga o LED de alta temperatura
}
if (h >= 80) { // Verifica se a média de umidade é maior ou igual a 75%
digitalWrite(led_umd, 1); // Acende o LED de alta umidade
}
else { // Caso contrário
digitalWrite(led_umd, 0); // Apaga o LED de alta umidade
}
// CONTROLE DO LCD I2C
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("ETECAF");
lcd.setCursor(5, 1);
lcd.print("SEM II");
delay(1000);
lcd.clear();
for (int p = 0; p < 36; p++) {
lcd.setCursor(16,0);
lcd.print("HECTOR P C MARTINS");
lcd.setCursor(16,1);
lcd.print("BRENO CORREIA LOCIKS");
lcd.scrollDisplayLeft();
delay(250);
}
lcd.clear(); // Limpa o display
lcd.setCursor(0, 0); // Define o cursor na primeira coluna e na primeira linha
lcd.print("Tmp. = "); // Exibe o texto da temperatura
lcd.print(t); // Exibe o valor da média de temperatura
lcd.print(" "); // Espaço
lcd.print((char)223); // Exibe o símbolo de grau
lcd.print("C"); // Exibe o símbolo de celsius
lcd.setCursor(0, 1); // Define o cursor na primeira coluna e na segunda linha
lcd.print("Umd. = "); // Exibe o texto da umidade
lcd.print(h); // Exibe o valor da média de umidade
lcd.print((char)37); // Exibe o símbolo de porcentagem
delay(2000);
lcd.clear(); // Limpa o display
lcd.setCursor(0, 0); // Define o cursor na primeira coluna e na primeira linha
lcd.print("Ang. = "); // Exibe o texto do ângulo do potenciômetro
lcd.print(angPot); // Exibe o valor do ângulo do potenciômetro
lcd.print((char)223); // Exibe o símbolo de grau
delay(2000);
}