Skip to main content

Project Sensor




PENGAMAN RUMAH DENGAN SYSTEM MOTION DETECTION MENGGUNAKAN SENSOR MPU-6050
Disusun Oleh;
TIA ARIYANTI                    (4211301041)
ALAN BURHANNUDIN      (4211301048)
EKO WIBISONO                  (4211301059)

Latar Belakang Masalah


Batam merupakan kota yang laju pertumbuhan pendudukannya terus meningkat. Tercatat jumlah penduduk kota Batam, Provinsi Kepulauan Riau bertambah rata-rata 100.000 jiwa tiap tahunnya (Antaranews.com). Hal tersebut dikarenakan kota Batam dijadikan sasaran para pendatang untuk mencari pekerjaan di kota yang dikenal menjadi kota industri ini.
Banyaknya jumlah pendatang dan kurangnya lapangan pekerjaan yang tersedia, hal ini mengakibatkan tingkat kriminalitas meningkat di kota Batam mencapai 22.79 persen, angka ini merupakan angka tertinggi jika di bandingkan dengan wilayah di Kepulauan Riau lainnya (Metronews.com). Salah satu tingkat kriminalitas yang terjadi adalah pencurian yang di lakukan dengan membobol rumah warga.
Oleh karena hal tersebut penulis merancang sebuah alat yaitu “Pengaman Rumah Dengan System Motion Detection Menggunakan Sensor Mpu-6050” dimana dengan menggunakan alat ini dapat menjadi sistem pengaman yang menjadi alarm bagi pemilik rumah. Yang bertujuan untuk mengurangi tingkat pencurian yang terjadi. Selain itu tujuan dibuatnya untuk memenuhi pengimplementasian sensor accelerometer yang kali ini penulis menggunakan sensor MPU-6050.

   Perumusan Masalah

Perumusan masalah proyek akhir sensor ini adalah:
1.        Bagaimana cara mengambil nilai titik awal sensor MPU-6050?
2.        Bagaimana cara mengaktifkan buzzer saat terjadi perubahan nilai titik awal pada MPU-6050?

   BatasanMasalah

1.        Tidak membahas semua perubahan nilai sumbu (X,Y,Z).
2.        Hanya menggunakan perubahan nilai sumbu pada sumbu Y.


Tujuan dan Manfaat

Adapun tujuan dari pembuatan proyek akhir sensor ini antara lain:
1.         Merancang sebuah sistem pengaman rumah dengan menggunakan sensor MPU-6050.
2.         Menyelesaikan project Akhir mata kuliah sensor.

Adapun manfaat dari pembuatan proyek akhir ini antara lain:
1.         Meningkatkan sistem pengaman rumah dan dapat diletakan secara portable.

Dasar teori

            Sensor MPU-6050

Sensor MPU-6050 merupakan sensor mampu membaca kemiringan sudut berdasarkan data dari sensor accelerometer dan sensor gyroscope. Sensor ini juga dilengkapi oleh sensor suhu yang mengukur daerah sekitar. Sensor MPU-6050 ini membutuhkan tegangan kerja 3,3 V. tetapi pada modul yang digunakan sudah dilengkapi dengan regulator tegangan 3,3 V, sehingga bisa langsung dihubungkan dengan tegangan 5V. Sensor ini menggunakan jalur keluaran berupa jalur data I2C yaitu SCA dan SCL yang dalam Arduino dapat menggunakan kaki A4 dan A5. 

      Arduino Uno

Arduino Uno merupakan papan mikrokontroler yang berbasis ATmega328. Dimana Arduino uno ini memiliki 14 digital pin input/output, dimana 6 pin merupakan output PWM, 6 pin input analog, 16 MHz resonator keramik, koneksi USB, jack catu daya eksternal, header ICSP, dan tombol reset. Pada project ini Arduino uno digunakan sebagai mikrokotroler untuk menjalankan program sensor yang akan mengatur jalannya MPU-6050 yang menggunakan kaki A4 dan A5 yang menggunakan komuniasi I2C.

      Arduino Sensor Shield

Shield merupakan papan rangkaian yang belum di sempurnakan atau dilengkapi secara keseluruhan dan dibuat dengan pin yang sesuai dengan pin pada Arduino agar mudah saat digunakan atau dihubungkan. Arduino Sensor Shield ini digunakan untuk memudahkan penggunakan jalur data berupa I2C yang dapat langsung digunakan untuk sensor MPU-6050.

      PushButton

Push button merupakan perangkat yang berfungsi untuk menghubungkan atau memutuskan aliran arus listrik dengan sistem kerja tekan unlock. Sistem kerja ini hanya bekerja sebagai device penghubung atau pemutus aliran arus listrik saat tombol ditekan, dan saklar akan kembali pada kondisi normal. Pada project ini push button berfungsi untuk mengambil nilai awal sensor saat terhubung. 

  LED (Light Emitting Diode)

Light Emitting Diode merupakan komponen elektronika yang dapat memancarkan cahaya monokromatik saat diberikan tegangan maju. LED termasuk jenis diode yang tergantung pada bahan jenis semikonduktor. Warna- warna cahaya yang dipancarkan oleh LED tergantung jenis semikonduktor yang dipergunakan. LED juga dapat memancarkan sinar inframerah yang tidak tampak oleh mata seperti yang sering dijumpai pada remote control perangkat elektronik. 

    Buzzer

Buzzer merupakan alat yang dapat mengubah sinyal listrik menjadi sinyal suara. Pada umumnya buzzer digunakan untuk alarm. Pada penggunaan buzzer ini diberikan inputan tegangan analog. Frekuensi suara yang dikeluarkan oleh buzzer yaitu 1-5 Khz. ( Albert  Paul,Prinsip-prinsip Elektronika, 1989 hal: 134).

PENGAMAN RUMAH DENGAN SYSTEM MOTION DETECTION MENGGUNAKAN SENSOR MPU-6050

Diagram Blok Perangkat Keras

Kalibrasi Awal Data
Diagram Alir

Rangkaian Sensor


LAMPIRAN

                                                        PROGRAM Library MPU-6050

// I2C device class (I2Cdev) demonstration Arduino sketch for MPU6050 class using DMP (MotionApps v2.0)
// 6/21/2012 by Jeff Rowberg <jeff@rowberg.net>
// Updates should (hopefully) always be available at https://github.com/jrowberg/i2cdevlib
//
// Changelog:
//      2013-05-08 - added seamless Fastwire support
//                 - added note about gyro calibration
//      2012-06-21 - added note about Arduino 1.0.1 + Leonardo compatibility error
//      2012-06-20 - improved FIFO overflow handling and simplified read process
//      2012-06-19 - completely rearranged DMP initialization code and simplification
//      2012-06-13 - pull gyro and accel data from FIFO packet instead of reading directly
//      2012-06-09 - fix broken FIFO read sequence and change interrupt detection to RISING
//      2012-06-05 - add gravity-compensated initial reference frame acceleration output
//                 - add 3D math helper file to DMP6 example sketch
//                 - add Euler output and Yaw/Pitch/Roll output formats
//      2012-06-04 - remove accel offset clearing for better results (thanks Sungon Lee)
//      2012-06-01 - fixed gyro sensitivity to be 2000 deg/sec instead of 250
//      2012-05-30 - basic DMP initialization working

/* ============================================
  I2Cdev device library code is placed under the MIT license
  Copyright (c) 2012 Jeff Rowberg

  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files (the "Software"), to deal
  in the Software without restriction, including without limitation the rights
  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  copies of the Software, and to permit persons to whom the Software is
  furnished to do so, subject to the following conditions:

  The above copyright notice and this permission notice shall be included in
  all copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  THE SOFTWARE.
  ===============================================
*/

// I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files
// for both classes must be in the include path of your project
// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
// is used in I2Cdev.h
//#include "MPU6050.h" // not necessary if using MotionApps include file
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
// class default I2C address is 0x68
// specific I2C addresses may be passed as a parameter here
// AD0 low = 0x68 (default for SparkFun breakout and InvenSense evaluation board)
// AD0 high = 0x69
MPU6050 mpu;
//MPU6050 mpu(0x69); // <-- use for AD0 high

/* =========================================================================
   NOTE: In addition to connection 3.3v, GND, SDA, and SCL, this sketch
   depends on the MPU-6050's INT pin being connected to the Arduino's
   external interrupt #0 pin. On the Arduino Uno and Mega 2560, this is
   digital I/O pin 2.
   ========================================================================= */

/* =========================================================================
   NOTE: Arduino v1.0.1 with the Leonardo board generates a compile error
   when using Serial.write(buf, len). The Teapot output uses this method.
   The solution requires a modification to the Arduino USBAPI.h file, which
   is fortunately simple, but annoying. This will be fixed in the next IDE
   release. For more info, see these links:

   http://arduino.cc/forum/index.php/topic,109987.0.html
   http://code.google.com/p/arduino/issues/detail?id=958
   ========================================================================= */



// uncomment "OUTPUT_READABLE_QUATERNION" if you want to see the actual
// quaternion components in a [w, x, y, z] format (not best for parsing
// on a remote host such as Processing or something though)
//#define OUTPUT_READABLE_QUATERNION

// uncomment "OUTPUT_READABLE_EULER" if you want to see Euler angles
// (in degrees) calculated from the quaternions coming from the FIFO.
// Note that Euler angles suffer from gimbal lock (for more info, see
// http://en.wikipedia.org/wiki/Gimbal_lock)
//#define OUTPUT_READABLE_EULER

// uncomment "OUTPUT_READABLE_YAWPITCHROLL" if you want to see the yaw/
// pitch/roll angles (in degrees) calculated from the quaternions coming
// from the FIFO. Note this also requires gravity vector calculations.
// Also note that yaw/pitch/roll angles suffer from gimbal lock (for
// more info, see: http://en.wikipedia.org/wiki/Gimbal_lock)
#define OUTPUT_READABLE_YAWPITCHROLL

// uncomment "OUTPUT_READABLE_REALACCEL" if you want to see acceleration
// components with gravity removed. This acceleration reference frame is
// not compensated for orientation, so +X is always +X according to the
// sensor, just without the effects of gravity. If you want acceleration
// compensated for orientation, us OUTPUT_READABLE_WORLDACCEL instead.
//#define OUTPUT_READABLE_REALACCEL

// uncomment "OUTPUT_READABLE_WORLDACCEL" if you want to see acceleration
// components with gravity removed and adjusted for the world frame of
// reference (yaw is relative to initial orientation, since no magnetometer
// is present in this case). Could be quite handy in some cases.
//#define OUTPUT_READABLE_WORLDACCEL

// uncomment "OUTPUT_TEAPOT" if you want output that matches the
// format used for the InvenSense teapot demo
//#define OUTPUT_TEAPOT



#define LED_PIN 13 // (Arduino is 13, Teensy is 11, Teensy++ is 6)
bool blinkState = false;
const int ledPin = 8;
const int buzzerPin = A0;
// MPU control/status vars
bool dmpReady = false;  // set true if DMP init was successful
uint8_t mpuIntStatus;   // holds actual interrupt status byte from MPU
uint8_t devStatus;      // return status after each device operation (0 = success, !0 = error)
uint16_t packetSize;    // expected DMP packet size (default is 42 bytes)
uint16_t fifoCount;     // count of all bytes currently in FIFO
uint8_t fifoBuffer[64]; // FIFO storage buffer

// orientation/motion vars
Quaternion q;           // [w, x, y, z]         quaternion container
VectorInt16 aa;         // [x, y, z]            accel sensor measurements
VectorInt16 aaReal;     // [x, y, z]            gravity-free accel sensor measurements
VectorInt16 aaWorld;    // [x, y, z]            world-frame accel sensor measurements
VectorFloat gravity;    // [x, y, z]            gravity vector
float euler[3];         // [psi, theta, phi]    Euler angle container
float ypr[3];           // [yaw, pitch, roll]   yaw/pitch/roll container and gravity vector
float a,b,c;
float a1,b1,c1;
boolean pushbutton;
// packet structure for InvenSense teapot demo
uint8_t teapotPacket[14] = { '$', 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0x00, 0x00, '\r', '\n' };



// ================================================================
// ===               INTERRUPT DETECTION ROUTINE                ===
// ================================================================

volatile bool mpuInterrupt = false;     // indicates whether MPU interrupt pin has gone high
void dmpDataReady() {
  mpuInterrupt = true;
}



// ================================================================
// ===                      INITIAL SETUP                       ===
// ================================================================

void setup() {
pinMode(8, OUTPUT);
pinMode(4,INPUT);
digitalWrite(4,HIGH);


  // join I2C bus (I2Cdev library doesn't do this automatically)
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
  Wire.begin();
  TWBR = 24; // 400kHz I2C clock (200kHz if CPU is 8MHz). Comment this line if having compilation difficulties with TWBR.
#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
  Fastwire::setup(400, true);
#endif

  // initialize serial communication
  // (115200 chosen because it is required for Teapot Demo output, but it's
  // really up to you depending on your project)
  Serial.begin(115200);
//  while (!Serial); // wait for Leonardo enumeration, others continue immediately

  // NOTE: 8MHz or slower host processors, like the Teensy @ 3.3v or Ardunio
  // Pro Mini running at 3.3v, cannot handle this baud rate reliably due to
  // the baud timing being too misaligned with processor ticks. You must use
  // 38400 or slower in these cases, or use some kind of external separate
  // crystal solution for the UART timer.

  // initialize device
  //Serial.println(F("Initializing I2C devices..."));
  mpu.initialize();

  // verify connection
//  Serial.println(F("Testing device connections..."));
  Serial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed"));

  // wait for ready
//  Serial.println(F("\nSend any character to begin DMP programming and demo: "));
//  while (Serial.available() && Serial.read()); // empty buffer
//  while (!Serial.available());                 // wait for data
//  while (Serial.available() && Serial.read()); // empty buffer again

  // load and configure the DMP
//  Serial.println(F("Initializing DMP..."));
  devStatus = mpu.dmpInitialize();

  // supply your own gyro offsets here, scaled for min sensitivity
  mpu.setXGyroOffset(220);
  mpu.setYGyroOffset(76);
  mpu.setZGyroOffset(-85);
  mpu.setZAccelOffset(1788); // 1688 factory default for my test chip

  // make sure it worked (returns 0 if so)
  if (devStatus == 0) {
    // turn on the DMP, now that it's ready
//    Serial.println(F("Enabling DMP..."));
    mpu.setDMPEnabled(true);

    // enable Arduino interrupt detection
//    Serial.println(F("Enabling interrupt detection (Arduino external interrupt 0)..."));
    attachInterrupt(0, dmpDataReady, RISING);
    mpuIntStatus = mpu.getIntStatus();

    // set our DMP Ready flag so the main loop() function knows it's okay to use it
//    Serial.println(F("DMP ready! Waiting for first interrupt..."));
    dmpReady = true;

    // get expected DMP packet size for later comparison
    packetSize = mpu.dmpGetFIFOPacketSize();
  } else {
    // ERROR!
    // 1 = initial memory load failed
    // 2 = DMP configuration updates failed
    // (if it's going to break, usually the code will be 1)
    Serial.print(F("DMP Initialization failed (code "));
    Serial.print(devStatus);
    Serial.println(F(")"));
  }

  // configure LED for output
  pinMode(LED_PIN, OUTPUT);
}



// ================================================================
// ===                    MAIN PROGRAM LOOP                     ===
// ================================================================

void loop() {
  // if programming failed, don't try to do anything
  if (!dmpReady) return;

  // wait for MPU interrupt or extra packet(s) available
  while (!mpuInterrupt && fifoCount < packetSize) {
    // other program behavior stuff here
    // .
    // .
    // .
    // if you are really paranoid you can frequently test in between other
    // stuff to see if mpuInterrupt is true, and if so, "break;" from the
    // while() loop to immediately process the MPU data
    // .
    // .
    // .
  }

  // reset interrupt flag and get INT_STATUS byte
  mpuInterrupt = false;
  mpuIntStatus = mpu.getIntStatus();

  // get current FIFO count
  fifoCount = mpu.getFIFOCount();

  // check for overflow (this should never happen unless our code is too inefficient)
  if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
    // reset so we can continue cleanly
    mpu.resetFIFO();
    Serial.println(F("FIFO overflow!"));

    // otherwise, check for DMP data ready interrupt (this should happen frequently)
  } else if (mpuIntStatus & 0x02) {
    // wait for correct available data length, should be a VERY short wait
    while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();

    // read a packet from FIFO
    mpu.getFIFOBytes(fifoBuffer, packetSize);

    // track FIFO count here in case there is > 1 packet available
    // (this lets us immediately read more without waiting for an interrupt)
    fifoCount -= packetSize;
//PROGRAM PENGAMAN RUMAH
    mpu.dmpGetQuaternion(&q, fifoBuffer);
    mpu.dmpGetGravity(&gravity, &q);
    mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
    Serial.print("ypr\t");
    Serial.print(ypr[0] * 180 / M_PI);
    Serial.print("\t");
    Serial.print(ypr[1] * 180 / M_PI);
    Serial.print("\t");
    Serial.println(ypr[2] * 180 / M_PI);
    pushbutton = digitalRead(4);
  a1 = ypr[0] * 180 / M_PI; //data sekarang
  b1 = ypr[1] * 180 / M_PI;
  c1 = ypr[2] * 180 / M_PI;
if(pushbutton == LOW)
{
  a = a1; // data disimpan
  b = b1;
  c = c1;
}
//check(a,a1,30); //check data
check(b,b1,0.7);
//check(c,c1,30);
}
}

void check(float data, float current,float range){
  float Min=data-range; // ambil nilai terkecil
  float Max=data+range; //terbesar
 
  if(current>Max||current<Min){ //jika nilai sekrang > nilai save max.. begitu sebaliknha
    digitalWrite(ledPin, HIGH);
    buzz(4,20);
    digitalWrite(ledPin, LOW);
  }
  else{
    digitalWrite(ledPin, LOW);
    buzz(0,0);
  }
 
}

void buzz(int reps, int rate) {
  for (int i = 0; i < reps; i++) {
    analogWrite(buzzerPin, 1000);
    delay(100);
    analogWrite(buzzerPin, 0);
    delay(rate);
  }
}

Presentation Done with Mr Asrizal Deri Futra, S.Si., M.Si




























Comments

  1. Assalamualakum,saya ingin membuat TA dengan sensor kemiringan untuk meng offkan dan meng onkan atus,jd
    Gan,klo buat on,off dan reset arduino dgn relay programnya gmna ya??
    Jd saya ingin membuat TA yg apabila saat saklar dinyalakan maka arduino on,kemudian saat kemiringan mencpai +60 derajat arduino mati,saat di kembalikan ke posisi semula arduino msh off,saat saklar di offkan maka arduino di reset dan saat saklar di onkan sdh kmbli ke kondisi semula,mohon bantuanya gan,, terimksih

    ReplyDelete
    Replies
    1. Walaikumusalam, project diatas saya menggunakan sensor gyro. Disana kamu bisa cari library sudah ada untuk membaca sudut x,y,dan z. program untuk reset dan megatur nya bisa dilihat di //PROGRAM PENGAMAN RUMAH disana berfungsi untuk mengambil posisi nilai yang diinginkan untuk menjadi setpoint. Dan logika bisa kamu sesuaikan dengan yang kamu mau.

      Delete
    2. This comment has been removed by the author.

      Delete
    3. This comment has been removed by the author.

      Delete
  2. assalamualaikum kak, saya berencana mencoba membuat alat yg kakak jelaskan diatas namun saya kurang paham dengan kodingannya. bisa tolong kirimkan kodingan aslinya ke email saya tidak kak? terimakasih sebelumnya

    ReplyDelete

Post a Comment

Popular posts from this blog

Magang Industri di PT Citra Tubindo TBK

Assalamualaikum Sahabat, Pagi ini tanggal 31 Desember 2017, diluar sedang turun hujan. Aku sedang di kamar sambil memutar lagu virgoun-bukti. Sebelum tahun ini berlalu aku ingin membuat rangkaian cerita diawal tahun 2017 yang sudah berlalu. Why? karena bagiku tahun ini tahun istimewa untukku. Walaupun setiap tahun tentu saja selalu menyimpan ceritanya sendiri.  Izinkan aku menceritakan pengalaman yang aku dapatkan diawal tahun ini.   Statusku masih menjadi mahasiswa aktif tingkat akhir di Politeknik Negeri Batam dan harus menjalani proses magang. Terus magang dimana? di Citra Tubindo. Caranya gimana? Ok biar ku beritahu.  MAGANG DI CITRA TUBINDO TBK Polibatam dan Citra tubindo sudah menjalani kerja sama untuk program magang. Jadi kalau kalian berminat yang perlu kalian cari tahu di web polibatam atau ke TPS jurusan kalian. Terus aku taunya dari sana? enggak sih, saat itu kami memang diberi tahu langsung dari jurusan. Yap kami ditawari untuk magang disana. Waktu itu i

Tonsilektomi (Operasi Amandel)

Assalamualaikum sahabat semua. Beberapa hari yang lalu saya baru saja melakukan operasi amandel, nah saya mau sedikit sharing nih mekanisme pengajuan operasi amandel kalau teman-teman mau mengajukannya lewat BPJS.  Oke saya mulai pada tanggal 26 Juli lalu nah untuk awal kita melakukan pengecekan di klinik yang ada di BPJS yang tertera di kartu BPJS kita, Nah kemudian disana diperiksa biasa dengan dokter yang ada, waktu diperiksa dokter langsung mengajukan saya untuk operasi dan saya langsung meng-"IYA" kan setelah itu dari klinik itu saya dikasih surat rujukan di Rumah sakit Casa (Kelas C) karena untuk rujukan awal jadi harus kesana dulu kata perawatnya sih gitu. Tanggal 27 Julinya saya kerumah sakit Casa dan menemui dokter THT disana, jangan lupa untuk bawa surat rujukan, kartu BPJS dan KTP karena nanti mereka minta fotocopyanya sediain aja masing-masing 2 copyan, Setelah itu saya di periksa dokter THT disana,  nah kata dokternya sih yang bermasalah itu karena hidung sa

Ikatan Mahasiswa Muslim Politeknik Negeri Batam (IMMPB)

Assalamualaikum Apa kabar sahabat ? itu sapaan saya kepada sahabat-sahabat saya di IMMPB , organisasi yang saya cintai 6 bulan belakangan ini. saya di amanahi mejadi sekretaris dalam periode ini di organisasi ini. suka senang sangat dirasakan dalam perjalannya." Ini organisasi sosial tidak ada paksaan di dalam menjalankannya" kalimat itu selalu saya ingat kalimat itu disampaikan oleh pembina kami bapak kamarudin. selama ini beliau sangat membantu kami dalam menjalankan roda organisasi ini, IMMPB ini sudah seumuran dengan politeknik negeri batam sekarang IMMPB sudah berumur 13th ,IMMPB lahir 1 November 2001 motto kami TIADA HARI TANPA AMAL . Disini saya berjumpa para sahabat yang luar biasa yang selalu ada untuk melaksankan program-program yang direncanakan,walaupun masih ada kendala tapi itu harus menjadi cambuk semangat untuk kami kedepanya. karena kami semua telah menjadi keluarga dalam satu ikatan dalam satu naungan bernama IMMPB. Dan ini adalah pejuang ,sahabat,dan kel