Hardware components | ||||||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
Título: Lixeira Inteligente
Descrição:O projeto "Lixeira Inteligente" tem como objetivo criar uma lixeira inteligente utilizando um microcontrolador ESP32. Este dispositivo inovador utiliza sensores de ultrassom para medir o nível de preenchimento e detectar proximidade, além de um sensor de peso para monitorar o peso total do lixo acumulado. Os dados são processados e exibidos em tempo real em uma interface web, permitindo aos usuários gerenciar os resíduos de forma eficiente. O projeto é uma colaboração entre Allan Miller, Julio Cesar, João Pedro e Matheus Melo.
Objetivo:Desenvolver uma solução eficiente e fácil de usar para a gestão de resíduos, fornecendo monitoramento em tempo real dos níveis e do peso do lixo.
Componentes:
- ESP32: Microcontrolador
- Sensores de Ultrassom: Medem o nível de preenchimento e detectam proximidade
- Botão: Entrada do usuário para indicar lixeira cheia
- LEDs: Indicadores visuais do estado da lixeira
- Interface Web: Exibe dados históricos e status atual
Passos para Construir:
- Montar Componentes: Conectar o ESP32 aos sensores, botão e LEDs.
- Escrever Código: Desenvolver firmware para ler dados dos sensores e controlar os LEDs.
- Interface Web: Criar uma aplicação web para exibir os dados.
- Teste e Calibração: Garantir leituras precisas e funcionalidade.
- Implantação: Instalar a lixeira inteligente e monitorar seu desempenho.
Conclusão:O projeto "Lixeira Inteligente" demonstra como a tecnologia inteligente pode otimizar a gestão de resíduos, tornando-a mais eficiente e ecologicamente correta.
#include <Arduino.h>
#include <WiFi.h>
#include <FirebaseESP32.h>
// Provide the RTDB payload printing info and other helper functions.
#include <addons/RTDBHelper.h>
/* 1. Define the WiFi credentials */
#define WIFI_SSID "UPE-Estudantes(UnL)"
#define WIFI_PASSWORD "OrgulhodeserUPE"
/* 2. If work with RTDB, define the RTDB URL and database secret */
#define DATABASE_URL "https://lixeira-69163-default-rtdb.firebaseio.com/"
#define DATABASE_SECRET "OBoaTMCgP4AQr2XGL1nnq6a9AgsGzhyvW95C7F29"
/* 3. Define the Firebase Data object */
FirebaseData fbdo;
/* 4, Define the FirebaseAuth data for authentication data */
FirebaseAuth auth;
/* Define the FirebaseConfig data for config data */
FirebaseConfig config;
unsigned long dataMillis = 0;
int count = 0;
int PINO_LED_VERDE = 21;
int PINO_LED_AMARELO = 5;
int PINO_LED_VERMELHO = 19;
void setup() {
Serial.begin(115200);
pinMode(BUILTIN_LED, OUTPUT);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);
/* Assign the certificate file (optional) */
// config.cert.file = "/cert.cer";
// config.cert.file_storage = StorageType::FLASH;
/* Assign the database URL and database secret(required) */
config.database_url = DATABASE_URL;
config.signer.tokens.legacy_token = DATABASE_SECRET;
// Comment or pass false value when WiFi reconnection will control by your code or third party library e.g. WiFiManager
Firebase.reconnectNetwork(true);
// Since v4.4.x, BearSSL engine was used, the SSL buffer need to be set.
// Large data transmission may require larger RX buffer, otherwise connection issue or data read time out can be occurred.
fbdo.setBSSLBufferSize(4096, 1024); // Define both Rx and Tx buffer sizes
/* Initialize the library with the Firebase authen and config */
Firebase.begin(&config, &auth);
// Or use legacy authenticate method
// Firebase.begin(DATABASE_URL, DATABASE_SECRET);
// Inicializa os pinos dos LEDs
pinMode(PINO_LED_VERDE, OUTPUT);
pinMode(PINO_LED_AMARELO, OUTPUT);
pinMode(PINO_LED_VERMELHO, OUTPUT);
}
void loop() {
if (millis() - dataMillis > 5000) {
dataMillis = millis();
int umidade = random() % 100; // Simulação do nível de umidade
// Defina os limites para cada estado de umidade
int limite_verde = 70;
int limite_amarelo = 40;
// Atualiza o nível de umidade no banco de dados Firebase
Firebase.setInt(fbdo, "/sala5/umidade", umidade);
// Verifica o nível de umidade e controla os LEDs
if (umidade >= limite_verde) {
// Umidade alta - acende o LED verde
digitalWrite(PINO_LED_VERDE, HIGH);
digitalWrite(PINO_LED_AMARELO, LOW);
digitalWrite(PINO_LED_VERMELHO, LOW);
} else if (umidade >= limite_amarelo) {
// Umidade moderada - acende o LED amarelo
digitalWrite(PINO_LED_VERDE, LOW);
digitalWrite(PINO_LED_AMARELO, HIGH);
digitalWrite(PINO_LED_VERMELHO, LOW);
} else {
// Umidade baixa - acende o LED vermelho
digitalWrite(PINO_LED_VERDE, LOW);
digitalWrite(PINO_LED_AMARELO, LOW);
digitalWrite(PINO_LED_VERMELHO, HIGH);
}
// Lê o estado da luz do Firebase e acende o LED interno de acordo
bool luz;
Firebase.getBool(fbdo, "/sala5/luz", &luz);
digitalWrite(BUILTIN_LED, luz);
}
}
#include <Arduino.h>
#include <WiFi.h>
#include <FirebaseESP32.h>
// Definir as credenciais do Wi-Fi
#define WIFI_SSID "UPE-Estudantes(UnL)"
#define WIFI_PASSWORD "OrgulhodeserUPE"
// Definir as credenciais do Firebase
#define DATABASE_URL "https://lixeirainteligente-d0a1f-default-rtdb.firebaseio.com/" // <databaseName>.firebaseio.com or <databaseName>.<region>.firebasedatabase.app
#define DATABASE_SECRET "gkXg8YMeqfiW2Cmgg8c2mshFK5C563pbLp2ZQ5q9"
// Definir pinos e variáveis globais
#define LED_PIN_RED 5
#define LED_PIN_YELLOW 18
#define LED_PIN_GREEN 19
#define TRIG_PIN 2
#define ECHO_PIN 4
#define BUTTON_PIN 12
#define POT_PIN 35
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
unsigned long dataMillis = 0;
bool alertActive = false;
unsigned long alertStartMillis = 0;
void setup() {
// Iniciar a comunicação serial
Serial.begin(115200);
// Configurar os pinos dos LEDs como saída
pinMode(LED_PIN_RED, OUTPUT);
pinMode(LED_PIN_YELLOW, OUTPUT);
pinMode(LED_PIN_GREEN, OUTPUT);
// Configurar os pinos do sensor ultrassônico
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Configurar o pino do botão como entrada com pull-up interno
pinMode(BUTTON_PIN, INPUT_PULLUP);
// Configurar o pino do potenciômetro como entrada
pinMode(POT_PIN, INPUT);
// Conectar ao Wi-Fi
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
// Configurar o Firebase
config.database_url = DATABASE_URL;
config.signer.tokens.legacy_token = DATABASE_SECRET;
Firebase.reconnectNetwork(true);
fbdo.setBSSLBufferSize(4096, 4096); // Atualizado para usar dois argumentos
Firebase.begin(&config, &auth);
}
long getDistance() {
// Enviar pulso de 10us ao pino TRIG
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Ler o tempo do pulso ECHO em microsegundos
long duration = pulseIn(ECHO_PIN, HIGH);
// Calcular a distância em centímetros
long distance = duration * 0.034 / 2;
return distance;
}
void loop() {
// Verificar se o botão foi pressionado
if (digitalRead(BUTTON_PIN) == HIGH && !alertActive) {
alertActive = true;
alertStartMillis = millis();
Serial.println("Botão pressionado. Alerta de coleta ativado.");
// Acender o LED vermelho e enviar estado ao Firebase
digitalWrite(LED_PIN_RED, HIGH);
digitalWrite(LED_PIN_YELLOW, LOW);
digitalWrite(LED_PIN_GREEN, LOW);
if (Firebase.setString(fbdo, "/luz", "Vermelho aceso (alerta de coleta)")) {
Serial.println("Estado de alerta enviado para o Firebase com sucesso");
} else {
Serial.printf("Falha ao enviar estado de alerta: %s\n", fbdo.errorReason().c_str());
}
}
// Verificar se o alerta está ativo e o tempo de 10 segundos passou
if (alertActive) {
if (millis() - alertStartMillis < 10000) {
return; // Manter o alerta ativo
} else {
alertActive = false;
Serial.println("Alerta de coleta desativado.");
}
}
// Verificar se já se passaram 2 segundos
if (millis() - dataMillis > 2000) {
dataMillis = millis();
// Ler o valor do potenciômetro e mapear para a faixa de distância
int potValue = analogRead(POT_PIN);
long maxDistance = map(potValue, 0, 4095, 20, 100); // Mapeando de 20 cm a 100 cm
// Obter a distância medida pelo sensor ultrassônico
long distance = getDistance();
Serial.print("Distância: ");
Serial.print(distance);
Serial.print(" cm, MaxDistância: ");
Serial.print(maxDistance);
Serial.println(" cm");
if (Firebase.setString(fbdo, "/distancia", distance)) {
Serial.println("Distancia enviado para o Firebase com sucesso");
} else {
Serial.printf("Falha ao enviar distancia: %s\n", fbdo.errorReason().c_str());
}
if (Firebase.setString(fbdo, "/distanciaMax", maxDistance)) {
Serial.println("distanciaMax enviado para o Firebase com sucesso");
} else {
Serial.printf("Falha ao enviar distanciaMax: %s\n", fbdo.errorReason().c_str());
}
// Determinar qual LED acender com base na distância
if (distance <= maxDistance * 0.3) {
digitalWrite(LED_PIN_RED, HIGH);
digitalWrite(LED_PIN_YELLOW, LOW);
digitalWrite(LED_PIN_GREEN, LOW);
Serial.println("LED Vermelho aceso");
if (Firebase.setString(fbdo, "/luz", "Vermelho aceso")) {
Serial.println("Estado enviado para o Firebase com sucesso");
} else {
Serial.printf("Falha ao enviar estado: %s\n", fbdo.errorReason().c_str());
}
} else if (distance <= maxDistance * 0.7) {
digitalWrite(LED_PIN_RED, LOW);
digitalWrite(LED_PIN_YELLOW, HIGH);
digitalWrite(LED_PIN_GREEN, LOW);
Serial.println("LED Amarelo aceso");
if (Firebase.setString(fbdo, "/luz", "Amarelo aceso")) {
Serial.println("Estado enviado para o Firebase com sucesso");
} else {
Serial.printf("Falha ao enviar estado: %s\n", fbdo.errorReason().c_str());
}
} else {
digitalWrite(LED_PIN_RED, LOW);
digitalWrite(LED_PIN_YELLOW, LOW);
digitalWrite(LED_PIN_GREEN, HIGH);
Serial.println("LED Verde aceso");
if (Firebase.setString(fbdo, "/luz", "Verde aceso")) {
Serial.println("Estado enviado para o Firebase com sucesso");
} else {
Serial.printf("Falha ao enviar estado: %s\n", fbdo.errorReason().c_str());
}
}
}
}








Comments