Reading Requirement:

Tutorial ini akan membahas tentang cara membuat aplikasi Pendeteksi Banjir menggunakan Geeknesia sebagai Media Informasi, pada aplikasi ini sensor yang digunakan yaitu Ultrasonic Sensor. Berikut alat dan bahan yang dibutuhkan :

  • Arduino + Ethernet Shield
  • Ultrasonic Sensor
  • Kabel LAN
  • Kabel Jumper
  • Proto board

Arduino UNO

Ethernet Shield

Ultrasonic Sensor

Kabel LAN

Proto Board

Kabel Jumper

Berikut ini adalah pin out Ultrasonic Sensor


Tahap 1
Pastikan sudah membuat Project,Gateway dan Device pada akun Geeknesia anda, buatlah project dengan judul "Sensor Banjir", kemudian buatlah Gateway dengan nama "Sensor Banjir" dan buatlah Device dengan nama "Pendeteksi Banjir".


Tahap 2

Pada tahap berikutnya rangkailah Ultrsonic Sensor ke arduino board, ikuti tabel wiring di bawah ini:

Ultrasonic Sensor Arduino
Vcc 5v Vcc 5v
Trigger Pin 8
Echo Pin 7
Gnd Gnd

  

Pasangkan atau tumpukan Ethernet Shield yang telah disediakan ke arduino board, kemudian rangkailah Vcc ultrasonic sensor ke Vcc 5v Arduino, Ground dari Ultrasonic Sensor ke Ground arduino, Pin Trigger ke Pin 8 arduino dan Pin Echo ke Pin 7 arduino, untuk pin 7 dan pin 8 dari arduino bisa diganti dengan pin lain dengan cara setting pada script arduino, misalnya pin yang digunakan pin 11 dan pin 12 maka di set sesuai dengan program arduino.


Tahap 3

Sebelum  membuat script arduino, download library Ultrasonic Sensor terlebih dahulu ikuti link Ultrasonic Library, kemudian include library, Klik Sketch => Include Library => Add,ZIP Library => Pilih file library. 


Tahap 4  

Buatlah script seperti di bawah ini :

 

Script  

#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
#include <NewPing.h>
#define TRIGGER_PIN  8  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     7

// Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

// Update these with values suitable for your network.
byte mac[]    = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xDE };
byte ip[]     = { 192, 168, 2, 30 }; //your ip
byte dns2[]   = { 8,8,8,8};
byte gateway[] = { 192, 168, 2, 1 }; //Your ip gateway
char pubschar1 [20];
char message_buff[200];
EthernetClient ethClient;
PubSubClient client("geeknesia.com", 1883, callback, ethClient);
void callback(char* topic, byte* payload, unsigned int length) {
}

// device details
char *deviceId = "device-4407e1d312d262e32f03e1e66xxxxxxx";
char *deviceUsername = "e37fe287911430fe7312be64exxxxxxx";
char *devicePassword = "b75572b99c386b9a937bd7378xxxxxxx";
String deviceCredential = String(deviceUsername) + ":" + String(devicePassword);

void senddata(char* topic,String credential, char *var1, String nilai1 ){
  String pubString  = "{\"code\":\"";
  pubString += credential;
  pubString +="\",";
  pubString +="\"attributes\":{\"";
  pubString +=String(var1)+"\":\""+nilai1+"\"";
  pubString +="}}";
  char message_buff[pubString.length()+1];
  pubString.toCharArray(message_buff, pubString.length()+1);
  client.publish("iot/data",message_buff);    
}

void setup() {
  Ethernet.begin(mac, ip,dns2,gateway);
  Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
}

void loop() {
  client.publish("iot/live",deviceId);
  if (!client.connected()){
     client.connect(deviceId,NULL,NULL,"iot/will",2,64,deviceId);
  }
  delay(100);                      // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
  unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
  unsigned int flag=(uS / US_ROUNDTRIP_CM);
  String flagS;

  if (flag<=5){
    Serial.println("Banjir");
    flagS = "Banjir";
  }
  else{
    Serial.println("Normal");
    flagS = "Normal";
  }
  senddata(deviceId,deviceCredential,"Kondisi", flagS);
}

   

Pada script di atas bagian #define TRIGGER_PIN 8 dan #define ECHOPIN 7  bisa diganti menggunakan pin lain, misal:

#define TRIGGER_PIN   12   //Trigger pin menggunakan pin 12

#define ECHOPIN          11   //Echo pin menggunakan pin 11


Yang perlu diganti pada script di atas:

  • Ganti settingan koneksi seperti IP Address dan IP Gateway.
  • Masukan Device ID, Username, dan Password project Geeknesia anda.
Kemudian upload script yang telah dibuat ke arduino yang telah disiapkan.


Tahap 5

Buka kembali project yang telah dibuat pada akun Geeknesia anda. Jika hardware telah terhubung dengan Geeknesia, maka tampilan akan seperti gambar di bawah ini.


Kondisi saat tidak banjir, status Current Output (Normal).


Kemudian tes sensor yang telah di rangkaikan ke arduino board seperti gambar di bawah ini.


Berikut, kondisi ketika jarak antara penghalang (permukaan air) dan sensor berjarak 5 cm atau kurang dari 5 cm.


Gambar di bawah ini adalah gambaran dari aplikasi pada project pendeteksi banjir yang telah dibuat.

Gambar ketika kondisi Normal dalam kata lain tidak terjadi banjir.


Dan ini adalah gambar ketika kondisi Banjir, pada project ini, kondisi dapat dinyatakan banjir ketika jarak antara permukaan air dengan sensor berjarak 5 cm atau kurang dari 5 cm, jika ingin diatur lebih jauh atau dekat kita bisa merubah script program pada arduino.