Перейти к содержимому






Фотография
- - - - -

Радиомодуль nRF24L01+PA+LNA (ID:71)

Написано admin , 12 May 2015 · 6370 Просмотров

nRF24L01
Радиомодуль nRF24L01+PA+LNA (ID:71) Радиомодуль nRF24L01+PA+LNA отличается от своих «братьев меньших» увеличенной мощностью передатчика и повышенной чувствительностью приемника. Он способен передать информацию со скоростью передачи до 2 Mbps на расстояние до 1000 метров.
Его можно использовать для беспроводной передачи информации с одной платы Arduino на другую. Данная версия платы радиомодуля имеет десяти контактный разъем.


Прикрепленное изображение: 411230911929.jpg
Обозначение выводов :
GND - подключение к общему проводу.
VCC - подключение к выводу +3,3 Вольт.
CE - подключение к выводу 8 Arduino.
CSN - подключение к выводу 7 Arduino.
MISO - подключение к выводу 12 Arduino.
MOSI - подключение к выводу 11 Arduino.
SCK - подключение к выводу 13 Arduino.
Вывод IRQ использоваться не будет.



После скачивания файла архива Mirf.zip, поместите содержимое архива в папку libraries, которая находится в папке с программой Arduino.
Для работы нам понадобится две платы Arduino.
Попробуем с помощью радиомодуля передать информацию с одной платы Arduino на другую.
Примерный скетч передатчика - сервера выглядит следующим образом:
/**
 * An Mirf example which copies back the data it recives.
 *
 * Pins:
 * Hardware SPI:
 * MISO -> 12
 * MOSI -> 11
 * SCK -> 13
 *
 * Configurable:
 * CE -> 8
 * CSN -> 7
 *
 */

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

void setup(){
  Serial.begin(9600);

  /*
   * Set the SPI Driver.
   */

  Mirf.spi = &MirfHardwareSpi;

  /*
   * Setup pins / SPI.
   */

  Mirf.init();

  /*
   * Configure reciving address.
   */

  Mirf.setRADDR((byte *)"serv1");

  /*
   * Set the payload length to sizeof(unsigned long) the
   * return type of millis().
   *
   * NB: payload on client and server must be the same.
   */

  Mirf.payload = sizeof(unsigned long);

  /*
   * Write channel and payload config then power up reciver.
   */

  Mirf.config();

  Serial.println("Listening..."); 
}

void loop(){
  /*
   * A buffer to store the data.
   */

  byte data[Mirf.payload];

  /*
   * If a packet has been recived.
   *
   * isSending also restores listening mode when it 
   * transitions from true to false.
   */

  if(!Mirf.isSending() && Mirf.dataReady()){
    Serial.println("Got packet");

    /*
     * Get load the packet into the buffer.
     */

    Mirf.getData(data);

    /*
     * Set the send address.
     */


    Mirf.setTADDR((byte *)"clie1");

    /*
     * Send the data back to the client.
     */

    Mirf.send(data);

    /*
     * Wait untill sending has finished
     *
     * NB: isSending returns the chip to receving after returning true.
     */

    Serial.println("Reply sent.");
  }
}
Примерный скетч приемника - клиента выглядит следующим образом:
/**
 * A Mirf example to test the latency between two Ardunio.
 *
 * Pins:
 * Hardware SPI:
 * MISO -> 12
 * MOSI -> 11
 * SCK -> 13
 *
 * Configurable:
 * CE -> 8
 * CSN -> 7
 *
 * Note: To see best case latency comment out all Serial.println
 * statements not displaying the result and load 
 * 'ping_server_interupt' on the server.
 */

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

void setup(){
  Serial.begin(9600);
  /*
   * Setup pins / SPI.
   */

  /* To change CE / CSN Pins:
   * 
   * Mirf.csnPin = 9;
   * Mirf.cePin = 7;
   */
  /*
  Mirf.cePin = 7;
   Mirf.csnPin = 8;
   */
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();

  /*
   * Configure reciving address.
   */

  Mirf.setRADDR((byte *)"clie1");

  /*
   * Set the payload length to sizeof(unsigned long) the
   * return type of millis().
   *
   * NB: payload on client and server must be the same.
   */

  Mirf.payload = sizeof(unsigned long);

  /*
   * Write channel and payload config then power up reciver.
   */

  /*
   * To change channel:
   * 
   * Mirf.channel = 10;
   *
   * NB: Make sure channel is legal in your area.
   */

  Mirf.config();

  Serial.println("Beginning ... "); 
}

void loop(){
  unsigned long time = millis();

  Mirf.setTADDR((byte *)"serv1");

  Mirf.send((byte *)&time);

  while(Mirf.isSending()){
  }
  Serial.println("Finished sending");
  delay(10);
  while(!Mirf.dataReady()){
    //Serial.println("Waiting");
    if ( ( millis() - time ) > 1000 ) {
      Serial.println("Timeout on response from server!");
      return;
    }
  }

  Mirf.getData((byte *) &time);

  Serial.print("Ping: ");
  Serial.println((millis() - time));

  delay(1000);
} 
Подключаем передатчик к одной плате Arduino, относим его на некоторое расстояние.
Подключаем приемник к другой плате Arduino, включаем монитор порта и видим каждую секунду изменяющиеся цифры . Теперь можно поэкспериментировать. Проверьте, как положение приемника и передатчика влияет на дальность связи, какая максимальная дальность связи.
Ссылка на витрину магазина http://dvrobot.ru/238/434.html.






Trackbacks для записи [ Trackback URL ]

Для данной записи нет trackbacks.

Последние комментарии