- Iepazīšanās ar nRF24L01 RF moduli
- Saskarne nRF24L01 ar Arduino
- Uztvērēja puse: Arduino Uno nRF24L01 moduļa savienojumi
- Raidītāja puse: Arduino Nano nRF24L01 moduļa savienojumi
- Darbs ar nRF24L01 + bezvadu raiduztvērēja moduli
- NRF24L01 programmēšana Arduino
- Servomotora vadība, izmantojot nRF24L01 bezvadu režīmā
Kamēr lietu internets (IoT), nozare 4.0, komunikācija starp mašīnām utt. Kļūst arvien populārāka, bezvadu sakaru nepieciešamība ir kļuvusi aktuāla, jo vairāk mašīnu / ierīču var savstarpēji sarunāties mākonī. Dizaineri izmanto daudzas bezvadu sakaru sistēmas, piemēram, Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi moduļus, 433MHz RF moduļus, Lora, nRF utt., Un barotnes izvēle ir atkarīga no lietojuma veida, kurā tā tiek izmantota.
Starp visiem viens populārs bezvadu nesējs lokālā tīkla sakariem ir nRF24L01. Šie moduļi darbojas ar 2,4 GHz (ISM joslu) ar pārraides ātrumu no 250 Kbps līdz 2 Mb / s, kas ir likumīgi daudzās valstīs un ko var izmantot rūpniecības un medicīnas lietojumos. Tiek arī apgalvots, ka ar pareizām antenām šie moduļi var pārraidīt un uztvert līdz 100 metru attālumu starp tiem. Interesanti labi !!? Tātad, šajā apmācībā mēs uzzināsim vairāk par šiem nRF24l01 moduļiem un to, kā to sasaistīt ar mikrokontrolleru platformu, piemēram, Arduino. Mēs arī dalīsimies ar dažiem risinājumiem bieži sastopamajām problēmām, lietojot šo moduli.
Iepazīšanās ar nRF24L01 RF moduli
Par nRF24L01 moduļi ir uztvērējs moduļi, tātad katrs modulis var gan sūtīt un saņemt datus, bet, tā kā tie ir pusdupleksais viņi var vai nu nosūtīt vai saņemt datus laikā. Modulim ir Ziemeļvalstu pusvadītāju vispārējais nRF24L01 IC, kas atbild par datu pārraidi un saņemšanu. IC sazinās, izmantojot SPI protokolu, un tāpēc to var viegli sasaistīt ar visiem mikrokontrolleriem. Arduino kļūst daudz vieglāk, jo bibliotēkas ir viegli pieejamas. Turpmāk parādīti standarta nRF24L01 moduļa tapas
Moduļa darba spriegums ir no 1,9 V līdz 3,6 V (parasti 3,3 V), un normālas darbības laikā tas patērē ļoti mazāku strāvu, tikai 12 mA, kas padara to par akumulatoru efektīvu un līdz ar to var darboties pat ar monētu šūnām. Pat ja darba spriegums ir 3,3 V, lielākā daļa tapu ir 5V tolerantas, un tāpēc tās var tieši saskarni ar 5V mikrokontrolleriem, piemēram, Arduino. Vēl viena šo moduļu izmantošanas priekšrocība ir tā, ka katram modulim ir 6 cauruļvadi. Tas nozīmē, ka katrs modulis var sazināties ar 6 citiem moduļiem, lai pārsūtītu vai saņemtu datus. Tas padara moduli piemērotu zvaigžņu vai acu tīklu izveidei IoT lietojumprogrammās. Viņiem ir arī plašs 125 unikālo ID adrešu diapazons, tāpēc slēgtā zonā mēs varam izmantot 125 no šiem moduļiem, netraucējot viens otram.
Saskarne nRF24L01 ar Arduino
Šajā apmācībā mēs iemācīsimies saskarni nRF24L01 ar Arduino, vadot servomotoru, kas savienots ar vienu Arduino, mainot potenciometru otrā Arduino. Vienkāršības labad mēs vienu raidītāju izmantojām vienu nRF24L01 moduli, bet otru - uztvērēju, taču katru moduli var ieprogrammēt datu sūtīšanai un saņemšanai atsevišķi.
Ķēdes shēma nRF24L01 moduļa savienošanai ar Arduino ir parādīta zemāk. Dažādības labad es uztvērēja pusē izmantoju UNO un raidītāja pusē Nano. Bet savienojuma loģika paliek nemainīga arī citiem Arduino dēļiem, piemēram, mini, mega.
Uztvērēja puse: Arduino Uno nRF24L01 moduļa savienojumi
Kā jau minēts iepriekš, nRF24L01 sazinās ar SPI protokola palīdzību. Arduino Nano un UNO kontaktdakšas 11, 12 un 13 tiek izmantotas SPI saziņai. Tādējādi mēs savienojam MOSI, MISO un SCK tapas no nRF attiecīgi ar tapām 11, 12 un 13. Adatas CE un CS ir lietotāja konfigurējamas, šeit esmu izmantojis 7. un 8. tapu, taču, mainot programmu, varat izmantot jebkuru tapu. NRF moduli darbina Arduino 3,3 V tapa, kas vairumā gadījumu darbosies. Ja nē, var izmēģināt atsevišķu barošanas avotu. Neatkarīgi no saskarnes ar nRF, esmu arī pievienojis servomotoru 7. kontaktam un darbinājis to caur Arduino 5V kontaktu. Līdzīgi raidītāja ķēde ir parādīta zemāk.
Raidītāja puse: Arduino Nano nRF24L01 moduļa savienojumi
Arī raidītāja savienojumi ir vienādi, turklāt esmu izmantojis potenciometru, kas savienots pāri Arduino 5V ad Ground tapai. Analogais izejas spriegums, kas mainīsies no 0-5V, ir savienots ar Nano A7 tapu. Abas plates tiek darbinātas caur USB portu.
Darbs ar nRF24L01 + bezvadu raiduztvērēja moduli
Tomēr, lai mūsu nRF24L01 darbotos bez trokšņa, ieteicams apsvērt šādas lietas. Es ilgu laiku strādāju ar šo nRF24L01 + un uzzināju šādus punktus, kas var palīdzēt jums nokļūt uz sienas. Varat tos izmēģināt, kad moduļi nedarbojās kā parasti.
1. Lielākā daļa tirgū esošo nRF24L01 + moduļu ir viltoti. Lētākie, kurus mēs varam atrast ebay un Amazon, ir vissliktākie (neuztraucieties, jo ar dažiem pielāgojumiem mēs varam tos darbināt)
2. Galvenā problēma ir barošanas avots, nevis jūsu kods. Lielākā daļa tiešsaistes kodu darbosies pareizi, man pašam ir darba kods, kuru es personīgi pārbaudīju. Informējiet mani, ja jums tie ir nepieciešami.
3. Pievērsiet uzmanību, jo moduļi, kas tiek drukāti kā NRF24L01 +, faktiski ir Si24Ri (jā, ķīniešu ražojums).
4. Klona un viltus moduļi patērēs vairāk enerģijas, tāpēc neattīstiet savu strāvas ķēdi, pamatojoties uz nRF24L01 + datu lapu, jo Si24Ri būs liels strāvas patēriņš aptuveni 250mA.
5. Sargieties no sprieguma viļņiem un strāvas pārsprieguma, šie moduļi ir ļoti jutīgi un var viegli izdegt. (;-(līdz šim apcepis 2 moduļus)
6. Pievienojot pāris kondensatorus (10uF un 0,1uF) pāri moduļa Vcc un Gnd, jūsu padeve kļūst tīra, un tas darbojas lielākajā daļā moduļu.
Tomēr, ja jums ir problēmas, ziņojiet par komentāru sadaļu vai izlasiet to vai uzdodiet jautājumus mūsu forumā.
Pārbaudiet arī mūsu visaptverošo projektu par tērzēšanas telpas izveidi, izmantojot nRF24L01.
NRF24L01 programmēšana Arduino
Šo moduļu lietošanu ar Arduino ir bijis ļoti viegli, pateicoties viegli pieejamai bibliotēkai, kuru maniacbug izveidoja vietnē GitHub. Noklikšķiniet uz saites, lai lejupielādētu bibliotēku kā ZIP mapi, un pievienojiet to savam Arduino IDE, izmantojot opciju Sketch -> Include Library -> Add.ZIP library . Pēc bibliotēkas pievienošanas mēs varam sākt programmēt projektu. Mums ir jāraksta divas programmas, viena ir paredzēta raidītāja pusei, otra - uztvērēja pusei. Tomēr, kā es teicu iepriekš, katrs modulis var darboties gan kā raidītājs, gan kā uztvērējs. Abas programmas ir norādītas šīs lapas beigās, raidītāja kodā tiks komentēts uztvērēja variants un uztvērēja programmā - raidītāja kods. Varat to izmantot, ja mēģināt projektu, kurā modulim jādarbojas kā abam. Programmas darbība ir paskaidrota zemāk.
Tāpat kā visas programmas, mēs sākam, iekļaujot galvenes failus. Tā kā nRF izmanto SPI protokolu, mēs esam iekļāvuši SPI galveni un tikko lejupielādēto bibliotēku. Servo bibliotēku izmanto servomotora vadībai.
# iekļaut
Nākamā rinda ir svarīgā rinda, kur mēs bibliotēku instruējam par CE un CS tapām. Mūsu ķēdes shēmā mēs esam savienojuši CE ar 7. kontaktu un CS ar 8. kontaktu, tāpēc mēs iestatījām līniju kā
RF24 myRadio (7, 8);
Visi mainīgie, kas ir saistīti ar RF bibliotēku, jādeklarē kā salikta mainīgā struktūra. Šajā programmā mainīgo msg izmanto datu sūtīšanai un saņemšanai no RF moduļa.
struct pakete { int msg; }; typedef struct pakete Package; Iepakojuma dati;
Katram RF modulim ir unikāla adrese, ar kuras palīdzību tā var nosūtīt datus uz attiecīgo ierīci. Tā kā mums šeit ir tikai viens pāris, mēs raidītājā un uztvērējā iestatījām nulles adresi, bet, ja jums ir vairāki moduļi, jūs varat iestatīt ID uz jebkuru unikālu 6 ciparu virkni.
baitu adreses = {"0"};
Tālāk tukšās iestatīšanas funkcijas ietvaros mēs inicializējam RF moduli un iestatījām strādāt ar 115 joslu, kurā nav trokšņu, kā arī iestatījām moduli darboties minimālā enerģijas patēriņa režīmā ar minimālo ātrumu 250 Kbps.
void setup () { Sērijas.sākt (9600); myRadio.begin (); myRadio.setChannel (115); // 115 josla virs WIFI signāliem myRadio.setPALevel (RF24_PA_MIN); // MIN jauda zema dusmas myRadio.setDataRate (RF24_250KBPS); // Minimālais ātrums myservo.attach (6); Serial.print ("Iestatīšana ir inicializēta"); kavēšanās (500); }
Funkcija void WriteData () raksta tai nodotos datus. Kā jau iepriekš teicām, nRF ir 6 dažādas caurules, uz kurām mēs varam lasīt vai rakstīt datus, šeit mēs datu adresei izmantojām 0xF0F0F0F066. Uztvērēja pusē mums jāizmanto tā pati adresefunkcijā ReadData (), lai saņemtu rakstītos datus.
void WriteData () { myRadio.stopListening (); // Pārtrauciet saņemšanu un sāciet pārvaldīt myRadio.openWritingPipe (0xF0F0F0F066); // Nosūta datus par šo 40 bitu adresi myRadio.write (& data, sizeof (data)); kavēšanās (300); }
Funkcija void WriteData () nolasa datus un ievieto tos mainīgajā. Atkal no 6 dažādām caurulēm, ar kuru palīdzību mēs varam šeit lasīt vai rakstīt datus, datu lasīšanai kā adresi izmantojām 0xF0F0F0F0AA Tas nozīmē, ka otra moduļa raidītājs ir uzrakstījis kaut ko uz šo adresi, un tāpēc mēs to lasām no tās pašas.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // kuru cauruli lasīt, 40 bitu adrese myRadio.startListening (); // Pārtrauciet pārsūtīšanu un sāciet Reveicing if (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (dati.teksts); } }
Izņemot šīs rindas, pārējās programmas rindas tiek izmantotas POT lasīšanai un pārveidošanai par 0 līdz 180, izmantojot kartes funkciju, un nosūtīt to uz uztvērēja moduli, kur mēs attiecīgi kontrolējam servo. Es tos neesmu paskaidrojis pa rindai, jo mēs to jau esam iemācījušies savā servo saskarnes apmācībā.
Servomotora vadība, izmantojot nRF24L01 bezvadu režīmā
Kad esat gatavs ar programmu, augšupielādējiet raidītāja un uztvērēja kodu (norādīts zemāk) attiecīgajās Arduino plāksnēs un ieslēdziet tos ar USB pieslēgvietu. Varat arī palaist abu paneļu sērijveida monitoru, lai pārbaudītu, kāda vērtība tiek pārsūtīta un kas tiek saņemta. Ja viss darbojas, kā paredzēts, pagriežot POT pogu raidītāja pusē, attiecīgi jāgriežas arī otrā pusē esošajam servo.
Pilnīga projekta darbība ir parādīta zemāk esošajā video. Tas ir diezgan normāli, ja šie moduļi nedarbojas ar pirmo mēģinājumu. Ja jums ir radušās kādas problēmas, vēlreiz pārbaudiet kodu un elektroinstalāciju un izmēģiniet iepriekš norādītās problēmu novēršanas vadlīnijas. Ja nekas nedarbojas, publicējiet problēmu forumos vai komentāru sadaļā, un es mēģināšu tās atrisināt.