Final Report: Scanner E-KTP sebagai penyampai Bantuan kepada Masyarakat

Latar Belakang

Indonesia merupakan salah satu negara berkembang di Asia Tenggara. Berdasarkan survey yang dilakukan oleh BPS pada tahun 2015 indeks pembangunan manusia di Indonesia berkisar pada 69.55 dan menempatkan Indonesia pada peringkat 110 dari 188 negara dalam peringkat indeks pembangunan manusia. Hal tersebut merepresentasikan bahwa di Indonesia masih terdapat berbagai permasalahn dalam pembangunan manusia. Kita tahu bahwa angka kemiskinan di Indonesia juga tidak dapat dibilang sedikit. Berdasarkan world bank, sejumlah 68 juta orang di Indonesia rentan terhadap kemiskinan.


Pemerintah Indonesia berupaya memberikan beberapa solusi yang ditawarkan untuk mengatasi masalah yang disebutkan di atas. Program yang ditawarkan seperti Kartu Indonesia Sehat (KIS), BPJS Kesehatan, BIDIKMISI, Bantuan Langsung Tunai, Kartu Pintar, dan lain-lain. Dari semua program yang dicanangkan pemerintah kebanyakan memiliki masalah yakni banyaknya kejadian yang tidak diinginkan seperti berdesak-desakan saat antri mengambil jatah, kesalahan pemberian jatah, dan penyalahgunaan bantuan.



Konsep Solusi



E-KTP merupakan program pemerintah yang ditujukan untuk digitalisasi data kependudukan. Namun sampai saat ini, E-KTP hanya digunakan sebagai identitas saja dan rawan terjadi penyelewengan oleh pihak-pihak tertentu. Padahal dengan teknologi mutakhir yang terdapat pada E-KTP, kita dapat memanfaatkannya di berbagai bidang. Berikut ini beberapa manfaat E-KTP yang diharapkan.
1. Identitas jati diri tunggal
2. Tidak dapat dipalsukan
3. Tidak dapat digandakan
4. Dapat dipakai sebagai kartu suara dalam pemilu atau pilkada
5. Dapat dimanfaatkan sebagai kartu pembayaran/penyerahan bantuan
Melihat adanya peluang pemanfaatan E-KTP dan muncul permasalahan yang ada, kami mencoba untuk memberikan solusi berupa pemanfaatan E-KTP untuk menyelesaikan permasalahan penyampaian bantuan pemerintah kepada masyarakat.
Konsep yang kami tawarkan adalah memanfaatkan Arduino UNO dan reader E-KTP sebagai komponen hardware utama. Sistem ini akan terhubung dengan Cloud sebagai penyimpanan database E-KTP. Nantinya pemerintah yang akan memberikan bantuan kepada masyarakat dapat melakukan “top-up” saldo yang ada pada E-KTP masyarakat. Masyarakat harus di data sebaik mungkin agar tidak terjadi kesalahan penyalahgunaan data. Masyarakat sebagai pengguna dapat menggunakan hal tersebut untuk ditukarkan menjadi sembako maupun kebutuhan primer yang lain sebagai sarana penyampaian bantuan pemerintah (jaminan kesehatan, jaminan pendidikan, dan lain-lain).
Dengan adanya solusi yang ditawarkan, kami berharap mampu mengatasi masalah yang terdapat di masyarakat.

Spesifikasi Desain

Input: Kartu RFID dengan ID pengguna, Input pilihan user

Output: Saldo

Komponen : Arduino UNO, Sensor RFID RC-522, Keypad 4x4, RFID card, Ethernet Shield W5100, LED, Buzzer

Protokol: HTTP


Desain & Implementasi Perangkat Keras Proyek IMKA

Berikut ini kami sajikan desain perangkat keras dari proyek IMKA Scanner E-KTP sebagai penyalur bantuan pemerintah kepada masyarakat.

Blok Diagram


Berikut ini skema perangkat lunak dari proyek ini.

Skema Perangkat Keras

Komponen yang menyusun adalah:
1. Arduino UNO
2. Ethernet shield W5100
3. Buzzer
4. LED warna merah dan warna hijau
5. Resistor
6. RFID RC-522
7. Keypad 4x4

Desain & Implementasi Perangkat Lunak Proyek IMKA


Dalam pengerjaan perangkat lunak ini kami menggunakan platform website dengan hosting online gratis. Kemudian kami menggunakan MYSQL sebagai database dan protokol HTTP sebagai sarana komunikasi data.

Berikut ini merupakan flow chart perangkat lunak dari proyek ini.

Flow Chart Perangkat Lunak

Untuk source code ada dua komponen yang penting, yakni source code menu utama yang berformat .ino dan juga .php untuk menghubungkan dengan website.

Berikut ini source code dari menu utama Arduino.

//Import Library
#include <SPI.h>
#include <MFRC522.h>
#include <Keypad.h>

#define RST_PIN         9           // Configurable, see typical pin layout above

#define SS_PIN          8           // Configurable, see typical pin layout above

MFRC522 rfid(SS_PIN, RST_PIN);   // Create MFRC522 instance

byte nuidPICC[4];

//*****************************************************************************************//

//Konfigurasi Keypad
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

byte rowPins[ROWS] = {3,2,A4,0}; //connect to the row pinouts of the keypad

byte colPins[COLS] = {A3,A2,A1,A5}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );


//*****************************************************************************************//


//Variabel Global

char c;
int Harga = 0;
char jumlah;
bool keluar;
String pengguna[2] = {"E5 1C 8B AB","55 8B 61 5F"};
String id;


//Konfigurasi ethernet

#include<Ethernet.h>

byte mac[]={0xDE, 0xAD, 0xEF, 0xFE, 0xED};

//set static IP
IPAddress ip(10,10,10,40);

//set server

char server[]="arsiamallah.000webhostapp.com";

//inisialisasi sebagai client

EthernetClient client;

void printIP(){

  //Ini untuk memeriksa apakah mendapatkan IP
 Serial.print("My IP address: ");
  for (byte thisByte = 0; thisByte < 4; thisByte++) {
    // print the value of each byte of the IP address:
    Serial.print(Ethernet.localIP()[thisByte], DEC);
    Serial.print(".");
  }
  Serial.println();
}

void sendData(String x, String y){

  if(Ethernet.begin(mac)==0){
    Serial.println("Gagal menggunakan DHCP server");
    Ethernet.begin(mac,ip);
  }
  
  Serial.println("Menyambungkan ke server");
  x.replace(" ","%20");
  if(client.connect(server,80)){
    Serial.println("Terhubung dengan server");
    //membuat HTTP request
    client.println("GET /update.php?submit=&total="+y+"000&id="+x+" HTTP/1.1");
    client.println("Host: arsiamallah.000webhostapp.com");
    client.println("Connection: close");
    client.println();
  } else{
    Serial.println("Gagal menghubungkan ke server");
  } 
}


int ctoint(char c){

  switch(c){
    case '0': return 0; break;
    case '1': return 1; break;
    case '2': return 2; break;
    case '3': return 3; break;
    case '4': return 4; break;
    case '5': return 5; break;
    case '6': return 6; break;
    case '7': return 7; break;
    case '8': return 8; break;
    case '9': return 9; break;
  }
}

void pilihan1(){

  Serial.println("Harga Beras 13.000 /Kg");
  Serial.print("Masukkan jumlahnya : ");
  jumlah = keypad.waitForKey();
  Serial.println(ctoint(jumlah));
  Harga += (ctoint(jumlah)*13);
}

void pilihan2(){

  Serial.print("Harga Rp 12.000 /Kg\n");
  Serial.print("Masukkan jumlahnya : ");
  jumlah = keypad.waitForKey();
  Serial.println(ctoint(jumlah));
  Harga += (ctoint(jumlah)*12);
}

void pilihan3(){

  Serial.print("Harga Minyak Rp 15.000 /L\n");
  Serial.print("Masukkan jumlahnya : ");
  Serial.println(ctoint(jumlah));
  Harga += (ctoint(jumlah)*15);
}

void menuUtama()//Menampilkan menu utama

{
  noTone(5);//Mematikan buzzer
  Serial.println("///////////////////////////////////");
  Serial.println("Pilih transaksi yang Anda inginkan:");
  Serial.println("1. Beras");
  Serial.println("2. Gula");
  Serial.println("3. Minyak");
  Serial.println("4. Batal");
  Serial.println("'#' Selesai");
  Serial.println("///////////////////////////////////");
  Serial.print("Masukkan pilihan: ");
  /* UNTUK baca melalui serial
  while(!Serial.available())
  {}
  c = Serial.read();*/
    c = keypad.waitForKey();
    Serial.println(c);
    if(c!=NO_KEY){
      if((c=='1')||(c=='2')||(c=='3')||(c=='4')||(c=='5')||(c=='#')){
          switch(c){
              case '1': pilihan1(); break;
              case '2': pilihan2(); break;
              case '3': pilihan3(); break;
              case '4': Serial.print("Transaksi dibatalkan\n"); keluar = true; Harga =0; break;
              case '#': Serial.print("Sistem sedang memproses pembayaran\n");sendData(id,String(Harga));keluar = true; break;
          }
          Serial.print("Total : Rp. ");
          Serial.print(Harga);
          if(Harga==0){
            Serial.println(",-");
          } else{
            Serial.println(".000,-");
            Serial.println("\n");
          }
      } else{
          Serial.println("Masukan salah, silahkan ulangi");
        }
    }
}



String getHex(byte *buffer, byte bufferSize) {

  //Fungsi ini untuk memperoleh nilai string dari RFID (HEX)
  String s;
  for (byte i = 0; i < bufferSize; i++) {
    s += String(buffer[i]< 0x10 ? " 0" : " ");
    s += String(buffer[i],HEX);
    s.toUpperCase();
  }
  return s;
}

bool cek(String s){

  int i;
  bool found=false;
  while(found==false){
    if(pengguna[i]==s) found =true;
    i++;
  }
  return found;
}


//*****************************************************************************************//

void setup() {
  Serial.begin(9600);                                           // Initialize serial communications with the PC
  SPI.begin();                                                  // Init SPI bus

  // disable RFID SPI

  pinMode(9,OUTPUT);
  digitalWrite(9,HIGH);

  // disable w5100 SPI

  pinMode(10,OUTPUT);
  digitalWrite(10,HIGH);

  rfid.PCD_Init();                                           // Init MFRC522 card

  pinMode(5,OUTPUT);                                            // untuk buzzer
  pinMode(6,OUTPUT);                                            // LED Merah
  pinMode(7,OUTPUT);                                            // LED Hijau
  Serial.println("===== Selamat Datang ====\nSilahkan tempelkan kartu anda");
}
//*****************************************************************************************//

void loop() {

  digitalWrite(6, HIGH);
  digitalWrite(7, LOW);

  // Look for new cards

  if ( ! rfid.PICC_IsNewCardPresent())
    return;

  // Verify if the NUID has been readed

  if ( ! rfid.PICC_ReadCardSerial())
    return;

  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);


  // Check is the PICC of Classic MIFARE type

  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && 
    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
    piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    return;
  }


  // Store NUID into nuidPICC array
  for (byte i = 0; i < 4; i++) {
    nuidPICC[i] = rfid.uid.uidByte[i];
  }

  id = getHex(rfid.uid.uidByte, rfid.uid.size);

  id.remove(0,1);
  if(cek(id)){
      digitalWrite(6,LOW);
      digitalWrite(7,HIGH);
      tone(5,4000); //Menyalakan buzzer tanda kartu ditempelkan
      delay(500);
      do{
          menuUtama();
      }while(keluar==false);
  } else{
      digitalWrite(6,LOW);
      delay(300);
      digitalWrite(6,HIGH);
      Serial.println("Kartu tidak terdaftar");
  }
  Serial.print("Transaksi telah selesai\nSilahkan ambil kartu anda\n");
  delay(1000); //change value if you want to read cards faster

  rfid.PICC_HaltA();

  rfid.PCD_StopCrypto1();
  Serial.println("\n\n===== Selamat Datang ====\nSilahkan tempelkan kartu anda");
}


Untuk source code .php, kami pilih yang berkaitan dengan update database .

<!DOCTYPE html>
<html>
<head>
 <head>
      <title>Tabel Penerima Bantuan</title>
      <meta name="viewport" content="width=device-width, initial-scale=1">      
      <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
      <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.3/css/materialize.min.css">
      <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>           
      <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.3/js/materialize.min.js"></script>             
      <style>
         div {
            width : 480px;
            height : 200px;
         } 
      </style>
   </head>
    <body class="container"> 
    <div class="row" style="width:980px;">
         <div class="col s12 m12 l12">
            <h5>Penerima Bantuan E-KTP</h5>
            <ul id="javaDropDown" class="dropdown-content">
               <li><a href="/IMKA/ke-3/login.php">Home</a></li>
               <li><a href="statistics.php">Statistics</a></li>
               <li class="divider"></li>
               <li><a href="about.php">About</a></li>
            </ul>
            <nav>
               <div class="nav-wrapper">
                  <a href="#" class="brand-logo right"></a>
                  <ul id="nav-mobile" class="left hide-on-med-and-down">                    
        <!-- Dropdown Trigger -->
                     <li><a class="dropdown-button" href="#!" data-activates="javaDropDown">Menu<i class="material-icons left">arrow_drop_down</i></a></li>
                  </ul>
               </div>
            </nav>
            <br>
            <form method="POST" action="tabel.php">
                <input type="submit" id="kirim" class="waves-effect waves-light btn red" value ="update" name="kirim">
            </form>
         </div>
      </div>
</body>
<?php 


  date_default_timezone_set('Asia/Jakarta');
  include ("config.php");
  // Update Database
  if(isset(($_GET['total']))&&($_GET['id'])){
    $harga = $_GET['total'];
    $id = $_GET['id'];
    $tanggal = date('Y/m/d H:i:s');
    $saldo = "SELECT saldo FROM masyrakat WHERE id_masyarakat like '$id'";
    $query_saldo = mysqli_query($db, $saldo);
    $hasil = mysqli_fetch_assoc($query_saldo);
    $saldopertarn = $hasil["saldo"] - $harga;   
    $query = "INSERT INTO transaksi (tanggal,jumlah_harga,id_masyarakat,sisa_saldo) VALUES ('$tanggal','$harga','$id','$saldopertarn')";
    mysqli_query($db, $query);
    $query2 = "UPDATE masyrakat SET saldo = saldo - $harga WHERE id_masyarakat like $id";
    mysqli_query($db,$query2);
  }

  //Update Saldo
   if (isset($_POST['kirim'])) {
    $tambah = 100000;
    $saldo2 = "UPDATE masyrakat SET saldo = saldo + $tambah WHERE id_masyarakat = id_masyarakat";
    $result99 = mysqli_query($db,$saldo2);
    if($result99){
      echo "<script type='text/javascript'>
        alert('Data berhasil diupdate');
      </script>";
    } else{
      echo "<script type='text/javascript'>
        alert('Data Gagal diupdate');
      </script>";
    }
   }

  $sql = "SELECT nama_masyarakat,alamat,saldo,tanggal,jumlah_harga FROM masyrakat NATURAL JOIN transaksi ORDER BY tanggal DESC";
  $result = mysqli_query($db,$sql);
  if (mysqli_num_rows($result) > 0) {
      echo "<table class='striped bordered'><thead><tr><th>Nama</th><th>Saldo</th><th>Alamat</th><th>Jumlah Harga</th><th>Tanggal</th></tr></thead>";
      // output data of each row
      while($row = mysqli_fetch_assoc($result)) {
          $hasil_waktu = $row["tanggal"];
          $waktu = date('H.i : d F Y', strtotime($hasil_waktu));;
          echo "<tbody><tr><td>".$row["nama_masyarakat"]."</td><td>".$row["saldo"]."</td><td>".$row["alamat"]."</td><td>".$row["jumlah_harga"]."</td><td>".$waktu."</td></tr></tbody>";
      }
      echo "</table>";
  } else {
      echo "0 results";
  }

    mysqli_close($db);
?>

</head>

USER INTERFACE DESIGN

Berikut ini user interface dari sistem kami.

Login Page




Welcome Page
Tabel page

Statistics page
Pilihan Menu



Pilihan menu pembeli

PENGUJIAN dan PENUTUPAN

Berikut ini tabel pengujian proyek.




DOKUMENTASI

Berikut ini merupakan dokumentasi pengerjaan proyek Scanner E-KTP sebagai penyampai bantuan pemerintah ke masyarakat.


Dikerjakan oleh:

Arsi Amallah Binhaq
Santo Wijaya
Dzaky El Fikri


Final Report: Scanner E-KTP sebagai penyampai Bantuan kepada Masyarakat Final Report: Scanner E-KTP sebagai penyampai Bantuan kepada Masyarakat Reviewed by Arsi on 9:29 PM Rating: 5

No comments:

Powered by Blogger.