Skip to content

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

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy