BERHASIL COY! - Proyek Akhir - Internet of Things Project "SPOTS - Smart Pond Temperature System"



Akhirnya proyek Smart Pond Temperature System (SPOTS) dapat terselesaikan juga. SPOTS merupakan sebuah sistem yang mengadopsi konsep Internet of Things atau dapat kita sebut sebagai IoT. Konsep IoT memungkinkan sebuah perangkat untuk dapat melakukan 3 hal sekaligus yaitu sensingunderstanding, dan acting terhadap sebuah permasalahan. Dalam sistem yang kami buat, proses sensing adalah ketika sensor suhu membaca suhu bagian atas tambak dan bagian bawah tambak, proses understanding terjadi ketika hasil pembacaan suhu diolah menjadi informasi selisih suhu antara kedua sensor (yang diletakkan di bagian atas dan bagian bawah tambak) serta mengirimkan informasi tersebut ke dalam database, sedangkan proses acting terjadi ketika informasi selisih suhu tadi digunakan oleh sistem untuk mengambil keputusan yaitu memutar turbin yang dipasang di tambak.


Minggu ini, proyek pembuatan prototype dari SPOTS sudah selesai 100% lho!
Sistem yang kami buat dapat melakukan hal-hal sebagai berikut.
  1. Sistem dapat membaca suhu menggunakan 2 sensor suhu yang terpisah.
  2. Sistem dapat melakukan kalkulasi selisih hasil bacaan suhu dari kedua sensor.
  3. Sistem dapat melakukan pemutaran turbin secara otomatis berdasarkan selisih suhu yang didapat.
  4. Tampak muka dari website sebagai media penyajian data statistik suhu.
  5. Website dapat terhubung dengan Thingspeak (open data IoT platform dengan fitur data analytics yang merupakan produk dari MATLAB).
  6. Sistem dapat mengirimkan data suhu beserta selisihnya ke database melalui internet.
  7. Sistem dapat mengirimkan data suhu beserta selisihnya ke Thingspeak.
  8. Fungsionalitas website secara utuh.


Problem Identification

Kendala utama dari penyelesaian SPOTS adalah modul ESP8826 yang selalu gagal dalam mengirimkan data melalui internet. Bahkan, kami membeli modul ESP8826 yang baru untuk menyelesaikan permasalahan tersebut. Kami menggunakan waktu yang cukup lama untuk menyelesaikan permasalahan koneksi ESP8826 ini.

Alternative Problem Solution

Tadinya, kami memiliki alternatif lain jika sampai beberapa hari sebelum presentasi masih belum dapat terhubung ke internet. Alternatifnya adalah mengganti proyek kami dengan menggunakan NodeMCU atau beralih menggunakan Blynk dan menghubungkannya dengan aplikasi mobile.

Namun, minggu lalu, kami berhasil menghubungkan ESP8826 dengan Thingspeak. Kami senang bukan main tentunya. Oleh karena itu, kami tidak jadi menggunakan NodeMCU atau Blynk dan tetap menggunakan ESP8826 yang terhubung dengan Thingspeak dan database online.


Design Specification

Sistem kami akan membutuhkan komponen sebagai berikut.
  • Arduino Uno beserta kabel USB
  • ESP8266–01
  • Kabel Jumper
  • LM35
  • Motor DC
  • Breadboard
  • IC L293D

Hardware Design

Berikut merupakan block diagram dari sistem kami.


Software Design

Berikut merupakan flowchart dari sistem kami.


User Interface Design

Berikut tampilan website yang telah dibuat untuk menampilkan data dari Thingspeak dan mengirimkannya ke database.













Hardware Implementation

Implementasi hardware dari SPOTS dapat dibilang cukup mudah. Banyak tutorial-tutorial yang tersedia di internet yang dapat digunakan untuk merangkai Motor DC, LM35, dan ESP8266 kemudian menghubungkannya ke Thingspeak. Berikut adalah komponen yang digunakan selama pembuatan SPOTS.
  • Arduino Uno beserta kabel USB
  • ESP8266–01
  • Kabel Jumper
  • LM35
  • Motor DC
  • Breadboard
  • IC L293D

Software Implementation

Berikut merupakan kode program yang digunakan untuk melakukan pengaturan Arduino.

// esp8266_test.ino
//
// Plot LM35 data on thingspeak.com using an Arduino and an ESP8266 WiFi
// module.
//
// Author: Mahesh Venkitachalam
// Website: electronut.in

#include <SoftwareSerial.h>
#include <stdlib.h>

// temperature variable
int val1 = 0;
int val2 = 0;
// LM35 analog input
int tempPin1 = A1;
int tempPin2 = A2;

// replace with your channel's thingspeak API key
String apiKey = "4JUVSWA8KGG29NWW";

// connect 10 to TX of Serial USB
// connect 11 to RX of serial USB
SoftwareSerial ser(11, 10); // RX, TX

// this runs once
void setup() {                
  // initialize the digital pin as an output.
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);  

  // enable debug serial
  Serial.begin(115200);
  // enable software serial
  ser.begin(115200);

  // reset ESP8266
  ser.println("AT+RST");
}


// the loop
void loop() {
  
  // PHYSICAL SYSTEM
  // read the value from LM35.
  // read 10 values for averaging.
  val1 = analogRead(tempPin1);
  val2 = analogRead(tempPin2);   
  
  // convert to temp:
  float mv1 = (val1/1024.0)*5000;
  float mv2 = (val2/1024.0)*5000; 
  float cel1 = mv1/10;
  float cel2 = mv2/10;

  // temperature difference
  float difcel = minus(cel1,cel2);
  float farh = (difcel*9)/5 + 32;

  // motor activation
  float bound = 40;
  if(farh > bound){
    turnonMotor();
  } else {
    turnoffMotor();
  }

  // convert to string
  char buf[16];
  String strTemp = dtostrf(farh, 4, 1, buf);

  Serial.println(strTemp);
  

  // THINGSPEAK CONNECTION
  // TCP connection THINGSPEAK
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += "184.106.153.149"; // api.thingspeak.com
  cmd += "\",80";
  ser.println(cmd);

  if(ser.find("Error")){
    Serial.println("AT+CIPSTART error");
    return;
  }

  // prepare GET string
  String getStr = "GET /update?api_key=";
  getStr += apiKey;
  getStr +="&field1=";
  getStr += String(strTemp);
  getStr +="&field2=";
  getStr += String(cel1);
  getStr +="&field3=";
  getStr += String(cel2);
  getStr += "\r\n\r\n";

  // send data length
  cmd = "AT+CIPSEND=";
  cmd += String(getStr.length());
  
  ser.println(cmd);

  if(ser.find(">")){
    ser.print(getStr);
  }
  else{
    ser.println("AT+CIPCLOSE");
    // alert user
    Serial.println("AT+CIPCLOSE");
  }

  // thingspeak needs 15 sec delay between updates
  delay(16000);  
}

void turnonMotor(){
  int ind = 0;
  digitalWrite(8,!ind);
  digitalWrite(9,ind);
  delay(500);
  if(ind > 1)
    ind = 1;
}

void turnoffMotor(){
  int ind = 0;
  digitalWrite(8,!ind);
  digitalWrite(9,!ind);
}

float minus(float a,float b){
  if(a>b)
    return (a-b);
  else
    return (b-a); 
}

Kode program di atas merupakan modifikasi dari kode program yang kami temukan di internet. Seperti yang telah kami sebutkan sebelumnya, banyak sekali tutorial yang menjelaskan mengenai cara merangkai sistem yang mirip seperti SPOTS. Kita hanya perlu memodifikasi sesuai keinginan kita saja.

Kode program dan website dapat diunduh di https://github.com/mahbubalfarisi/tgf-imka

Testing

Setelah sistem yang dibuat jadi dan seluruh fungsionalitasnya berhasil dieksekusi, tibalah saatnya melakukan pengujian. Pengujian yang dilakukan adalah sebagai berikut.

A. Pengujian Arduino
Pengujian ini dilakukan dengan cara mengunggah kode program blink pada board Arduino. Hasil dari pengujian ini adalah Arduino yang digunakan dapat mengeksekusi perintah sehingga dapat digunakan untuk proyek ini.

B. Pengujian sensor suhu LM35
Pengujian ini dilakukan dengan cara memasang LM35 pada breadboard, menghubungkannya dengan pin yang terdapat pada Arduino, kemudian mengeksekusi program yang berkaitan dengan pengecekan suhu. Hasil dari pengujian ini yaitu kedua sensor LM35 yang kami gunakan dapat berfungsi dengan baik. Hal ini terbukti dari data suhu yang muncul di serial monitor.

C. Pengujian ESP8826-01
Pengujian ini dilakukan dengan cara menghubungkan modul ESP8826-01 dengan Arduino, kemudian melakukan pengaturan koneksi wifi, dan mengeksekusi program utama. Hasil yang diperoleh dari pengujian ini yaitu modul ESP8826-01 dapat terhubung ke internet dan dapat mengirimkan data ke Thingspeak dalam interval waktu 16 detik.

D. Pengujian website
Pengujian ini dilakukan dengan cara menguji seluruh fungsionalitas utama website yang kami buat yaitu http://imka-tgf.esy.es . Hal yang diuji yaitu melakukan scrolling, melakukan login, menekan tombol-tombol yang tersedia, memeriksa akurasi peta yang tersemat pada website, dan mengamati data yang ditampilkan pada website yang berasal dari Thingspeak. Hasil yang diperoleh dari pengujian ini adalah website mampu menangani hal-hal utama yang dikehendaki yaitu melakukan login, menampilkan deskripsi produk secara singkat, menggunakan parallax design, dan menampilkan data dari Thingspeak dan database.

E. Pengujian database
Pengujian ini tidak terlepas dari pengujian website karena dilakukan di dalam kode PHP yang sekaligus menjadi bagian utama dari website. Pengujian ini dilakukan dengan cara menghubungkan website dengan database, melakukan refresh pada website sehingga data dari Thingspeak dimasukkan ke dalam database, dan mengamati data yang berada di dalam database baik melalui phpmyadmin.co maupun melalui website kami. Hasil dari pengujian ini adalah database dapat terhubung dengan website kami dan data yang terdapat di dalam database dapat ditampilkan pada website kami.

Berikut hasil uji sistem kami secara keseluruhan, selamat menyaksikan!


Kesimpulan

Proyek SPOTS merupakan proyek yang sangat menyenangkan dan bermanfaat bagi kami. Kami banyak mempelajari hal baru karena adanya proyek ini seperti bagaimana menghubungkan Arduino ke internet, menghubungkan Arduino dengan motor DC, dan menghubungkan modul wifi dengan Thingspeak dan database online kemudian menampilakannya di website. Selain itu, kami juga mendapat manfaat lain dari adanya proyek ini yaitu buah dari kerja keras dan kesabaran itu manis lho! Alay sih ini.

Kami harap proyek ini dapat dikembangkan lebih lanjut sehingga dapat membantu para petambak Indonesia dalam meningkatkan produktivitas ikan-ikan mereka sehingga secara tidak langsung dapat membantu meningkatkan kesejahteraan para petambak di Indonesia. Jika harapan tadi terlalu besar, kami hanya berharap proyek ini dapat berguna sebagai referensi bagi orang-orang yang membutuhkan baik itu adik tingkat yang mengambil mata kuliah ini maupun orang lain dari seluruh penjuru dunia (maybe).

Berikut merupakan dokumentasi pengerjaan proyek ini.










Project Team
18214018 Mahbub Haq Al Farisi
18214030 Rezha Kusuma Astri
18214054 Edvin William Handoko

II3231 - Interaksi Manusia Komputer dan Antarmuka
Diberdayakan oleh Blogger.