Nrf24l01+

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Поднимаю.

Попалось видео какого-то американца, который на хвост антенны (конец торчащий из зигзага, там где излучение максимально) напаял кусок медной проволоки длиной 83 мм и хвастался, вот типа, больше дальность.

Разумеется, никаких тестов, информации и т. п. там нет, только вода на тему кусайте ровно, паяйте аккуратно.

Вопрошаю у людей, связанных с радиосвязью (во блин как звучит), ну и вообще у кого есть опыт в этой теме. Мне такая антенна интересна только лишь возможностью вытащить конец этого провода наружу из электропроводящего корпуса (алюминиевого например), но нужно это для всенаправленных приложений, типа школьного светофора. Как именно излучает антенна, перпендикулярно проводу или вдоль него? Имеет ли смысл взять саморез и намотать витки? (расстояние до, после витков, количество витков?) или зигзаг на плате и есть эти витки (ну звучит логично)

Я предполагаю, что можно напаять эту проволоку и высунуть из корпуса вертикально вверх, и любые другие подобные корпусы будут уверенно ловить если провод будет расположен так же (потому что наибольшего приёма на PA+LNA версии трансиверов возможно только направив обе антенны параллельно, на одной высоте, что даёт весьма веские причины предполагать что антенна излучает максимально именно в сторону перпендикулярно проводу).

Интересует дальность 15 метров.

Так же, в порядке бреда, никто не подключал усиленную версию трансивера к панельным антеннам, например FA-20?

UPD. Сорян, вопрос не про прог, но раздел думаю уже не важен. Это самая авторитетная тема по RF24.

tika
Offline
Зарегистрирован: 22.07.2015

+

GVinst
Offline
Зарегистрирован: 15.12.2015

Здравствуйте дорогие друзья!

Собрал схему термометра на Nano, по сути - два модуля связаны по nrf24l01 у передатчика на борту есть DS18b20, у приемника есть OLED на SSD1306. Проблема в том, что когда передатчик отключен, на дисплее приемника температура все равно показывается и невозможно понять, что передатчик не передает информацию. Вопрос как правильно составить код, чтобы появлялся флаг, если передатчик по каким-то причинам заткнулся. Требуется это еще и из-за того, что передатчиков планируется 6 шт. и требуется знать, кто онлайн, а кто оффсайд.

Привожу код:

#include <SPI.h>                                          // Подключаем библиотеку  для работы с шиной SPI
#include <nRF24L01.h>                                     // Подключаем файл настроек из библиотеки RF24
#include <RF24.h>                                         // Подключаем библиотеку  для работы с nRF24L01+
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

RF24           radio(9, 10);                              // Создаём объект radio   для работы с библиотекой RF24, указывая номера выводов nRF24L01+ (CE, CSN)
int            data[2];                                   // Создаём массив для приёма данных

void setup(){
    delay(1000);
    radio.begin();                                        // Инициируем работу nRF24L01+
    radio.setChannel(5);                                  // Указываем канал приёма данных (от 0 до 127), 5 - значит приём данных осуществляется на частоте 2,405 ГГц (на одном канале может быть только 1 приёмник и до 6 передатчиков)
    radio.setDataRate     (RF24_1MBPS);                   // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Мбит/сек
    radio.setPALevel      (RF24_PA_HIGH);                 // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
    radio.openReadingPipe (1, 0x1234567890LL);            // Открываем 1 трубу с идентификатором 0x1234567890 для приема данных (на ожном канале может быть открыто до 6 разных труб, которые должны отличаться только последним байтом идентификатора)
    radio.startListening  ();                             // Включаем приемник, начинаем прослушивать открытую трубу
    // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  display.begin(SSD1306_SWITCHCAPVCC, 0x3c);  // initialize with the I2C addr 0x3D (for the 128x64)
  
  display.clearDisplay();
  display.display();
}

void loop(){
     radio.startListening  (); 
    if(radio.available()){                                // Если в буфере имеются принятые данные
        radio.read(&data, sizeof(data));                  // Читаем данные в массив data и указываем сколько байт читать
 radio.stopListening   ();
 display.clearDisplay();
 display.setTextSize(2);
 display.setCursor(90,5);
 display.println("o");
 display.setTextSize(3);
 display.setCursor(103,8);
 display.println("C");

  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.setCursor(45,8);
  display.println(data[1]);
  display.display();

//    delay(900);              Если эти три строки раскомментировать, то эффект достигается, то есть 
//  display.clearDisplay();    при отключении передатчика через 3 секунды изображение с дисплея стирается,
//display.display();           но я считаю такой подход неприемлемым т.к. изображение на дисплее моргает примерно раз в секунду.
    }
}

 

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015