ARIEL NUNES BRAZ GOMESFernando F de Carvalho
Published

Controle de água

Este projeto de IoT transforma a gestão do consumo de água através de dispositivos inteligentes que monitoram e controlam o uso de água.

IntermediateProtip10 hours17
Controle de água

Things used in this project

Story

Read more

Schematics

Esquema eletrico

Code

Main

C/C++
#include <Arduino.h>
#include <WiFi.h>
#include <FirebaseESP32.h>
#include "DHT.h"
#include <Adafruit_Sensor.h>
#include <NewPing.h>
#include "Sensor.h"

// Configuraes Wi-Fi (substitua pelos seus dados)
const char* ssid = "UPE-Estudantes(UnL)";
const char* password = "OrgulhodeserUPE";

// Configuraes do Firebase (substitua pelos seus dados)
#define FIREBASE_HOST "https://redes-2-iot-c5092-default-rtdb.firebaseio.com/"
#define FIREBASE_AUTH "C5tKp8wL9bUNIYHC4IG20Q1NMsMES4wnUcsSBkMI"

FirebaseData firebaseData;
FirebaseConfig config;

// Definindo os sensores ultrassnicos
const int trigCisterna = 23;
const int echoCisterna = 22;
const int trigCaixa = 19;
const int echoCaixa = 18;

const int bombaPin = 4;

FirebaseData fbdo;
FirebaseAuth auth;

Sensor sensorCisterna(trigCisterna, echoCisterna);
Sensor sensorCaixa(trigCaixa, echoCaixa);

void setup() {
    Serial.begin(9600);

    // Conectar ao Wi-Fi
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("\nConectado ao Wi-Fi");

    // Configurar o Firebase
    config.database_url = FIREBASE_HOST;
    config.signer.tokens.legacy_token = FIREBASE_AUTH;

    Firebase.reconnectNetwork(true);
    fbdo.setBSSLBufferSize(4096, 4096);  // Atualizado para usar dois argumentos
    Firebase.begin(&config, &auth);

    // Inicializar sensores
    sensorCisterna.begin();
    sensorCaixa.begin();

    // Configurar pino da bomba
    pinMode(bombaPin, OUTPUT);
    digitalWrite(bombaPin, HIGH); // Liga a bomba inicialmente
}

void loop() {
  float distanciaCisterna = sensorCisterna.getDistance();
  delay(100); // Pequeno delay para evitar interferncia entre sensores
  float distanciaCaixa = sensorCaixa.getDistance();

  // Imprime as distncias no Monitor Serial
  Serial.print("Distncia Cisterna: ");
  Serial.print(distanciaCisterna);
  Serial.println(" m");

  Serial.print("Distncia Caixa: ");
  Serial.print(distanciaCaixa);
  Serial.println(" m");

  // Verifica se a distncia da cisterna est prxima de 2,5 metros
  if (fabs(distanciaCisterna - 2.5) < 0.1) {
    Serial.println("Objeto detectado na cisterna a 2,5 metros");
  }

  // Verifica se a distncia da caixa d'gua est prxima de 2,5 metros
  if (fabs(distanciaCaixa - 2.5) < 0.1) {
    Serial.println("Objeto detectado na caixa d'gua a 2,5 metros");
  }

  // Controle da bomba baseado na leitura do sensor da caixa d'gua
  if (distanciaCaixa <= 0.04) {
    digitalWrite(bombaPin, LOW);
    Serial.println("Bomba desligada");
  } else {
    digitalWrite(bombaPin, HIGH);
    Serial.println("Bomba ligada");
  }

  // Enviar os dados para o Firebase
  Firebase.setFloat(fbdo, "/distCaixa", distanciaCaixa);
  Firebase.setFloat(fbdo, "/distCis", distanciaCisterna);

  // Ler o status da bomba do Firebase
  if (Firebase.getString(fbdo, "/bombaStatus")) {
    String bombaStatus = fbdo.stringData();
    if (bombaStatus == "ON") {
      digitalWrite(bombaPin, HIGH);
    } else {
      digitalWrite(bombaPin, LOW);
    }
  }
  
  delay(1000); // Atraso para a prxima leitura
}

Sensor

C/C++
#include "Sensor.h"

#define SOUND_SPEED 0.034 // Velocidade do som em cm/us

Sensor::Sensor(int trigPin, int echoPin) {
    this->trigPin = trigPin;
    this->echoPin = echoPin;
}

void Sensor::begin() {
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
}

float Sensor::getDistance() {
    // Gera um pulso no pino de trig
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    
    // Calcula a durao do pulso no pino de echo
    long duration = pulseIn(echoPin, HIGH);
    
    // Calcula a distncia em metros
    float distance = (duration * SOUND_SPEED) / 2 / 100;
    return distance;
}

Senor.H

C/C++
#ifndef SENSOR_H
#define SENSOR_H

#include <Arduino.h>

class Sensor {
  public:
    Sensor(int trigPin, int echoPin);
    void begin();
    float getDistance();
  
  private:
    int trigPin;
    int echoPin;
};

#endif

Credits

ARIEL NUNES BRAZ GOMES
4 projects • 2 followers
Amante da tecnologia e louco por café. Sou um estudante com um brilho especial no olhar, aberto a diálogo e com sede de conhecimento.
Fernando F de Carvalho
21 projects • 8 followers
Thanks to Elian Barbosa Gomes, Marco Antonio, and Hydelbranda Prates.

Comments