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.

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:
- Module nRF24L01+ PCB Antenna (jarak <50m)
- Module nRF24L01+ bersama SMA Antenna dan tambahan Power Amplifier serta Low-Noise Filter/Amplifier (jarak <1000m)
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
- Download Library nRF24L01.h
- Install Library nRF24L01.h
KOMPONEN-KOMPONEN YANG DIPERLUKAN
- Arduino UNO atau Nano : 2x Unit
- Module nRF24L01+ : 2x Unit
- Push Button : 1x Unit
- Jumper Cable yang berkaitan
SAMBUNGAN DIAGRAM
(Unit Transmitter)
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:


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)
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:


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.