nRF24L01+ : побеждаем модуль.

Тема в разделе "Проводная и беспроводная связь", создана пользователем ИгорьК, 19 июн 2014.

  1. F0rtis

    F0rtis Нуб

    А у вас перед выводом данных сканирования, регистры постоянно выводят одно и тоже значение?
    У меня у модулей, содержимое регистров постоянно меняется и часто игнорируются данные которые я задаю при инициализации. Пока причину такого поведения не могу понять и думаю дальше двигаться бесмысленно, ибо как два модуля будут работать друг с другом если они инициализируются кто как хочет.
     
  2. Adeni

    Adeni Нуб

    Да, значения вроде как одни и те же.
     
  3. судя по шумам, рядом работает открытая микроволновка.
    можно конечно дальше гадать от чего оно так, спрашивать что за отдельные источники и тд.
    но его чтото заливает, что он не один свободный канал не показывает.
     
  4. ИгорьК

    ИгорьК Гуру

    Это может быть плохая пайка/контакт.
     
  5. приехал мне сегодня пакет с плюшками, в пакете кроме всего прочего было два nRF24l01+

    IMG_7748.jpg

    вроде бы нечего удивительного и даже пофиг на шелкографию, только вот один из них не nRF
    как оно работает, я пока не проверял.
     
  6. быстрая замена нормальной nRFки показала что оно не работает

    ушел пинать китайца

    .....

    более того, они оба не работают, кароче, остерегайтесь подделок
     
    Последнее редактирование: 12 янв 2015
  7. Adeni

    Adeni Нуб

    И как же проверить на не поддельность?
     
  8. откудаж мне знать?

    тот который si24r1 завелся приемником, с отвратительной чувствительностью, но завелся, передатчиком нехочет, но видимо надо с режимами поиграться.
    второй, видимо перемаркированный, работает крайне нестабильно, пару раз чудом заработал приемником и всё, в сканере показывает нули с иногда проскакивающей 1.
    отвратительные модули, может они все поддельные с переменным качеством чипов? хз

    нужно еще попробовать без +
     
  9. F0rtis

    F0rtis Нуб

    Итак друзья, у меня небольшая, но победа. Код Пушного звер'а запустился.

    Нестабильная и как "попалошная" инициализация модулей решилась запиткой полностью всего от внешнего источника. До этого модули были запитаны отдельно, ардуины питались от usb портов.
    Какие выводы я пока смог сделать ковыряясь и читая форумы:
    - Инициализациия регистров нулями или FFFFFF помимо бракованного модуля может иметь другие причины:
    - Что то с питанием
    - Перепутанно подключение в схеме или установка в скетче CE, CSN пинов.

    Скетч сканер на мой взляд не дает полного понимания о работоспособности модуля. Тому пример моя картинка страницей раньше. Полная зашумленность эфира, тоже вроде бы показатель работы приемника и мыслей, а что же так забивает эфир. Были и более "чистые картинки" но при этом модули друг с другом не работали. Т.е. сканер на этапе если у вас ничего не работает это скорее какая то "погода".
     
  10. Fusion

    Fusion Нуб

    Добрый день всем!
    Заказал я с алиэкспресс вот такие модули:
    2015-01-12 18.20.18.jpg 2015-01-12 18.19.13.jpg
    Вот ссылка http://www.aliexpress.com/snapshot/6401676093.html?orderId=65055497963224
    Залил скетч сканера, выдает постоянно вот такое:
    Знімок екрана 2015-01-12 18.27.27.png
    Питается модуль от самой ардуины (3.3в), на питание на самом модуле подпаял конденсаторы 100мкФ и 0.1мкФ. Не подскажете куда копать? Где искать ошибку? Или просто выбросить модули и купить другие? При этом другие модули (DIP версии) работают нормально и со сканером и с моим собственным скетчем.
    Заранее благодарен!
     
  11. F0rtis

    F0rtis Нуб

    Такая же муть с якобы забитым эфиром как и была у меня. Попробуйте пересадить модули на внешнее питание.
     
  12. Fusion

    Fusion Нуб

    Я то попробую, но не уверен, что это даст результат. Другие модули работают абсолютно нормально при такой компоновке.
     
  13. Amperka_user

    Amperka_user Нерд

    Коллеги! Попрошу Вас найти ошибку, наверняка какая-то дурацкая..
    Немного по проекту.. очередное применение Arduino для моделирования будущей системы гашения колебаний крюка двубалочного крана.
    Есть пульт с радиоканалом nRF24L01 который передает команды от джойстика на каретку крана. В свою очередь контролер каретки через nRF24L01 отправляет на пульт а тот в свою очередь на PC данные с акселерометра на крюке и данные с моторов.. На Ардуино делается модель этой системы.
    Застрял на передаче данных с пульта на карету и обратно. Нужен радиоканал что бы исключить провода. Пульт и отправляет и принимает одновременно (последовательно), каретка так же. Не скажете ли? Где ошибка ?

    Код (Text):
    ПУЛЬТ

    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    /*-----( Declare Constants and Pin Numbers )-----*/
    #define CE_PIN  9
    #define CSN_PIN 10
    #define JOYSTICK_X A0
    #define JOYSTICK_Y A1
    const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe
    RF24 radio(CE_PIN, CSN_PIN); // Create a Radio

    int joystick[2];
    int na_pult[2];
    void setup()
    {
      Serial.begin(9600);
      radio.begin();
      //radio.openWritingPipe(pipe);
      //radio.openReadingPipe(1,pipe);
    // radio.startListening();;
    }//--(end setup )---
    void loop()
    {
      joystick[0] = analogRead(JOYSTICK_X);
      joystick[1] = analogRead(JOYSTICK_Y);
     
      radio.stopListening();  //Перестаем слушать
      radio.openWritingPipe(pipe);
      radio.write( joystick, sizeof(joystick) );
      radio.openReadingPipe(1,pipe);
      radio.startListening();;
      if ( radio.available() )
      {
        // Read the data payload until we've received everything
        bool done = false;
        while (!done)
        {
          // Fetch the data payload
          done = radio.read( na_pult, sizeof(na_pult) );
          radio.stopListening();  //Перестаем слушать
          Serial.print("A = ");
          Serial.print(na_pult[0]);
          Serial.print(" B = ");    
          Serial.println(na_pult[1]);
        }
      }
     
    }

    Код (Text):
    КАРЕТКА

    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    #define CE_PIN  9
    #define CSN_PIN 10
    const uint64_t pipe = 0xE8E8F0F0E1LL;
    RF24 radio(CE_PIN, CSN_PIN); // Create a Radio

    int joystick[2];
    int na_pult[2];
    void setup()
    {
      Serial.begin(9600);
      delay(1000);
      Serial.println("Nrf24L01 Receiver Starting");
      radio.begin();
      //radio.openWritingPipe(pipe);
      //radio.openReadingPipe(1,pipe);
      //radio.startListening();;
    }//--(end setup )---
    void loop()
    {
      na_pult[0]=10;//Ax
      na_pult[1]=20;//MotorPID
     
      radio.stopListening();  //Перестаем слушать
      radio.openWritingPipe(pipe);
      radio.write( na_pult, sizeof(na_pult) ); //ПЕРЕДАЕМ НА ПУЛЬТ Ах и MotorPID
      radio.openReadingPipe(1,pipe);
      radio.startListening();;
      if ( radio.available() )
      {
        // Read the data payload until we've received everything
        bool done = false;
        while (!done)
        {
          // Fetch the data payload
          done = radio.read( joystick, sizeof(joystick) );
          Serial.print("X = ");
          Serial.print(joystick[0]);
          Serial.print(" Y = ");    
          Serial.println(joystick[1]);

        }
      }
      else
      {  
          Serial.println("No radio available");
      }

    }
     
  14. Ты слушаешь и передаешь в одну и туже трубу... Это первое, что сразу бросается в глаза

    const uint64_t pipe = 0xE8E8F0F0E1LL;
     
  15. Amperka_user

    Amperka_user Нерд

    Вот с разными каналами тренировочный вариант. Одна Ардуина передает массив, а вторая нет.. Одна принимает, а другая нет..
    Код (Text):
    КАРЕТКА

    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    #define CE_PIN  9
    #define CSN_PIN 10
    #define JOYSTICK_X A0
    #define JOYSTICK_Y A1
    const uint64_t pipe[2] = {0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
    RF24 radio(CE_PIN, CSN_PIN); // Create a Radio

    int joystick[2];
    int na_pult[2];
    void setup()
    {
      Serial.begin(9600);
      delay(1000);
      Serial.println("Nrf24L01 Receiver Starting");
      radio.begin();
      radio.openWritingPipe(pipe[1]);
      radio.openReadingPipe(1,pipe[0]);
      radio.startListening();;
    }//--(end setup )---
     
    void loop()
    {
      na_pult[0]=10;//Ax
      na_pult[1]=20;//MotorPID
     
      if ( radio.available() )
      {
        // Read the data payload until we've received everything
        bool done = false;
        while (!done)
        {
          // Fetch the data payload
          done = radio.read( joystick, sizeof(joystick) );
        }
      }
     
      radio.stopListening();
     
      bool ok = radio.write( na_pult, sizeof(na_pult) ); //ПЕРЕДАЕМ НА ПУЛЬТ Ах и MotorPID
      radio.startListening();
      Serial.print("X = ");
      Serial.print(joystick[0]);
      Serial.print(" Y = ");    
      Serial.println(joystick[1]);
    }

    Код (Text):
    ПУЛЬТ

    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    #define CE_PIN  9
    #define CSN_PIN 10
    #define JOYSTICK_X A0
    #define JOYSTICK_Y A1
    const uint64_t pipe[2] = {0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
    RF24 radio(CE_PIN, CSN_PIN); // Create a Radio

    int joystick[2];
    int na_pult[2];
    void setup()
    {
      Serial.begin(9600);
      delay(1000);
      Serial.println("Nrf24L01 Receiver Starting");
      radio.begin();
      radio.openWritingPipe(pipe[1]);
      radio.openReadingPipe(1,pipe[0]);
      radio.startListening();;
    }//--(end setup )---
     
    void loop()
    {
      joystick[0] = analogRead(JOYSTICK_X);
      joystick[1] = analogRead(JOYSTICK_Y);
     
      if ( radio.available() )
      {
        // Read the data payload until we've received everything
        bool done = false;
        while (!done)
        {
          // Fetch the data payload
          done = radio.read( na_pult, sizeof(na_pult)  );
        }
      }
     
      radio.stopListening();
     
      bool ok = radio.write( joystick, sizeof(joystick)); //ПЕРЕДАЕМ НА ПУЛЬТ Ах и MotorPID
      radio.startListening();
      Serial.print("C = ");
      Serial.print(na_pult[0]);
      Serial.print(" D = ");    
      Serial.println(na_pult[1]);
    }
     
  16. Amperka_user

    Amperka_user Нерд

    Слева каретка, справа пульт
     

    Вложения:

  17. Amperka_user

    Amperka_user Нерд

    Если интересно ) [​IMG]
     
  18. Amperka_user

    Amperka_user Нерд

    Я извиняюсь, но случайные рудименты не удаляются.. я продублирую, расскажу поподробнее про проект с пояснениями в виде картинок и видео.
    Стоит задача разработать систему гашения колебаний крюка крана аналог DynAPilot

    . Для начала нужно сделать дешевый прототип. Прототип состоит:

    КАРЕТКА - имитация настоящей каретки крана (ссылка на общую картинку http://kharkov.all.biz/kran-mostovoj-dvuhbalochnyj-g4635039) движется по рельсу вперед-назад. В движение КАРЕТКУ приводят двигатели, которые управляются МОТОРШИЛДОМ на вход которого подается выходной сигнал ПИД-регулятора. Цель ПИД-регулятора-значения с акселерометра (тоже большая тема но потом..)

    КРЮК - имитация крюка- груз с акселерометром через леску и информационный провод присоединен к каретке. На акселерометр будет работать ПИД регулятор оборотов двигателей КАРЕТКИ.

    ПУЛЬТ - передает сигнал с джойстика о желаемом направлении движения каретки, задает скорость ее движения.

    PC - компьютер на котором необходимо визуализировать данные с каретки для настройки ПИД-регулятора

    Для информационной связи КАРЕТКИ и ПУЛЬТА используется Радиоканал посредством RF24 и выглядит информационный обмен примерно так https://cloud.mail.ru/public/e6daf1a78184/IMG_20150116_153520.jpg.

    По частям проект примерно был собран, в отдельном виде многое что работало, но пришло время все интегрировать. На видео представлено перемещение каретки по командам от пульта, но этого мало, нужно ведь и с каретки получать данные на ПУЛЬТ а не только с ПУЛЬТА на КАРЕТКУ управляющие команды https://cloud.mail.ru/public/e15829e1b68e/VID_20150109_103645.3gp

    Ну думаю теперь картинка стала более ясная и уверен что с вопросом о радиоканале я обратился по адресу.

    С Уважением,
    Погорелов Николай ))
     
    ИгорьК нравится это.
  19. osetroff

    osetroff Нуб

    Пользую эту библиотеку.
    Делаю сеть датчиков Д влажности для автополива на участке.
    Все Д разделил на группы (подсети), далее Г.
    Между Г обмен пакетами осуществляю через шлюзовой Д.
    Вот с адресацией pipes у этого шлюзового Д и возникли вопросы.

    Например, шлюзовой Д05 состоит в Г01 и имеет адрес:
    Код (Text):
    byte addr_r01_05[] = { 0xCC,0xCE,0xCC,0x01,0x05 }; // 0xCCCECC0105
    radio.openReadingPipe(1,addr_r01_05);
    //для широковещательных
    byte addr_r01[] = { 0xCC,0xCE,0xCC,0x01,0x00 }; // 0xCCCECC0500
    radio.openReadingPipe(2,addr_r01);
    radio.startListening();
    Также, Д05 знает часть адреса группы-подсети Г05, для которой он — шлюз:
    Код (Text):
    byte addr_r05[] = { 0xCC,0xCE,0xCC,0x05,0x00 }; // 0xCCCECC0500
    В Г05 существует Д03 с адресом:
    Код (Text):
    byte addr_r05_03[] = { 0xCC,0xCE,0xCC,0x05,0x03 }; // 0xCCCECC0503
    radio.openReadingPipe(1,addr_r05_03);
    //для широковещательных
    byte addr_r05[] = { 0xCC,0xCE,0xCC,0x05,0x00 }; // 0xCCCECC0500
    radio.openReadingPipe(2,addr_r05);
    radio.startListening();
    Также, Д03 знает адрес шлюза Г01:
    Код (Text):
    byte addr_r01_05[] = { 0xCC,0xCE,0xCC,0x01,0x05 }; // 0xCCCECC0105
    Правильно ли я понимаю, что:
    1. Если я хочу отправить пакет от Д05(Г01) в Д03(Г05), то:
    Код (Text):
    addr=addr_r05; addr[4]=0x03;
    radio.openWritingPipe(addr_r05);
    radio.stopListening();
    radio.writeFast(&buf,len,1);
    radio.txStandBy();
    radio.startListening();
    2. Если отправляю пакет от Д03(Г05) в Д05(Г01), то:
    Код (Text):
    radio.openWritingPipe(addr_r01_05);
    radio.stopListening();
    radio.writeFast(&buf,len,1);
    radio.txStandBy();
    radio.startListening();
    И т.п.

    P.S. Кто-нибудь пробовал setAddressWidth(3)?
    Адресом тогда будут последние три байта addr?
     
  20. Andrii

    Andrii Нерд

    На cайте алиэкспрес четко написано:

    Similar NRF24L01 + 2.4G wireless module 1.27 SMD

    - это значит что модули похожи на NRF24L01 но не являются ими !

    Если посмотреть ниже то можно найти надпись:

    Note: This product is similar to NRF24L01 + 2.4G wireless module, and 2.4G is not compatible with the program, pin-compatible

    - это значит что модули совместимы только по выводам и не совместимы программно!

    Перед тем как делать покупку читайте внимательно описание того что вы покупаете - это же китайцы и они хотят ваших денег!
     
    Фисташка Трям нравится это.