// Include necessary libraries
#include <DHT.h> // DHT library for temperature and humidity sensor
#include <NewPing.h> // Ultrasonic sensor library
#include "HX711.h" // Load cell library
// Pin definitions
#define DHTPIN 8 // DHT22 signal pin connected to pin 8
#define DHTTYPE DHT22 // Define the DHT sensor type (DHT22)
// Define pins for HX711 load cell amplifier
#define LOADCELL_DOUT_PIN 3 // Load cell DT pin connected to pin 3
#define LOADCELL_SCK_PIN 2 // Load cell SCK pin connected to pin 2
// Define pins for the ultrasonic sensor
#define TRIG_PIN 9 // Ultrasonic sensor TRIG pin connected to pin 9
#define ECHO_PIN 10 // Ultrasonic sensor ECHO pin connected to pin 10
#define MAX_DISTANCE 200 // Maximum distance to measure in cm
// Initialize sensor objects
DHT dht(DHTPIN, DHTTYPE); // DHT22 sensor object
HX711 scale; // Load cell object
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE); // Ultrasonic sensor object
void setup() {
// Initialize serial communication
Serial.begin(9600);
// Initialize DHT sensor
dht.begin();
// Initialize load cell
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.set_scale(); // Adjust to your load cell scale factor
scale.tare(); // Reset scale to zero
// Display startup message
Serial.println("EcoBin System Initialized!");
}
void loop() {
// Read ultrasonic sensor for waste level (distance)
int distance = sonar.ping_cm();
Serial.print("Waste level distance: ");
Serial.print(distance);
Serial.println(" cm");
// Read load cell for bin weight
float weight = scale.get_units(5); // Average of 5 readings
Serial.print("Bin weight: ");
Serial.print(weight);
Serial.println(" kg");
// Read temperature and humidity from DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
} else {
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
}
// Add a delay between each reading
delay(5000); // Delay 5 seconds before the next reading
}