Rabu, 25 Juni 2025

EAS PPB - Aplikasi Edukasi dan Penjemputan Sampah dengan AI Deteksi Jenis Sampah

Laporan Proyek Akhir PPB: Membangun Aplikasi "Cemungut" dengan Flutter dan Firebase


Halo semua!

Selamat datang di laporan akhir proyek kami untuk mata kuliah Pemrograman Perangkat Bergerak. Dalam satu semester ini, kami telah bekerja keras untuk membangun sebuah aplikasi mobile fungsional dari nol. Proyek kami bernama Cemungut, sebuah solusi digital untuk mengatasi masalah pengelolaan sampah yang kompleks di lingkungan kita.

Tujuan utama proyek ini adalah tidak hanya untuk memenuhi tugas kuliah, tetapi juga untuk menerapkan konsep-konsep arsitektur aplikasi mobile modern, mengintegrasikan layanan backend, dan bahkan menyentuh dunia Machine Learning di perangkat mobile.

Mari kita selami lebih dalam bagaimana Cemungut dibangun, modul per modul!

Deskripsi Aplikasi

  • Tema:
    Aplikasi ini mengusung tema "Smart Environment" dengan pendekatan gamifikasi. Tujuannya adalah mengubah kebiasaan masyarakat dalam mengelola sampah, dari yang semula dianggap sebagai beban menjadi sebuah aktivitas yang mudah, terjadwal, dan bahkan menguntungkan melalui interaksi digital yang intuitif.

  • Tujuan:

    1. Mempermudah Proses Pembuangan: Menyediakan layanan pemesanan penjemputan sampah secara on-demand, sehingga pengguna tidak perlu khawatir dengan jadwal yang tidak pasti.

    2. Memberikan Insentif: Mendorong partisipasi aktif masyarakat dalam memilah dan mengelola sampah dengan memberikan imbalan berupa poin (CemPoin) yang dapat ditukar dengan hadiah.

    3. Meningkatkan Edukasi: Menyediakan platform untuk memberikan informasi mengenai jenis-jenis sampah dan cara pengelolaannya yang benar.

  • Target Pengguna:
    Masyarakat umum di area perkotaan dan suburban, khususnya penghuni komplek perumahan, apartemen, atau kos yang peduli lingkungan namun membutuhkan sistem yang praktis dan terintegrasi untuk mengelola sampah rumah tangga mereka.

Daftar Fitur Utama

Untuk mencapai tujuan tersebut, aplikasi "Cemungut" dilengkapi dengan serangkaian fitur utama, yaitu:

  • Registrasi & Login Pengguna: Sistem autentikasi aman menggunakan Firebase Authentication (Email & Password).

  • Pemesanan Penjemputan Sampah On-Demand: Pengguna dapat menentukan item sampah, jumlah, catatan, serta jadwal penjemputan yang fleksibel.

  • Riwayat dan Detail Transaksi: Pengguna dapat melacak semua riwayat penjemputan, melihat detailnya, serta (untuk simulasi proyek) mengubah status transaksi menjadi 'Selesai' atau 'Dibatalkan'.

  • Sistem Poin & Reward (Gamifikasi):

    • Akumulasi Poin: Setiap transaksi yang selesai akan memberikan poin kepada pengguna.

    • Tingkat Keanggotaan: Terdapat sistem membership (contoh: Gold Member) yang memberikan bonus poin tambahan jika target poin tercapai.

    • Penukaran Hadiah: Poin yang terkumpul dapat ditukarkan dengan berbagai hadiah menarik seperti saldo e-wallet atau voucher.

  • Manajemen Profil Pengguna: Pengguna dapat melihat dan mengubah data pribadi mereka.

  • Fitur Pendukung: Halaman edukasi, deteksi jenis sampah (konsep), dan peta lokasi Bank Sampah terdekat.

Untuk mewujudkan semua fitur tersebut, kami memilih arsitektur teknologi yang modern dan skalabel.

Arsitektur Aplikasi & Teknologi yang Digunakan

Sebelum masuk ke fitur, penting untuk memahami fondasi aplikasi kami. Kami mengadopsi pendekatan arsitektur berlapis yang terinspirasi dari Clean Architecture untuk memastikan kode yang kami tulis bersih, terorganisir, dan mudah dikelola.

Struktur folder proyek kami dibagi menjadi tiga lapisan utama:

  • Models (lib/app/models): Lapisan data yang berisi definisi objek (POJO/Plain Old Dart Object) seperti AppUser, PickupOrder, Address, dll. Lapisan ini bertanggung jawab untuk menstrukturkan data.

  • Services (lib/app/services): Lapisan logika bisnis dan komunikasi. Di sinilah semua interaksi dengan pihak ketiga (seperti Firebase, TFLite, Geolokasi) terjadi. Ini memisahkan logika inti dari tampilan.

  • Presentation (lib/presentation): Lapisan antarmuka pengguna (UI). Berisi semua screens (halaman) dan widgets yang dilihat dan di-interaksikan oleh pengguna.

Teknologi Utama:

  • Framework: Flutter (SDK 3.x)

  • Bahasa: Dart

  • Backend & Database: Google Firebase (Authentication, Firestore)

  • Machine Learning: TensorFlow Lite Flutter (tflite_flutter)

  • Manajemen State: GetX (untuk navigasi) dan StatefulWidget (setState) untuk state lokal.

  • Layanan Lokasi: geolocator & geocoding

  • Peta: flutter_map


Penjelasan Modul-Modul Inti

Aplikasi Cemungut terdiri dari beberapa modul utama yang saling terhubung. Berikut penjelasannya.

Modul 1: Autentikasi & Manajemen Profil User

  • Tujuan: Menyediakan sistem masuk yang aman bagi pengguna dan menyimpan data profil mereka.

  • Implementasi Teknis: Kami menggunakan Firebase Authentication untuk menangani proses registrasi, login, dan logout dengan email/password. Setiap kali pengguna baru mendaftar, sebuah dokumen baru juga dibuat di koleksi users pada Cloud Firestore. Dokumen ini menyimpan informasi tambahan seperti nama, jumlah poin, dan status keanggotaan (misal: isGoldMember).

Modul 2: Manajemen Alamat dengan Peta Interaktif

  • Tujuan: Memungkinkan pengguna untuk menyimpan, mengedit, dan memilih beberapa alamat penjemputan.

  • Implementasi Teknis: Fitur ini adalah contoh integrasi beberapa library.

    1. Geolocator: Digunakan untuk mendapatkan lokasi pengguna saat ini ketika mereka pertama kali membuka layar "Tambah Alamat".

    2. Flutter Map & Geocoding: Menampilkan peta interaktif di mana pengguna bisa menggeser pin untuk menentukan lokasi presisi. Setiap kali pin digeser, Geocoding akan menerjemahkan koordinat menjadi alamat jalan yang bisa dibaca.

    3. Firestore: Semua alamat yang disimpan akan masuk ke dalam sub-collection addresses di dalam dokumen user yang bersangkutan. Ini adalah praktik yang baik untuk data relasional di NoSQL.

Cuplikan Kode Kunci: Logika untuk mengambil lokasi awal pengguna.

Generated dart      Future<void> _determinePosition() async {
  // Meminta izin lokasi jika diperlukan
  final Position position = await GeolocationService.getCurrentPosition();
  if (mounted) {
    setState(() {
      _currentMapCenter = LatLng(position.latitude, position.longitude);
      _isLoading = false;
    });
    // Memperbarui UI dengan alamat dari koordinat awal
    _onMapPositionChanged(_currentMapCenter!);
  }
}
    

Modul 3: Deteksi Sampah dengan TensorFlow Lite

  • Tujuan: Memberikan alat bantu kepada pengguna untuk mengidentifikasi jenis sampah secara otomatis menggunakan kamera.

  • Implementasi Teknis: Ini adalah salah satu modul paling menantang.

    1. Aset Model: File model (model.tflite) dan label (labels.txt) kami simpan di folder assets/ml/ dan daftarkan di pubspec.yaml agar terkemas dalam aplikasi.

    2. Image Picker: Memberikan opsi kepada pengguna untuk memilih gambar dari galeri atau mengambil foto baru dengan kamera.

    3. TFLite Service: Sebuah kelas layanan khusus kami buat untuk memuat model, memproses gambar (resize ke 224x224, konversi ke tensor), menjalankan inferensi, dan menginterpretasikan output menjadi label dan confidence score.

    4. R8/Proguard: Kami menghadapi tantangan di mana build rilis gagal karena R8 menghapus kelas-kelas TFLite. Ini kami atasi dengan menambahkan keep rules di file android/app/proguard-rules.pro.

Modul 4: Sistem Pemesanan & Pelacakan On-Demand

  • Tujuan: Menciptakan alur pemesanan yang familiar dan mudah, mirip aplikasi Gojek/Grab.

  • Implementasi Teknis: Proses ini sepenuhnya dikelola oleh Firestore.

    1. Form Input: Pengguna mengisi data di UI.

    2. Kalkulasi Dinamis: Sebelum mengirim, aplikasi menghitung estimasi poin. Logika untuk mengecek status isGoldMember dan menambahkan bonus 3% diterapkan di sini.

    3. Pembuatan Dokumen: Saat tombol "Pesan" ditekan, sebuah objek PickupOrder dibuat di Dart, lalu dikonversi ke format JSON dan disimpan sebagai dokumen baru di koleksi pickupOrders di Firestore.

    4. Update Status: Pengguna bisa melihat status pesanan mereka (Pending, Selesai, Dibatalkan) di halaman riwayat transaksi, yang secara real-time membaca data dari Firestore.

Modul 5: Gamifikasi: Poin, Rewards, & Keanggotaan

  • Tujuan: Mendorong keterlibatan dan loyalitas pengguna melalui sistem insentif.

  • Implementasi Teknis:

    1. Sistem Poin: Poin disimpan sebagai field points pada dokumen user di Firestore. Field ini di-update menggunakan FieldValue.increment() untuk keamanan transaksi.

    2. UI Dinamis: Kartu poin di Halaman Utama dan Halaman Hadiah menggunakan FutureBuilder untuk mengambil data user terbaru. UI-nya berubah secara kondisional: menampilkan progress bar jika belum Gold, dan menampilkan lencana khusus jika sudah Gold.

    3. Penukaran Hadiah: Saat menukar hadiah, aplikasi melakukan pengecekan poin di sisi klien, lalu memanggil fungsi Firestore untuk mengurangi poin dan (di masa depan) mencatat transaksi penukaran.

Kesimpulan Proyek

Membangun Cemungut adalah sebuah perjalanan belajar yang luar biasa. Kami berhasil mengimplementasikan aplikasi Flutter yang full-stack dengan fitur-fitur kompleks seperti autentikasi, database real-time, integrasi hardware (kamera & GPS), hingga pemrosesan Machine Learning di perangkat.

Melalui proyek ini, kami belajar pentingnya arsitektur yang baik untuk skalabilitas, tantangan dalam mengelola state di berbagai layar, dan proses debugging untuk masalah spesifik platform seperti konfigurasi build rilis.

Pengembangan Selanjutnya:

  • Implementasi real-time tracking petugas jemput.

  • Integrasi payment gateway untuk penukaran hadiah saldo.

  • Notifikasi push untuk update status pesanan.

Terima kasih telah mengikuti perjalanan pengembangan aplikasi Cemungut kami!

Lihat kode lengkap proyek kami di GitHub:

https://github.com/skedaddlers/cemungut

Lihat YouTube Demo:

https://youtu.be/_h7TC7o9jUc

EAS PPB - Aplikasi Edukasi dan Penjemputan Sampah dengan AI Deteksi Jenis Sampah

Laporan Proyek Akhir PPB: Membangun Aplik asi "Cemungut" dengan Flutter dan Firebase Halo semua! Selamat datang di laporan akhir p...