KUNJUNGI KAMI

KUNJUNGI KITA DI BUKALAPAK, TOKOPEDIA DAN SHOPEE
Tampilkan postingan dengan label ESP8266. Tampilkan semua postingan
Tampilkan postingan dengan label ESP8266. Tampilkan semua postingan

Memulai ESP-NOW (ESP8266 NodeMCU dengan Arduino IDE)

Pada artikel ini, kita akan membahas bagaimana cara menggunakan ESP-NOW untuk bertukar data antara board ESP8266 NodeMCU yang diprogram dengan Arduino IDE. ESP-NOW adalah protokol komunikasi tanpa koneksi yang dikembangkan oleh Espressif, yang memiliki fitur transmisi paket pendek dan dapat digunakan dengan board ESP8266 dan ESP32.


Kita akan memprogram board ESP8266 NodeMCU menggunakan Arduino IDE. Jadi, sebelum melanjutkan tutorial ini, Anda harus menginstal add-on ESP8266 di Arduino IDE Anda. Ikuti panduan berikut:

Install Board ESP8266 di Arduino IDE (Windows, Mac OS X, Linux)

PENGENALAMN ESP NOW


Video berikut memberikan pengantar tentang ESP-NOW. Video ini direkam untuk ESP32, tetapi sebagian besar konsepnya juga berlaku untuk board ESP8266 NodeMCU.




Menurut situs web Espressif, ESP-NOW adalah "protokol yang dikembangkan oleh Espressif, yang memungkinkan beberapa perangkat untuk berkomunikasi satu sama lain tanpa menggunakan Wi-Fi. Protokol ini mirip dengan konektivitas nirkabel 2.4GHz berdaya rendah (...). Pemasangan antara perangkat diperlukan sebelum komunikasi mereka. Setelah pemasangan selesai, koneksi menjadi aman dan peer-to-peer, tanpa memerlukan jabat tangan.

Ini berarti bahwa setelah memasangkan perangkat satu sama lain, koneksinya akan tetap terjaga. Dengan kata lain, jika salah satu board Anda tiba-tiba kehilangan daya atau diatur ulang, saat board tersebut dihidupkan ulang, ia akan secara otomatis terhubung ke board lainnya untuk melanjutkan komunikasi.

ESP-NOW mendukung fitur-fitur berikut:
  1. Komunikasi unicast terenkripsi dan tidak terenkripsi;
  2. Perangkat peer yang tercampur terenkripsi dan tidak terenkripsi;
  3. Dapat membawa payload hingga 250 byte;
  4. Fungsi callback pengiriman yang dapat diatur untuk menginformasikan lapisan aplikasi tentang keberhasilan atau kegagalan transmisi.
Teknologi ESP-NOW juga memiliki batasan berikut:

  1. Peer terenkripsi terbatas. Maksimal 10 peer terenkripsi didukung dalam mode Stasiun; maksimal 6 dalam mode SoftAP atau SoftAP + Stasiun;
  2. Beberapa peer tidak terenkripsi  dapat didukung, namun jumlah totalnya harus kurang dari 20, termasuk peer terenkripsi;
  3. Payload dibatasi hingga 250 byte.
Dengan kata lain, ESP-NOW adalah protokol komunikasi cepat yang dapat digunakan untuk bertukar pesan kecil (hingga 250 byte) antara board ESP8266.

ESP-NOW menawarkan fleksibilitas tinggi, memungkinkan Anda untuk mengatur komunikasi satu arah atau dua arah dalam berbagai skenario.

Komunikasi Satu Arah ESP-NOW


ESP-NOW memungkinkan komunikasi satu arah, contohnya:

  • Satu board ESP8266 mengirim data ke board ESP8266 lainnya.

Konfigurasi ini sangat mudah diterapkan dan cocok untuk mengirim data dari satu board ke board lainnya, seperti pembacaan sensor atau perintah ON dan OFF untuk mengontrol GPIO.


  • Master" ESP8266 mengirim data ke beberapa "slave" ESP8266

Dalam konfigurasi ini, satu board ESP8266 dapat mengirim perintah yang sama atau berbeda ke board ESP8266 lainnya. Konfigurasi ini ideal untuk membangun sesuatu seperti remote control. Anda dapat memiliki beberapa board ESP8266 di sekitar rumah yang dikendalikan oleh satu board ESP8266 utama.


  • Satu "slave" ESP8266 menerima data dari beberapa "master"

Konfigurasi ini ideal jika Anda ingin mengumpulkan data dari beberapa sensor node ke dalam satu board ESP8266. Board ini kemudian dapat dikonfigurasi sebagai server web untuk menampilkan data dari semua board lain, misalnya.


Catatan: Dokumentasi ESP-NOW tidak secara eksplisit menggunakan istilah "pengirim/master" dan "penerima/slave". Setiap board ESP8266 dapat berfungsi sebagai pengirim atau penerima. Namun, untuk memperjelas, kita akan menggunakan istilah "pengirim" dan "penerima" atau "master" dan "slave" dalam penjelasan ini.

Komunikasi Dua Arah ESP-NOW

Dengan ESP-NOW, setiap board dapat menjadi pengirim dan penerima secara bersamaan. Ini memungkinkan Anda untuk membangun komunikasi dua arah antar board.

Sebagai contoh, Anda dapat mengatur dua board untuk saling berkomunikasi




Anda dapat menambahkan lebih banyak board ke konfigurasi ini dan membentuk jaringan (semua board ESP8266 saling berkomunikasi).


Singkatnya, ESP-NOW sangat ideal untuk membangun jaringan di mana beberapa board ESP8266 dapat saling bertukar data.

Mendapatkan  MAC Address Board ESP8266

Untuk berkomunikasi melalui ESP-NOW, Anda perlu mengetahui MAC Address  penerima ESP8266. Ini menentukan perangkat mana yang akan Anda kirimi informasi.

Setiap ESP8266 memiliki MAC Address unik, dan ini adalah cara kita mengidentifikasi setiap board untuk mengirim data menggunakan ESP-NOW (pelajari cara Mendapatkan dan Mengubah  MAC Address ESP8266).

Untuk mendapatkan  MAC Address board Anda, unggah kode berikut:

// Complete Instructions to Get and Change ESP MAC Address: https://RandomNerdTutorials.com/get-change-esp32-esp8266-mac-address-arduino/

#include <ESP8266WiFi.h>

void setup(){
Serial.begin(115200);
Serial.println();
Serial.print("ESP8266 Board MAC Address: ");
Serial.println(WiFi.macAddress());
}
void loop(){

}
Setelah mengunggah kode, buka Serial Monitor dengan baud rate 115200 dan tekan tombol RESET ESP8266. MAC Address  akan dicetak seperti berikut:




Simpan alamat MAC board Anda karena Anda akan membutuhkannya untuk mengirim data ke board yang tepat melalui ESP-NOW.

ESP-NOW: Komunikasi Satu Arah Titik ke Titik dengan ESP8266

Untuk mengenalkan  Anda dengan komunikasi nirkabel ESP-NOW, kita akan membuat proyek sederhana yang menunjukkan cara mengirim pesan dari satu ESP8266 ke ESP8266 lainnya. Satu ESP8266 akan bertindak sebagai "pengirim" dan ESP8266 lainnya akan menjadi "penerima".

Kita akan menggunakan struktur data yang berisi variabel bertipe char, int, float, String, dan boolean untuk demonstrasi ini. Namun, Anda dapat memodifikasi struktur ini untuk mengirim jenis variabel apa pun yang sesuai dengan proyek Anda, Aseperti pembacaan sensor atau variabel boolean untuk mengontrol perangkat (misalnya, menyalakan atau mematikan sesuatu).

Untuk memudahkan pemahaman, kita akan menyebut ESP8266 #1 sebagai "pengirim" dan ESP8266 #2 sebagai "penerima".

Berikut hal-hal yang perlu kita sertakan dalam sketsa "pengirim":

  1. Inisialisasi ESP-NOW: Siapkan ESP8266 #1 untuk berfungsi sebagai pengirim dalam komunikasi ESP-NOW.
  2. Registrasi Fungsi Callback Pengiriman Data: Buat fungsi bernama "OnDataSent" yang akan dijalankan ketika pesan berhasil dikirim. Fungsi ini akan memberi tahu kita apakah pesan berhasil dikirim ke penerima atau tidak.
  3. Tambahkan Perangkat Peer (Penerima): Masukkan alamat MAC ESP8266 #2 sebagai perangkat peer yang akan menerima pesan.
  4. Kirim Pesan ke Perangkat Peer: Kirim pesan yang berisi struktur data yang telah kita siapkan ke ESP8266 #2.

Di sisi "penerima", sketsa ESP8266 #2 harus mencakup:

  1. Inisialisasi ESP-NOW: Siapkan ESP8266 #2 untuk berfungsi sebagai penerima dalam komunikasi ESP-NOW.
  2. Registrasi Fungsi Callback Penerimaan Data (OnDataRecv): Buat fungsi bernama "OnDataRecv" yang akan dijalankan ketika pesan diterima dari ESP8266 #1.
  3. Simpan Pesan dalam Callback: Di dalam fungsi "OnDataRecv", simpan pesan yang diterima ke dalam variabel untuk melakukan tindakan apa pun dengan informasi yang terkandung di dalamnya.
ESP-NOW memanfaatkan fungsi callback yang akan dijalankan ketika sebuah perangkat menerima pesan atau ketika pesan dikirim (fungsi ini memberi tahu Anda apakah pesan berhasil dikirim atau gagal).



Function Name and Description
esp_now_init() Initializes ESP-NOW. You must initialize Wi-Fi before initializing ESP-NOW. Returns 0, if succeed.
esp_now_set_self_role(role) the role can be: ESP_NOW_ROLE_IDLE = 0,
ESP_NOW_ROLE_CONTROLLER, ESP_NOW_ROLE_SLAVE, ESP_NOW_ROLE_COMBO, ESP_NOW_ROLE_MAX
esp_now_add_peer(uint8 mac_addr, uint8 role, uint8 channel, uint8 key, uint8 key_len) Call this function to pair a device.
esp_now_send(uint8 mac_address, uint8 data, int len) Send data with ESP-NOW.
esp_now_register_send_cb() Register a callback function that is triggered upon sending data. When a message is sent, a function is called – this function returns whether the delivery was successful or not.
esp_now_register_rcv_cb() Register a callback function that is triggered upon receiving data. When data is received via ESP-NOW, a function is called.

Sketsa Pengirim ESP8266 NodeMCU (ESP-NOW)

Berikut adalah kode untuk board pengirim ESP8266 NodeMCU. Salin kode ini ke Arduino IDE Anda, tetapi jangan langsung unggah. Anda perlu melakukan beberapa modifikasi agar kode ini berfungsi sesuai kebutuhan Anda.


/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/esp-now-esp8266-nodemcu-arduino-ide/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/

#include <ESP8266WiFi.h>
#include <espnow.h>

// REPLACE WITH RECEIVER MAC Address
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

// Structure example to send data
// Must match the receiver structure
typedef struct struct_message {
char a[32];
int b;
float c;
String d;
bool e;
} struct_message;

// Create a struct_message called myData
struct_message myData;

unsigned long lastTime = 0;
unsigned long timerDelay = 2000; // send readings timer

// Callback when data is sent
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
Serial.print("Last Packet Send Status: ");
if (sendStatus == 0){
Serial.println("Delivery success");
}
else{
Serial.println("Delivery fail");
}
}
void setup() {
// Init Serial Monitor
Serial.begin(115200);
// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);

// Init ESP-NOW
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}

// Once ESPNow is successfully Init, we will register for Send CB to
// get the status of Trasnmitted packet
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
esp_now_register_send_cb(OnDataSent);
// Register peer
esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
}
void loop() {
if ((millis() - lastTime) > timerDelay) {
// Set values to send
strcpy(myData.a, "THIS IS A CHAR");
myData.b = random(1,20);
myData.c = 1.2;
myData.d = "Hello";
myData.e = false;

// Send message via ESP-NOW
esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));

lastTime = millis();
}
}

Cara Kerja Kode

Baris pertama kode program ini dimulai dengan perintah 

#include <ESP8266WiFi.h>
#include <espnow.h>
Pada baris berikutnya, Anda harus memasukkan  MAC Address  penerima ESP8266.
uint8_t broadcastAddress[] = {0x5C, 0xCF, 0x7F, 0x99, 0x9A, 0xEA};
Dalam kasus kita, alamat MAC penerima adalah: 5C:CF:7F:99:9A:EA, tetapi Anda perlu mengganti variabel tersebut dengan alamat MAC Anda sendiri.
Kemudian, buatlah sebuah struktur yang berisi jenis data yang ingin kita kirim. Kita sebut struktur ini sebagai struct_message dan ini berisi 5 jenis variabel yang berbeda. Anda dapat mengubahnya untuk mengirim jenis variabel apa pun yang Anda inginkan.
typedef struct struct_message {
char a[32];
int b;
float c;
String d;
bool e;
} struct_message;
Buat variabel baru bertipe struct_message yang disebut myData yang akan menyimpan nilai-nilai variabel.
struct_message myData;
Selanjutnya, tentukan fungsi OnDataSent(). Ini adalah fungsi callback yang akan dijalankan ketika pesan dikirim. Dalam kasus ini, pesan ini hanya mencetak apakah pesan berhasil dikirim atau tidak.
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
Serial.print("Last Packet Send Status: ");
if (sendStatus == 0){
Serial.println("Delivery success");
}
else{
Serial.println("Delivery fail");
}
}
Di dalam fungsi setup(), inisialisasi monitor serial untuk keperluan debugging:
Serial.begin(115200);
Atur perangkat sebagai stasiun Wi-Fi
WiFi.mode(WIFI_STA);
Siapkan ESP-NOW
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
Konfigurasikan mode ESP8266:
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
Perangkat ini dapat diatur dengan peran berikut: ESP_NOW_ROLE_CONTROLLER, ESP_NOW_ROLE_SLAVE, ESP_NOW_ROLE_COMBO, ESP_NOW_ROLE_MAX.

Setelah berhasil menginisialisasi ESP-NOW, daftarkan fungsi callback yang akan dipanggil ketika pesan dikirim. Dalam kasus ini, kita mendaftarkan fungsi OnDataSent() yang telah dibuat sebelumnya.

esp_now_register_send_cb(OnDataSent);
Kemudian, pasangkan dengan perangkat ESP-NOW lainnya untuk mengirim data:
esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
Fungsi esp_now_add_peer menerima argumen berikut, dengan urutan sebagai berikut: alamat MAC, peran, saluran Wi-Fi, kunci, dan panjang kunci.

Di dalam loop(), kita akan mengirim pesan melalui ESP-NOW setiap 2 detik (Anda dapat mengubah waktu tunda ini pada variabel timerDelay). Pertama, kita atur nilai variabel sebagai berikut:

strcpy(myData.a, "THIS IS A CHAR");
myData.b = random(1,20);
myData.c = 1.2;
myData.d = "Hello";
myData.e = false;
Ingat bahwa myData adalah sebuah struktur. Di sini kita menetapkan nilai yang ingin kita kirim di dalam struktur tersebut. Sebagai contoh, baris pertama menetapkan sebuah karakter, baris kedua menetapkan angka Int acak, Float, String, dan variabel Boolean.

Kita membuat struktur seperti ini untuk menunjukkan kepada Anda cara mengirim tipe variabel yang paling umum. Anda dapat mengubah struktur tersebut untuk mengirim tipe data lainnya.

Terakhir, kirim pesan sebagai berikut:

esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
Fungsi loop() dijalankan setiap 2000 milidetik (2 detik).
if ((millis() - lastTime) > timerDelay) {
// Set values to send
strcpy(myData.a, "THIS IS A CHAR");
myData.b = random(1,20);
myData.c = 1.2;
myData.d = "Hello";
myData.e = false;

// Send message via ESP-NOW
esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));

lastTime = millis();
}
Sketch Penerima ESP8266 NodeMCU (ESP-NOW)
/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/esp-now-esp8266-nodemcu-arduino-ide/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/

#include <ESP8266WiFi.h>
#include <espnow.h>

// Structure example to receive data
// Must match the sender structure
typedef struct struct_message {
char a[32];
int b;
float c;
String d;
bool e;
} struct_message;

// Create a struct_message called myData
struct_message myData;

// Callback function that will be executed when data is received
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) {
memcpy(&myData, incomingData, sizeof(myData));
Serial.print("Bytes received: ");
Serial.println(len);
Serial.print("Char: ");
Serial.println(myData.a);
Serial.print("Int: ");
Serial.println(myData.b);
Serial.print("Float: ");
Serial.println(myData.c);
Serial.print("String: ");
Serial.println(myData.d);
Serial.print("Bool: ");
Serial.println(myData.e);
Serial.println();
}
void setup() {
// Initialize Serial Monitor
Serial.begin(115200);
// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);

// Init ESP-NOW
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Once ESPNow is successfully Init, we will register for recv CB to
// get recv packer info
esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
esp_now_register_recv_cb(OnDataRecv);
}

void loop() {
}

Cara Kerja Kode

Mirip dengan pengirim, mulailah dengan menyertakan library:
#include <esp_now.h>
#include <WiFi.h>
Buat struktur untuk menerima data. Struktur ini harus sama dengan yang didefinisikan dalam skrip pengirim.
typedef struct struct_message {
char a[32];
int b;
float c;
String d;
bool e;
} struct_message;
Buat variabel bertipe struct_message bernama myData.
struct_message myData;
Buat fungsi callback yang akan dipanggil ketika ESP8266 menerima data melalui ESP-NOW. Fungsi tersebut bernama onDataRecv() dan harus menerima beberapa parameter sebagai berikut:
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
Kita copy konten variabel data incomingData ke dalam variabel myData.
memcpy(&myData, incomingData, sizeof(myData));
cSekarang, struktur myData mengandung beberapa variabel di dalamnya dengan nilai-nilai yang dikirim oleh ESP8266 pengirim. Untuk mengakses variabel a, misalnya, kita hanya perlu memanggil myData.a. 
Dalam contoh ini, kita cukup mencetak data yang diterima, tetapi dalam aplikasi praktis Anda dapat mencetak data tersebut pada layar, misalnya.
Serial.print("Bytes received: ");
Serial.println(len);
Serial.print("Char: ");
Serial.println(myData.a);
Serial.print("Int: ");
Serial.println(myData.b);
Serial.print("Float: ");
Serial.println(myData.c);
Serial.print("String: ");
Serial.println(myData.d);
Serial.print("Bool: ");
Serial.println(myData.e);
Serial.println();
}
Di dalam fungsi setup(), inisialisasi komunikasi Serial untuk keperluan debugging.
Serial.begin(115200);
Atur perangkat sebagai stasiun Wi-Fi:
WiFi.mode(WIFI_STA);
Siapkan ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
Konfigurasikan mode ESP8266
esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
Daftarkan untuk fungsi callback yang akan dipanggil ketika data diterima. Dalam kasus ini, kita mendaftarkan untuk fungsi OnDataRecv() yang telah dibuat sebelumnya.
esp_now_register_recv_cb(OnDataRecv);

Pengujian Komunikasi ESP-NOW

Unggah skrip pengirim ke salah satu board dan skrip penerima ke board lainnya. Jangan lupa masukkan alamat MAC penerima pada skrip pengirim.

Sekarang, buka dua jendela Arduino IDE. Satu untuk penerima, dan satu lagi untuk pengirim. Buka Serial Monitor untuk setiap board. Ini harus berupa port COM yang berbeda untuk setiap board.

Berikut ini yang akan Anda lihat di sisi pengirim:


Dan inilah yang akan Anda lihat di sisi penerima. Perhatikan bahwa variabel Int berubah antara setiap pembacaan yang diterima (karena kita mengaturnya menjadi angka acak di sisi pengirim).


Kami telah menguji jangkauan komunikasi antara kedua papan, dan kami dapat memperoleh komunikasi yang stabil hingga 140 meter (sekitar 459 kaki) di lapangan terbuka. Dalam percobaan ini, kedua antena ESP8266 yang terpasang saling berhadapan.


Penutup 

Dalam tutorial ini, Anda telah belajar cara menggunakan ESP-NOW dengan papan ESP8266 NodeMCU. Sekarang, Anda dapat menggabungkan sketch pengirim dan penerima sehingga Anda memiliki komunikasi dua arah (masing-masing papan bertindak sebagai server dan pengirim pada saat yang bersamaan). Anda juga dapat menggunakan lebih banyak papan untuk memiliki komunikasi antara beberapa papan.

Papan ESP8266 dan ESP32 dapat berkomunikasi satu sama lain menggunakan protokol komunikasi ESP-NOW. Anda hanya perlu mengunggah sketch yang tepat ke setiap papan. Untuk mempelajari cara menggunakan ESP-NOW dengan ESP32, Anda dapat membaca panduan pengantar ESP-NOW kami untuk ESP32.

Kami harap tutorial ini bermanfaat bagi Anda. Untuk mempelajari lebih lanjut tentang papan ESP8266

Referensi "Getting Started with ESP-NOW (ESP8266 NodeMCU with Arduino IDE)", Last Minute Engineer, https://randomnerdtutorials.com/esp-now-esp8266-nodemcu-arduino-ide/

  • Bagaimana RCWL-0516 Microwave Radar Motion Sensor Bekerja & Menghubungkannya dengan Arduino

    Untuk sebagian besar proyek Arduino kita yang memerlukan informasi apakah seseorang telah meninggalkan atau memasuki area, sensor PIR adalah pilihan yang sangat baik. Namun, karena mereka hanya mendeteksi gerakan dari makhluk hidup, mereka akan menghasilkan lebih sedikit alarm palsu.

    Nah, di sinilah sensor microweave seperti RCWL-0516 berguna, Sensor microwave RCWL-0516 mendeteksi setiap gerakan dari objek apa pun dan tidak bergantung pada tanda panas, sehingga lebih dapat diandalkan di lingkungan panas di mana sensor PIR mungkin tidak begitu efektif

    Sebelum masuk ke detail-detail teknis, mari kita pertama-tama memahami bagaimana sebenarnya cara kerja sensor RCWL-0516.

    Bagaimana cara kerja radar Doppler?


    Modul RCWL-0516 menggunakan "Radar Doppler", yaitu radar khusus yang memanfaatkan Efek Doppler (juga dikenal sebagai pergeseran Doppler) untuk mendeteksi gerakan dan memicu peringatan kedekatan.

    i Apa itu Efek Doppler? Efek Doppler, dinamai dari fisikawan Austria Christian Doppler yang mengusulkan istilah ini pada tahun 1842, menjelaskan perubahan frekuensi yang diamati oleh pengamat stasioner saat sumber frekuensi bergerak. Hal ini berlaku untuk semua jenis gelombang, seperti air, cahaya, radio, dan suara.

    Efek ini adalah sesuatu yang mungkin sering Anda dengar, bahkan mungkin tanpa menyadarinya, seperti sirene yang nadanya turun saat ambulans lewat.



    Saat ambulans mendekati Anda, gelombang suara dari sirene dipadatkan menjadi jarak yang lebih pendek, meningkatkan frekuensi mereka, yang kita dengar sebagai nada yang lebih tinggi. Kebalikannya terjadi ketika ambulans bergerak menjauh dari Anda, menyebabkan gelombang suara menjadi lebih rendah frekuensinya dan lebih rendah nadanya. Akibatnya, Anda mendengar penurunan nada sirene yang nyata saat melewati.

    Radar Doppler bekerja dengan memantulkan sinyal microwave dari target yang diinginkan dan membaca frekuensi sinyal yang kembali. Dengan menganalisis bagaimana gerakan target telah mengubah frekuensi sinyal yang dikirim, kecepatan target dapat diukur.

    Anda mungkin pernah melihat petugas polisi menggunakan alat radar kecepatan untuk menangkap orang yang berkendara terlalu cepat. Alat radar kecepatan ini, seperti jenis radar lainnya, terdiri dari pemancar dan penerima gelombang mikro. Mereka mengirimkan sinyal mikro dan kemudian menerimanya setelah memantul dari target.

    Karena efek Doppler, jika objek bergerak menuju atau menjauh dari alat tersebut, frekuensi sinyal mikro yang dipantulkan berbeda dari sinyal yang dikirimkan.                   


    Ketika sebuah mobil mendekati radar, frekuensi sinyal yang dikembalikan lebih tinggi daripada frekuensi sinyal yang dikirimkan; ketika mobil menjauh, frekuensinya lebih rendah.


    Berdasarkan perbedaan frekuensi tersebut, radar speed gun menghitung kecepatan mobil tempat sinyal dipantulkan.


    Gambaran Umum Perangkat RCWL-0516

    Modul RCWL-0516 adalah sensor aktif, tidak seperti HC-SR501 Pasif Inframerah (PIR) yang bersifat pasif. Sensor ini memancarkan gelombang mikro pada frekuensi sekitar 3,18 GHz dan mengukur radiasi yang dipantulkan kembali.

    RCWL-0516 sendiri cukup sederhana dan berfungsi langsung begitu diaktifkan. Cukup berikan daya antara 4V–28V dan ground. Keluaran sensor menjadi HIGH selama dua detik saat mendeteksi gerakan dan menjadi LOW saat dalam keadaan diam (tanpa gerakan terdeteksi).

    Dan yang terbaik, sensor ini dapat mendeteksi gerakan hingga jarak 7 meter dengan konsumsi arus yang sangat rendah, hanya di bawah 3 mA.

    RCWL-9196 IC

    Inti dari sensor RCWL-0516 adalah penkontrol radar Doppler IC dengan kode RCWL-9196. IC ini sangat mirip dengan IC BISS0001 yang digunakan pada sensor PIR.



    Chip ini juga mendukung pemicu berulang (repeat triggers) dan memiliki area deteksi 360 derajat tanpa titik buta. Artinya, sensor dapat mendeteksi gerakan dari segala arah tanpa ada ruang yang tidak terdeteksi.

    Antena Microwave dan Penguat Daya RF

    Inti dari sirkuit RF sensor ini adalah penguat daya RF MMBR941M. Komponen ini berfungsi menangkap sinyal RF berdaya rendah dan meningkatkannya ke tingkat daya yang lebih tinggi. Biasanya, penguat daya RF ini mensuplai antena sensor.




    Karena antena gelombang mikro terintegrasi langsung pada PCB itu sendiri, RCWL-0516 menjadi unit yang sepenuhnya mandiri. Artinya, tidak memerlukan komponen tambahan untuk berfungsi, sehingga memudahkan pemasangan dan penggunaan.

    Power 

    RCWL-0516 menggunakan kurang dari 3 mA arus listrik dan beroperasi antara 4 hingga 28 volt, menjadikannya komponen ideal untuk desain berdaya baterai.

    Selain itu, sensor ini dilengkapi dengan regulator tegangan 3.3V yang dapat menyuplai hingga 100 mA arus listrik untuk memberdayakan rangkaian eksternal.


    Tegangan Operasi 
    4-28V (umumnya 5V)
    Jarak deteksi  5-7 Meter
    Konsumsi Arus Maks  ~2,7 mA
    Frekuensi Operasi  ~3,18 GHz
    Daya Transmisi  30 mW (maks)
    Durasi Sinyal  ~2 detik
    Output Teratur  3,3V, 100 mA

    Komponen Opsional – LDR

    Sensor RCWL-0516 memiliki fitur menarik lainnya, yaitu dukungan untuk resistor peka cahaya (LDR) opsional. LDR berfungsi sebagai sakelar otomatis yang memungkinkan sensor hanya beroperasi dalam kondisi gelap.Ini berguna untuk membangun sistem pencahayaan yang peka terhadap gerakan.


    Sebenarnya, ada dua cara untuk menghubungkan sebuah LDR ke sensor.

    • Dengan menggunakan dua pad CDS di bagian atas sensor.
    • Dengan menggunakan pin CDS di bagian bawah dan menghubungkan LDR antara pin tersebut dan ground.
    Apa yang dimaksud dengan CDS?

    CDS merupakan singkatan dari cadmium sulfida, yang merupakan komponen fotoaktif pada sebagian besar LDR (resistor tergantung cahaya). Oleh karena itu, LDR kadang-kadang disebut juga sebagai fotoresistor CDS.


    Pengaturan Jumper RCWL-0516

    Jika Anda melihat dengan cermat pada modul, Anda akan melihat tiga solder jumper di bagian belakang




    Dengan memasang resistor dan kapasitor yang sesuai pada jumper-jumper ini, Anda dapat mengubah pengaturan default sensor

    C-TM (Penyesuaian Panjang Pulsa): Dengan memasang kapasitor SMD yang sesuai pada C-TM, Anda dapat memperpanjang panjang pulsa keluaran. Panjang pulsa default adalah 2 detik. Nilai kapasitor yang lebih tinggi menghasilkan pulsa yang lebih lama. Sebagai contoh, 0,2µF memperpanjang pulsa keluaran menjadi 50 detik, sementara 1µF memperpanjangnya menjadi 250 detik.

    R-GN (Penyesuaian Jarak Deteksi): Dengan memasang resistor yang sesuai pada R-GN, Anda dapat mengurangi jarak deteksi sensor. Secara default, jarak deteksi diatur pada 7m. Sebuah resistor 1M mengurangi jarak deteksi menjadi 5m, sementara resistor 270K menguranginya menjadi 1,5m.

    R-CDS (Penyesuaian Sensitivitas Cahaya): Ini adalah alternatif untuk menyolder LDR. Setiap resistor dalam rentang 47K – 100K akan cukup. Semakin rendah nilainya, semakin terang cahaya yang diperlukan untuk menonaktifkan pemicu.

    Pinout Sensor RCWL-0516

    Sensor RCWL-0516 membawa keluar koneksi-koneksi berikut :



    3V3 adalah output dari regulator 3.3V yang ada di dalam modul, bukan input pasokan daya. Jika Anda memerlukan output 3.3V yang bersih untuk memberi daya pada rangkaian logika eksternal, Anda dapat menggunakannya. Ini dapat menyediakan hingga 100mA arus.

    GND adalah pin ground. Pin OUT adalah output logika TTL 3.3V. Output ini menjadi HIGH selama dua detik ketika mendeteksi gerakan dan menjadi LOW ketika dalam keadaan diam (tanpa gerakan terdeteksi).

    VIN adalah pasokan daya untuk sensor. Anda dapat menghubungkan tegangan input di antara 4 hingga 28V ke pin ini, meskipun umumnya digunakan tegangan 5V.

    CDS pins adalah tempat Anda dapat memasang resistor tergantung cahaya (LDR). Menambahkan komponen ini memungkinkan RCWL-0516 beroperasi hanya dalam kondisi gelap.

    Eksperimen 1: Menggunakan Sensor RCWL-0516 sebagai Unit Mandiri

    Salah satu alasan mengapa sensor RCWL-0516 sangat populer adalah karena merupakan sensor yang sangat serbaguna dan cukup mampu berdiri sendiri. Anda dapat meningkatkan serbaguna sensor ini lebih jauh dengan menghubungkannya ke mikrokontroler seperti Arduino.

    Untuk eksperimen pertama kami, kami akan menggunakan RCWL-0516 untuk menunjukkan seberapa berguna sensor ini ketika berdiri sendiri.

    Pengkabelan untuk eksperimen ini sangat sederhana. Hubungkan baterai ke VIN dan GND sensor, dan hubungkan LED merah kecil ke pin output melalui resistor pembatas arus 220Ω. Itu saja!

    Sekarang, ketika RCWL-0516 mendeteksi gerakan, pin output akan menjadi "HIGH" dan menyalakan LED!'


    Anda dapat menghubungkan output ini langsung ke modul relay jika Anda ingin mengaktifkan/mematikan sesuatu berdasarkan gerakan.

    i  Sinyal radar dapat menembus bahan non-konduktif seperti plastik. Ini berarti Anda dapat menempatkan salah satu sensor ini di dalam suatu penutup plastik jika ingin menyembunyikannya atau melindunginya dari kerusakan yang tidak disengaja.

    Eksperimen 2: Menambahkan LDR

    Pada eksperimen berikutnya, kita akan menggunakan LDR (atau Resistor Tergantung Cahaya).

    Menghubungkan LDR sangat mudah. Anda dapat menggunakan dua pad CDS di bagian atas sensor yang dirancang khusus untuk melekatkan LDR, atau menggunakan pin CDS di bagian bawah dan menghubungkan LDR antara pin tersebut dan ground.

    Anda dapat menggunakan LDR apa pun yang dapat Anda dapatkan. Selain itu, LDR tidak memiliki polaritas, sehingga Anda dapat menghubungkannya dalam arah apa pun yang Anda inginkan.


    Ketika LDR terpapar cahaya, Anda akan melihat bahwa sensor tidak menghasilkan output. Namun, begitu ruangan menjadi gelap, sensor ini kembali beroperasi normal.

    Ini memiliki beberapa penggunaan di dunia nyata, seperti mengendalikan pencahayaan ruangan atau mendeteksi intruder pada malam hari.


    Eksperimen 3: Membaca RCWL-0516 dengan Arduino

    Pada eksperimen berikutnya, kita akan menggunakan Arduino untuk terus-menerus memeriksa pin sensor untuk melihat apakah ada deteksi gerakan.

    Proyek ini tentu saja dapat diperluas untuk merespons gerakan dengan berbagai cara, seperti menghidupkan dan mematikan lampu, mengaktifkan kipas atau properti Halloween, atau bahkan mengambil gambar seorang intruder.

    Penyambungan/Pengkabelan 

    Menghubungkan sensor RCWL-0516 ke Arduino sangatlah mudah. Beri daya pada RCWL-0516 dengan 5V dan hubungkan ground ke ground. Karena RCWL-0516 berfungsi sebagai output digital, yang perlu Anda lakukan hanyalah mendengarkan pin output. Jadi hubungkan output ke pin digital #8 pada Arduino


    Sekarang Anda siap untuk mengunggah beberapa kode dan membuat RCWL-0516 berfungsi.

    Kode Arduino

    Kodenya sangat sederhana. Pada dasarnya, itu hanya melacak apakah input ke pin #8 berada pada keadaan HIGH atau LOW.
     int ledPin = 13;                // choose the pin for the LED
    int inputPin = 8;               // choose the input pin (for Radar sensor)
    int motionState = LOW;          // we start, assuming no motion detected
    int val = 0;                    // variable for reading the pin status
     
    void setup() {
      pinMode(ledPin, OUTPUT);      // declare LED as output
      pinMode(inputPin, INPUT);     // declare sensor as input
     
      Serial.begin(9600);
    }
     
    void loop() {
      val = digitalRead(inputPin);  // read input value
      
      if (val == HIGH) {  // check if the input is HIGH
        digitalWrite(ledPin, HIGH);  // turn LED ON
        
        if (motionState == LOW) {
          Serial.println("Motion detected!"); // print on output change
          motionState = HIGH;
        }
      }
      else {
        digitalWrite(ledPin, LOW); // turn LED OFF
        
        if (motionState == HIGH) {
          Serial.println("Motion ended!");  // print on output change
          motionState = LOW;
        }
      }
    }
    Dengan sensor menghadap ke atas, gesekkan tangan Anda di atas sensor. Anda seharusnya melihat pesan "Deteksi Gerakan" tercetak di terminal serial


    Referensi : 
    "How RCWL-0516 Microwave Radar Motion Sensor Works & Interface It With Arduino", Last Minute Engineer, https://lastminuteengineers.com/rcwl0516-microwave-radar-motion-sensor-arduino-tutorial/