Embedded Systems

Project Smart Bin

Een intelligente afvaloplossing die geavanceerde sensortechnologie combineert met contactloze hygiëne.

Projectanalyse & Concept

Binnen de module Embedded Systems hebben wij de Smart Bin ontwikkeld: een innovatieve, zelfdenkende prullenbak die is ontworpen om de publieke en huishoudelijke hygiëne te optimaliseren. Het primaire doel was het realiseren van een volledig contactloos systeem, waardoor fysieke interactie met de afvalbak overbodig wordt.

Het systeem maakt gebruik van een ultrasoon sensor die realtime afstandsmetingen uitvoert. Zodra er beweging of een object binnen het detectiebereik wordt waargenomen, stuurt de microcontroller een servo-motor aan die het deksel automatisch opent. Daarnaast is er een gassensor geïntegreerd die de luchtkwaliteit binnen de bak monitort, waarbij een RGB-led visuele statusupdates geeft bij eventuele stankontwikkeling.

Gebruikte Hardware

  • Arduino Uno (Microcontroller)
  • HC-SR04 (Ultrasoon Sensor)
  • SG90 (Micro Servo Motor)
  • MQ-135 (Air Quality / Gas Sensor)

Terug naar Projecten

De Logica (Arduino Code)

De embedded architectuur is geschreven in C++ en geoptimaliseerd voor realtime inputverwerking van de sensoren:

#include <Servo.h>

// ---------- PIN DEFINITIES ----------
const int TRIG_PIN = 9;
const int ECHO_PIN = 10;
const int SERVO_PIN = 6;
const int GAS_PIN = A0;
const int LED_PIN = 3;

// ---------- VARIABELEN ----------
Servo lidServo;
long duration;
int distance;
int gasValue;

const int openDistance = 15;     // Afstand in cm om de deksel te openen
const int gasThreshold = 400;    // Drempel voor stankmelding
bool lidOpen = false;

// ---------- AFSTAND METEN FUNCTIE ----------
int getDistance() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  long d = pulseIn(ECHO_PIN, HIGH);
  int cm = d * 0.034 / 2;
  return cm;
}

void setup() {
  Serial.begin(9600);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);

  lidServo.attach(SERVO_PIN);
  lidServo.write(0);  // Deksel initieel sluiten
}

void loop() {
  distance = getDistance();
  if (distance < openDistance && !lidOpen) {
    lidServo.write(90);  // Openen
    lidOpen = true;
    delay(3000);
  }
  if (lidOpen && distance >= openDistance) {
    lidServo.write(0);   // Sluiten
    lidOpen = false;
    delay(500);
  }
  
  gasValue = analogRead(GAS_PIN);
  if (gasValue > gasThreshold) {
    digitalWrite(LED_PIN, HIGH);
  } else {
    digitalWrite(LED_PIN, LOW);
  }
  delay(300);
}