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
- Arduino UNO atau Nano : 2x Unit
- Module nRF24L01+ : 2x Unit
- Module WiFi ESP8266 : 1x Unit
- Push Button : 1x Unit
- 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:
SAMBUNGAN DIAGRAM
(Unit Transmitter)
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:


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:
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.
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.
- LCD Widget (tengah atas)
- LED Widget (kiri bawah)
- 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.
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).
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)
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.