Ovo je serija modula baziranih na popularnom Nordic Semiconductor čipu nRF24l01+. Ovaj modul je i prijemnik i odašiljač (eng. transceiver), uloga se bira programski.
Ako povežemo dva Arduino sučelja putem ovih modula možemo ih upotrijebiti za razne svrhe, izdvojit ću samo neke od njih:
- Daljinski prijenos očitanja raznih senzora
- Alarmi, detektori i razne vrste nadzornih uređaja
- Daljinsko upravljanje
- Telemetrija
Pogledajmo glavne značajke ovog modula:
- 2.4GHz ISM pojas, slobodan za korištenje.
- 126 RF kanala.
- Brzine prijenosa: 250kbps, 1 i 2Mbps.
- Odašiljač: troši 11.3mA pri 0dBm izlaznoj snazi.
- Prijemnik: Brzi AGC za povećanje dometa.
- Prijemnik: Integrirano filtriranje kanala.
- Enhanced ShockBurst™: 1 do 32 bytes dinamički paketi, 6 data-pipe MultiCeiver™ za 1:6 star networks.
- Host Interface: 4-pin hardware-ski SPI, 3 odvojena 32-byte TX i RX FIFO.
- Mali napon napajanja: 1.9 - 3.6V.
- GFSK modulacija.
- Automatsko rukovanje prijenosom paketa podataka..
- Male dimenzije: 15x29mm.
Prilikom napajanja je poželjno imati dodatni izvor za napajanje ovog modula. Arduino UNO može napajati modul s 3,3V izvoda ali MEGA i NANO mogu imati problema s naponom. Preporučivo je staviti dodatni elektrolitski kondenzator (10uF) paralelno VCC i GND pinovima na modulu za dodatnu stabilizaciju rada (pazite na polaritet).
PRIMJER - DALJINSKO PALJENJE LED
Zadatak je poslati radio modulom stanje sva tri tipkala istovremeno. Otpornici u prijemniku su 330ohma. Tipkala su postavljena u INPUT_PULLUP mod.
Spajanje pinova
Shema spajanja odašiljača
Programski kod za odašiljač
/*-----( Biblioteke )-----*/ #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> // Ukoliko nemate RF24 library preuzmite ga s http://rik-popovaca.hr/arduino/libraries/RF24.zip /*-----( Konstante, varijable i pinovi )-----*/ #define CE_PIN 9 #define CSN_PIN 10 #define CRVENA 5 #define ZUTA 6 #define ZELENA 7 const uint64_t pipe = 0xE8E8F0F0E1LL; // Definicija transmit pipe-a int podaci[3]; /*-----( Deklaracija objekata )-----*/ RF24 radio(CE_PIN, CSN_PIN); void setup() { pinMode(CRVENA, INPUT_PULLUP); pinMode(ZUTA, INPUT_PULLUP); pinMode(ZELENA, INPUT_PULLUP); Serial.begin(9600); delay(1000); Serial.println("Startam Nrf24L01"); radio.begin(); radio.openWritingPipe(pipe); } void loop() { podaci[0] = digitalRead(CRVENA); podaci[1] = digitalRead(ZUTA); podaci[2] = digitalRead(ZELENA); // Saljemo ocitanje stanja sva 3 tipkala u nizu radio.write( podaci, sizeof(podaci)); }
Shema spajanja prijemnika
Programski kod za prijemnik
/*-----( Biblioteke )-----*/ #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> // Ukoliko nemate RF24 library preuzmite ga s http://rik-popovaca.hr/arduino/libraries/RF24.zip /*-----( Konstante, varijable i pinovi )-----*/ #define CE_PIN 9 #define CSN_PIN 10 #define CRVENA 5 #define ZUTA 6 #define ZELENA 7 const uint64_t pipe = 0xE8E8F0F0E1LL; // Definicija transmit pipe-a int podaci[3]; /*-----( Deklaracija objekata )-----*/ RF24 radio(CE_PIN, CSN_PIN); void setup() { pinMode(CRVENA, OUTPUT); pinMode(ZUTA, OUTPUT); pinMode(ZELENA, OUTPUT); Serial.begin(9600); delay(1000); Serial.println("Startam Nrf24L01"); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening();; } void loop() { if ( radio.available() ){ bool done = false; while (!done){ done = radio.read( podaci, sizeof(podaci) ); } // Kako saljemo INPUT_PULLUP ocitanja // primamo LOW kad je pritisnuto tipkalo i oduzimanjem od 1 // radimo inverziju u HIGH stanje za paljenje LED :) int cr = 1-podaci[0]; int zu = 1-podaci[1]; int ze = 1-podaci[2]; digitalWrite(CRVENA, cr); digitalWrite(ZUTA, zu); digitalWrite(ZELENA, ze); } }
Umjesto stanja tipkala možemo poslati bilo koji podatak. Za zadatak si na odašiljaču umjesto digitalnih podataka uzmite analogna očitanja s recimo dva potenciometra. Pošaljite ih odašiljaču gdje umjesto LED kontroliramo motor driver i eto nam mobilnog robota na daljinsko upravljanje.