Reading Requirement:

Pada project kali ini akan dibahas tutorial tentang pembuatan Aplikasi Flame Detector menggunakan Geeknesia sebagai interface. Aplikasi ini bisa digunakan atau dipasang pada sebuah ruangan untuk mendeteksi adanya api atau kebakaran.


Alat dan bahan yang dibutuhkan adalah sbb:

  • Arduino + Ethernet Shield / Modul Wifi (ESP8266)
  • Flame Sensor
  • Buzzer
  • Proto Board
  • Kabel Jumper
  • Kabel LAN


Arduino UNO


Ethernet Shield



Flame Sensor

Proto Board



Buzzer

Kabel Jumper


Kabel LAN


Flame Sensor Pinout


Flame Sensor terdiri dari 4 pinout yaitu Vcc, Gnd dan mempunyai 2 jenis output yaitu, Digital Output (DO) dan Analog Output (AO). Jika menggunakan Analog Output data yang akan di tampilkan menjadi lebih banyak, namun jika menggunakan Digital Output hanya 2 kondisi yaitu pembacaan minimal dan maksimal. 


Ikuti Tahap-tahap Berikut Ini:


Tahap 1

Pastikan anda sudah membuat Project,Gateway dan Device pada akun Geeknsia anda. Misal, membuat project dengan judul "Flame Detector", kemudian Gateway dengan nama "Flame Sensor" dan  Device dengan nama "Pendeteksi Api".


Tahap 2

Rangkaikan komponen yang telah disiapkan seperti arduino,ethernet shield,flame sensor, dan buzzer, ikuti gambar di bawah ini:


Wiring Diagram


Pada gambar di atas pin yang dihubungkan ke Arduino Board adalah pin Analog maka pin yang dipakai Arduino adalah Analog Input (A0) , dan Buzzer dihubungkan ke pin D2 untuk Output dari Arduino berupa alarm.


Tahap 3

Setelah komponen dirangkaikan tahap selanjutnya adalah membuat script atau program pada Arduino, pada project ini pembacaan sensor lebih dari 1 kondisi atau kejadian, misalkan kondisi normal atau tidak ada api di sekitar ruangan, kondisi ada api menyala di ruangan dan kondisi api membesar, ikuti contoh script di bawah ini:


 Script

#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>

// lowest and highest sensor readings:
const int sensorMin = 0;     // sensor minimum
const int sensorMax = 1024;  // sensor maximum
const int pin=2;
String flag;

// Update these with values suitable for your network.
byte mac[]    = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xDE };
byte ip[]     = { 192, 168, 2, 30 };
byte dns2[]   = { 8,8,8,8};
byte gateway[] = { 192, 168, 2, 1 };
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(9600);
  pinMode(pin, OUTPUT);  
}
void loop() {
  client.publish("iot/live",deviceId);
  if (!client.connected()){
     client.connect(deviceId,NULL,NULL,"iot/will",2,64,deviceId);
  }
  // read the sensor on analog A0:
	int sensorReading = analogRead(A0);

  // map the sensor range (four options):
  // ex: 'long int map(long int, long int, long int, long int, long int)'
	int range = map(sensorReading, sensorMin, sensorMax, 0, 3);
  
  // range value:
  switch (range) {
  case 0:    // A fire closer than 1.5 feet away.
    digitalWrite(pin, HIGH);
    flag="Api Membesar";
    break;
  case 1:    // A fire between 1-3 feet away.
    digitalWrite(pin, HIGH);
    delay(500);
    digitalWrite(pin, LOW);
    flag="Api";
    break;
  case 2:    // No fire detected.
    digitalWrite(pin, LOW);
    flag="Tidak ada Api";
    break;
  }
  senddata(deviceId,deviceCredential,"Kondisi", flag);
  delay(500);  // delay between reads
}

 

Sesuaikan script di atas dengan data-data yang anda miliki.

Yang perlu diganti pada script diatas:

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


Tahap 4

Buka kembali project yang telah dibuat pada akun Geeknesia anda, kemudian tes sensor dan lihat perubahan data pada Geeknesia.

Cara kerja aplikasi ini adalah sebagai berikut:

  • Ketika kondisi normal berarti sensor tidak mendeteksi adanya api maka status di Geeknesia "Tidak ada Api". Tapi, anda juga bisa mengganti status "Tidak ada Api" dengan status lainnya pada script Arduino.
  • Jika sensor mendeteksi adanya api dengan jarak kurang lebih 3 feet maka arduino akan mengirimkan data yang di dapat dari Flame Sensor ke Geeknesia dan membunyikan Buzzer yang telah diset bekerja blinking, menandakan bahwa ada api di sekitar ruangan, dan status di Geeknesia "Api".
  • Ketika api membesar atau api mendekat maka dengan jarak kurang lebih 1.5 feet, maka arduino akan mengirimkan data ke Geeknesia dan Buzzer akan berbunyi secara continue, dan status di Geeknesia pun berubah menjadi "Api Membesar". 

Pada gambar dibawah terlihat kondisi atau status Ruangan di Geeknesia "Tidak ada Api" , ini adalah kondisi normal ketika sensor tidak menditeksi adanya api.



Kondisi ketika sensor mendeteksi adanya api di sekitar sensor dalam jarak ±3 feet, maka status yang tertampil di Geeknesia menjadi "Api" seperti gambar di bawah ini:


Ini adalah gambaran project dan aplikasi yang dibuat.


Ketika api membesar atau mendekat ke sensor maka status yang tertampil di Geeknesia seperti gambar di bawah ini:



Dan api dikatakan membesar ketika jarak api dan sensor ±1.5 feet