- Mengenal Modul RF nRF24L01
- Menghubungkan nRF24L01 dengan Arduino
- Sisi penerima: Koneksi modul Arduino Uno nRF24L01
- Sisi pemancar: Koneksi modul Arduino Nano nRF24L01
- Bekerja dengan nRF24L01 + Modul Transceiver Nirkabel
- Pemrograman nRF24L01 untuk Arduino
- Mengontrol Motor Servo menggunakan nRF24L01 tanpa kabel
Sementara Internet of Things (IoT), Industry 4.0, Machine to Machine communication, dll semakin populer, kebutuhan akan komunikasi nirkabel telah menjadi incumbent, dengan lebih banyak mesin / perangkat untuk berbicara satu sama lain di cloud. Desainer menggunakan banyak sistem komunikasi nirkabel seperti Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi Modules, 433MHz RF Modules, Lora, nRF dll, dan pemilihan media tergantung pada jenis aplikasi yang digunakan.
Di antara semuanya, satu media nirkabel populer untuk komunikasi jaringan lokal adalah nRF24L01. Modul ini beroperasi pada 2.4GHz (ISM band) dengan baud rate dari 250Kbps hingga 2Mbps yang legal di banyak negara dan dapat digunakan dalam aplikasi industri dan medis. Juga diklaim bahwa dengan antena yang tepat, modul ini dapat mengirim dan menerima hingga jarak 100 meter di antara keduanya. Menarik kan !!? Jadi, dalam tutorial ini kita akan mempelajari lebih lanjut tentang modul nRF24l01 ini dan cara menghubungkannya dengan platform mikrokontroler seperti Arduino. Kami juga akan membagikan beberapa solusi untuk masalah yang sering dihadapi saat menggunakan modul ini.
Mengenal Modul RF nRF24L01
The modul nRF24L01 adalah transceiver modul, yang berarti setiap modul dapat baik mengirim dan menerima data tetapi karena mereka setengah-dupleks mereka baik dapat mengirim atau menerima data pada suatu waktu. Modul ini memiliki IC nRF24L01 generik dari semikonduktor Nordik yang bertanggung jawab untuk transmisi dan penerimaan data. IC berkomunikasi menggunakan protokol SPI dan karenanya dapat dengan mudah dihubungkan dengan mikrokontroler manapun. Ini menjadi jauh lebih mudah dengan Arduino karena perpustakaan sudah tersedia. The pinouts dari modul standar nRF24L01 ditunjukkan di bawah ini
Modul ini memiliki tegangan operasi dari 1.9V hingga 3.6V (biasanya 3.3V) dan mengkonsumsi arus yang sangat sedikit hanya 12mA selama operasi normal yang membuatnya hemat baterai dan karenanya dapat berjalan pada sel koin. Meskipun tegangan operasi 3.3V, sebagian besar pin toleran 5V dan karenanya dapat langsung dihubungkan dengan mikrokontroler 5V seperti Arduino. Keuntungan lain dari penggunaan modul ini adalah, setiap modul memiliki 6 jalur pipa. Artinya, setiap modul dapat berkomunikasi dengan 6 modul lainnya untuk mengirimkan atau menerima data. Ini membuat modul cocok untuk membuat jaringan bintang atau mesh dalam aplikasi IoT. Juga mereka memiliki kisaran alamat yang luas dari 125 ID unik, oleh karena itu di area tertutup kita dapat menggunakan 125 modul ini tanpa saling mengganggu.
Menghubungkan nRF24L01 dengan Arduino
Dalam tutorial ini kita akan belajar bagaimana menghubungkan nRF24L01 dengan Arduino dengan mengendalikan motor servo yang terhubung dengan satu Arduino dengan memvariasikan potensiometer pada Arduino lainnya. Demi kesederhanaan, kami telah menggunakan satu modul nRF24L01 sebagai pemancar dan yang lainnya adalah penerima, tetapi setiap modul dapat diprogram untuk mengirim dan menerima data secara individual.
Diagram rangkaian untuk menghubungkan modul nRF24L01 dengan Arduino ditunjukkan di bawah ini. Untuk perbedaan, saya telah menggunakan UNO untuk sisi penerima dan Nano untuk sisi pemancar. Tetapi logika untuk koneksi tetap sama untuk papan Arduino lainnya seperti mini, mega juga.
Sisi penerima: Koneksi modul Arduino Uno nRF24L01
Seperti yang dikatakan sebelumnya, nRF24L01 berkomunikasi dengan bantuan protokol SPI. Pada Arduino Nano dan UNO pin 11, 12 dan 13 digunakan untuk komunikasi SPI. Oleh karena itu kami menghubungkan pin MOSI, MISO dan SCK dari nRF ke pin 11, 12 dan 13 masing-masing. Pin CE dan CS dapat dikonfigurasi pengguna, saya telah menggunakan pin 7 dan 8 di sini, tetapi Anda dapat menggunakan pin apa pun dengan mengubah program. Modul nRF didukung oleh pin 3.3V pada Arduino, yang dalam banyak kasus akan berfungsi. Jika tidak, catu daya terpisah dapat dicoba. Selain menghubungkan nRF, saya juga telah menghubungkan motor servo ke pin 7 dan menyalakannya melalui pin 5V di Arduino. Demikian pula rangkaian pemancar ditunjukkan di bawah ini.
Sisi pemancar: Koneksi modul Arduino Nano nRF24L01
Koneksi untuk pemancar juga sama, selain itu saya telah menggunakan potensiometer yang terhubung di pin 5V iklan Ground dari Arduino. Tegangan analog keluaran yang akan bervariasi dari 0-5V dihubungkan ke pin A7 dari Nano. Kedua papan diberi daya melalui port USB.
Bekerja dengan nRF24L01 + Modul Transceiver Nirkabel
Namun untuk membuat nRF24L01 kami bekerja bebas dari kebisingan, kami mungkin ingin mempertimbangkan hal-hal berikut. Saya telah mengerjakan nRF24L01 + ini untuk waktu yang lama dan mempelajari poin-poin berikut yang dapat membantu Anda agar tidak tertabrak dinding. Anda dapat mencoba ini ketika modul tidak bekerja dengan cara normal.
1. Sebagian besar modul nRF24L01 + di pasaran adalah palsu. Yang murah yang bisa kita temukan di Ebay dan Amazon adalah yang terburuk (Jangan khawatir, dengan sedikit tweak kita bisa membuatnya berfungsi)
2. Masalah utamanya adalah catu daya, bukan kode Anda. Sebagian besar kode online akan berfungsi dengan baik, saya sendiri memiliki kode yang berfungsi yang secara pribadi saya uji, Beri tahu saya jika Anda membutuhkannya.
3. Perhatikan karena modul yang dicetak sebagai NRF24L01 + sebenarnya adalah Si24Ri (Ya, produk Cina).
4. Modul tiruan dan palsu akan mengkonsumsi lebih banyak daya, oleh karena itu jangan mengembangkan rangkaian daya Anda berdasarkan lembar data nRF24L01 +, karena Si24Ri akan memiliki konsumsi arus yang tinggi sekitar 250mA.
5. Waspadai riak tegangan dan lonjakan arus, modul ini sangat sensitif dan dapat dengan mudah terbakar. (;-(menggoreng 2 modul sejauh ini)
6. Menambahkan beberapa kapasitor (10uF dan 0.1uF) di Vcc dan Gnd modul membantu membuat pasokan Anda murni dan ini berfungsi untuk sebagian besar modul.
Masih jika Anda memiliki masalah laporkan di bagian komentar atau membaca ini, atau mengajukan pertanyaan Anda di forum kami.
Juga periksa proyek sebelumnya tentang membuat ruang Obrolan menggunakan nRF24L01.
Pemrograman nRF24L01 untuk Arduino
Sangat mudah untuk menggunakan modul-modul ini dengan Arduino, karena pustaka yang tersedia dibuat oleh maniacbug di GitHub. Klik pada tautan untuk mengunduh perpustakaan sebagai folder ZIP dan menambahkannya ke Arduino IDE Anda dengan menggunakan Sketsa -> Sertakan Perpustakaan -> Tambahkan opsi perpustakaan.ZIP . Setelah menambahkan perpustakaan kita dapat memulai pemrograman untuk proyek. Kami harus menulis dua program, satu untuk sisi pemancar dan yang lainnya untuk sisi penerima. Namun, seperti yang saya katakan sebelumnya, setiap modul dapat berfungsi sebagai pemancar dan penerima. Kedua program tersebut diberikan di akhir halaman ini, di kode pemancar, opsi penerima akan diberi komentar dan di program penerima, kode pemancar akan diberi komentar. Anda dapat menggunakannya jika Anda mencoba proyek di mana modul harus berfungsi sebagai keduanya. Cara kerja program dijelaskan di bawah ini.
Seperti semua program, kita mulai dengan memasukkan file header. Karena nRF menggunakan protokol SPI, kami telah menyertakan header SPI dan juga pustaka yang baru saja kami unduh. Perpustakaan servo digunakan untuk mengontrol motor servo.
#include
Baris berikutnya adalah baris penting tempat kami menginstruksikan perpustakaan tentang pin CE dan CS. Dalam diagram sirkuit kami, kami telah menghubungkan CE ke pin 7 dan CS ke pin 8 jadi kami mengatur garis sebagai
RF24 myRadio (7, 8);
Semua variabel yang terkait dengan pustaka RF harus dideklarasikan sebagai struktur variabel komposit. Dalam program ini variabel msg digunakan untuk mengirim dan menerima data dari modul RF.
paket struct { int msg; }; paket paket typedef struct; Data paket;
Setiap modul RF memiliki alamat unik yang dapat digunakan untuk mengirim data ke perangkat masing-masing. Karena kami hanya memiliki satu pasangan di sini, kami menetapkan alamat ke nol di pemancar dan penerima tetapi jika Anda memiliki beberapa modul, Anda dapat mengatur ID ke string 6 digit yang unik.
alamat byte = {"0"};
Selanjutnya di dalam fungsi pengaturan void kita menginisialisasi modul RF dan mengatur untuk bekerja dengan 115 band yang bebas dari kebisingan dan juga mengatur modul untuk bekerja dalam mode konsumsi daya minimum dengan kecepatan minimum 250Kbps.
void setup () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 band di atas sinyal WIFI myRadio.setPALevel (RF24_PA_MIN); // MIN daya amarah rendah myRadio.setDataRate (RF24_250KBPS); // Kecepatan minimum myservo.attach (6); Serial.print ("Setup Diinisialisasi"); penundaan (500); }
void WriteData () fungsi menulis data yang diteruskan padanya. Seperti yang diceritakan sebelumnya, nRF memiliki 6 pipa berbeda untuk membaca atau menulis data, di sini kami telah menggunakan 0xF0F0F0F066 sebagai alamat untuk menulis data. Di sisi penerima kita harus menggunakan alamat yang sama padafungsi ReadData () untuk menerima data yang telah ditulis.
void WriteData () { myRadio.stopListening (); // Berhenti Menerima dan mulai transminitng myRadio.openWritingPipe (0xF0F0F0F066); // Mengirimkan data ke alamat 40-bit ini myRadio.write (& data, sizeof (data)); penundaan (300); }
void WriteData () fungsi membaca data dan meletakkannya dalam variabel. Sekali lagi dari 6 pipa berbeda yang dapat digunakan untuk membaca atau menulis data, di sini kami menggunakan 0xF0F0F0F0AA sebagai alamat untuk membaca data. Ini berarti pemancar modul lain telah menulis sesuatu di alamat ini dan karenanya kami membacanya dari alamat yang sama.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Pipa mana yang akan dibaca, 40 bit Address myRadio.startListening (); // Hentikan Transmint dan mulai Reveicing if (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Terlepas dari garis-garis ini, garis-garis lain dalam program digunakan untuk membaca POT dan mengubahnya menjadi 0 hingga 180 menggunakan fungsi peta dan mengirimkannya ke modul Penerima di mana kami mengontrol servo yang sesuai. Saya belum menjelaskannya baris demi baris karena kita telah mempelajarinya di tutorial Servo Interfacing.
Mengontrol Motor Servo menggunakan nRF24L01 tanpa kabel
Setelah Anda siap dengan program, unggah kode pemancar dan penerima (diberikan di bawah) pada papan Arduino masing-masing dan nyalakan dengan port USB. Anda juga dapat meluncurkan monitor serial dari kedua papan untuk memeriksa nilai apa yang sedang dikirim dan apa yang diterima. Jika semuanya bekerja seperti yang diharapkan saat Anda memutar kenop POT di sisi pemancar, servo di sisi lain juga harus berputar sesuai.
Pekerjaan lengkap proyek ini ditunjukkan dalam video di bawah ini. Sangat normal jika modul ini tidak berfungsi pada percobaan pertama, Jika Anda menghadapi masalah, periksa kode dan kabel lagi dan coba panduan pemecahan masalah yang diberikan di atas. Jika tidak ada yang berhasil, posting masalah Anda di forum atau di bagian komentar dan saya akan mencoba menyelesaikannya.