• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 1 głosów - średnia: 5
  • 1
  • 2
  • 3
  • 4
  • 5
Komunikacja między 2 Arduino nRF24l01+
#1
Poradnik jak za pomocą modułów nRF24l01+   komunikować ze sobą 2 uc Arduino .
niestety zasięg w pomieszczeniach to około 15-20 m  3-4 ściany , na  otwartej przestrzeni producent podaje około 100 m przy idealnych warunkach Tongue  Z własnego doświadczania  wiem że ten zasięg to 50-60 m ale za 5zł  nie można spodziewać się cudów Big Grin


Moduły nRF pracują w paśmie 2.4 GHz  
Zasilanie 1.9v- 3,3v
Interfejs SPI   tolerancja do 5v

Podłączenie :

1.  GDN---->GDN (masa)
2.  VCC----> 3,3v !!
3.  CE---->  Pin 9
4.  CSN----> Pin 10
5.  SCK----> Pin 13
6.  MOSI----> Pin 11
7.  MISO----> Pin 12
8.  IRQ----> Pin 2  ( opcjonalnie , pin służy do wzbudzania)
[Obrazek: QL3a6A.jpg]

Uwaga!! jeśli moduły nie komunikują się ze sobą  musimy dołożyć 2 kondensatory 10uF  między VCC a GDN

Przykładowy Program do wł/wył diody :

Nadajnik:

Kod:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int msg[1];
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;

void setup(void){
 pinMode(4,INPUT_PULLUP); // Tact switch nr1 , podciagniety do stanu wysokiego
 pinMode(5,INPUT_PULLUP); // Tact switch nr2
 
 radio.begin();
 radio.openWritingPipe(pipe);
 
}

void loop () {
 if (digitalRead(4) == LOW) {   // jesli odczyt na pinie 4 (przycisk nr 1 OFF) jest niski to wykonaj..
   msg[0] = 110;  // wpisywanie do zmiennej msg wartosci 110
   radio.write(msg, 1); // Wysylanie wartosci ze zmiennej msg
   delay(50);
   radio.write(msg, 1); // wysylamy ponownie po 50ms poniewaz czasami nasza "wiadomosc" nie dociera
 }
if (digitalRead(5) == LOW){ // przycisk nr 2 ON
msg[0] = 111; // inna wartosc  w tym przypadku 111
radio.write(msg, 1); // wysylamy wartosc ze zmiennej msg
delay(50);
radio.write(msg, 1); // wysylamy ponownie po odczekaniu 50ms poniewaz nie zawsze "wiadomosc" dociera do obiornika
}
}

Odbiornik :

Kod:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

int msg[1];

RF24 radio(9,10);

const uint64_t pipe = 0xE8E8F0F0E1LL;


void setup(void){
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
pinMode(7, OUTPUT); // dioda
}
void loop(void){
 
if (radio.available()){
  bool done = false;    
  while (!done){
    done = radio.read(msg, 1);      
    Serial.println(msg[0]); // wyswietlamy na serial monitor wartosc ze zmniennej msg
    if (msg[0] == 111){delay(10);digitalWrite(7, HIGH);} // jesli otrzymamy wartosc 111 to czekamy 10ms i ustawiamy stan wysoki na pinie 7
    if (msg[0] == 110){delay(10);digitalWrite(7, LOW);}  // jesli otrzymamy wartosc 110 czekamy 10ms i ustaiwamy stan niski na pinie 7
    delay(10);}}
else{Serial.println("Nic nie dostałem :(");}}
 
Odpowiedź
  


Wiadomości w tym wątku
Komunikacja między 2 Arduino nRF24l01+ - przez m.bielak91 - 04-08-2015, 01:01

Skocz do:


Przeglądający: 1 gości