nRF24L01+ : DIY Remote Control Mudah | Project MatGyver.my

Remote Control dengan nama lainnya hanyalah komunikasi Wireless antara 2 Microchip, di mana, terdapat satu pihak yang menghantar data dan satu pihak yang menerima data. Terdapat pelbagai jenis komunikasi Wireless seperti berikut:

  • Bluetooth
  • WiFi
  • Radio Frequency

WiFi dan Bluetooth sebenarnya juga merupakan sejenis Radio Frequency wireless tetapi mereka telah di protocolkan teknik penghantaran-penerimaan data untuk kegunaan yang lebih meluas.

Sebelum memulakan Tutorial Project ini, kami sarankan anda membuat pembacaan asas mengenai Module Radio Frequency nRF24L01+ yang akan digunakan dalam project ini.

nRF24 DIY Remote Control
Belah kiri merupakan module nRF24L01+ bersama SMA Antenna dan Power-Amplifier yang dapat mencapai jarak sehingga 1km, manakala belah kanan merupakan module nRF24L01+ yang hanya mempunyai PCB-Antenna, boleh mencapai jarak <50m.

Gambar di atas merupakan antara 2 jenis module nRF24L01+ yang boleh didapat di pasaran dan juga di WebStore kami, MatGyver.my.

Anda boleh lihat 2 jenis module nRF24L01+ yang mempunyai jarak pengendalian yang berbeza:

Xbee merupakan competitor tegar kepada module nRF24L01+. Namun disebabkan harga Xbee yang terlalu mahal, banyak pihak telah berubah kepada module nRF24L01+ kerana harganya yang jauh lebih murah untuk tujuan hobby DIY ini.

Digabungkan dengan Libray nRF24 yang telah dibangunkan oleh TMRH20, ia telah mempermudahkan lagi golongan beginners untuk belajar mengapplikasi module Radio dalamhobby dan prototype mereka.

Dalam Tutorial-Projek ini, kami akan menunjukkan bagaimana 2 unit Arduino dapat berkomunikasi, menghantar-terima data melalui module Radio nRF24L01+ .

LANGKAH PERMULAAN

PERSEDIAAN MENGGUNAKAN Module nRF24L01

  1. Download Library nRF24L01.h
  2. Install Library nRF24L01.h

KOMPONEN-KOMPONEN YANG DIPERLUKAN

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

SAMBUNGAN DIAGRAM
(Unit Transmitter)

NodeTransmitter_bb

Dalam unit transmitter ini, kita hanya akan menghantar data digital dari satu unit butang sahaja yang disambungkan pada pin Digital 4 Arduino NANO/UNO.

SKETCH CODING ARDUINO 
(Unit Transmitter)

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

Dalam Sketch ini, status butang Push-Button  akan di-convertkan kepada nilai byte, lihat keratan algorythm di bawah yang menggunakan IF function:

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;}

Apabila Butang digunakan dengan menggunakan INPUT_PULLUP , ia akan dibaca sebagai signal LOW dalam Arduino, dan kita convertkan signal ini kepada nilai 255, dan apabila butang dilepas, bacaan HIGH akan di convertkan kepada nilai 0.

Nilai byte 255 dan 0 ini akan dihantar dalam bentuk Data-Binary-Array melalui module nRF24L01 untuk diterima-baca oleh unit penerima.

PERHATIAN! :
Anda hanya boleh menghantar data binary SAHAJA melalui module nRF24L01 ini. Data binary adalah dalam range 0~255 dalam bentuk byte.

//Project : DIY Remote Control Mudah dengan nRF24L01+
//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:

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.

SAMBUNGAN DIAGRAM
(Unit Receiver)

Home Security Central Receiver Test_bb

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 : DIY Remote Control Mudah dengan nRF24L01+
//Perinci : Receiver Unit
//Code disediakan oleh MatGyver.my

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

const uint64_t pipeIn = 0xA8A8F6F6E1LL;//address/alamat unik ditentukan oleh pengguna
                                      //alamat ini perlu sama dengan unit Transmitter
                                      
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 inbut1;  //namakan data array
}; // Jumlah size data adalah 1 byte, masih ada 31 lagi kekosongan

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

void setup(){  //PERMULAAN VOID SETUP
 Serial.begin(9600);

 radio.begin();                    //memulakan radio nRF
 radio.setAutoAck(false);
 radio.setDataRate(RF24_250KBPS);  //kelajuan penghantaran data nRF

 radio.openReadingPipe(1,pipeIn);  //set module nRF sebagai Receiver(pipeIn)
                                   //pilih pipe nombor 1. boleh terima sehingga 6 pipe
                                   
 radio.startListening();           //bersedia untuk menerima sebarang data/signal

 delay(100);

 data.inbut1 = 0; //default value pada input variable

 delay(500);
}

/************************************************/
unsigned long lastRecvTime = 0; //declare variable  untuk check cycle time

void loop()
{  

 
 while ( radio.available() ) {        //check jika ada sebarang input dari Transmitter     
   radio.read(&data, sizeof(MyData)); //read data dan susun dalam array MyData
   lastRecvTime = millis();           //declare permulaan masa data di-check
 }
 
 unsigned long now = millis();        //masa selepas input diterima
 if ( now - lastRecvTime > 1000 ) {   //FAIL-SAFE jika masa melebihi 1 saat
   data.inbut1 = 0;                   //FAIL-SAFE data jika RF module tidak terima data
 }                                    //data akan beri default value 0

 byte But1 = data.inbut1;           //simpan data dalam algo baru But1

 Serial.print("Butang Input: ");    //check input dengan serial
 Serial.println(But1);
}

Dalam coding ini, data Binary-Array yang diterima melalui module nRF24L01, akan disusun ke dalam array dalam Algorythm MyData.

Data yang diterima hanyalah dalam range nombor binary 0~255 sahaja untuk setiap byte yang diterima.

Jika butang pada transmitter ditekan, Transmitter akan menghantar nilai 255 ke dalam Channel inbut1.

Anda dapat semak jika Unit-Receiver menerima data dari Unit-Transmitter melalui Serial Monitor, seperti berikut:

Receive-Off
Bacaan apabila butang TIDAK ditekan.
Receive-On
Bacaan 255 apabila butang ditekan!

Pastikan kedua-dua unit Transmitter dan Receiver disambungkan dan dinyalakan.

Apabila output dari unit Receiver dapat di paparkan seperti di atas, bermakna anda  berjaya membuat Remote Control mudah pertama anda!

Bukan sahaja data dari butang dapat dihantar melalui module nRF24L ini, malah anda dapat hantar data Analog dari sensor-sensor anda mahupun dari potentiometer dengan menggunakan fungsi MAP untuk menukar nilai sensor dari 1023 (potentiometer) kepada 255(byte binary).

Kami sarankan anda ikuti artikel-artikel berikut:

  • Menggunakan Module nRF24L01+ sebagai RF Transceiver
  • Menggunakan Bluetooth Module HC-05/HC-06
  • Menggunakan Wifi Module ESP8266

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: