// Arduino Main Controller Code
#include <ESP32CAM.h>
#include <WiFi.h>
#include <Servo.h>
Servo sortingServo;
int trigPin = 9;
int echoPin = 10;
void setup() {
Serial.begin(115200);
sortingServo.attach(6);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Initialize WiFi connection
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
}
void loop() {
if (detectWaste()) {
String wasteType = classifyWaste();
sortWaste(wasteType);
logData(wasteType);
}
delay(1000);
}
// TensorFlow Lite AI Model
import tensorflow as tf
import numpy as np
from PIL import Image
class WasteClassifier:
def __init__(self, model_path):
self.interpreter = tf.lite.Interpreter(model_path)
self.interpreter.allocate_tensors()
def classify(self, image_path):
image = Image.open(image_path).resize((224, 224))
input_data = np.array(image, dtype=np.float32) / 255.0
input_data = np.expand_dims(input_data, axis=0)
input_details = self.interpreter.get_input_details()
output_details = self.interpreter.get_output_details()
self.interpreter.set_tensor(input_details[0]['index'], input_data)
self.interpreter.invoke()
predictions = self.interpreter.get_tensor(output_details[0]['index'])
return self.get_waste_category(predictions[0])
// IoT Data Transmission
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
void sendToCloud(String wasteType, float confidence) {
if (WiFi.status() == WL_CONNECTED) {
WiFiClientSecure client;
client.setInsecure();
DynamicJsonDocument doc(1024);
doc["timestamp"] = millis();
doc["waste_type"] = wasteType;
doc["confidence"] = confidence;
doc["location"] = "Bin_001";
String jsonString;
serializeJson(doc, jsonString);
if (client.connect("api.firebase.com", 443)) {
client.println("POST /v1/projects/smart-waste/databases/(default)/documents/waste_logs HTTP/1.1");
client.println("Host: api.firebase.com");
client.println("Content-Type: application/json");
client.println("Content-Length: " + String(jsonString.length()));
client.println();
client.println(jsonString);
}
}
}