Tutorial ini akan membahas cara menggunakan modul komunikasi RF 315MHz atau 433MHz. Pada prinsipnya kedua jenis modul tersebut bentuknya sama secara fisik, namun berbeda pada frekuensi kerjanya. Modul ini harganya cukup terjangkau sehingga cocok untuk digunakan untuk komunikasi menggunakan frekuensi radio (RF). Hal yang perlu diperhatikan jika menggunakan modul ini adalah kerentanannya terhadap noise yang dapat mengganggu komunikasi. Untuk tegangan, modul ini cukup fleksibel dan dapat bekerja pada rentang tegangan 3-12V sehingga dapat dengan mudah digunakan pada tegangan 5V sesuai dengan yang digunakan oleh arduino pada umumnya. Anda dapat menggunakan tegangan yang lebih tinggi jika ingin meningkatkan jangkauan modul ini, tentunya dengan tambahan beberapa komponen diskrit agar tidak merusak arduino yang Anda gunakan.
Modul RF315/433MHz yang umumnya beredar tidak dilengkapi dengan antenna sehingga jangkauannya hanya beberapa cm. Agar jangkauannya bisa jauh hingga ratusan meter, maka Anda perlu menyolder antenna ke modul tersebut. Anda dapat menggunakan kawat tembaga sebagai antenna. Adapun ukuran kawat yang digunakan untuk modul 315MHz adalah sekitar 23cm dan untuk modul 433MHz dapat menggunakan kawat dengan ukuran sekitar 17cm. Perlu diingat bahwa tutorial ini menggunakan 2 buah arduino, masing-masing untuk transmitter dan receiver. Jika Anda tidak memerlukan sesuatu yang kompleks, maka Anda dapat mengganti arduino dengan ATtiny85 atau yang lainnya. Sebelum melanjutkan ke proses implementasi, Anda terlebih dahulu harus mengenalipinout pada modul RF315/433MHz. Berikut ini adalah pinout pada modul transmitter dan receiver:
Sedangkan tabel berikut ini merupakan tabel koneksi antara arduino dan modul RF315/433MHz (koneksi ini sama untuk modul transmitter dan receiver):
Arduino | RF315/433MHz |
---|---|
GND | GND |
5v | Vcc |
Pin 10 | Data |
Contoh 1: Menggunakan Pustaka Manchester
Untuk implementasi pertama, akan digunakan pustaka manchester untuk mempermudah penggunaan modul RF315/433MHz. Pustaka manchester ini seperti namanya menggunakan manchester encoding untuk proses pengiriman data dan untuk menerjemahkan data yang diterima pada sisi receiver. Berikut ini adalah langkah-langkah untuk menggunakan pustaka ini:
- Pindah ke sub direktori libraries pada direktori instalasi arduino dan lakukan kloning pustaka tersebut:
% git clone https://github.com/mchr3k/arduino-libs-manchester.git
- Jalankan arduino IDE dan gunakan sketch berikut ini untuk arduino dan modul RF315/433 yang berfungsi sebagai transmitter (potongan kode ini merupakan modifikasi dari contoh yang terdapat pada pustaka manchester):
/** * Ini adalah sketch untuk transmitter. Hubungkan pin data pada * transmitter RF315/433 ke pin 2 pada arduino. Data yang akan * dikirim adalah string "hello world" */ #include <Manchester.h> // file header Manchester.h #define TX_PIN 10 // hubungkan pin 2 arduino ke pin data modul RF315/433 #define LED_PIN 13 // LED pada board arduino berada pada pin 13 #define MSG_LEN 11 // ukuran pesan yang akan dikirim uint8_t stat = 1; // variabel untuk menyimpan status pengiriman data uint8_t data[MSG_LEN] = {'h','e','l','l','o',' ','w','o','r','l','d'}; // variabel berisi data yang akan dikirim void setup() { pinMode(LED_PIN, OUTPUT); // atur pin 13 (LED pin) sebagai output man.setupTransmit(TX_PIN, MAN_1200); // pengaturan pin arduino yang terhubung dengan modul RF315/433 } // dan konstanta kecepatan pengiriman data void loop() { man.transmitArray(MSG_LEN, data); // lakukan pengiriman data dengan parameter berupa ukuran data // dan variabel yang berisi data yang akan dikirimkan. stat = ++stat % 2; // status pengiriman data akan digunakan untuk menyalakan atau // memadamkan LED pada arduino. digitalWrite(LED_PIN, stat); // nyalakan atau padamkan LED pada arduino berdasarkan status // pengiriman data. }
- Selanjutnya, gunakan sketch berikut ini untuk sisi receiver:
/** * Ini adalah sketch untuk receiver. Hubungkan salah satu pin data pada * receiverRF315/433 ke pin 2 pada arduino. Data yang diterima akan * diteruskan ke serial monitor pada arduino. */ #include <Manchester.h> // file header Manchester.h #define RX_PIN 10 // hubungkan pin 2 arduino ke salah satu pin data modul RF315/433 #define LED_PIN 13 // LED pada board arduino berada pada pin 13 #define BUF_LEN 11 // ukuran variabel yang akan menerima pesan uint8_t stat = 0; // variabel untuk menyimpan status penerimaan data uint8_t data[BUF_LEN]; // variabel yang akan menerima data yang dikirim void setup() { pinMode(LED_PIN, OUTPUT); // atur pin 13 (LED pin) sebagai output digitalWrite(LED_PIN, stat); // aktifkan pin LED sesuai dengan status pada variabel "stat" man.setupReceive(RX_PIN, MAN_1200); // pengaturan pin arduino yang terhubung dengan modul RF315/433 // dan konstanta kecepatan transmisi (penerimaan) data. man.beginReceiveArray(BUF_LEN, data); // mulai lakukan penerimaan data dan simpan data yang diterima // pada variabel data sesuai dengan ukuran yang didefinisikan // pada BUF_LEN, yaitu 11 byte. } void loop() { if (man.receiveComplete()) // periksa apakah data telah selesai diterima { uint8_t receivedSize = 0; // Serial.println((char *) data); // tampilkan data yang diterima melalui serial yang dapat dilihat // pada serial monitor IDE arduino man.beginReceiveArray(BUF_LEN, data); // kembali menerima data selanjutnya. stat = ++stat % 2; // status penerimaan data akan digunakan untuk mengatur LED pada arduino digitalWrite(LED_PIN, stat); // nyalakan atau padamkan LED pada arduino berdasarkan status penerimaan data } }
- Setelah mengunggah kedua sketch di atas ke arduino, letakkan arduino yang berfungsi sebagai transmitter pada lokasi yang agak jauh dan gunakan adapter atau baterai sebagai sumber tegangan. Sementara itu arduino yang berfungsi sebagai receiver Anda hubungkan ke komputer. Jalankan serial monitor pada IDE arduino untuk menerima pesan dari transmitter. Serial monitor akan menampilkan pesan hello world yang dikirimkan oleh transmitter seperti pada gambar di bawah ini:
Contoh 2: Menggunakan Pustaka RadioHead
Pada contoh kedua ini, akan digunakan pustaka RadioHead yang merupakan pengembangan dari pustaka VirtualWire. Berikut ini adalah langkah-langkah untuk menggunakan pustaka ini:
- Unduh terlebih dahulu pustaka RadioHead (ketika tutorial ini ditulis, versi terbaru adalah v1.53):
% wget -q http://www.airspayce.com/mikem/arduino/RadioHead/RadioHead-1.53.zip
- Ekstrak arsip tersebut ke dalam sub direktori libraries pada direktori instalasi arduino (misalnya pada sub direktori ~/Arduino/libraries):
% unzip RadioHead-1.53.zip -d ~/Arduino/libraries
- Jika menggunakan pustaka RadioHead, maka koneksi antara pin data pada modul transmitter dihubungkan dengan pin 12 pada arduino. Sedangkan pin data pada modul receiver dihubungkan dengan pin 11 pada arduino.
- Berikut ini adalah contoh sketch untuk transmitter yang sama dengan contoh pertama di atas (sketch ini merupakan modifikasi dari contoh pada pustaka RadioHead):
#include <RH_ASK.h> // Header RadioHead menggunakan ASK (Amplitude Shift Keying) #include <SPI.h> // Header SPI.h disertakan karena dibutuhkan oleh proses kompilasi #define LED 13 // Definisi untuk pin LED pada arduino RH_ASK driver; // Inisialisasi driver pustaka RadioHead void setup() { pinMode(LED, OUTPUT); // Atur pin 13 (LED) pada arduino sebagai output Serial.begin(9600); // Untuk proses debugging if (!driver.init()) // Jika proses inisialisasi gagal Serial.println("Inisialisasi gagal"); // Maka tampilkan pesan pada serial monitor } void loop() { const char *msg = "hello world"; // Data/pesan yang akan dikirim digitalWrite(LED, HIGH); // Nyalakan LED sebagai tanda bahwa data akan dikirim driver.send((uint8_t *) msg, strlen(msg)); // Kirim data sesuai dengan ukurannya driver.waitPacketSent(); // Tunggu hingga seluruh data terkirim digitalWrite(LED, LOW); // Padamkan LED sebagai tanda bahwa data telah terkirim delay(200); // Tunggu selama 200 milidetik }
- Sedangkan sketch berikut ini adalah untuk receiver:
#include <RH_ASK.h> // Header RadioHead menggunakan ASK (Amplitude Shift Keying) #include <SPI.h> // Header SPI.h disertakan karena dibutuhkan oleh proses kompilasi #define LED 13 // Definisi untuk pin LED pada arduino RH_ASK driver; // Inisialisasi driver pustaka RadioHead void setup() { pinMode(LED, OUTPUT); // Atur pin 13 (LED) pada arduino sebagai output Serial.begin(9600); // Untuk proses debugging if (!driver.init()) // Jika proses inisialisasi gagal Serial.println("Inisialisasi gagal"); // Maka tampilkan pesan pada serial monitor } void loop() { uint8_t buf[RH_ASK_MAX_MESSAGE_LEN]; // Variabel yang berfungsi untuk menyimpan data yang diterima uint8_t buflen = sizeof(buf); // Variabel yang berfungsi untuk menyimpan ukuran data yang diterima if (driver.recv(buf, &buflen)) // Jika ada data yang diterima { digitalWrite(LED, HIGH); // Nyalakan LED sebagai indikasi data diterima driver.printBuffer("Data:", buf, buflen); // Maka tampilkan data yang diterima ke serial monitor dalam format heksadesimal digitalWrite(LED, LOW); // Padamkan LED setelah data dikirim ke serial monitor } }
- Berikut ini adalah data yang diterima pada sisi receiver dan ditampilkan pada serial monitor IDE arduino:
Kedua contoh di atas hanya sebagai pengantar penggunaan modul RF315/433MHz. Selanjutnya, Anda dapat mengembangkan tutorial ini misalnya dengan mengirimkan data dari sensor menggunakan modul RF315/433MHz.
Sekian tutorial kali ini, semoga bermanfaat. Selanjutnya, Anda dapat mengembangkan tutorial ini untuk sesuai dengan ide dan kreatifitas yang Anda miliki. Terima kasih kepada Tuhan Yang Esa, Maxindo, N3 dan Anda yang telah membaca tutorial ini.
Referensi
- RNDC
- RF 315/433 MHz Transmitter-receiver Module and Arduino
- RadioHead Packet Radio library for embedded microprocessors