Minggu, 04 April 2021

IoT : TEMPAT SAMPAH OTOMATIS

  

Mata Kuliah :

Arsitektur dan Organisasi Komputer

Dosen Pengampu :

Aditya Prapanca, S.T., M.kom.


Disusun Oleh :

1.     Vita Rahmada                              20051204003

 2.     Prissely Pravasstifany Mediana   20051204023

3.     Rayyan Nur Fauzan                     20051204075

4.     Andree Lukashiano ButarButar 20051204095                                                    


BAB I

PENDAHULUAN

 

1.1        Latar Belakang

Di era teknologi modern seperti saat ini banyak inovasi baru yang bermunculan baik dari kalangan ilmuwan maupun mahasiwa. Tujuan dari perkembangan teknologi saat ini adalah untuk mempermudah aktifitas manusia agar lebih efisien. Aplikasi berbasis teknologi memiliki cakupan yang cukup luas, hampir seluruh sektor bidang memanfaatkan teknologi modern

Pada saat ini pandemi COVID-19 masih saja terus berkembang. Semua orang dianjurkan untuk menjaga kebersihan diri sendiri. Maka dari itu, kami kelompok 5 memiliki ide untuk

membuat tempat sampah otomatis bertujuan untuk menjaga kesehatan dan kebersihan. Selain karena alasan pandemi, kami juga menemukan masalah-masalah terkait kesadaran orang-orang sekitar yang malas membuang sampah atau mungkin malas membuka dan menutup sampah yang dapat mengakibatkan banyak-nya sampah yang berserakan. Tempat sampah otomatis jika berada di tempat ramai akan sangat bermanfaat dan juga bisa meningkatkan minat orang-orang untuk membuang sampah pada tempat-nya karena tidak perlu repot-repot untuk mebuka dan menutup tempat sampah dan juga kebersihan tangan tetap terjaga.

Dengan adanya tempat sampah otomatis diharapkan mampu mengembangkan minat masyarakat untuk membuang sampah pada tempat-nya. Juga terciptanya lingkungan yang bersih dan sehat yang akhirnya dapat menumbuhkan kesadaran masyarakat akan pentingnya membuang sampah pada tempatnya.

 

1.2        Rumusan Masalah

1.      Apa yang dimaksud dengan Tempat Sampah Otomatis?

2.      Apa saja tujuan pembuatan Tempat Sampah Otomatis?

3.      Apa saja alat dan bahan yang dibutuhkan dalam pembuatan Tempat Sampah Otomatis?

4.      Bagaimana cara kerja Tempat Sampah Otomatis?

5.      Bagaimana proses pembuatan Tempat Sampah Otomatis?

1.3 Tujuan

1.      Agar dapat memahami apa itu Tempat Sampah Otomatis

2.      Agar dapat mengetahui manfaat apa saja yang bisa diambil dari pembuatan Tempat Sampah Otomatis

3.      Agar dapat mengetahui apa saja alat dan bahan yang dibutuhkan dalam pembuatan Tempat Sampah Otomatis

4.      Agar dapat mengetahui dan memahami cara kerja dan proses pembuatan Tempat Sampah Otomatis

5.      Agar dapat membuat Tempat Sampah Otomatis


BAB II

PEMBAHASAN

 

2.1        Pengertian 

Perancangan yang dibuat adalah tempat sampah untuk memudahkan masyarakat pada saat membuang sampah. Tempat sampah ini dirancang untuk bisa membuka dan menutup secara otomatis. Bila pengguna mendekat ke tempat sampah maka tempat sampah itu akan terbuka secara otomatis. Namun bila pengguna menjauh, tempat sampah tersebut akan menutup secara otomatis. Selain membuka dan menutup secara otomatis kami juga menyiapkan sistem untuk mendeteksi kapasitas tempat sampah. Sistem pada tempat sampah ini menggunakan sensor jarak.


2.2    Alat dan Bahan

1.     NODEMCU ESP8266

 


            NodeMCU adalah sebuah platform IoT yang bersifat opensource. Terdiri dari perangkat keras berupa System On Chip ESP8266 dari ESP8266 buatan Esperessif System. NodeMCU ESP8266 berfungsi sebagai controller IoT

 

2.      SENSOR ULTRASONIC HC-SR04

 


            Sensor ultrasonic adalah modul elektronik yang mendeteksi sebuah objek menggunakan suara. Sensor ultrasonic HC-SR04 berfungsi untuk membaca jarak suatu benda.


3.    MOTOR SERVO TOWARDPRO MG966R

 


            Motor servo adalah sebuah perangkat sebagai aktuator putar (motor) yang dirancang dengan sistem kontrol umpan balik loop tertutup (servo), sehingga dapat di set-up atau di atur untuk menentukan dan memastikan posisi sudut dari poros output motor. Motor servo TowardPro MG966R ini berfungsi sebagai penggerak.

 

4.      KABEL JUMPER MALE TO FEMALE

 


            Kabel jumper male female memiliki ujung yang berbeda pada tiap ujungnya, yaitu male dan female. Kabel jumper male to female digunakan untuk menghubungkan antar komponen.

 

5.      KABEL FEMALE TO FEMALE

 


            Kabel jumper female to female digunakan untuk menghubungkan antar komponen yang memiliki header male, contohnya seperti sensor ultrasonic HC-SR04.


6.      LEM PEREKAT

 


            Lem perekat digunakan untuk merekatkan servo ke tempat sampah.

 

7.      CUTTER

 


            Cutter digunakan untuk memotong bagian tempat sampah yang digunakan untuk meletakkan servo.

 

8.      TEMPAT SAMPAH

 


            Merupakan komponen paling utama dalam pembuatan project IoT “Tempat Sampah Otomatis”.

 

2.3 Cara Kerja



1.      Aplikasi My Trash

Ketika “Kunci Tempat Sampah” di switch on kan, maka tempat sampah tertutup dan tidak bisa kebuka. Dan tempat sampah otomatis tidak akan berjalan.

Sebaliknya, ketika “Buka Tempat Sampah” di switch on kan, maka tempat sampah terbuka dan tidak bisa tertutup. Dan tempat sampah otomatis tidak akan berjalan.

Pada aplikasi My Trash, terdapat menu “Ketinggian Sampah” yang berfungsi untuk memperlihatkan sampah sudah terisi sampai berapa cm. Juga terdapat menu “Trash Bar” yang berfungsi untuk mengetahui kapasitas sampah, apakah sudah penuh atau belum.

2.      Tempat Sampah Otomatis

Jika aplikasi My Trash tidak dijalankan, maka tempat sampah otomatis akan berjalan. Ketika ada orang mendekati tempat sampah, maka tempat sampah akan membuka secara otomatis. Lalu jika orang tersebut sudah selesai membuang sampah dan menjauhi tempat sampah, maka tempat sampah akan tertutup dengan sendirinya.


2.4  Proses Pembuatan

1.      Mengecek apakah semua komponen yang telah dibeli bisa bekerja dengan baik atau tidak.

2.      Merakit komponen

a.    Menguhubungkan 2 sensor ultrasonic dan nodemcu dengan kabel female to female ke pin D3, D4, D7, dan D8. Daya diambil dari nodemcu nya secara langsung dengan tegangan 3V.

b.  Menghubungan servo dan nodemcu dengan kabel male to female pada pin D0. Daya diambil dari adaptor charger HP dengan output 5V.

c.     Menghubungkan nodemcu dan laptop dengan kabel micro USB untuk di program

3.      Memprogram nodemcu dengan arduino IDE

a.  Program menggunakan library ArduinoFirebase (untuk menghubungkan nodemcu dengan database Firebase), servo (untuk menggerakkan servo), dan esp8266 (untuk mengkoneksikan dengan jaringan WiFi).

b. Program dibuat dengan logika jika nilai dari sensor ultrasonic 2 dibawah 30 cm, maka servo akan digerakkan menuju 90°, sedangkan nilai dari sensor ultrasonic 2 dihubungkan dengan firebase untuk membaca kedalaman tempat sampah.

4.      Memprogram aplikasi android dengan Android Studio

a.      Mendesain aplikasi dengan Photoshop

 


b.  Mengkoneksikan aplikasi dengan firebase, sehingga aplikasi dapat membaca data dari firebase yang telah dikirimkan dari nodemcu.

c.   Membuat logika ketika ketinggian sampah sudah mencapai tingkat penuh, maka aplikasi akan push notification berisi peringatan buang sampah.

5.      Kode Program

a.  Program NodeMCU

#include <ESP8266WiFi.h>

#include <FirebaseArduino.h>

#include <Servo.h>

#define FIREBASE_HOST "sampahku-17389-default-rtdb.firebaseio.com"

#define FIREBASE_AUTH "sOSf171P09xfP6IJAfN1A5vQC97SO6McUFCSoDlm"

#define WIFI_SSID ""

#define WIFI_PASS ""

#define trig1 D8

#define echo1 D7

#define trig2 D4

#define echo2 D3

int jarak1, jarak2

Servo servo;

void setup(){

  Serial.begin(9600);

  pinMode(trig1, OUTPUT);

  pinMode(echo1, INPUT);

  servo.attach(D0);

  WiFi.begin(WIFI_SSID, WIFI_PASS);

  while (WiFi.status() != WL_CONNECTED){

    delay(500);

    Serial.print("….");

  }

  Serial.print("\n");

  Serial.print("Terhubung\n");

  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);

  pinMode(trig2, OUTPUT);

  pinMode(echo2, INPUT);

}

void ultrasonik(){

  long duration;

  digitalWrite(trig1, LOW);

  delayMicroseconds(2);

  digitalWrite(trig1, HIGH);

  delayMicroseconds(10);

  digitalWrite(trig1, LOW);

  duration = pulseIn(echo1, HIGH);

  jarak1 = (duration/2) / 29.1;

  Serial.print("jarak1 : ");

  Serial.print(jarak1);

  Serial.println(" cm");

}

void ultrasonik2(){

  long duration;

  digitalWrite(trig2, LOW);

  delayMicroseconds(2);

  digitalWrite(trig2, HIGH);

  delayMicroseconds(10);

  digitalWrite(trig2, LOW);

  duration = pulseIn(echo2, HIGH);

  jarak2 = (duration/2) / 29.1;

  Serial.print("jarak2 : ");

  Serial.print(jarak2);

  Serial.println(" cm");

}

void loop(){

  ultrasonik();

  ultrasonik2();

  Firebase.setInt("value", jarak1);

  if(Firebase.failed()){

    Serial.println("gagal kirim data");

    Serial.println(Firebase.error());

    return;

  }

 

  Serial.print("LDR Firebase : ");

  Serial.println(Firebase.getInt("value"));

  if(jarak2 < 45){

    servo.write(90);

  }else {

    servo.write(0);

  }

 

  while(Firebase.getInt("saklar") == 1){

    servo.write(0);

  }

  while(Firebase.getInt("saklar2") == 1){

    servo.write(90);

  }

  delay(1000);

}

 

b.      Class MainActivity (Program Aplikasinya)

package com.tempat.mytrash2;

 

import androidx.annotation.NonNull;

import androidx.annotation.Nullable;

import androidx.appcompat.app.AppCompatActivity;

import androidx.core.app.NotificationCompat;

import androidx.core.app.NotificationManagerCompat;

 

import android.app.NotificationChannel;

import android.app.NotificationManager;

import android.app.PendingIntent;

import android.content.Intent;

import android.os.Build;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.CompoundButton;

import android.widget.EditText;

import android.widget.ProgressBar;

import android.widget.Switch;

import android.widget.TextView;

 

import com.firebase.client.DataSnapshot;

import com.firebase.client.Firebase;

import com.firebase.client.FirebaseError;

import com.firebase.client.ValueEventListener;

import com.google.firebase.database.ChildEventListener;

import com.google.firebase.database.DatabaseError;

import com.google.firebase.database.DatabaseReference;

import com.google.firebase.database.FirebaseDatabase;

 

public class MainActivity extends AppCompatActivity {

    String nilai;

    Switch switch1,switch2;

    TextView value, pesan;

    FirebaseDatabase database;

    DatabaseReference reference,reference2;

    Firebase reference3;

    ProgressBar progressBar;

    boolean switch1Check = false, switch2Check = false;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        database = FirebaseDatabase.getInstance();

        reference = database.getReference().child("saklar");

        reference2 = database.getReference().child("saklar2");

        reference3 = new Firebase("https://sampahku-17389-default-rtdb.firebaseio.com/value");

 

        value = (TextView) findViewById(R.id.value);

        pesan = (TextView) findViewById(R.id.pesan);

        switch1 = (Switch) findViewById(R.id.switch1);

        switch2 = (Switch) findViewById(R.id.switch2);

        progressBar = (ProgressBar) findViewById(R.id.progressBar);

 

        switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override

            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if(isChecked){

                    reference.setValue(1);

                    switch1Check = true;

                    if(switch2Check) getNotif("Tempat Sampah Masih Terbuka","Silahkan Off kan *Buka Tempat Sampah*");

                    else getNotif("Tempat Sampah Terkunci", "Tempat Sampah Otomatis tidak berjalan");

                }else{

                    switch1Check = false;

                    reference.setValue(0);

                }

            }

        });

 

        switch2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override

            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if(isChecked){

                    reference2.setValue(1);

                    switch2Check = true;

                    if(switch1Check) getNotif("Tempat Sampah Masih Terkunci","Silahkan Off kan *Kunci Tempat Sampah*");

                    else getNotif("Tempat Sampah Terbuka", "Tempat Sampah Otomatis tidak berjalan");

                }else{

                    switch2Check = false;

                    reference2.setValue(0);

                }

            }

        });

 

        reference3.addValueEventListener(new ValueEventListener() {

            @Override

            public void onDataChange(DataSnapshot dataSnapshot) {

                String nilai = dataSnapshot.getValue(String.class);

                int angka = Integer.parseInt(nilai);

                angka = 25 - angka;

                value.setText(angka + " cm");

                progressBar.setProgress(angka);

                if(angka >= 23){

                    pesan.setText("Tempat sampah penuh\nSegera buang sampah!!");

                    getNotif("Tempat Sampah Penuh","Segera Buang Sampah!!");

                }

                else if(angka >= 18){

                    pesan.setText("Tempat sampah akan penuh\nJangan lupa untuk membuang sampah");

                    getNotif("Tempat Sampah Akan Penuh","Jangan Lupa Buang Sampah!!");

                }

                else if(angka >= 11) pesan.setText("Tempat sampah terisi sebagian");

                else if(angka >= 3) pesan.setText("Tempat sampah terisi sedikit");

                else pesan.setText("Tempat sampah kosong");

            }

 

            @Override

            public void onCancelled(FirebaseError firebaseError) {

 

            }

        });

 

    }

    public void getNotif(String judul, String isi){

        String id = "Tempat sampah";

 

        Intent intent = new Intent(this,MainActivity.class);

        PendingIntent pendingIntent =PendingIntent.getActivity(this, 0, intent, 0);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

            String name = "Sampahku";

            int importance = NotificationManager.IMPORTANCE_HIGH;

            NotificationChannel channel = new NotificationChannel(id, name, importance);

            NotificationManager notificationManager = getSystemService(NotificationManager.class);

            notificationManager.createNotificationChannel(channel);

        }

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, id)

                .setSmallIcon(R.mipmap.ic_launcher_round)

                .setContentTitle(judul)

                .setContentText(isi)

                .setContentIntent(pendingIntent)

                .setPriority(NotificationCompat.PRIORITY_HIGH)

                .setAutoCancel(true);

 

        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);

        notificationManager.notify(0, builder.build());

    }

}

 

c.       FireApp (Program class untuk menghubungkan Aplikasi dengan FireBase)

package com.tempat.mytrash2;

 

import android.app.Application;

 

import com.firebase.client.Firebase;

 

public class FireApp extends Application {

    @Override

    public void onCreate() {

        super.onCreate();

        Firebase.setAndroidContext(this);

    }

}

 

d.      Program Desain Aplikasi

<?xml version="1.0" encoding="utf-8"?>

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity">

 

    <View

        android:id="@+id/view"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:background="@drawable/background"

        tools:layout_editor_absoluteX="0dp"

        tools:layout_editor_absoluteY="0dp" />

 

    <Switch

        android:id="@+id/switch1"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:checked="false"

        android:paddingLeft="35dp"

        android:paddingRight="35dp"

        android:text="Kunci Tempat Sampah"

        android:textStyle="bold"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="0.0"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        app:layout_constraintVertical_bias="0.056"

        tools:checked="false" />

 

    <Switch

        android:id="@+id/switch2"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:checked="false"

        android:paddingLeft="35dp"

        android:paddingRight="35dp"

        android:text="Buka Tempat Sampah"

        android:textStyle="bold"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="0.0"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        app:layout_constraintVertical_bias="0.157"

        tools:checked="false" />

 

    <TextView

        android:id="@+id/value"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="0 cm"

        android:textColor="#000000"

        android:textSize="24sp"

        android:textStyle="bold"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="0.882"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        app:layout_constraintVertical_bias="0.304" />

 

    <TextView

        android:id="@+id/textbiasa"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Ketinggian Sampah"

        android:textColor="#000000"

        android:textSize="24sp"

        android:textStyle="bold"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="0.184"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        app:layout_constraintVertical_bias="0.304" />

 

    <TextView

        android:id="@+id/textbiasa3"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Trash Bar"

        android:textColor="#000000"

        android:textSize="18sp"

        android:textStyle="bold"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="0.12"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        app:layout_constraintVertical_bias="0.398" />

 

    <TextView

        android:id="@+id/pesan"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:paddingLeft="37dp"

        android:text="Tempat sampah penuh"

        android:textColor="#000000"

        android:textSize="14sp"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="0.0"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        app:layout_constraintVertical_bias="0.452" />

 

    <TextView

        android:id="@+id/textbiasa2"

        android:layout_width="314dp"

        android:layout_height="24dp"

        android:text="Note : apabila kunci dan buka tempat sampah dinonaktifkan, maka tempat sampah akan berjalan secara otomatis"

        android:textColor="#000000"

        android:textSize="10sp"

        android:textStyle="italic"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="0.494"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        app:layout_constraintVertical_bias="0.234" />

 

    <ProgressBar

        android:id="@+id/progressBar"

        style="@style/Widget.AppCompat.ProgressBar.Horizontal"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:clickable="false"

        android:max="25"

        android:paddingLeft="35sp"

        android:paddingRight="35sp"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintEnd_toEndOf="parent"

        app:layout_constraintHorizontal_bias="0.0"

        app:layout_constraintStart_toStartOf="parent"

        app:layout_constraintTop_toTopOf="parent"

        app:layout_constraintVertical_bias="0.427" />

 

</androidx.constraintlayout.widget.ConstraintLayout>


BAB III

PENUTUP

3.1 Kesimpulan

            Pembuatan tempat sampah otomatis ini bertujuan untuk menjaga kesehatan dan kebersihan. Tempat sampah otomatis ini sangat memudahkan masyarakat dalam membuang sampah. Bisa dilihat dari segi kesehatan dan kebersihan, pengguna tidak perlu mengggunakan tangannya untuk membuka dan menutup sampah sehingga tangan pengguna tidak terkontaminasi oleh kuman. Dengan adanya tempat sampah otomatis ini, diharapkan mampu mengembangkan minat masyarakat dalam membuang sampah pada tempatnya dan juga dapat menciptakan lingkungan yang bersih dan sehat.

3.2 Saran

            Kami dari kelompok 5 project UAS IoT  dengan judul “Tempat Sampah Otomatis”, ingin mengajukan saran yaitu, memperbanyak penerapan tempat sampah otomatis di lingkungan sekitar. Banyak manfaat-manfaat yang bisa didapat dari penerapan tempat sampah otomatis ini, apalagi di era pandemi sekarang.


LAMPIRAN


 

                       

  



Tidak ada komentar:

Posting Komentar