Skip to content

💡💧 Arduino project for college that reads the humidity, brightness and temperature in the air

License

Notifications You must be signed in to change notification settings

gh-johnny/iot-display-lcd-sensors

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 

Repository files navigation

LCD Display + sensors 💡💧🔆

Integrantes 👋

  • Gabriel Barros Cisoto (RM556309)
  • Pedro Henrique Bizzo de Santana (RM557263)
  • Pedro Henrique Mendes dos Santos (RM555332)
  • João Marcelo Furtado Romero (RM555199)
  • Kayky Silva Stiliano (RM555148)

print do circuito Arduino/printscreen Arduino circuit

Link da simulação no Wokwi Link do vídeo de explicação no Youtube

Explicação do Projeto 📖

Um programa que mede:

O nível de luminosidade através de um LDR 🔆

  • Baixa luminosidade: LED verde + mensagem no LCD
  • Média luminosidade: LED amarelo + mensagem no LCD
  • Alta luminosidade: LED vermelho + beep + mensagem no LCD

O nível de umidade através do DHT 💦

  • Baixa umidade: LED vermelho + mensagem no LCD + beep
  • Umidade ideal: LED verde + mensagem no LCD
  • Alta umidade: LED vermelho + mensagem no LCD + beep

E temperatura (em °C), também através do DHT 🌡

  • Baixa temperatura: LED amarelo + mensagem no LCD + beep
  • temperatura ideal: LED verde + mensagem no LCD
  • Alta temperatura: LED amarelo + mensagem no LCD + beep

Componentes 🛠️

  • 1x Placa Arduino Uno
  • 1x Breadboard
  • 1x Potenciômetro
  • 1x DHT11
  • 1x Buzzer
  • 1x Display LCD
  • 1x Sensor de fotorrresistência
  • 3x LEDs
  • 6x Resistores

Dependências 📦

  • LiquidCrystal
  • DHT Sensor library

Explicando o Código 🧑‍💻

Precisamos incluir as bibliotecas para podermos ter acesso a métodos dos quais vamos precisar para interagir com o DHT.

Assim como também é preciso declarar, iniciando tais valores para podermos usá-los depois na aplicação.

#include <LiquidCrystal.h>
#include <DHT.h>
 
const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
 
#define DHTPIN A0
#define DHTTYPE DHT22
 
DHT dht(DHTPIN, DHTTYPE);
 
int valor_ldr;

A função testaLuminozidade() que retorna void, ou seja, não retorna nada, é declarada.

Fazemos a leitura analógica do nosso LDR, coloamos dentro da função map, para que possamos controlar os valores de forma relativa.

Logo, precisamos da lógica, na qual se o valor se encontra abaixo ou igual a 33 o led verde é aceso e então escrevemos no display que o ambiente está escuro

se está com uma quantidade média de luminosidade (33 < valor analógico do ldr <= 66) o led amarelo é aceso e o beep (piezo/campainha) é tocado além de mostrar no display que o ambiente se encontra em meia luz

caso não entre en nenhum desses casos, significa que a luminosidade está alta, então o led vermelho se acende assim como continua a tocar o beep e escreve no display ambiente muito claro

void testaLuminozidade() {
  lcd.clear();
  valor_ldr = map(analogRead(A1), 8, 1016, 100, 0);
 
  if(valor_ldr<= 33){
    noTone(8);
    digitalWrite(13, LOW);
    digitalWrite(12, LOW);
    digitalWrite(11, HIGH);
 
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Ambiente esta");
    lcd.setCursor(0, 1);
    lcd.print("escuro");
  }
  else if((valor_ldr > 33)&&(valor_ldr <= 66)){
    digitalWrite(13, LOW);
    digitalWrite(12, HIGH);
    digitalWrite(11, LOW);
 
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Ambiente a meia");
    lcd.setCursor(0, 1);
    lcd.print("luz");
  }
  else {
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
    digitalWrite(11, LOW);
    for (int i = 0; i < 5; i++){
      tone(8, 500);
     
    }
   
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Ambiente muito");
    lcd.setCursor(0, 1);
    lcd.print("claro");
  }
}

A função montaTelaHumidade() que retorna void irá ler valores analógicos do DHT, em específico, a humidade

Verifica o valor da umidade lida e executa diferentes ações com base em intervalos de valor. Se a umidade for inferior a 50%, será exibida uma mensagem indicando que a umidade está baixa. Se estiver entre 50% e 70%, será exibida uma mensagem indicando que a umidade está ok. Se for superior a 70%, será exibida uma mensagem indicando que a umidade está alta.

Atualiza o display LCD com a mensagem correspondente ao nível de umidade detectado.

Controla os LEDs conectados aos pinos 13, 12 e 11, e um buzzer conectado ao pino 8, para indicar visual e auditivamente o nível de umidade. Os LEDs e o buzzer são acionados de acordo com as condições de umidade detectadas.

void montaTelaHumidade() {
  String string1 = "Humidade: ";
  float humidade = dht.readHumidity();
  String string2 = "%";
  String exibirHum = string1 + humidade + string2;
 
  if (humidade < 50){
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Humidade BAIXA");
    lcd.setCursor(0,1);
    lcd.print(exibirHum);
 
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
    digitalWrite(11, LOW);
    tone(8, 500);
  }
  else if ((humidade >= 50)&&(humidade < 70)){
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Humidade OK");
    lcd.setCursor(0,1);
    lcd.print(exibirHum);
 
    digitalWrite(13, LOW);
    digitalWrite(12, LOW);
    digitalWrite(11, HIGH);
    noTone(8);
  }
  else {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Humidade ALTA");
    lcd.setCursor(0,1);
    lcd.print(exibirHum);
 
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
    digitalWrite(11, LOW);
    tone(8, 500);
  }
 
}

A função montaTelaTemp() que retorna void irá ler valores analógicos do DHT, em específico, a temperatura

Verifica o valor da temperatura lida e executa diferentes ações com base em intervalos de valor. Se a temperatura for inferior a 10°C, será exibida uma mensagem indicando que a temperatura está baixa. Se estiver entre 10°C e 15°C, será exibida uma mensagem indicando que a temperatura está ok. Se for superior a 15°C, será exibida uma mensagem indicando que a temperatura está alta.

Controla os LEDs conectados aos pinos 13, 12 e 11, e um buzzer conectado ao pino 8, para indicar visual e auditivamente o nível de temperatura. Os LEDs e o buzzer são acionados de acordo com as condições de temperatura detectadas.

void montaTelaTemp(){
  String string1 = "Temp: ";
  float temperatura = dht.readTemperature();
  String string2 = "C";
  String exibeTemp = string1 + temperatura + string2;
 
  if (temperatura < 10){
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Temp. BAIXA");
    lcd.setCursor(0, 1);
    lcd.print(exibeTemp);
 
    digitalWrite(13, LOW);
    digitalWrite(12, HIGH);
    digitalWrite(11, LOW);
    tone(8, 500);
  }
  else if ((temperatura >= 10)&&(temperatura < 15)){
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Temperatura OK");
    lcd.setCursor(0, 1);
    lcd.print(exibeTemp);
 
    digitalWrite(13, LOW);
    digitalWrite(12, LOW);
    digitalWrite(11, HIGH);
    noTone(8);
  }
  else {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Temp. ALTA");
    lcd.setCursor(0, 1);
    lcd.print(exibeTemp);
 
    digitalWrite(13, LOW);
    digitalWrite(12, HIGH);
    digitalWrite(11, LOW);
    tone(8, 500);
  }
}
 

A função montaTelaBlank() que retorna void, servirá como uma "helper" funciton para que possamos causar delays entre as diferentes funções, limpando o display e silenciando o beep

void montaTelaBlank() {
  delay(4000);
  noTone(8);
  delay(1000);
  lcd.clear();
}

A função setup() que retorna void, no Arduíno serve para fazermos o setup da nosso projeto, dizendo para o programa quais pinos utilizaremos e em qual modo, iniciar o DHT e o display LCD, o código extra com diferentes passos para já escrever no display serve para melhorar a experiência de usuário indicando-o que o programa está sendo inicializado

void setup() {
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(A1, INPUT);
 
  dht.begin();
 
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Initializing");
  delay (1000);
  lcd.setCursor(8, 1);
  lcd.print("SETUP...");
  delay (2000);
  lcd.clear();
 
  lcd.setCursor(0, 0);
  lcd.print("CP2 - Edge");
  delay (1000);
  lcd.setCursor(0, 1);
  lcd.print("Computing");
  delay (2000);
  lcd.clear();
 
  for (int i = 0; i <= 15; i++) {
    lcd.setCursor(0, 0);
    lcd.print("Carregando...");
    lcd.setCursor(i, 1);
    lcd.print("*");
    delay (200);
    lcd.clear();
  }
}

A função loop() que retorna void, no Arduíno, servirá como o ciclo de vida inteiro do projeto, é uma função que por padrão roda infinitamente até algo dentro ou fora do códgio pará-lo. Aqui, vamos chamar nossas funções principais já declaradas para termos uma melhor leitura e manutenção do código, assim como chamar também a função montaTelaBlank() entre essas funções para termos um "reset" entre os passos da nossa aplicação

void loop() {
  testaLuminozidade();
  montaTelaBlank();
 
  montaTelaHumidade();
  montaTelaBlank();
 
  montaTelaTemp();
  montaTelaBlank();
}

Placa Arduino/Arduino board


Este projeto encontra sob a MIT License.

About

💡💧 Arduino project for college that reads the humidity, brightness and temperature in the air

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages