Nrf24l01 не работает с ардуино нано

Nrf24l01 не работает с ардуино нано

Добрый день!
Я первый раз, Правила оформления прочитал. Если есть косяки с оформлением, то первый раз не «убивайте», а укажите мне пожалуйста, я исправлюсь!

Не очень Люблю напрягать других своими проблемами, но к сожалению с этой зашел в тупик. Бьюсь уже несколько месяцев.
1. Мои знания и умения (выше которых мне не прыгнуть).
Про программированию — Я не очень великий программист. Могу создавать линейные или с ветвлением по условиям или циклам программы. Темы библиотек для меня слишком сложны, и потому я пользую их в режиме «как есть», да и то иногда путаюсь, как их подключать. Вот такой примерно уровень.
По электронике – знаю принципы работы транзисторов, стабилитронов, операционных усилителей, микросхем ТТЛ-логики (средне). Понятия Напряжение, сила тока, «падение напряжения», «ЭДС», «внутреннее сопротивление источника», Законы Ома и Кирхгофа, распределение токов- известны хорошо, т.к. обслуживаю электрику и электронику электропоездов в депо на ЖД.

2. Проблема:
Хочу сделать модель автобуса Лиаз-677 (1:43) с радиоуправлением на Ардуино (чтобы можно было программно задать реалистичность движения, звуки, фары-стоп-сигналы и т.д)
В принципе уже кой-какие наработки есть. Даже сделал простенький регулятор оборотов двигателя на ШИМ-е с обратной связью по ЭДС (измеряемой при нулевой «полке» ШИМа).
Для управления сделал связку Ардуино-нано –плата питания NRF — с nrf24l01.
Шасси, с размещенным на нем макетом разгоняется, тормозит, колеса поворачивают.


Встала проблема по поводу габаритов. Не влазит все это в тело автобуса. Там место между шасси и полом салона очень ограничено.

Читайте также:  Как настроить календарь excel

3. Нашел выход — у китайцев комбо-плату ардуино, совмещенную с nrf24l01

Взял здесь.
https://aliexpress.ru/item/32980796. 56.1475720279.1592998245-381279448.1577985801
Прямо там полное описание и ссылка на программную часть https://github.com/keywish/keywish-nano-plus/tree/master/RF-Nano
В документации, идущей с платой есть ссылка на скетчи и другие програмные модули для платы в виде архива (он около 47 мб) https://github.com/keywish/keywish-nano-plus/archive/master.zip
В отзывах пишут, что все зашибись, у всех работает, только там синалы CE и SCN подключены наоборот.
В-общем купил

4.Заменил в модельке связку (Ардуино-нано –плата питания NRF — с nrf24l01) на эту китайскую комбо-ардуину со встроенной с nrf24l01
Я учел, что пины к nrf подключаются наоборот, т.е. CE = D10 и CSN = D9
Итог – нифига не работает.

Вот Программа передатчика, которая идет в описании PDF к ардуине

Должно быть так.

Так в принципе и происходит (хотя если я правильно понял, то так и будет происходить вне зависимости от того, было что-то в эфир выдано или нет)

5. Вот Программа Приемника, которая идет в описании PDF к этой ардуине

Какой ожидается результат:

А вот то, что фактически получается:
Первый скрин — это работа програмы «как есть», второй — если убрать там оператор сравнения if (чтобы хоть как-то посмотреть, что она делает)

В общем, Не работает. Данные не принимает.. Или приемник не работает. Или вся эта программная часть с библиотеками и всем остальным между собой не дружит.

6. Нашел где-то и запустил программу сканирования эфира по всем каналам (честно, говоря, уже запутался, где у у кого я ее взял), которая на связке (Ардуино-нано –плата питания NRF — с nrf24l01) у меня работала без проблем. Называется nrf_listen_air.ino
Вот она:

Результат:

При запуске на совмещенной китайской ардуине с приемником видно, что процессор связывается с микросхемой передатчика, даже адреса какие-то принимает, но данные из эфира по нулям. Хотя эта же самая программа на связке (Ардуино-нано –плата питания NRF — с nrf24l01) исправно выдавала данные с нескольких каналов a эфире.

Источник

Победа над nRF24L01: на три шага ближе

Многие испытывают трудности при соединении по эфиру радиомодулей nRF24L01. Об этом свидетельствует тема на форуме Амперки, открытая в конце 2014г. За пять с небольшим лет в теме накопилось более 120(!) страниц. Это при том, что автор темы не просто обозначил проблему, а поделился своим трехнедельным опытом победного для него боя. Кроме того, он тут же — в первом сообщении создал навигатор по страницам темы, где приводит ссылки на решения проблемы другими.

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

Модули nRF24L01 работают в полудуплексном режиме. Это как разговор по рации: каждый из корреспондентов в один момент времени либо говорит, либо слушает. То есть, каждый из двух узлов работает в режиме и приемника и передатчика: передатчик, отправив сообщение ждет на подтверждение приема сообщения со стороны приемника.

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

Я же разделил эту задачу на несколько простых задачек. Вначале модули проверяются на работоспособность и правильность подключения (шаг 1), затем один из пары работающих радиомодулей тестируется на работу в режиме передатчика без ожидания отклика с приемника (шаг 2) и последний этап — улучшение качества связи в этой связке передатчик-приемник (шаг 3).

Для общего представления — картинка с прототипом:

Шаг 1

Загрузить в контроллер платы Ардуино скетч сканера эфира, который можно найти среди примеров Arduino IDE: Файл -> Примеры -> RF24 -> scanner. Ниже под спойлером есть этот скетч с несущественным изменением. В нем изменено время между стартом и остановкой сканирования одного канала с 128 мксек на 512 мксек. Увеличение времени позволило за один цикл сканирования всего диапазона выявлять больше источников помех и сигналов. Это равнозначно замене результата измерений в канале на сумму четырех соседних результатов в этом канале до изменения времени задержки. При этом, время прохода всего прослушиваемого диапазона сканером увеличилось несущественно: примерно с 8 до 10 сек.

В разных скетчах адрес канала в командах приводится в разных форматах: в одних — . (0x6f), в других — . (112). Перевод с одного формата в другой станет понятным с примера перевода. Например, для (0x1а) — это: (1+1)*16 + а = (1+1)*16 + 10 = 42. Отсчет каналов начинается с частоты 2,4 ГГц, далее идет увеличение частоты на 1 МГц с увеличением номера канала на 1.

Далее подключаем модуль nRF24L01 к плате Ардуино или любому прототипу, собранному, допустим, на контроллере ATMEGA328P. Я собрал два образца на платах для прототипирования на контроллере ATMEGA328P по схеме контроллер + резонатор. Один образец подключаю к компу через плату Arduino UNO, а второй — через конвертор USB/TTL.

Мощность стабилизатора платы Arduino UNO вполне приемлема для подключения дополнительной импульсной нагрузки такой, как nRF24L01+ c адаптером 5В/3,3В для этого модуля или без адаптера.

На мониторе последовательного порта Arduino IDE увидите нечто похожее:

Если вы увидели похожую картинку — тест на работоспособность (исправность) радиомодуля и правильность его подключения пройден успешно. Замените радиомодуль другим, с которым планируете работать дальше.

Обратите внимание на чистый диапазон, начиная с канала 4а. У меня он остается чистым даже, если на расстоянии нескольких метров работает старая СВЧ-печь — мощный источник помех в этом диапазоне. А в общем-то, в Интернете рекомендуют выбирать каналы для своих проектов выше «60».

Если на каналах — шум, но радиомодуль определяется (смотрим преамбулу на мониторе Arduino IDE, подробно тут) — это однозначно копия. Не отчаивайтесь — ее тоже можно запустить.

Обращаю ваше внимание — на этом этапе не стоит выполнять никаких работ с паяльником. Тем же, кто не увидел похожей картинки и записал на видео процесс распаковки товара, разумно обратиться в торговую точку за заменой или возвратом денег.

Шаг 2

По схеме, аналогичной первой, собираем второй радиоузел. Это будет передатчик. В его контроллер загружаем скетч передатчика (под спойлером).

Передатчик без пауз в работе передает сигнал на канале 6f (112).

Подаем питание на сканер эфира и передатчик. Присмотритесь что творится на канале 6f и соседних с ним каналах. Сканер эфира при включенном передатчике рано или поздно прорисует единички или другие одноразрядные числа в шестнадцатиричном исчислении в области 6f, на который запрограммирован передатчик. Наберитесь терпения на 1 — 2 минуты, особенно при работе со сканером из примеров.

Увидев сигнал от передатчика делаем следующий шаг.

Шаг 3

Загружаем вместо сканера скетч приемника (под спойлером).

Логика работы приемника такая же, как и у сканера эфира, но он в отличие от сканера принимает сигналы только на частоте передатчика 6f и, как и сканер, не посылает автоответ. Скорость обмена информацией и размер контрольной суммы у приемника такие же, как у передатчика. После каждых 1000-и циклов прослушивания счетчик числа циклов обнуляется и выводится инфа о количестве принятых пакетов с передатчика в монитор порта Arduino IDE.

Включаем передатчик и приемник. Если приемник принимает хотя бы каждый третий пакет — это уже успех. У меня не получилось. Приемник по непонятным причинам принимал максимум 50 пакетов.

Подумал о увеличении мощности передаваемого сигнала с помощью дополнительной антенны. Для начала, подключил зажимом монтажный провод «папа-мама» к «корню» штатной антенны передатчика. И счастье привалило: сразу 999 принятых пакетов — максимально возможное число из 1 000!

Юзерам, которые захотят сделать все грамотно, придется поработать. Дополнительная антенна в данном случае — это отрезок коаксиального кабеля с волновым сопротивлением 50 Ом и длиной 115 мм. Антенна подключается к выводу 13 (АNT2) микросхемы nRF24L01+. Схему подключения и номиналы нескольких недостающих smd компонентов, которые надо поставить на плату радиомодуля, можно найти на принципиальной электрической схеме nRF24L01+ тут. Впрочем, есть альтернатива — в магазин за NRF24L01+PA+LNA

Теперь обязательно припаиваем между пинами GND и VCC обеих радиомодулей по два конденсатора. Керамический конденсатор, выполняющий роль ВЧ-фильтра, емкостью не менее 0,15 мкФ (чем больше, тем лучше) и электролит емкостью около 10 мкФ (можно и больше, но бесполезно) — это НЧ-фильтр. ВЧ-фильтр шунтирует высокочастотные помехи по цепи питания радиомодуля, а НЧ-фильтр сглаживает пульсации питания. Для надежности, цепи питания радиомодулей лучше непосредственно подпаять к пинам контроллеров.

Тут не могу не упомянуть о решении, предложенном GennPen в комментариях. Это установка на платах nRF24L01+ отсутствующего конденсатора С6 (1. 2pF). Конденсатор будет выполнять роль пассивной нагрузки. Без пассивной нагрузки модули nRF24L01+ со встроенной антенной «захлебываются» и часто нормально работают только на пониженных мощностях передатчика.

После того, как удалось установить наилучшую связь в паре передатчик — приемник, можно провести тестирование на определение дальности связи радиомодулей, задав мощность передатчика и свои критерии качества связи, допустим, 300 принятых пакетов из 1000. У меня пара в режиме усилителя PA_MAX обеспечивает связь «999:1000» в пределах квартиры через 3 кирпичных простенка.

И наконец, несколько слов о своей скромной статистике работы с модулем. В свое время купил 8 шт. радиомодулей nRF24L01+. Приобрел в разное время с интервалом больше года, в разных интернет-магазинах и, судя по стилю маркировки, от разных производителей. Сначала, безрезультатно повозившись с ними и начитавшись, как мучаются с nRF24L01+ другие, без особых проблем перешел на радиомодули LoRa. Жизнь заставила вернуться к nRF24L01+, поскольку заявленный максимальный ток потребления nRF24L01+ ниже, чем у LoRa. Кроме того, nRF24L01+совместим с малопотребляющим nRF52832 и другими. Это особенно важно для автономных систем с ограниченным ресурсом источников. В итоге удалось соединить все 8 радиомодулей по эфиру. Вывод простой — не надо верить мифам, что рынок переполнен неработающими копиями (клонами, репликами, подделками). Да и какой изготовитель станет запускать высокотехнологичное производство, чтобы тиражировать неработающие изделия! Клонов на рынке хватает. К сожалению, они не всегда стоят дешевле оригиналов. Уровень основных технических характеристик клонов ниже, чем у оригинальных продуктов. Единственная возможность отличить копию от оригинала — это тестирование. Основные признаки копии — это выше заявленного в спецификации энергопотребление, больший процент потерь пакетов и более низкая скорость при передаче.

Конечно, эти простые шаги не могут гарантировать решение всех проблем с nRF24L01 — мне их и не перечесть, но после того, как их сделаете, будете уверены, что:

  • радиомодули исправны;
  • подключены верно;
  • уровень сигнала передатчика, чувствительность приемника удовлетворительны и, в случае необходимости, обеспечиваются дополнительными мерами;
  • пара nRF24L01+ работает в режиме «передатчик-приемник» без откликов и ожидания на отклики. Иногда этого достаточно.

Все! Надеюсь, как и у меня, у вас в дальнейшем поубавится проблем с nRF24L01+ в своих проектах. Успехов!

Источник

Оцените статью