Aqui está uma proposta completa de arquivo `README.md` estruturada de forma clara, profissional e ideal para o seu repositório no GitHub.
---
# Arduino Electronic-Dreno (I2C) - v1.2
Este projeto consiste em um sistema automático de monitoramento de qualidade da água e acionamento de dreno baseado em microcontrolador Arduino. Ele utiliza um sensor óptico para medição de turbidez e gerencia um relé de descarga de forma preventiva (por tempo) ou corretiva (por excesso de sujidade).
A versão 1.2 traz correções importantes na estabilidade do display LCD pós-drenagem, além da conversão da leitura analógica para a unidade padrão **NTU** (Unidades de Turbidez Nefelométrica).
---
## 🚀 Funcionalidades
* **Duplo Gatilho de Drenagem:**
* **Por Turbidez:** Ativação automática e imediata caso a água atinja o limite crítico programado.
* **Por Tempo:** Descarga preventiva programada a cada intervalo de tempo definido (padrão: 60 segundos para testes).
* **Conversão para NTU:** Algoritmo matemático integrado para converter a tensão lida no sensor físico em unidades NTU reais.
* **Modo de Economia de Energia (Standby):** O backlight do LCD desliga automaticamente após 30 segundos de inatividade para poupar componentes e energia.
* **Controle de Brilho Dinâmico:** Ajuste manual do LED indicador através de um potenciômetro dedicado.
* **Alertas Sonoros:** Buzzer integrado que emite diferentes frequências indicando o início e a finalização do ciclo de drenagem.
---
## 🔌 Pinagem do Hardware (Mapeamento)
| Componente | Pino Arduino | Tipo de Sinal | Descrição |
| --- | --- | --- | --- |
| **Sensor de Turbidez** | `A0` | Entrada Analógica | Leitura óptica do nível de sujeira |
| **Potenciômetro** | `A1` | Entrada Analógica | Controle de brilho do LED indicador |
| **Sensor LDR** | `2` | Entrada Digital | Monitoramento de iluminação |
| **LED Indicador** | `3` | Saída PWM | Indicador visual com controle de brilho |
| **Buzzer** | `8` | Saída Digital | Alertas sonoros de funcionamento |
| **Módulo Relé (Dreno)** | `9` | Saída Digital | Acionamento da válvula/bomba de dreno |
| **LED Auxiliar** | `11` | Saída Digital | Controle automático de incidência a 90º |
| **Display LCD I2C** | `SDA / SCL` | Comunicação I2C | Monitoramento de dados em tempo real |
---
## 📋 Pré-requisitos e Bibliotecas
Para compilar este projeto com sucesso, certifique-se de instalar as seguintes bibliotecas diretamente no gerenciador de bibliotecas da Arduino IDE:
1. **LiquidCrystal_I2C** (Para controle do display LCD via apenas 2 fios)
2. **LED** (Biblioteca customizada para controle e efeito de flash nos sinalizadores)
3. **Wire** (Nativa do ecossistema Arduino para suporte I2C)
---
## ⚙️ Configurações Importantes no Código
No início do arquivo principal, você pode ajustar o comportamento do sistema alterando os seguintes parâmetros:
```cpp
#define DRAIN_DURATION 10000 // Tempo que o dreno fica aberto (10 segundos)
unsigned long DRAIN_INTERVAL = 60000; // Intervalo máximo entre drenagens por tempo (1 minuto)
float TURBIDITY_THRESHOLD = 2.5; // Limiar de tensão do sensor para considerar a água "SUJA"
```
---
## 📊 Funcionamento do Display
Durante a operação normal, o display exibirá:
* **Linha 1:** `Turbidez: [Valor]NTU`
* **Linha 2:** `Status: MONITOR` ou `Status: SUJA`
Ao entrar em modo de purga/drenagem, a tela é limpa imediatamente exibindo um indicador visual de progresso (`> *`) e o motivo que disparou a ação (`POR TEMPO` ou `POR TURBIDEZ`).
---
## 🛠️ Histórico de Versões
* **v1.0:** Concepção do circuito de drenagem temporizada.
* **v1.1:** Implementação do sensor óptico e lógicas de proteção.
* **v1.2 (Atual):**
* Correção do bug que deixava a tela "vazia" após a finalização da drenagem.
* Tratamento de exceção para impedir valores negativos de NTU no display (`if(NTU < 0) NTU = 0`).
* Refatoração da função `wakeUpDisplay()` para atualizar as variáveis de controle corretamente.
---
## 📄 Licença
Este projeto é de código aberto e está sob a licença MIT. Sinta-se livre para clonar, modificar e aplicar em melhorias industriais ou residenciais.
Aqui está o seu arquivo `README.md` totalmente atualizado (versão 1.3). Ele foi reformulado para refletir a nova arquitetura do código, destacando a transição para a **Programação Orientada a Objetos (POO)** com o uso das bibliotecas de Potenciômetro e Relé, além de detalhar a correção na lógica do LED de incidência.
---
# Arduino Electronic-Dreno (I2C) - v1.3
Este projeto consiste em um sistema inteligente e automatizado para monitoramento da qualidade da água e acionamento de um dreno eletromecânico controlado por um Arduino. O sistema realiza a leitura óptica de um sensor de turbidez e gerencia as descargas de forma preditiva (baseada em tempo) ou corretiva (baseada no nível de contaminação por partículas).
A **versão 1.3** adota o paradigma de **Programação Orientada a Objetos (POO)**, utilizando bibliotecas dedicadas para abstração do Relé e do Potenciômetro, além de corrigir bugs de cintilação no display LCD e a sobreposição errática de comandos no LED de incidência óptica.
---
## 🚀 Novidades da Versão 1.3
* **Abstração por Objetos (POO):** Integração das bibliotecas `<Relay.h>` e `<GBALib_Potentiometer.h>` para um código mais limpo, legível e de fácil manutenção.
* **Controle Dinâmico de Incidência (90º):** Correção das chamadas duplicadas do LED analítico (Pino 11). Agora, o brilho do LED se ajusta dinamicamente e proporcionalmente ao valor de NTU calculado.
* **Fim dos Caracteres Fantasmas no LCD:** Adicionado preenchimento de espaços (*padding*) nas strings do display. Isso impede que valores antigos fiquem "presos" na tela quando o valor atual diminui (ex: evitar que `9 NTU` seja lido como `900 NTU`).
* **Tratamento de Saturação Analógica:** Uso da função `constrain()` no mapeamento dos sinais PWM para garantir estabilidade elétrica nos pinos de saída.
---
## 🔌 Pinagem Atualizada do Hardware
| Componente | Pino Arduino | Tipo de Sinal | Classe / Biblioteca | Descrição |
| --- | --- | --- | --- | --- |
| **Sensor de Turbidez** | `A0` | Entrada Analógica | Nativo (`analogRead`) | Coleta a tensão do sensor óptico |
| **Potenciômetro** | `A1` | Entrada Analógica | `Pot` (GBALib) | Mapeia dinamicamente o ganho de 0 a 255 |
| **Sensor LDR** | `4` | Entrada Digital | Nativo (`digitalRead`) | Monitoramento de luminosidade ambiente |
| **LED Indicador** | `3` | Saída PWM (Analg.) | Nativo (`analogWrite`) | Status visual com brilho controlado pelo Pot |
| **Buzzer** | `8` | Saída Digital | Nativo (`tone`) | Alertas sonoros de início e fim de ciclo |
| **Módulo Relé (Dreno)** | `9` | Saída Digital | `Relay` | Acionamento da válvula (Configurado como NF) |
| **LED de Incidência** | `11` | Saída PWM (Analg.) | `LED` | Fonte de luz analítica para leitura a 90º |
| **Display LCD I2C** | `SDA/SCL` | Comunicação I2C | `LiquidCrystal_I2C` | Interface de visualização em tempo real |
---
## 📋 Bibliotecas Necessárias
Certifique-se de possuir todas as dependências instaladas no seu ambiente de desenvolvimento (**Arduino IDE** ou **PlatformIO**):
1. `Wire.h` (Nativa)
2. `LiquidCrystal_I2C.h`
3. `LED.h`
4. `Relay.h`
5. `GBALib_Potentiometer.h`
---
## ⚙️ Parâmetros de Calibração Técnica
A curva de conversão de tensão para **NTU** (Unidades de Turbidez Nefelométrica) está parametrizada através da equação polinomial de segundo grau contida no loop principal:
$$NTU = -1120.4 \cdot V^2 + 5742.3 \cdot V - 4353.8$$
Para modificar as variáveis de tempo ou o limite de corte do sensor, altere as diretivas e variáveis no início do arquivo:
```cpp
#define DRAIN_DURATION 10000 // Duração da abertura do dreno (10 segundos)
unsigned long DRAIN_INTERVAL = 60000; // Intervalo de segurança para dreno por tempo (1 minuto)
float TURBIDITY_THRESHOLD = 2.5; // Tensão limite (Volts). Valores acima indicam água suja.
```
---
## 💻 Comportamento do Sistema
```
+-----------------------+
| Loop de Leitura |
+-----------+-----------+
|
[Lê Turbidez (V)]
|
+-------------------+-------------------+
| |
(V > THRESHOLD) ou (Tempo Esgotado) (Água Limpa / Dentro do Tempo)
| |
v v
+------------------------+ +------------------------+
| Executa executeDrain | | Atualiza Display |
| - Alerta Sonoro | | - Exibe NTU Real |
| - Ativa Relé (Modo OO)| | - Ajusta LED Pino 11 |
| - Barra de Progresso | | - Checa Timeout LCD |
+------------------------+ +------------------------+
```
---
## 📄 Licença
Este software é distribuído sob a licença MIT. Sinta-se livre para aplicar, modificar e compartilhar em projetos acadêmicos, residenciais ou de saneamento ambiental de pequeno porte.</GBALib_Potentiometer.h></Relay.h>