Arduino web tutorijali

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.

NRF24L01 pinout

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

Signal

RF Modul pin

Arduino pin za UNO, NANO

MEGA2560 pin

GND

1

GND

GND

VCC

2

3.3V

3.3V

CE

3

9

9

CSN

4

10

53

SCK

5

13

52

MOSI

6

11

51

MISO

7

12

50

IRQ

8

 

Shema spajanja odašiljača

Spajanje TX modula

 

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

Spajanje RX modula

 

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.