- Kilalanin ang nRF24L01 RF Module
- Ang interfacing nRF24L01 kay Arduino
- Bahagi ng tatanggap: Mga koneksyon sa module ng Arduino Uno nRF24L01
- Bahagi ng transmiter: Mga Koneksyon ng module ng Arduino Nano nRF24L01
- Paggawa gamit ang nRF24L01 + Wireless Transceiver Module
- Programming nRF24L01 para sa Arduino
- Pagkontrol sa Servo Motor gamit ang nRF24L01 nang wireless
Habang ang Internet ng mga bagay (IoT), Industriya 4.0, komunikasyon sa Machine to Machine atbp ay lalong nagiging popular ang pangangailangan para sa wireless na komunikasyon ay naging incumbent, na may higit pang mga machine / aparato upang makipag-usap sa isa't isa sa cloud. Gumagamit ang mga taga-disenyo ng maraming mga wireless na sistema ng komunikasyon tulad ng Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi Modules, 433MHz RF Modules, Lora, nRF atbp, at ang pagpili ng daluyan ay nakasalalay sa uri ng aplikasyon na ginagamit nito.
Kabilang sa lahat, ang isang tanyag na wireless medium para sa komunikasyon sa lokal na network ay ang nRF24L01. Ang mga modyul na ito ay nagpapatakbo sa 2.4GHz (ISM band) na may baud rate mula 250Kbps hanggang 2Mbps na ligal sa maraming mga bansa at maaaring magamit sa mga pang-industriya at medikal na aplikasyon. Inaangkin din na sa tamang mga antena ang mga modyul na ito ay maaaring magpadala at makatanggap ng hanggang sa distansya na 100 metro sa pagitan nila. Nakakainteres diba !!? Kaya, sa tutorial na ito matututunan namin ang higit pa tungkol sa mga nRF24l01 modules na ito at kung paano ito i-interface sa isang microcontroller platform tulad ng Arduino. Magbabahagi din kami ng ilang mga solusyon para sa mga karaniwang problema na nahaharap habang ginagamit ang modyul na ito.
Kilalanin ang nRF24L01 RF Module
Ang nRF24L01 modules ay radyo at pagsasahipapawid module, ibig sabihin ang bawat module ay maaaring parehong magpadala at tumanggap ng data ngunit dahil ang mga ito ay half-duplex maaari silang alinman sa magpadala o tumanggap ng data sa isang pagkakataon. Ang modyul ay mayroong pangkaraniwang nRF24L01 IC mula sa Nordic semi-conductors na responsable para sa paghahatid at pagtanggap ng data. Ang IC ay nakikipag-usap gamit ang SPI protocol at samakatuwid ay madaling ma-interfaced sa anumang mga microcontroller. Napakadali nito sa Arduino dahil ang mga aklatan ay madaling magagamit. Ang mga pinout ng isang karaniwang module ng nRF24L01 ay ipinapakita sa ibaba
Ang module ay nasa operating boltahe mula sa 1.9V hanggang 3.6V (karaniwang 3.3V) at kumakain ng mas kaunting kasalukuyang 12mA lamang sa panahon ng normal na operasyon na ginagawang mahusay ang baterya at kaya't maaari itong tumakbo sa mga cell ng barya. Kahit na ang operating boltahe ay 3.3V ang karamihan sa mga pin ay 5V mapagparaya at samakatuwid ay maaaring direktang interfaced sa 5V microcontrollers tulad ng Arduino. Ang isa pang kalamangan sa paggamit ng mga modyul na ito ay, ang bawat module ay mayroong 6 Pipelines. Ibig sabihin, ang bawat modyul ay maaaring makipag-usap sa 6 iba pang mga module upang makapagpadala o tumanggap ng data. Ginagawa nitong angkop ang module para sa paglikha ng mga network ng star o mesh sa mga aplikasyon ng IoT. Gayundin mayroon silang malawak na saklaw ng address na 125 natatanging mga ID, samakatuwid sa isang saradong lugar maaari naming gamitin ang 125 ng mga modyul na ito nang hindi makagambala sa bawat isa.
Ang interfacing nRF24L01 kay Arduino
Sa tutorial na ito matututunan namin kung paano i-interface ang nRF24L01 sa Arduino sa pamamagitan ng pagkontrol sa servo motor na konektado sa isang Arduino sa pamamagitan ng pag-iiba ng potensyomiter sa iba pang Arduino. Alang-alang sa pagiging simple nagamit namin ang isang module na nRF24L01 bilang transmiter at ang iba pa ay tatanggap, ngunit ang bawat module ay maaaring mai-program upang magpadala at tumanggap ng data nang paisa-isa.
Ang circuit diagram upang ikonekta ang nRF24L01 module na may Arduino ay ipinapakita sa ibaba. Para sa varity, ginamit ko ang UNO para sa panig ng tatanggap at Nano para sa panig ng transmiter. Ngunit ang lohika para sa koneksyon ay mananatiling pareho para sa iba pang mga Arduino board tulad ng mini, mega pati na rin.
Bahagi ng tatanggap: Mga koneksyon sa module ng Arduino Uno nRF24L01
Tulad ng sinabi nang mas maaga ang nRF24L01 ay nakikipag-usap sa tulong ng SPI protocol. Sa Arduino Nano at UNO ang mga pin na 11, 12 at 13 ay ginagamit para sa komunikasyon ng SPI. Samakatuwid ikinonekta namin ang mga pin ng MOSI, MISO at SCK mula sa nRF sa mga pin na 11, 12 at 13 ayon sa pagkakabanggit. Ang mga pin na CE at CS ay mai-configure ng gumagamit, ginamit ko ang pin 7 at 8 dito, ngunit maaari mong gamitin ang anumang pin sa pamamagitan ng pagbabago ng programa. Ang module na nRF ay pinalakas ng 3.3V pin sa Arduino, na sa karamihan ng mga kaso ay gagana. Kung hindi, masusubukan ang isang hiwalay na suplay ng kuryente. Bukod sa pag-interfaced ng nRF nakakonekta din ako sa isang servo motor upang i-pin ang 7 at pinapagana ito sa pamamagitan ng 5V pin sa Arduino. Katulad nito ang transmitter circuit ay ipinapakita sa ibaba.
Bahagi ng transmiter: Mga Koneksyon ng module ng Arduino Nano nRF24L01
Ang mga koneksyon para sa transmiter ay pareho din, bukod pa nagamit ko ang isang potensyomiter na konektado sa kabuuan ng 5V ad Ground pin ng Arduino. Ang output analog voltage na mag-iiba mula 0-5V ay konektado sa A7 pin ng Nano. Ang parehong mga board ay pinalakas sa pamamagitan ng USB port.
Paggawa gamit ang nRF24L01 + Wireless Transceiver Module
Gayunpaman upang magawa ang aming nRF24L01 na gumana nang libre mula sa ingay maaari naming isaalang-alang ang mga sumusunod na bagay. Matagal na akong nagtatrabaho sa nRF24L01 + na ito at natutunan ang mga sumusunod na puntos na makakatulong sa iyo mula sa pag-hit sa isang pader. Maaari mong subukan ang mga ito kapag ang mga module ay hindi gumana sa normal na paraan.
1. Karamihan sa mga nRF24L01 + modules sa merkado ay peke. Ang mga murang maaari nating makita sa Ebay at Amazon ang pinakamasamang (Huwag mag-alala, na may ilang mga pag-aayos na maaari nating paandarin sila)
2. Ang pangunahing problema ay ang supply ng kuryente, hindi ang iyong code. Karamihan sa mga code sa online ay gagana nang maayos, ako mismo ay mayroong isang gumaganang code na personal kong sinubukan, Ipaalam sa akin kung kailangan mo sila.
3. Magbayad ng pansin dahil ang mga modyul na nakalimbag bilang NRF24L01 + ay talagang Si24Ri (Oo isang produktong Tsino).
4. Ang clone at pekeng mga module ay gugugol ng mas maraming lakas, kaya't huwag paunlarin ang iyong circuit ng kuryente batay sa nRF24L01 + datasheet, dahil ang Si24Ri ay magkakaroon ng mataas na kasalukuyang pagkonsumo tungkol sa 250mA.
5. Mag-ingat sa mga alon ng Boltahe at kasalukuyang mga pagtaas, ang mga modyul na ito ay napaka-sensitibo at maaaring madaling masunog. (;-(pinirito ang 2 mga module sa ngayon)
6. Ang pagdaragdag ng isang pares ng capacitor (10uF at 0.1uF) sa kabuuan ng Vcc at Gnd ng module ay tumutulong sa paggawa ng iyong suplay na dalisay at gumagana ito para sa karamihan ng mga modyul.
Pa rin kung mayroon kang mga problema sa ulat sa seksyon ng komento o basahin ito, o itanong ang iyong mga katanungan sa aming forum.
Suriin din ang aming malaswang proyekto sa paglikha ng isang Chat room gamit ang nRF24L01.
Programming nRF24L01 para sa Arduino
Napakadali na gamitin ang mga modyul na ito sa Arduino, dahil sa madaling magagamit na library na nilikha ng maniacbug sa GitHub. Mag-click sa link upang i-download ang library bilang ZIP folder at idagdag ito sa iyong Arduino IDE sa pamamagitan ng paggamit ng Sketch -> Isama ang Library -> Idagdag ang pagpipiliang .ZIP library . Matapos idagdag ang library maaari naming simulan ang pag-program para sa proyekto. Kailangan nating magsulat ng dalawang mga programa, ang isa ay para sa panig ng transmitter at ang iba pa para sa panig ng tatanggap. Gayunpaman tulad ng sinabi ko nang mas maaga sa bawat module ay maaaring gumana pareho bilang isang transmiter at tatanggap. Ang parehong mga programa ay ibinibigay sa pagtatapos ng pahinang ito, sa code ng transmiter ang pagpipilian ng tatanggap ay bibigyan ng puna at sa programang tatanggap ang transmitter code ay bibigyan ng puna. Maaari mong gamitin ito kung sinusubukan mo ang isang proyekto kung saan dapat gumana ang module bilang pareho. Ang pagtatrabaho ng programa ay ipinaliwanag sa ibaba.
Tulad ng lahat ng mga programa nagsisimula kami sa pamamagitan ng pagsasama ng mga file ng header. Dahil ang nRF ay gumagamit ng SPI protocol ay isinama namin ang header ng SPI at pati na rin ang library na na-download lamang namin. Ginagamit ang library ng servo upang makontrol ang servo motor.
# isama
Ang susunod na linya ay ang mahalagang linya kung saan tinuturo namin ang silid-aklatan tungkol sa mga CE at CS pin. Sa aming circuit diagram nakakonekta namin ang CE sa pin 7 at CS sa pin 8 kaya itinakda namin ang linya bilang
RF24 myRadio (7, 8);
Ang lahat ng mga variable na nauugnay sa library ng RF ay dapat ideklara bilang isang pinaghiwalay na istrakturang variable. Sa program na ito ang variable na msg ay ginagamit upang magpadala at tumanggap ng data mula sa RF module.
struct package { int msg; }; typedef struct package Package; Data ng package;
Ang bawat module ng RF ay may natatanging address gamit ang kung saan maaari itong magpadala ng data sa kani-kanilang aparato. Dahil mayroon kaming isang pares lamang dito, itinakda namin ang address sa zero sa parehong transmitter at receiver ngunit kung mayroon kang maraming module maaari mong itakda ang ID sa anumang natatanging 6 digit na string.
byte address = {"0"};
Susunod sa loob ng walang bisa na pag- andar ng pag- setup ay pinasimulan namin ang module ng RF at itinakda upang gumana sa 115 banda na libre mula sa ingay at itinakda din ang module upang gumana sa minimum na mode ng pagkonsumo ng kuryente na may minimum na bilis ng 250Kbps.
void setup () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 band sa itaas ng WIFI signal myRadio.setPALevel (RF24_PA_MIN); // MIN power low rage myRadio.setDataRate (RF24_250KBPS); // Minimum speed myservo.attach (6); Serial.print ("Inisyal na Pag-setup"); pagkaantala (500); }
walang bisa ang pag-andar ng WritingData () na sumulat ng data na naipasa dito. Tulad ng sinabi nang mas maaga ang nRF ay may 6 na magkakaibang mga tubo kung saan maaari nating basahin o isulat ang data, dito ginamit namin ang 0xF0F0F0F066 bilang address upang magsulat ng data. Sa panig ng tatanggap kailangan naming gamitin ang parehong address sa ReadData () na function upang matanggap ang data na nakasulat.
walang bisa ang WritingData () { myRadio.stopListening (); // Ihinto ang Pagtanggap at simulang transminitng myRadio.openWritingPipe (0xF0F0F0F066); // Nagpapadala ng data sa 40-bit na address na myRadio.write (& data, sizeof (data)); pagkaantala (300); }
walang bisa ang function na WritingData () na binabasa ang data at inilalagay ito sa isang variable. Muli sa labas ng 6 na magkakaibang tubo gamit ang kung saan maaari naming mabasa o sumulat ng data dito ginamit namin ang 0xF0F0F0F0AA bilang address upang mabasa ang data. Nangangahulugan ito na ang transmiter ng iba pang module ay may nakasulat sa isang bagay sa address na ito at kung gayon binabasa namin ito mula sa pareho.
walang bisa ang ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Aling tubo ang babasahin, 40 bit Address myRadio.startListening (); // Stop Transminting at simulan ang Reveicing kung (myRadio.available ()) { habang (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Bukod sa mga linyang ito ang iba pang mga linya sa programa ay ginagamit para sa pagbabasa ng POT at pag-convert nito sa 0 hanggang 180 gamit ang pagpapaandar ng mapa at ipadala ito sa module ng Tagatanggap kung saan kinokontrol namin ang servo nang naaayon. Hindi ko ipinaliwanag ang mga ito sa pamamagitan ng linya dahil natutunan na namin iyon sa aming tutorial sa Servo Interfacing.
Pagkontrol sa Servo Motor gamit ang nRF24L01 nang wireless
Sa sandaling handa ka na sa programa i-upload ang transmitter at receiver code (ibinigay sa ibaba) sa kani-kanilang mga Arduino board at paganahin ang mga ito gamit ang USB port. Maaari mo ring ilunsad ang serial monitor ng parehong mga board upang suriin kung anong halaga ang ipinapadala at kung ano ang natanggap. Kung ang lahat ay gumagana tulad ng inaasahan kapag binuksan mo ang POT knob sa bahagi ng transmitter ang servo sa kabilang panig ay dapat ding lumiko nang naaayon.
Ang kumpletong pagtatrabaho ng proyekto ay ipinakita sa video sa ibaba. Normal lamang para sa hindi pagkuha ng mga modyul na ito upang gumana muna sa pagsubok, Kung naharap mo ang anumang problema suriin muli ang code at mga kable at subukan ang nabanggit na nabigyan ng mga alituntunin sa pagbaril. Kung walang gumagana i-post ang iyong problema sa mga forum o sa seksyon ng komento at susubukan kong lutasin ang mga ito.