IoT (Blynk) : Home Security Simple dengan Blynk + Arduino | MatGyver.my

Ini merupakan satu konsep Home Security sistem mudah untuk para beginners.

Gabungan ESP8266 beserta module nRF24L01+ membuatkan project ini mempunyai potensio besar untuk diguna pakai dalam Home Security sekarang.

KOMPONEN-KOMPONEN YANG DIPERLUKAN

  1. Arduino UNO atau Nano  :  2x Unit
  2. Module nRF24L01+   :  2x Unit
  3. Module WiFi ESP8266   :  1x Unit
  4. Push Button  :  1x Unit
  5. Jumper Cable yang berkaitan

LANGKAH PERMULAAN

Beberapa Tutorial yang disarankan untuk anda cuba bagi mempermudahkan anda memahami Project ini dan juga mempermudahkan proses ‘DEBUG’ :

Tutorial link ini akan memastikan module Radio RF nRF24L01+ dapat berfungsi dengan baik, disamping anda dapat biasakan diri dengan coding untuk module ini,

Tutorial berikut pula, anda dapat pelajari asas menggunakan Blynk App pada smartfon, bersama kaedah coding yang mudah. Paling penting, anda akan pelajari bagaiman menggunakan module WiFi ESP8266.

Senarai Library yang diperlukan:

  1. Download dan install Library nRF24L01.h
  2. Download dan install Library Blynk

 

SAMBUNGAN DIAGRAM
(Unit Transmitter)

Transmitter Circuit

SKETCH CODING ARDUINO 
(Unit Transmitter)

Copy, Paste dan Uploadkan sketch di bawah ke dalam unit Unit-Transmitter anda. Atau anda boleh Download file .ino untuk coding tersebut melalui URL di bawah:

//Project : Home Security Node Transmitter
//Perinci : Transmitter Unit
//Code disediakan oleh MatGyver.my

#include <SPI.h>       //masukkan library SPI, nRF menggunakan komunikasi SPI
#include <nRF24L01.h>  //masukkan library nRF24L01
#include <RF24.h>      //masukkan library RF24L

const uint64_t pipeOut = 0xA8A8F6F6E1LL; //address/alamat unik ditentukan oleh pengguna

RF24 radio(9, 10); //pin CE(9) & CSN(10)
//MOSI(11) , SCK(13) , MISO(12)

//Struktur Data-Array yang akan di transmit setiap cycle
//data dinamakan MyData
struct MyData {
 byte but1;     //1 byte data digunakan untuk menghantar status butang
};               // boleh hantar sehingga 32 byte data dalam satu cycle penghnataran data

MyData data; //prefix "data" diletakkan kepada setiap individu-array dalam MyData

void setup(){ //PERMULAAN VOID SETUP
 pinMode(4, INPUT_PULLUP); //butang disambung pada digital pin 4

 delay(100);

 Serial.begin(9600);  //Serial untuk debug/check coding output
 
 radio.begin();                   //memulakan radio nRF
 radio.setAutoAck(false);         
 radio.setDataRate(RF24_250KBPS); //kelajuan penghantaran data nRF

 radio.openWritingPipe(pipeOut);  //set module nRF sebagai transmitter(pipeOut)

 data.but1 = 0;                   //nilai permulaan variable untuk butang bersamaan 0

 delay(300);
} //PENUTUP VOID SETUP

//PROGRAM UTAMA
void loop(){ //permulaan void loop 
 if(digitalRead(4) == LOW){  //jika butang ditekan, send nilai 255 pada radio
   data.but1 = 255;
 }
 if(digitalRead(4) == HIGH){ //jika butang dilepas, send nilai 0 pada radio
   data.but1 = 0;
 }
 
 radio.write(&data, sizeof(MyData)); //send semua data set array MyData kepada penerima

 checkserial();  //check data pada serial monitor adakah butang berfungsi
}

//
void checkserial(){ //seria print untuk debug
 Serial.print("Butang 1: ");  //serial print nilai butang
 Serial.println(data.but1);   //serial print nilai butang
}

Anda boleh semak jika, butang anda berfungsi, dengan melihat dalam Serial Monitor, dan paparan output adalah seperti berikut:

Anda boleh semak jika, butang anda berfungsi, dengan melihat dalam Serial Monitor, dan paparan output adalah seperti berikut:

Transmit-Off
Output nilai ‘0’ ketika butang Off
Transmit-On
Output Nilai 255 ketika butang ON

Namun, anda tidak dapat semak jika data tersebut berjaya ditransmit melalui module nRF24 atau tidak, jika anda tidak mempunyai Unit Receiver.

SETTING BLYNK APP
(Unit Receiver)

Buka App Blynk dalam Smart-Fon dan ikuti langkah-langkah berikut:

BLYNK 1

STEP 1: Create projek baru dengan menekan icon “+ New Project”.
Juga, anda boleh berikan nama kepada project seperti “Home Security”.

STEP 2: Pilih setting komponen Arduino anda.
Anda boleh berikan nama pada projek anda pada ruang “Project Name”.
Pilih “Arduino UNO” pada CHOOSE DEVICE.
Pilih “WiFi” pada CONNECTION TYPE.
Tekan butang CREATE.

STEP 3: Selepas berjaya Create Project, Blynk akan menghantar email dengan code Auth Token. Token ini perlu dicatit dan dimasukkan dalam coding nanti.

BLYNK 2

STEP 4: Anda boleh cek email untuk menyemak dan salin code Auth Token.

STEP 5: Cari icon “+” di atas-kanan untuk menambahkan komponen-widget dalam project.

STEP 6: Pastikan anda masukkan 3 Widget seperti dalam rajah di atas.

  1. LCD Widget (tengah atas)
  2. LED Widget (kiri bawah)
  3. BUTTON Widget (kanan bawah)

PERHATIAN: Bilangan Widget yang boleh digunakan dalam App Blynk adalah bergantung pada jumlah “ENERGY” anda. Blynk memberi 2000 Energy Percuma pada awalnya. Energy ini boleh di-claim semula apabila mana-mana project di-delete. Anda juga boleh membeli Energy untuk projek-projek yang lebih kompleks yang menggunakan banyak widgets.

BLYNK3

STEP 7: Untuk setting Widget LED , letakkan input V1 (Virtual V1).

STEP 8: Untuk setting Widget LCD , letakkan input V2 (Virtual V2).

STEP 9: Untuk setting Widget Button , letakkan input V3 (Virtual V3).

BLYNK4

STEP 10: Sesudah seting, tekan butang “RUN” yang berbentuk segitiga di atas-kanan untuk RUN App anda.

STEP 11: Apabila coding di bawah sudah dimasukkan, anda akan mendapat paparan seperti dalam STEP 11.

STEP 12: Apabila Butang ditekan, anda akan mendapat paparan ALARM seperti dalam rajah STEP 12.

Kemudian masukkan coding/sketch untuk projek ini, seperti di bawah.

SAMBUNGAN DIAGRAM
(Unit Receiver)

Receiver Circuit

SKETCH CODING ARDUINO 
(Unit Receiver)

Copy, Paste dan Uploadkan sketch di bawah ke dalam unit Arduino-Receiver anda. Atau anda boleh Download file .ino untuk coding tersebut melalui URL di bawah:

//Project : Home Security Node Transmitter
//Perinci : Transmitter Unit
//Code disediakan oleh MatGyver.my

/*************************************************************
  Blynk is a platform with iOS and Android apps to control
  Arduino, Raspberry Pi and the likes over the Internet.
  You can easily build graphic interfaces for all your
  projects by simply dragging and dropping widgets.

    Downloads, docs, tutorials: http://www.blynk.cc
    Blynk community:            http://community.blynk.cc
    Social networks:            http://www.fb.com/blynkapp
                                http://twitter.com/blynk_app

  Blynk library is licensed under MIT license
  This example code is in public domain.

 *************************************************************
  WARNING!
    It's rather tricky to get it working, please read this article:
    https://github.com/blynkkk/blynk-library/wiki/ESP8266-with-AT-firmware

  Blynk using a LED widget on your phone!

  App project setup:
    LED widget on V3

  WARNING :
  For this example you'll need SimpleTimer library:
    https://github.com/jfturcot/SimpleTimer
  Visit this page for more information:
    http://playground.arduino.cc/Code/SimpleTimer
 *************************************************************/

#define BLYNK_PRINT Serial

#include <ESP8266_Lib.h>                //library untuk module WiFi ESP8266
#include <BlynkSimpleShieldEsp8266.h>   //library untuk Blynk
#include <SimpleTimer.h>

#include <SPI.h>                        //library untuk mdule nRF24
#include <nRF24L01.h>                   //library untuk mdule nRF24
#include <RF24.h>                       //library untuk mdule nRF24

// Setting untuk auth token yang didapati dalam email
char auth[] = "4fb6252baaa447af9b6aeb674982d5e0"; //masukkan code auth token anda di sini

// Maklumat WiFi
// Set password pada "" untuk network tanpa password.
char ssid[] = "********";  //letakkan nama WiFi Network di sini
char pass[] = "*******"; //letakkan PASSWORD WiFi Network di sini

//Setting untuk Software Serial Uno atau Nano...
#include <SoftwareSerial.h>
SoftwareSerial EspSerial(2, 3); // RX, TX

//SETTING ESP8266
// Kelajuan Baud Rate Module ESP8266:
#define ESP8266_BAUD 9600

ESP8266 wifi(&EspSerial);

//SETTING/DECLARE WIDGET LED
WidgetLED led3(V1); //Virtul LED dalam blynk pada pin V1

//SETTING/DECLARE WIDGET LCD
WidgetLCD lcd(V2); //pin Virtual V2 sebagai input pada Blynk LCD

//SETTING MODULE NRF24
struct MyData {     //data-array untuk input dari nRF24
 byte inbut1;
};

MyData data;        //data-array untuk input dari nRF24

const uint64_t pipeIn = 0xA8A8F6F6E1LL;

RF24 radio(9, 10); //pin CE & CN (pin data)

//VARIABLE UNTUK MEMBACA DATA INPUT BUTANG RESET
int statbut1 = 0; //initial value of Virtual RESET PIN in Blynk

//CODING/SETTING WAJIB UNTUK MENGGUNAKAN BUTANG VIRTUAL DALAM BLYNK APP
boolean btnState = false;

BLYNK_WRITE(3) //virtual pin V3 declare sebagai input
{
 int pinValue = param.asInt();
 if (pinValue == 1) {
 statbut1 = 100; //jika Virtual button V1 ON, letak value 100
 }
 else {
 statbut1 = 0;   //jika Virtual button V1 ON, letak value 0
 }
}

void setup()
{
 ///**STARTUP RADIO**///
 radio.begin();
 radio.setAutoAck(false);
 radio.setDataRate(RF24_250KBPS);

 radio.openReadingPipe(1,pipeIn);
 radio.startListening();
 ///**STARTUP RADIO**///

 delay(100);

 ///**DECLARE INPUT RF DATA**///
 data.inbut1 = 0;
 ///**DECLARE INPUT RF DATA**///

 delay(500);
 
 //MULAKAN SERIAL MONITOR UNTUK SEMAK/DEBUG
 Serial.begin(9600);

 //MULAKAN DAN SET MODULE WiFi ESP8266
 EspSerial.begin(ESP8266_BAUD);
 delay(10);

 //MULAKAN BLYNK LIBRARY
 Blynk.begin(auth, wifi, ssid, pass);

 //PERMULAAN DISPLAY LCD
 lcd.clear();
 lcd.print(4, 0, "SISTEM");    //DATA PADA BARIS PERTAMA
 lcd.print(4, 1, "START...");  //DATA PADA BARIS KEDUA 

 delay(2000);

 lcd.clear(); //CLEARKAN LCD
}

unsigned long lastRecvTime = 0;

void loop()
{
 while ( radio.available() ) {        //CHECK DATA INPUT DARI NRF24
   radio.read(&data, sizeof(MyData));
   lastRecvTime = millis();
 }

 unsigned long now = millis();        //FAIL-SAFE VALUE JIKA TIADA DATA RECEPTION
 if ( now - lastRecvTime > 1000 ) {
   data.inbut1 = 0;
 }
 
 byte But1 = data.inbut1;             //SIMPAN DATA INPUT DARI NRF24 DALAM But1

 //KONDISI APABILA BUTANG TIDAK DITEKAN
 if (data.inbut1 == 0){               
 NormalCondition();        //AKTIFKAN FUNGSI NORMAL JIKA TIADA INPUT BUTANG
 }

 if (data.inbut1 == 255){
 AlarmCondition();         //AKTIFKAN FUNGSI ALARM JIKA TIADA INPUT BUTANG
 }

 checkserial();            //SERIAL PRINT INPUT DARI BUTANG UNTUK DEBUG
 
 Blynk.run();              //PASTIKAN BLYNK SENTIASA ACTIVATE
 
}

//CODING UNTUK FUNGSI NORMAL
void NormalCondition(){
 lcd.print(0, 0, "Rumah Anda");
 lcd.print(0, 1, "Selamat");
}

//CODING UNTUK FUNGSI ALARM
void AlarmCondition(){
 lcd.clear();

 //CODING/CYCLE UNTUK ALARM CONDITION
 while(statbut1 == 0){
    lcd.print(0, 0, "!!!PERHATIAN!!!");
    lcd.print(0, 1, "PINTU TERBUKA!!!");
    led3.on();
    delay(300);   //DELAY MENYALA
    lcd.clear();
    led3.off();
    delay(200);   //DELAY OFF
    Blynk.run();                      //PASTIKAN BLYNK SENTIASA ACTIVATE
    Blynk.syncVirtual(V3);            //CODING UNTUK MEMASTIKAN BUTANG RESET DAPAT DI BACA
    checkserial();
    }

    //CODING UNTUK KONDISI RESET
    lcd.clear();
    delay(500);
    lcd.print(0, 0, "ADMIN RESET");
    lcd.print(0, 1, "Sila Tunggu...");
    delay(1500);
    lcd.clear();
    lcd.print(0, 0, "Keadaan");
    lcd.print(0, 1, "Normal");
    delay(800);
    lcd.clear();
}

//CODING UNTUK CHECK SERIAL INPUT
void checkserial()
{
 Serial.print(" But1:");
 Serial.println(data.inbut1);
}

AKAN BERSAMBUNG….

 

Jika anda dapati artikel ini membantu korang dan project korang, jangan lupa untuk sumbangkan “Like” pada artikel, atau kongsikan artikel ini supaya kami lebih bersemangat untuk kongsikan artikel-artikel yang lebih mantap!

DISCLAIMER: TENTANG MATGYVER.MY

Artikel-artikel di MatGyver.my ditulis khas untuk DIY-ers dan Hobbyist yang tiada latar belakang Electronics Engineering mahupun Mechanical Engineering. Setiap artikel MatGyver.my diolah dan digubah semudah yang mungkin bertujuan untuk mempermudahkan pemahaman dan penggunaan sesuatu komponen teknikal untuk aktiviti DIY. Artikel-artikel di MatGyver.my tidak sesuai untuk pembaca yang memerlukan info yang terlalu detail dan sangat mendalam sehingga boleh mendapat segulung Ijazah Sarjana Muda Electronics Engineering atau Mechanical Engineering.

Namun, kami alu-alukan anda-anda yang hebat untuk memberi penjelasan yang lebih terperinci pada mana-mana persoalan yang timbul tentang 2 topik utama di atas.

Published by Mat Gyver

Peneraju Komuniti Digital Maker Malaysia. Pembangunan Komuniti diUtamakan.

Tinggalkan Jawapan

Masukkan butiran anda dibawah atau klik ikon untuk log masuk akaun:

WordPress.com Logo

Anda sedang menulis komen melalui akaun WordPress.com anda. Log Out /  Tukar )

Facebook photo

Anda sedang menulis komen melalui akaun Facebook anda. Log Out /  Tukar )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: