- Mengenal Modul RF nRF24L01
- Memadankan nRF24L01 dengan Arduino
- Bahagian penerima: Sambungan modul Arduino Uno nRF24L01
- Bahagian pemancar: Sambungan modul Arduino Nano nRF24L01
- Bekerja dengan Modul Pemancar Tanpa Wayar nRF24L01 +
- Pengaturcaraan nRF24L01 untuk Arduino
- Mengawal Servo Motor menggunakan nRF24L01 tanpa wayar
Walaupun Internet of things (IoT), Industri 4.0, komunikasi Mesin ke Mesin dan sebagainya semakin popular, keperluan komunikasi tanpa wayar telah menjadi kewajipan, dengan lebih banyak mesin / peranti untuk bercakap antara satu sama lain di awan. Pereka menggunakan banyak sistem komunikasi tanpa wayar seperti Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi Modules, 433MHz RF Modules, Lora, nRF dll, dan pemilihan medium bergantung pada jenis aplikasi yang digunakan.
Di antara semua, satu medium wayarles yang popular untuk komunikasi rangkaian tempatan ialah nRF24L01. Modul ini beroperasi pada 2.4GHz (jalur ISM) dengan kecepatan baud dari 250Kbps hingga 2Mbps yang sah di banyak negara dan dapat digunakan dalam aplikasi industri dan perubatan. Ia juga mendakwa bahawa dengan antena yang tepat modul ini dapat menghantar dan menerima jarak sejauh 100 meter di antara mereka. Menarik kan !!? Oleh itu, dalam tutorial ini kita akan mengetahui lebih lanjut mengenai modul nRF24l01 ini dan bagaimana menghubungkannya dengan platform mikrokontroler seperti Arduino. Kami juga akan berkongsi beberapa penyelesaian untuk masalah yang sering dihadapi semasa menggunakan modul ini.
Mengenal Modul RF nRF24L01
The modul nRF24L01 adalah transceiver modul, bermakna setiap modul boleh kedua-dua menghantar dan menerima data tetapi kerana mereka adalah separuh dupleks mereka sama ada boleh menghantar atau menerima data pada satu masa. Modul ini mempunyai IC nRF24L01 generik dari separa konduktor Nordik yang bertanggungjawab untuk penghantaran dan penerimaan data. IC berkomunikasi menggunakan protokol SPI dan dengan itu dapat dihubungkan dengan mudah dengan mikrokontroler mana pun. Ia menjadi lebih mudah dengan Arduino kerana perpustakaan sudah tersedia. The pinouts modul nRF24L01 standard ditunjukkan di bawah
Modul ini mempunyai voltan operasi dari 1.9V hingga 3.6V (biasanya 3.3V) dan menggunakan arus yang sangat kurang hanya 12mA semasa operasi biasa yang menjadikannya bateri cekap dan dengan itu boleh berjalan pada sel duit syiling. Walaupun voltan operasi 3.3V kebanyakan pin bertoleransi 5V dan oleh itu dapat dihubungkan secara langsung dengan mikrokontroler 5V seperti Arduino. Kelebihan lain menggunakan modul ini ialah, setiap modul mempunyai 6 Pipeline. Maksudnya, setiap modul dapat berkomunikasi dengan 6 modul lain untuk menghantar atau menerima data. Ini menjadikan modul sesuai untuk membuat rangkaian bintang atau jaringan dalam aplikasi IoT. Juga mereka mempunyai rangkaian alamat 125 ID yang unik, oleh itu di kawasan tertutup kita dapat menggunakan 125 modul ini tanpa mengganggu satu sama lain.
Memadankan nRF24L01 dengan Arduino
Dalam tutorial ini kita akan belajar bagaimana menghubungkan nRF24L01 dengan Arduino dengan mengendalikan motor servo yang dihubungkan dengan satu Arduino dengan mengubah potensiometer pada Arduino yang lain. 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 individu.
Gambarajah litar untuk menghubungkan modul nRF24L01 dengan Arduino ditunjukkan di bawah. Untuk kepelbagaian, saya telah menggunakan UNO untuk bahagian penerima dan Nano untuk bahagian pemancar. Tetapi logik untuk sambungan tetap sama untuk papan Arduino lain seperti mini, mega juga.
Bahagian penerima: Sambungan modul Arduino Uno nRF24L01
Seperti yang dinyatakan sebelumnya, nRF24L01 berkomunikasi dengan bantuan protokol SPI. Pada Arduino Nano dan UNO pin 11, 12 dan 13 digunakan untuk komunikasi SPI. Oleh itu, kami menghubungkan pin MOSI, MISO dan SCK masing-masing dari nRF ke pin 11, 12 dan 13. Pin CE dan CS dapat dikonfigurasikan oleh pengguna, saya telah menggunakan pin 7 dan 8 di sini, tetapi anda boleh menggunakan pin apa pun dengan mengubah program. Modul nRF dikuasakan oleh pin 3.3V pada Arduino, yang dalam kebanyakan kes akan berfungsi. Sekiranya tidak, bekalan elektrik yang berasingan boleh dicuba. Selain menghubungkan nRF, saya juga telah menghubungkan motor servo ke pin 7 dan menggerakkannya melalui pin 5V di Arduino. Begitu juga litar pemancar ditunjukkan di bawah.
Bahagian pemancar: Sambungan modul Arduino Nano nRF24L01
Sambungan untuk pemancar juga sama, tambahan saya telah menggunakan potensiometer yang disambungkan di pin Ground Ground 5V Arduino. Voltan analog output yang akan berbeza dari 0-5V disambungkan ke pin A7 Nano. Kedua-dua papan digerakkan melalui port USB.
Bekerja dengan Modul Pemancar Tanpa Wayar nRF24L01 +
Walau bagaimanapun untuk menjadikan nRF24L01 kami berfungsi bebas dari kebisingan, kami mungkin ingin mempertimbangkan perkara-perkara berikut. Saya telah lama mengusahakan nRF24L01 + ini dan mengetahui perkara berikut yang dapat membantu anda daripada terkena tembok. Anda boleh mencubanya apabila modul tidak berfungsi seperti biasa.
1. Sebilangan besar modul nRF24L01 + di pasaran adalah palsu. Yang murah yang kami dapati di Ebay dan Amazon adalah yang terburuk (Jangan bimbang, dengan beberapa tweak kami dapat menjadikannya berfungsi)
2. Masalah utama adalah bekalan kuasa, bukan kod anda. Sebilangan besar kod dalam talian akan berfungsi dengan baik, saya sendiri mempunyai kod kerja yang saya sendiri uji, Beritahu saya jika anda memerlukannya.
3. Perhatikan kerana modul yang dicetak sebagai NRF24L01 + sebenarnya adalah Si24Ri (Ya produk Cina).
4. Modul klon dan palsu akan menggunakan lebih banyak tenaga, oleh itu jangan kembangkan rangkaian kuasa anda berdasarkan lembar data nRF24L01 +, kerana Si24Ri akan mempunyai penggunaan arus tinggi sekitar 250mA.
5. Berhati-hati dengan riak voltan dan lonjakan arus, modul ini sangat sensitif dan mudah terbakar. (;-(goreng 2 modul setakat ini)
6. Menambah beberapa kapasitor (10uF dan 0.1uF) merentasi Vcc dan Gnd modul membantu menjadikan bekalan anda tulen dan ini berfungsi untuk kebanyakan modul.
Namun jika anda mempunyai masalah, laporkan pada bahagian komen atau baca ini, atau ajukan soalan anda di forum kami.
Lihat juga projek kami yang teliti untuk membuat ruang Sembang menggunakan nRF24L01
Pengaturcaraan nRF24L01 untuk Arduino
Sangat mudah untuk menggunakan modul-modul ini dengan Arduino, kerana perpustakaan yang sedia ada yang dibuat oleh maniacbug di GitHub. Klik pada pautan untuk memuat turun pustaka sebagai folder ZIP dan tambahkan ke Arduino IDE anda dengan menggunakan Sketsa -> Sertakan Perpustakaan -> Tambah pilihan perpustakaan.ZIP . Setelah menambahkan perpustakaan, kita dapat memulakan pengaturcaraan untuk projek. Kita mesti menulis dua program, satu untuk bahagian pemancar dan yang lain untuk sisi penerima. Namun seperti yang saya katakan sebelumnya, setiap modul dapat berfungsi sebagai pemancar dan penerima. Kedua-dua program diberikan di akhir halaman ini, dalam kod pemancar pilihan penerima akan dikomentari dan dalam program penerima kod pemancar akan dikomentari. Anda boleh menggunakannya jika anda mencuba projek di mana modul harus berfungsi kerana kedua-duanya. Kerja program dijelaskan di bawah.
Seperti semua program, kita mulakan dengan memasukkan fail tajuk. Oleh kerana nRF menggunakan protokol SPI, kami telah memasukkan tajuk SPI dan juga perpustakaan yang baru sahaja kami muat turun. Perpustakaan servo digunakan untuk mengawal motor servo.
#sertakan
Baris seterusnya adalah baris penting di mana kita mengarahkan perpustakaan mengenai pin CE dan CS. Dalam gambarajah litar kami telah menghubungkan CE ke pin 7 dan CS ke pin 8 jadi kami menetapkan garis sebagai
RF24 myRadio (7, 8);
Semua pemboleh ubah yang berkaitan dengan perpustakaan RF harus dinyatakan sebagai struktur pemboleh ubah komposit. Dalam program ini pemboleh ubah msg digunakan untuk mengirim dan menerima data dari modul RF.
pakej struct { int msg; }; pakej typedef struct pakej; Data pakej;
Setiap modul RF mempunyai alamat unik yang dapat mengirimkan data ke perangkat masing-masing. Oleh kerana kami hanya mempunyai satu pasangan di sini, kami menetapkan alamat menjadi sifar pada pemancar dan penerima tetapi jika anda mempunyai beberapa modul, anda boleh menetapkan ID ke rentetan 6 digit yang unik.
alamat bait = {"0"};
Selanjutnya di dalam fungsi penyediaan kekosongan, kita menginisialisasi modul RF dan mulai berfungsi dengan jalur 115 yang bebas dari kebisingan dan juga mengatur modul untuk berfungsi dalam mod penggunaan daya minimum dengan kecepatan minimum 250Kbps.
persediaan tidak sah () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 jalur di atas WIFI memberi isyarat myRadio.setPALevel (RF24_PA_MIN); // Kuasa min rendah myRadio.setDataRate (RF24_250KBPS); // Kelajuan minimum myservo.attach (6); Serial.print ("Persediaan Dimulakan"); kelewatan (500); }
void fungsi WriteData () menulis data yang dihantar kepadanya. Seperti yang diberitahu sebelumnya, nRF mempunyai 6 saluran yang berbeza yang dapat kita baca atau tulis data, di sini kita telah menggunakan 0xF0F0F0F066 sebagai alamat untuk menulis data. Di sisi penerima kita harus menggunakan alamat yang sama padafungsi ReadData () untuk menerima data yang ditulis.
batal WriteData () { myRadio.stopListening (); // Berhenti Menerima dan mulakan transminitng myRadio.openWritingPipe (0xF0F0F0F066); // Menghantar data pada alamat 40-bit ini myRadio.write (& data, sizeof (data)); kelewatan (300); }
void fungsi WriteData () membaca data dan memasukkannya ke dalam pemboleh ubah. Sekali lagi dari 6 paip yang berbeza yang boleh digunakan untuk membaca atau menulis data di sini, kami telah menggunakan 0xF0F0F0F0AA sebagai alamat untuk membaca data. Ini bermaksud pemancar modul lain telah menulis sesuatu di alamat ini dan oleh itu kami membacanya dari yang sama.
batal ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Pipa mana yang hendak dibaca, 40 bit Alamat myRadio.startListening (); // Hentikan Transminting dan mulakan Peninjauan semula jika (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Selain baris ini, baris lain dalam program ini digunakan untuk membaca POT dan mengubahnya menjadi 0 hingga 180 menggunakan fungsi peta dan hantarkan ke modul Penerima di mana kita mengendalikan servo dengan sewajarnya. Saya tidak menerangkannya secara bertahap kerana kami telah mengetahui bahawa dalam tutorial Servo Interfacing
Mengawal Servo Motor menggunakan nRF24L01 tanpa wayar
Setelah anda siap dengan program, muat naik kod pemancar dan penerima (diberikan di bawah) pada papan Arduino masing-masing dan hidupkan dengan port USB. Anda juga boleh melancarkan monitor bersiri kedua papan untuk memeriksa nilai apa yang dihantar dan apa yang diterima. Sekiranya semuanya berfungsi seperti yang diharapkan semasa anda menghidupkan kenop POT di sisi pemancar, servo di sisi lain juga harus berpusing dengan sewajarnya.
Kerja lengkap projek ditunjukkan dalam video di bawah. Adalah lumrah jika modul ini tidak berfungsi pada percubaan pertama, Sekiranya anda menghadapi masalah, periksa semula kod dan pendawaiannya dan cuba garis panduan pemecahan masalah yang diberikan di atas. Sekiranya tidak ada masalah, hantarkan masalah anda di forum atau di bahagian komen dan saya akan berusaha menyelesaikannya.