Project publik dari Tim Nano Tech Squad

Rancang Bangun Dispenser Air Otomatis Berbasis Arduino Uno

Kategori: Mikrokontroler

Ringkasan

Project ini bertujuan untuk membuat dispenser air otomatis tanpa sentuh menggunakan Arduino Uno. Jadi cukup dekatkan gelas, nanti airnya akan langsung keluar sendiri. Cara kerjanya sensor ultrasonik akan mendeteksi gelas. Pada saat gelas didekatkan, pompa airnya akan menyala dan airnya keluar secara otomatis. Selain itu alat ini juga dilengkapi dengan sensor water level untuk mengetahui apakah air masih ada atau sudah habis, serta sensor suhu yang berfungsi untuk memantau kondisi suhu air.

Latar Belakang

Dalam kehidupann sehari-hari, air minum adalah kebutuhan utama. Biasanya, kita mengambil air dari dispenser dengan cara menekan tombol atau membuka keran secara manual. Cara ini sebenarnya kurang praktis dan juga kurang  higienis, karena banyak orang menyentuh bagian yang sama, sehingga bisa menjadi tempat penyebaran kuman. 

Di sisi lain, perkembangan teknologi sekrang sudah semakin maju, terutama dalam penggunaan mikrokontroller seperti Arduino. dengan teknologi ini, kita bisa membuat alat yang bekerja secara otomatis dan lebih praktis digunakan. Berdasarkan hal tersebut, dibuatlah project Smart Dispenser Air Otomatis. Alat ini dirancang agar bisa mengeluarkan air tanpa perlu disentuh. Cukup dengan mendekatkan gelas atau tangan, air akan keluar secara otomatis menggunakan bantuan sensor. Selain itu  alat ini juga dilengkapi dengan sensor  untuk mengetahui  apakah air masih tersedia atau sudah habis, serta sensor suhu untuk mengetahui kondisi air. Jadi, pengguna bisa lebih mudah dan nyaman saat menggunakan dispenser.

Dengan adanya alat ini, diharapkan penggunaan dispenser air menjadi lebih praktis, higienis, dan sesuai dengan perkembangan teknologi saat ini.

Tujuan

  1. Membuat alat dispenser air yang dapat bekerja secara otomatis tanpa sentuhan.
  2. Memanfaatkan Arduino sebagai sistem kontrol utama dalam pembuatan alat.
  3. Menggunakan sensor untuk mendeteksi keberadaan gelas atau tangan.
  4. Mengetahui kondisi air (ada atau habis) menggunakan water level sensor.
  5. Mengetahui suhu air menggunakan sensor suhu (DS18B20).

Manfaat

  1. Memudahkan pengguna dalam mengambil air tanpa perlu menekan tombol.
  2. Lebih higienis karena tidak perlu menyentuh dispenser.
  3. Memberikan informasi kondisi air melalui indikator LED dan Buzzer.
  4. Membantu memahami penerapan teknologi Arduino dalam kehidupan sehari-hari.

Alat dan Bahan

Alat dan Bahan

  1. Arduino Uno
  2. Ultrasonic HC-SR04
  3. Water Level Sensor
  4. Mini Water Pump (12 Volt)
  5. Relay Modul 1 Channel
  6. LED
  7. Buzzer
  8. Adaptor 12V
  9. Selang Air
  10. Kabel Jumper
  11. Breadboard
  12. Wadah air
  13. Temperature Sensor (DS18B20)

Metodologi

  1. Perancangan Sistem : Pada tahap ini dilakukan perencanaan alat, mulai dari  menentukan konsep kerja, memilih komponen serta membuat alur kerja sistem.
  2. Persiapan Alat dan Bahan : Menyiapkan semua komponen yang dibutuhkan dalam pembuatan alat, baik yang sudah tersedia maupun yang perlu dibeli.
  3. Perakitan Rangkaian : Menghubungkan semua komponen sesuai dengan rangkaian yang telah dirancang, seperti sensor ke arduino, relay ke pompa, serta memastikan semua kabel terpasang dengan benar.
  4. Pembuatan Program : Membuat program menggunakan Arduino IDE agar alat dapat bekerja secara otomatis sesuai dengan fungsi yang diinginkan.
  5. Pengujian Alat : Melakukan uji coba untuk memastikan sistem berjalan dengan baik, seperti mendeteksi objek, mengaktifkan pompa, serta memberikan notifikasi saat air habis.
  6. Evaluasi dan Perbaikan : Melakukan pengecekan ulang jika terdapat kesalahan, kemudian memperbaiki rangkaian atau program hingga alat dapat bekerja dengan optimal.

Desain Sistem

img_20260422_105913_7c9d792c8d.png

Skenario Pengujian

Belum tersedia.

Hasil Pengujian

Belum tersedia.

Kesimpulan

Belum tersedia.

Source Code / Pseudocode

#include <OneWire.h>
#include <DallasTemperature.h>

#define trigPin     9
#define echoPin     10
#define relay       7
#define led         6
#define buzzer      5
#define waterSensor A0
#define potPin      A1
#define tempPin     2
OneWire oneWire(tempPin);
DallasTemperature sensors(&oneWire);

long duration;
int distance;
int waterLevel;
float suhu;
int thresholdJarak;

unsigned long relayOnTime = 0;
const unsigned long MAX_RELAY_ON = 5000;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(relay, OUTPUT);
  pinMode(led, OUTPUT);
  pinMode(buzzer, OUTPUT);

  digitalWrite(relay, LOW);
  digitalWrite(led, LOW);
  digitalWrite(buzzer, LOW);

  sensors.begin();
  Serial.begin(9600);
  Serial.println("=== Dispenser Air Otomatis ===");
}

int bacaJarak() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long dur = pulseIn(echoPin, HIGH, 30000);
  if (dur == 0) return 999;
  return dur * 0.034 / 2;
}

void beepBuzzer(int kali, int durasi) {
  for (int i = 0; i < kali; i++) {
    digitalWrite(buzzer, HIGH);
    delay(durasi);
    digitalWrite(buzzer, LOW);
    delay(durasi);
  }
}

void loop() {
  thresholdJarak = map(analogRead(potPin), 0, 1023, 5, 20);
  waterLevel     = analogRead(waterSensor);
  distance       = bacaJarak();

  sensors.requestTemperatures();
  suhu = sensors.getTempCByIndex(0);

  // Validasi sensor error
  if (suhu == -127.0 || suhu == 85.0) {
    Serial.println("❌ Sensor suhu error / tidak terbaca!");
    suhu = 0; // anggap normal, lanjut
  }

  Serial.print("Jarak: ");     Serial.print(distance);
  Serial.print(" cm | Air: "); Serial.print(waterLevel);
  Serial.print(" | Suhu: ");   Serial.print(suhu, 1);
  Serial.print(" C | Thr: ");  Serial.println(thresholdJarak);

  // Suhu terlalu panas
  if (suhu > 45.0) {
    digitalWrite(relay, LOW);
    digitalWrite(led, LOW);
    beepBuzzer(2, 300);
    Serial.println("🌡 PERINGATAN: Air terlalu panas!");
    delay(200);
    return;
  }

  // Air habis
  if (waterLevel < 300) {
    digitalWrite(relay, LOW);
    digitalWrite(led, LOW);
    beepBuzzer(3, 200);
    Serial.println("⚠ PERINGATAN: Air habis!");
  }
  // Normal
  else {
    digitalWrite(buzzer, LOW);

    if (distance > 0 && distance < thresholdJarak) {
      if (relayOnTime == 0) relayOnTime = millis();

      if (millis() - relayOnTime < MAX_RELAY_ON) {
        digitalWrite(relay, HIGH);
        digitalWrite(led, HIGH);
        Serial.println("✓ Air mengalir...");
      } else {
        digitalWrite(relay, LOW);
        digitalWrite(led, LOW);
        beepBuzzer(1, 100);
        Serial.println("⏱ Batas waktu tercapai, angkat gelas.");
      }
    } else {
      digitalWrite(relay, LOW);
      digitalWrite(led, LOW);
      relayOnTime = 0;
    }
  }

  delay(200);
}

Info Project

Tim: Nano Tech Squad
Status: submitted
Dipublikasikan: 2026-04-22 11:26:13

Anggota Tim

AHMAD ISMULLAH NASUTION (member)
DEWI PURBASARI MENDROFA (member)
Lasma Puja Simbolon (member)
Rina Prudencia siregar (member)
MUHTADA ALI (leader)