8-900-374-94-44
[email protected]
Slide Image
Меню

Nrf24L01 распиновка – Описание подключения nrf24l01 к Arduino, распиновка и библиотеки

Радиомодули nRF24L01 - Как подключить - AVR project.ru


 Давно уже обзавелся я этими модулями, да все никак руки до них не доходили попробовать. В общих чертах, это радиомодули, работающие на частоте 2.4 ГГц с подключением к микроконтроллеру по SPI-интерфейсу. Для работы требуется напряжение в диапазоне от 1,8 до 3,6 вольт, входы/выходы толерантны к 5 вольтам, поэтому при подключении к пяти вольтовым устройствам дополнительные согласующие цепи ставить нет необходимости.

 Для подключения радиомодуля выведена гребенка контактов, распиновка приведена ниже:


 Так как на плате модуля предусмотрен разъем для подключения, для удобства собрал небольшую платку.  На этой отладочной плате стоит микроконтроллер Atmega8A с обвязкой из внешнего кварца, кнопки сброса и пары светодиодов, ответный разъем под модуль и разъем для подключения программатора. 

 


 Схема всего этого дела выглядит следующим образом:


 Для подключения радиомодуля использованы ножки аппаратного SPI микроконтроллера, поэтому разъемы подключения модуля и подключения программатор дублируют друг друга.  Это сделано, чтобы удобней было прошивать микроконтроллер на отладночной платке, например, если использовать программатор который подает на схему 5 вольт, а для NRF24L01 это слишком большое напряжение. Чтобы перепрошить управляющий микроконтроллер, достаточно выдернуть трансивер с платы, перепрошить и всунуть его обратно - без лишней возни с перепайкой.

 Код для работы с модулем целиком взят с примера AN #151 на официальном сайте mcselec.com  Я только разделил программную часть приемника от программной части передатчика.
 Код приемника залил в микроконтроллер на тестовой платке. Плату подключил к компьютеру через переходник USB-UART на FT232RL, а питание (3,3 вольта) у меня подается через программатор USBasp

 Горит зеленый светодиод (D1) - приемник готов к работе. При приеме данных загорается красный светодиод (D2)


 Вторую схему - для передатчика - собрал на макетке по той же схеме. Разъем на трансивере оказался не подходящим для того чтобы вставлять плату в макетку и поэтому соединил все проводами. 

 Скорость для соединения приемника с терминалом выставляется 19200 бод. При старте приемник напечатает "RX_device" а дальше - то, что получит с передатчика. В примере передаются постоянные данные "AA+BB+CC+11+#посылки"

 На скрине ниже видно, что номера посылки прыгают, это из-за того что я включал/выключал передатчик пока бродил по двору (максимальное удаление метров 30-40). А видимо проверка CRC в приемнике не пропускала некоторые посылки от передатчика из-за ошибок передачи. 


 

 На мое удивление, когда искал примеры использования этих трансиверов с Bascom-AVR, ничего кроме вышеозвученного апнота #151 не находилось. Хотя в среде ардуинщиков эти трансиверы весьма распространены и под них написано уже куча кода и библиотек. Надо исправлять ситуацию 🙂 Особенно радует цена на них - мне мои достались по 5$ за пару http://www.ebay.com/). 

 Сначала у меня возникли проблемы с зависанием модуля при передаче данных, но спасибо товарищу

Valera18 который протестировал эти модули и указал на существующие ошибки в коде. Теперь работает как надо!

Ниже доступны для скачивания материалы статьи:

исходники и прошивки

 

Оптимизированный код от пользователя Valera18

В коде удаленны не используемые (действия и регистры).
Данная прошивка передаёт данные "AA+BB+CC+11+№посылки".

Внимание!!! прошивка только для "ПЕРЕДАТЧИКА" Attiny2313, специально оптимизирована, занимает 37% в памяти.



Внимание!!! прошивка только для "ПЕРЕДАТЧИКА" Atmega8, специально оптимизирована, занимает 9% в памяти.

Внимание!!! прошивка только для "ПРИЁМНИКА" Atmega8, специально оптимизирована, занимает 11% в памяти.

Теперь для проектов свободного места в памяти "много".

avrproject.ru

NRF24L01 – подключение к Arduino

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

Дистанционное управление можно разделить на множество подвидов: управление по Bluetooth, через Wi-Fi, по радиосвязи и многие другие. Большинство из этих видов коммуникации можно связать с Arduino и затем создавать на этой основе собственные проекты.

В этой статье речь пойдет о радиомодуле NRF24L01, который способен обмениваться данными с Ардуино на частоте 2,4ГГц.

Примеры компоновки этих модулей вы можете сейчас видеть на картинке ниже:

Этот модуль представляет собой приемник и передатчик одновременно. Он достаточно миниатюрный и компактный в размерах. Для работы с модулем важно будет знать следующие его характеристики:

  • Рекомендуемое питание  от 3.3 до 3.6 В;
  • Дальность действия до 100 метров на открытой местности и до 30 метров в помещениях;
  • Число каналов: 125;
  • скорость: <2 Мб/c;
  • Максимальная мощность на выходе: +20 дБм.

Так что же еще может NRF24L01 помимо беспроводного управления? Ранее уже было сказано, что модуль позволяет, как передавать данные на плату Ардуино, так и принимать их с нее. Это позволяет собрать устройство, используемое для мониторинга и сбора данных. Например, для сбора информации о климате и состоянии воздуха в доме/квартире/помещении и т. д, и отправке этих данных на ваш телефон или другое средство контроля.

Для реализации проекта из этой статьи нам потребуются следующие компоненты:

Основная цель данной операции – это соединить два микроконтроллера нашим радиомодулем, чтобы добиться обмена данными между ними.

Подключается модуль посредством интерфейса SPI.

Для подключения придется задействовать на плате 7 контактов, два из которых отвечают за питание:

Наглядная схема подключения изображена на рисунке ниже:

Для написания кода и проверки работоспособности NRF24L01, нам понадобятся две библиотеки. Их нужно скачать и переместить в раздел Library в той папке, где у вас установлена Arduino IDE.

Это библиотеки RF24и SerialFlow.

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

voltiq.ru

Работа с беспроводным трансивером nRF24L01

Когда то много недель назад получил я заказанные много месяцев назад по сходной цене из китая беспроводные трансиверы (приемопередатчики) на 2.4ГГц nRF24L01. Только спустя много времени наконец дошли руки их поковырять, а заодно задокументировать процесс в статье а-ля "пример работы с nRF24L01".

Начали всплывать проблемы:
 - на этот раз в Proteus не оказалось такой микрухи, так что лафа кончилась, паять и отлаживать придется в железе, но благо чип уже сам на плате и со всеми нужными выведенными контактами
 - отлаживать придется 2 шт одновременно, одна передает, другая принимает, вероятность неработоспособности связки равна произведению вероятностей неработоспособности каждой из двух микросхем
 - на 2 передатчика понадобится и 2 контроллера
 - питается передатчик напряжением до 3.3В, придется мутить стабилизатор и конфигурировать фьюзы МК, чтоб работали на пониженном напряжении, впрочем не такая уж это большая проблема

Распиновка nRF24L01

Для начала познакомимся с выводами nRF:
1-2. Питание, от 1.9 до 3.6В, не более (рекомендуется 3В)! однако на другие пины можно подавать до 5.25В (in datasheet we trust).
3. CE: Chip Enable. Зависит от режима работы. Если чип сконфигурен как приемник, то высокий (HIGH) уровень на CE позволяет чипу мониторить среду и получать пакеты. Низкий (LOW) уровень переводит чип в Standby-I и такая возможность становится уже недоступна. Если чип настроен на передачу, CE всегда держится на низком уровне. В этом случае для передачи данных нужно положить их в очередь FIFO и дернуть CE минимум на 10мкс (LOW->HIGH, 10мкс, HIGH->LOW).
4. CSN. Chip Select Not. Not, потому что активный уровень - низкий. Пин всегда держится на высоком уровне, переводим на низкий уровень для начала общения между чипом и МК по SPI. Когда пообщались - снова возвращаем на высокий уровень.
5. SCK. Стробирующий сигнал SPI. Дежурный уровень - LOW. Переход L->H говорит чипу что можно читать бит с MOSI и писать на MISO. nRF24 - SLAVE устройство. Оно никогда не инициирует связь с МК само, строб-сигнал SCK генерирует именно МК.
6-7. MOSI+MISO. Собственно линии дуплексной передачи данных от чипа к МК и обратно. Когда МК вывел новый бит на линию MOSI и/или считал бит с MISO, он может дергать SCK, чтобы дать понять чипу, что он может читать/писать следующий бит.
8. IRQ. Interrupt Pin. Дежурный уровень - высокий. Пин полезно мониторить со стороны МК, дабы понять, не случилось ли чего интересного, например новый пакет пришел (прерывания настраиваются в чипе по SPI). Активный уровень - низкий. Когда случается прерывание - читаем статусный регистр и смотрим, что случилось. Всего прерываний три.

Как общаться с nRF24L01

Для начала можно пообщаться с самим чипом по SPI и например почитать его внутренние регистры. Для этого достаточно при инициализации МК не забыть задрать линию CSN к питанию, это дежурный режим; чтобы начать сеанс - прижимаем CSN к земле, чип понимает это как начало передачи данных по SPI и готовится выдать на MISO свой статус-регистр. Чип делает это всегда при начале общения по SPI. Если мы хотим что то писать в регистры чипа или читать из них, для начала мы должны дать соответствующую инструкцию (1 байт), и пока мы ее пишем на линию MOSI, чип выдает на MISO свой статус-регистр, тоже 1 байт.

Пожалуй отладку можно начать с чтения и записи регистров nRF и выдачи этих данных например на терминал.

Байт инструкции передается начиная со старшего бита. 

Далее, не отпуская линии CSN, дергаем SCK и читаем ответ чипа. Сколько байт читать зависит от того, какой регистр читаем, это нужно задавать в коде программы. Никакого признака "окончания передачи" тут нет. Регистры в основном имеют длину 1 байт, исключение составляют регистры TX_ADDR и RX_ADDR_P*. Как видно из иллюстрации, байты ответа также приходят "вперед ногами", т.е. сначала старший бит (7).

К примеру, чтение регистра EN_RXADDR (адрес 02h) будет проходить так:

1. CSN - к земле, начинаем передавать байт 02h (0b 0000 0010) с наложенной маской инструкции R_REGISTER (00h)

2. вывели бит 7, дернули SCK вверх-вниз, сдвинули байт логически влево, и так 8 раз для передачи всего байта инструкции

3. далее еще 8 раз дергаем SCK, читая уровни на линии MISO в байт ответа

4. поднимаем линию CSN, обмен завершен

Для записи байта в регистр EN_RXADDR последовательность такая же, только в п.1 маска будет W_REGISTER (20h) и байт инструкции получится уже 02h OR 20h = 22h. а в п.3 вместо чтения в байт из MISO напротив, пишем из байта на линию MOSI, опять же сначала бит 7, потом 6 и т.д.

Ближе к делу

Q. как настроить в рабочий режим и подготовить чип к передаче?

A. перед началом работы в обязательном порядке нужно выставить бит PWR_UP в регистре CONFIG. При подаче питания на чип этот бит по-умолчанию равен 0. Впрочем это не означает, что чип выключен и не подает признаков жизни. По SPI он общается всегда. Также выставляем бит PRIM_RX  того же регистра в 1 для режима приема и в 0 для режима передачи. По-умолчанию бит равен нулю, т.е. чип настроен на передачу. Также стоит отметить, что при старте включены все прерывания. Для приема данных обязательно надо настроить размер пакета, т.е. записать число больше нуля в RX_PW_P0.  На принимающей стороне настройка длины пакета должна быть такой, чтобы умещались передаваемые данные! 

Q. Как работать с прерываниями?

A. При генерации прерывания (низкий уровень на пин IRQ), читаем STATUS регистр, определяем событие. Например установлен бит RX_DR (Data Ready): пришел новый пакет. Читаем пакет,

обязательно пишем 1 (не 0, а 1, ага) на место этого бита, чтобы сбросить флаг прерывания. Не забываем записать получившийся байт обратно в STATUS регистр.

Q. Ну и как уже что то передать в эфир?

A. Если дерево падает в глухом лесу, производит ли оно грохот? А если пакет передать в никуда? Попробуем.

На рисунке обозначено:

 - Antenna - интервалы активности в эфире, т.е. собственно отправка и прием пакетов

 - PTX и PRX Mode - режимы, в которых находятся передатчик (PTX) и приемник (PRX)

Из диаграммы становится ясно (и это описано в ДШ), что передача начинается нифига не по заднему фронту на линии CE, а через 130мкс (128+2 на рисунке) после переднего фронта. А значит с отпусканием CE можно не спешить. Также показано, что CE поднимается аккурат перед генерацией прерывания TX_DS, по какому событию - неизвестно, как неизвестно и зачем вообще ее поднимать, если мы в режиме передатчика.

Итак, перед процедурой передачи необходимо убедиться, что CE прижато к земле. Отправляем инструкцию W_TX_PAYLOAD (A0h) (это передача по SPI, соответственно про CSN тоже не забываем), а следом 3 байта данных, которые хотим передать пришельцам. Это будут 3 буквы. Я еще не решил какие. После того, как передали наши 3 буквы по SPI и подняли CSN, нужно дать понять чипу, что пора передавать данные в эфир. Это делается дерганием линии CE: ее нужно поднять как минимум на 10мкс, как показано на рисунке, затем снова придавить к земле на все время передачи. По окончании передачи будет сгенерировано прерывание: либо TX_DS (если данные переданы), либо MAX_RT (если не удалось передать в пределах заданного числа попыток). В любом случае линию CE пора поднимать (зачем), а бит прерывания очистить в регистре записью в него единицы. А вот зачем поднимать линию CE:

nRF24 goes into standby-I mode if CE is low. Otherwise next payload in TX FIFO is transmitted. If TX FIFO is empty and CE still high, nRF24 enters standby-II mode

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

Q. как переходить из режима RX в TX и обратно?

A. записью бита PRIM_RX = 1 в регистр CONFIG мы переводим чип в режим приемника. по-умолчанию при подаче питания чип в режиме передачи (PRIM_RX = 0). Разобраться как при этом управлять линией CE... А вот как: переводя бит PRIM_RX и 1 или 0 меняем режим чипа, но чтобы его собственно активировать - надо поднять линию CE, иначе чип будет как бы в режиме готовности, но неактивен. Для PRX это означает, что слушать эфир начнем, как только поднимем линию CE. Для PTX это значит что передавать данные из TX FIFO начнем как только поднимем линию CE. Опускание линии CE означает переход в режим энергосбережения.

Q. где настраивается сколько байт можно пихать в TX FIFO для передачи?

A. "The width of TX-payload is counted from number of bytes written to the TX FIFO from the MCU". По-русски говоря, чип имеет счетчик байт, и к моменту начала SPI обмена с целью положить в TX FIFO данные, этот счетчик сбрасывается и начинает считать, сколько байт мы ложим в TX FIFO. Положить можно вроде как от 1 до 32 байт. Сколько положили - все передаст. R_RX_PAYLOAD тоже выдает от 1 до 32 байт. 

Q. как происходит адресация и распределение пакетов по пайпам?

A. адреса пайпов задаются в регистрах RX_ADDR_P*. Нужно внимательно следить, чтобы не оказалось 2 одинаковых адресов в регистрах RX_* одного чипа. НО адреса отправителя и получателя должны совпадать! Т.е. регистры TX_ADDR и RX_ADDR_P0 обоих чипов должны быть равны между собой (итого 4 одинаковых значения). Чтобы получить пакет на одном nRF, нужно сначала его RX_ADDR_P0 сконфигурировать известным адресом, затем с другого nRF посылать по этому адресу пакеты (адрес вводится на передатчике в регистр TX_ADDR).

On the PTX the TX_ADDR must be the same as the RX_ADDR_P0 and as the pipe address for the designated pipe.
эта фигня гласит, что на передатчике (PTX) адрес для отправки должен совпадать с собственным RX_ADDR_P0 адресом (чтобы автоматом разруливать ACK), а также с RX_ADDR_P* пайпа приемника (PRX) (чтобы вообще пакет дошел до назначения).
ACK разруливаются сами только при включенном Enhanced ShockBurst mode.
Однако, по-умолчанию все чипы имеют один и тот же TX_ADDR, который к тому же равен RX_ADDR_P0 (чтобы работал авто-ACK), т.е. для quick-start конфигурировать адреса чипов необязательно! Все чипы будут рассылать на всех и принимать данные ото всех.

Q. Надо ли задавать RX_PW_P0 для работы авто-ACK.
A. На передатчике RX_PW_P0 задавать необязательно

Q. как просканировать передатчики в округе?
A. Регистр CD содержит 1, если мы в RX режиме видим несущую (кто-то передает). вот походу и все, promisc-mode? кажется нету.

Q. что будет если передать 10 байт, а приемник настроен принимать только 3?
A. не пробовал, ДШ читать уже лень, вероятно приемник нифига не получит, потому что в передаваемом пакете CRC будет далеко за пределами 3 байт. Вопрос пока открытый.
UPD: Если размер PAYLOAD не совпадает - передачи не будет. В принципе для передатчика нет такого понятия как размер пакета. Он передает столько байт, сколько по SPI получит. Но если это число байт отличается (хоть на 1 больше или меньше) от установленного на приемнике RX_PW_P0 - приемник не получит пакета.

А также:
- если скорости устройств (RF_SETUP, 0.25..2Mbps) не совпадают  или если каналы устройств (RF_CH) не совпадают - передачи не будет.
- если не хватает отведенных чипом 15-ти попыток передачи пакета, можно использовать команду REUSE_TX_PL и пытаться отсылать хоть до бесконечности. Суть в том, что в каждом пакете есть PID и приемник точно отличит повторный пакет среди потока. Может быть ситуация, что ACK не дошел до передатчика и тот отправил пакет снова, приемник поймет, что пакет повторный, и отправит ACK снова.
Не стоит мутить повторную отправку руками, через W_TX_PAYLOAD, это неверный путь, да и ненужный труд, все уже реализовано в железе.

Troubleshooting

1. не хочет отвечать по SPI

как оказалось перепутал линии IRQ и MISO, а еще думаю, чего оно мне на IRQ какие то 6 импульсов выдает, так то были 6 байт ответа при обмене по SPI. Осциллограф, великая вещь.

2. потери пакетов на PTX. Переключаемся в режим PRX, детектим несущую (CD), если есть - значит коллизия на канале (более одного передатчика одновременно), меняем канал, пробуем передавать снова.

3. не срабатывает ни одно из прерываний при отправке тестового пакета в пустоту (ожидалось MAX_RT). перепутал W_TX_PAYLOAD с R_RX_PAYLOAD. затем оказалось, что RX_PW_P0 сбрасывается после вызова процедуры отправки в эфир (W_TX_PAYLOAD). цикличный мониторинг регистра STATUS не давал результатов, биты прерываний всегда сброшены. далее стало ясно, что сбрасывается вообще все, и конфиг и RX_PW*. происходит это после 10us-строба на линии CE. Не хватало питания. Сброс чипа.
4. Подключил второй чип, настроил как приемник. Наблюдается необъяснимая мистика, PTX передает 11 пакетов без каких-либо прерываний, молча, затем 3 пакета с прерыванием TX_DS, остальные - с MAX_RT. На принимающей стороне такой же трансивер в режиме приемника, настроенным RX_PW_P0=3 (как и на передатчике). Мониторинг разнообразных регистров PTX и PRX выявил опять же сброс их значений вследствие нехватки питания (уже 2 трансивера на одном TL431), поставил электролит - все заработало как часы!

Итоги

Таки добился стабильной передачи. 

Настройка передатчика сводится к установке PWR_UP в регистре CONFIG и прижатию линии CE к земле.

Настройка приемника - установка PWR_UP и PRIM_RX в CONFIG, RX_PW_P0 > 0 и подтягивании CE к питанию.
Далее мониторим линии IRQ, читаем биты прерываний из регистра STATUS и не забываем их сбрасывать, читаем полученные данные из pipe 0.

Материалы

blog.sci-smart.ru

NRF24L01+PA+LNA SMA Antenna Wireless Transceiver communication module 2.4G 1000m

Делаем умный дом гараж.

После покупки гаража возникла проблема подсветки ворот. Немного поясню: гараж находится в многоэтажном гаражном кооперативе, внутри которого длинные коридоры; освещение в коридорах есть, но оно чисто формальное. Плюс ко всему, днём для экономии электроэнергии часть ламп в коридорах выключают (обычно через одну). То есть вроде коридор освещён, а в потёмках найти с первого разу замочную скважину на темных воротах не всегда удаётся.
Кому интересно, как я ликвидировал данную проблему, прошу под кат (много текста).
Кстати, это мой сотый обзор на данном сайте.

Сначала очень долго пытался выработать идею.
Выбирал варианты из следующего списка (некоторые варианты частично опробовал):
1) Использовать фонарик
2) Использовать розетку с радиоканалом
3) Использовать RFID карточки
4) Попытаться построить что-нибудь с радиоканалом на Arduino
5) Комбинация вышеперечисленных вариантов

Немного пробегусь по вариантам
От использования фонарика я отказался. Большой таскать не хотелось, а маленький много не освещал. Если маленький вешать на ключи, то со временем он становиться потрёпанным. Плюс ко всему, если таскать на ключах, то его во время открытия гаража приходиться отстёгивать, иначе затея с фонариком теряет смысл. Короче, фонарик у меня не прижился. Хотя это универсальный и достаточно дешёвый способ.
Второй идеей было использовать розетку с радиоканалом. В принципе мысль нормальная, только таскать с собой пульт не хотелось. Я почему-то не стал рассматривать этот вариант шире, хотя думаю, что зря. У меня дома есть подобный пульт и мне он показался большим. Хотя думаю, что если бы поискал на Китайских сайтах, то возможно нашёл бы пульт с размером, как от автомобильной сигнализации. Ещё меня останавливало то, что во время подъезда машины к гаражу мне пришлось бы доставать пульт, включать свет и, что самое главное, не забыть его выключить. То есть я хотел полной автоматизации – моя машина подъехала, свет включился, машину загнал в гараж, свет выключился. Сразу предвижу вопрос, почему не освещать фарами ворота? Дело в том, что я обычно проезжаю дальше своего гаража по коридору, не глуша двигатель иду открывать ворота и потом задним ходом заезжаю в гараж.
По поводу использования RFID технологии отказался сразу. Не хотел, чтобы мне изуродовали какое-либо устройство, которое висит снаружи. Плюс ко всему, мне пришлось бы в темноте искать устройство, прикладывать к нему чип (карточку или метку), а потом открывать гараж. В этом плане радиоуправляемый пульт лучше подходит, так как нет внешних электронных компонентов у гаража.
С идеей автоматизации я ходил долго, все обдумывал. Осталось выбрать компоненты и начать воплощать в жизнь.
Начал смотреть в интернете, на чем можно реализовать радиоканал. Сначала мне попались радиомодули с частотой 433.9 МГц. У них приёмник и передатчик выполнены раздельно. Модули небольшие, относительно дешёвые (около 2,5$), но отказался я от них по следующим причинам:
— для организации более-менее нормального протокола мне на каждую сторону нужен и передатчик и приёмник.
— нормальной библиотеки под Arduino я не нашёл. Есть VirtualWire, но там, чтобы организовать полностью структуру сетевого протокола, нужно очень много кодить.
Потом мне попались радиомодули на чипе nRF24L01+ (есть ещё версия без плюса в конце, но они хуже по параметрам). Все, что на прошлых модулях было минусом, в этих модулях было плюсом. Приёмник и передатчик был в одном корпусе, есть много разных библиотек с нормально реализованным сетевым протоколом, цена меньше доллара за штуку. В итоге, дальше искать не стал и заказал лот из 4 штук.
Модули приехали и провалялись несколько месяцев в столе на работе (работы было много и до реализации своего проекта все никак руки не доходили).
Настал момент, когда я собрал на двух макетках (Arduino Uno и Arduino mini) клиентскую и серверную часть.
Клиентская часть

Серверную часть отдельно сфотографировать не успел (дальше будут фотографии).
Залил в макетки программы сервера и клиента из библиотеки Mirf и стал смотреть, что приходит в терминал. Это был первый облом :-). В терминале было пусто. Что я только ни делал. Перепроверил все подключения, менял местами сервер и клиент. Потом плюнул на все и упростил клиентскую и серверную часть до минимальной программы (заодно изучил работу библиотеки Mirf). Как ни странно, но все равно не заработало. Точнее работало, только если в Arduino mini была залита клиентская часть, и она после Reset-a отправляла только один пакет. Стал шерстить интернет и на одном из форумов увидел совет — повесить по питанию 3,3 В, которые идут на питание модуля nRF24L01+, конденсатор ёмкостью несколько десятков микрофарад. Немного поясню: так как nRF24L01+ питается от 3,3 В, а на Arduino mini такого напряжения нет, то пришлось использовать линейный стабилизатор LM1117-3,3. В связи с тем, что я напряжение по 5В считал нормальным, то и конденсаторы на выходе LM1117-3,3 вешать не стал.
После того как поставил конденсатор по питанию 3,3В, сразу все заработало.
Быстренько написал код для двух модулей и пошёл в гараж на испытания.
Первые испытания прошли не очень удачно. Я вывел информацию приёма пакета на один светодиод. В итоге, больше половины пакетов терялось (или я просто не видел, как приходит пакет). Пришлось модернизировать программу, делать задержки, добавил ещё один светодиод, который отвечает за выходной канал. Новые испытания в гараже показали, что хоть пакеты и теряются, выходной канал все равно срабатывает через раз.
Шеф, всё пропало, все пропало! Гипс снимают, клиент уезжает… Если серьёзно, то на тот момент я попал в тупик. Купил модули, собрал макет, осталось только все разместить в приглядном виде, а тут такой облом. На работе начали советовать вместо штатной антенны на модуле припаять медный кусок провода длиной 31 мм (четверть длины волны), но до этого не дошло. Поначалу я забросил проект из-за большого количества дел на работе перед отпуском, а потом, просматривая электронные компоненты у проверенного продавца на eBay, я наткнулся на модуль nRF24L01+ с усилителем и нормальной антенной. Радиус действия, в описании у данного модуля, был в 10 раз больше, чем у обычного (1000 м). Самое главное, цоколевка разъёма была такая же, так что переделывать ничего не пришлось. Заказал.
Пришло все в индивидуальных антистатических пакетах. В заказе было много чего другого :-).

Модуль поближе


Здесь видно, что некоторые элементы криво припаяны, но на работу это не влияет. Как ни странно, я заказывал два модуля, и на обоих подобный брак.
Модуль вместе с антенной

Быстро прицепив модуль к старой макетке, пошёл в гараж. Приём пакетов уверенный, даже слишком. Пробивает бетонную и кирпичную стены и железные ворота.
Пока ждал модуль, решил разработать полностью схему и вытравить плату. Не знаю почему, но я был уверен, что модуль с усилением будет работать, как надо.
Схема довольно простая:

Разработал плату

Если честно, то схема у меня была в голове, а плату я разрабатывал с учётом всех особенностей выводов Arduino. Так в данном случае лучше оптимизировать соединения. А уж потом когда плата разведена, я рисовал схему.
Собранная плата:


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

Собирать гаражную часть решил в пластиковом щитке. Заодно я там решил поместить реле напряжения и автоматы (они мне нужны были для других нужд).
Вот так это выглядит в сборе

В качестве лампы я решил использовать светодиод на 10Вт. Разместить светодиод решил в корпусе от светильника (у нас такие корпуса используются в коридоре в гаражном кооперативе)

Внутренности (патрон и крепление) у светильника я демонтировал, а на освободившееся место прикрутил радиатор от старого процессора Pentium II Slot1. На данный радиатор поместил светодиод, предварительно намазав его термопастой.

Потом собрал светильник и повесил перед гаражом

Серверную часть, которая должна находится в машине, я на тот момент переделывать не стал. Она у меня была собрана из макетки, на которую припаивались разъем для питания, линейный стабилизатор LM1117-3,3, конденсатор и колодки. В колодки вставлялись Arduino и модуль nRF24L01+.
На столе все подключил (светодиоды, кнопку, провода питания и светильник) и проверил. Дома все работало замечательно.

В гараже прикрепил щиток

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

Попробовал подавать питание на серверную часть (та, что должна стоять в машине), светильник перед гаражом загорался. На тот момент я уже обдумывал, как мне переделать серверную часть, чтобы она была поменьше, и установить её в машине. Как-то, занимаясь делами в гараже, случайно услышал, что щёлкнуло реле. Вышел за ворота — свет горит, на щитке зелёный светодиод, который дублирует включение реле. При этом у меня серверная часть была отключена. Пока обдумывал ситуацию, свет погас. Через некоторое время я увидел, как вспыхнул красный светодиод (показывает присутствие сигнала), а потом зажегся зелёный светодиод вместе с щелчком реле, которое включило свет в коридоре. Явно происходило что-то странное в работе моего устройства (ещё один облом). Я сначала подумал, что помеха по питанию включает релюшку. Дело было под вечер, поэтому я отключил свой щиток от сети и пошёл домой обдумывать сложившеюся ситуацию. Дома открыв схему устройства и код программы, ещё раз обдумал все и пришёл к выводу, что аппаратно все сделано правильно и никакая помеха не может включить сразу два канала одновременно на Arduino (у меня сработало реле на выходе D3 и светодиод на выходе D10).
Чтобы представлять логику программы попытаюсь описать её как можно проще.

Клиентская часть в гараже постоянно излучает в эфир некое число (пусть будет Х) и ждёт определённое время ответ. Серверная часть в машине находится в спящем режиме (работает по прерыванию). Как только она получает сигнал, она проверяет, совпадает ли присланное число с Х. Если совпадает, то серверная часть отсылает некое число (пусть будет Y) и засыпает.
Клиентская часть, получив ответ, проверяет правильность числа Y и, если верификация пройдена, то включается свет и зажигается дублирующий зелёный светодиод на 10 секунд. Красный светодиод (признак присутствия правильного сигнала) загорается на секунду.
Если в эти 10 секунд происходит ещё один обмен пакетами, то эти 10 секунд начинают отсчитываться от последнего обмена пакетами.
Кнопка нужна, чтобы принудительно включить свет перед гаражом на 30 секунд. Этого времени достаточно, чтобы закрыть ворота на ключ.
Проанализировав программу и почитав ещё про модули nRF24L01+, выяснил, что подобные чипы устанавливаются в большинство беспроводных клавиатур и мышей. Адрес сервера и клиента я задал по умолчанию, как в примерах на этот модуль. Вероятнее всего, поблизости (а может и неочень) находилось беспроводное устройство (клавиатура или мышь), которое тоже по дефолту имело сетевое имя. В определённый момент мой клиент поймал ответ с числом Y и принял этот пакет за ответ от серверной части. Если учесть, что последний байт адреса передатчика может иметь любое значение, то полное совпадение пяти байт в адресе передатчика может и не соблюдаться.
Короче…. Я взял и поменял имя(адрес) серверной и клиентской части на уникальные, и ложные срабатывания прекратились. По крайне мере, я находился в гараже несколько раз по паре часов и случайно у меня светильник не включался. На всякий случай я придумал диалоговый алгоритм, где вероятность совпадений были бы очень маленькими. Но похоже, он не пригодится мне.

Вот в принципе и все…
Чуть не забыл написать, как я внедрил серверную часть в машину.
Тут все просто. Моим вторым обзором на MySku в далёком 2011 году был обзор преобразователя на 5В.
Этот преобразователь я использовал в прошлой машине для запитывания регистратора и сейчас он у меня стоит в новой машине и также питает регистратор.
Подключал я его по такой схеме:

Здесь блок DRL подключает фары через 5 секунд после пуска двигателя.
Так вот параллельно регистратору я подключил серверную часть. Токи потребления там небольшие (20-30 мА). При токе потребления регистратора 600-700мА, токи в 30 мА выглядят мизерными. При глушении двигателя питание с блока DRL снимается и, естественно, преобразователь обесточивается.

Чтобы уменьшить размеры серверной части, пришлось и здесь сделать плату, в которую жёстко впаял Arduino. Это позволило уменьшить все устройство по высоте примерно на 1 см (величина колодки).
Мне как раз перед переделкой пришла специальная бумага для ЛУТ, вот её как раз решил и испытать.

как я делал плату серверной части

Специально этот кусок обзора спрятал, так как технология ЛУТ описывалась неоднократно (даже на этом ресурсе).
По поводу специальной бумаги. Поначалу это кажется расточительством, покупать бумагу для ЛУТа. Раньше всегда использовал глянцевую бумагу из журналов. Даже несколько раз фольгу использовал, но всегда результаты не удовлетворяли меня. По краям тоненькие проводники оставались на бумаге, приходилось маркером подкрашивать «сбойные» участки.
Короче говоря уговорил свою жабу и купил за 1,75$ 10 листов формата А4 специальной бумаги .
Если честно, я даже не ожидал такого качества получаемой платы с использованием этой бумаги. С бумагой из журналов не идёт ни в какое сравнение.
Вот результаты перевода с бумаги на плату

Немного увеличения

Здесь видны контуры платы, да и на самой бумаге тонера не осталось. Раньше, когда я использовал бумагу из журналов, тонер как бы «расслаивался» пополам. То есть когда снимал бумагу, то на ней можно было заметить рисунок платы (на плате он тоже оставался).
Вот результат травления в хлорном железе

Когда мыл готовую плату от остатков хлорного железа, то тонер с контура платы слез в некоторых местах, но контур платы остался (на фотографии его не видно). Раньше у меня хлорное железо практически в 100% подобные линии съедало.
Лужёная плата

Впервые попробовал паять SMD элементы с помощью паяльной пасты. ХМ, лучше бы обычным паяльником запаял.

Здесь я плату ещё не мыл, так как тестировал её с новыми конденсаторами.

Готовая плата серверной части



Кварц на Arduino всю малину испортил. Пришлось паять колодку для nRF24L01+. Если бы кварц по высоте был меньше, то nRF24L01+ впаял бы в плату, тем самым уменьшив высоту ещё на 3-4мм.
Для сравнения с прошлой платой (мой первый макет серверной части)



Размер уменьшился.
Дальше я поместил серверную часть в термоусадку и инсталлировал в машину.
Пора заканчивать обзор.

Теперь небольшие размышления/выводы.
Частично я реализовал то, что хотел. Почему частично? Да потому что остаётся открытым вопрос, как включать свет, когда приходишь в гараж рано утром. Я думал сделать пульт на основе чипа Atmega и модуля nRF24L01+, но все упирается в питание устройства и корпус. Сейчас пока обдумываю разные варианты.

mysku.ru

Обзор адаптера NRF24L01 – RobotChip

Адаптер NRF24L01 специально разработан для модулей NRF24L01+ и NRF24L01+PA+LNA, в котором установлен стабилизатор напряжения на 3.3В (AMS1117), а так-же выведен разъем для подключения к микроконтроллерам и платам Arduino

Технические параметры

►  Напряжение питания: 4.8В … 12В
►  Выходное напряжение: 3.3В
►  Максимальный рабочий ток: до 800 мА
►  Рабочая температура: -40 … 125 °C
►  Габариты: 27 х 19 х 12 мм

Общие сведения

На адаптере расположено два основных разъема с подписантами выводами: двухрядный устанавливают радио модуль и однорядный для соединения с платами arduino. Как говорилось ранее, адаптер оснащен стабилизатором напряжения на 3.3В (чип AMS1117).

Первая группа:
►  CE: Выбор ведомого
►  CSN: Режим работы (прием или передача)
►  SCK: Тактирование
►  MOSI: Прием данных
►  MISO: Передача данных
►  IRO: Выход прерывания

Вторая группа:
►  GND: Питание модуля NRF (GND)
►  VCC: Питание модуля NRF (3.3В)
►  CE: Выбор ведомого
►  CSN: Режим работы (прием или передача)
►  SCK: Тактирование
►  MOSI: Прием данных
►  MISO: Передача данных
►  IRO: Выход прерывания

Третья группа:
►  VCC: Питание 5В
►  GND: Земля

Принципиальную схему адаптера NRF24L01 можно посмотреть ниже.

Подключение NRF24L01+ черед Адаптер 

Необходимые детали:
►  Arduino UNO R3 x 2 шт.
►  Провод DuPont, 2,54 мм, 20 см x 2 шт.
►  Кабель USB 2.0 A-B x 2 шт.
►  Радиомодуль nRF24L01+ x 2 шт.
►  Адаптер для NRF24L01+  x 2 шт.

Подключение:
Устанавливаем радиомодуль NRF24L01+ в адаптер через двухрядный разъем (как показано на рисунке). Затем с помощью проводов DuPont подключаем адаптер NRF24L01+ к Arduino (MISO-12, MOSI-11, SCK-13), выводы CE (ChipEnable) и CSN (ChipSelectNot) подключаем к D10 и D9, далее необходимо подключить питание, вывод VCC к Arduino (+5V), а вывод GND к Arduino (GND), скетч для двух Arduino можно посмотреть в этой статье.

Купить на Aliexpress
   Контроллер Arduino UNO R3
   Комплект проводов DuPont, 2,54 мм, 20 см
   Радио модуля NRF24L01+
   Радио модуля NRF24L01+PA+LNA 
   Адаптер для NRF24L01+

Купить в Самаре и области

  Купить контроллер Arduino UNO R3
  Купить комплект проводов DuPont, 2,54 мм, 20 см
  Купить радио модуля NRF24L01+
  Купить радио модуля NRF24L01+PA+LNA
  Купить адаптер для NRF24L01+

robotchip.ru

Радиомодуль Mini NRF24L01 + 2.4ГГц для Arduino RKP-NRF24L01-Mini - Радиомодули


Под заказ
Под заказ

 

Радиомодуль RKP-NRF24L01-Mini для Arduino – это миниатюрный модуль приемопередатчика на частоте 2.4 ГГц.

Модуль имеет размер всего 18 x 12 мм и может быть использован для поверхностного SMD монтажа. В остальном же, обладает такими же характеристиками как и другие модули на одноименной микросхеме от Nordic Semiconductor - NRF24L01.

  • Радио модуль для Arduino RKP-NRF24L01-Mini позволяет связать устройства радиоканалом передачи данных.
  • Модуль предназначен для создания различных робототехнических проектов. Например, для управления мобильным роботом. Или для сбора показаний дистанционных датчиков (один радиомодуль может держать связь одновременно с множеством других). Для построения беспроводных сетей «умного дома», как сканер радиочастот и многое другое.
  • Модуль работает на частоте 2.4 ГГц, что обеспечивает достаточно высокую скорость передачи данных и на большие расстояния (до 100 м на открытом пространстве и до 30 м в помещении).
  • Радиомодуль RKP-NRF24L01-Mini это одновременно и цифровой приемник и передатчик. Соответственно для наладки связи нужно как минимум два таких радио модуля.
  • Радиомодуль способен работать на одном канале максимум с шестью передатчиками одновременно и одним приёмником. Но если некоторые устройства будут иметь одинаковые адреса, их количество может быть увеличено.
  • Микросхема nRF24L01+ имеет функции энергосбережения.
  • Радио модуль RKP-NRF24L01-Mini прост в использовании и без проблем подключается к контроллерам Arduino.
Характеристики:
Напряжение: 1.9 - 3.6 В (рекомендуется 3.3 В)
Несущая частота: 2.4 ГГц
Расстояние передачи/приема: до 100 м на открытом пространстве, до 30 м в помещении
Скорость передачи/приема: Модуляция: GFSK
Поддержка функции мульи-приемника (прием данных одновременно от 6 передатчиков)
Пиковое потребление при передаче 2 Мбит/с: 12.5 мА
Потребление в состоянии покоя: 400 мкА
Потребление в ждущем режиме: 32 мкА
Интерфейс: SPI
Размер: 18 x 12 мм
Количество каналов: 126

Связь происходит в диапазоне частот 2,4–2,4835 ГГц. Частота, на которой будут работать модули, определяется номером канала. Они имеют шаг 1 МГц. Каналу 0 соответствует частота 2,4 ГГц, каналу 76 частота 2,476 Ггц.

Распиновка модуля Mini NRF24L01

Обозначение выводов RKP-NRF24L01+
+3.3V – питание 3,3 В
GND – общий провод
CE – включение радиотракта микросхемы высоким уровнем
CSN – Chip Select Not активный низкий уровень. Если установлен низкий уровень, то модуль отвечает на SPI команды. Это более важный сигнал выбора МС чем сигнал CE
SCK – тактирование шины SPI, до 10 МГц
MOSI – используется для передачи данных от микроконтроллера к устройству
MISO – для передачи данных из устройства в микроконтроллер
IRQ – выход сигнала для запроса прерывания при отправке и получении пакета

Принципиальная схема

Lля правильной работы модуля рекомендуется использовать стабилизированное напряжение 3.3 В.

Радиомодуль nRF24L01 подключается к Ардуино при помощи SPI интерфейса. Существует несколько библиотек Arduino для работы с радиомодулями nRF24L01. От выбранной библиотеки может зависеть способ подключения модуля к Ардуино. Наиболее популярные библиотеки - RF24 и Mirf.

   

Товар был добавлен в наш каталог Понедельник, 02 Октября 2017

robot-kit.ru

Радиомодуль NRF24L01 2.4ГГц с внешней антенной RKP-NRF24L01+PA+LNA - Радиомодули


Под заказ
Под заказ

 

Радиомодуль RKP-NRF24L01+PA+LNA с внешней антенной для Arduino – это модуль приемопередатчика на частоте 2.4 ГГц.

  • Радио модуль для Arduino RKP-NRF24L01+PA+LNA позволяет связать устройства радиоканалом передачи данных.
  • Модуль предназначен для создания различных робототехнических проектов. Например, для управления мобильным роботом. Или для сбора показаний дистанционных датчиков (один радиомодуль может держать связь одновременно с множеством других). Для построения беспроводных сетей «умного дома», как сканер радиочастот и многое другое.
  • Модуль работает в диапазоне частот 2.4~2.5 ГГц, что обеспечивает достаточно высокую скорость передачи данных и на большие расстояния (до 1000 м на открытом пространстве). Встроенный винтовой разъём позволяет заменять антенну, а усилитель радиосигнала – увеличить дальность связи.
  • Модуль поддерживает LNA и PA усиление.
  • Радиомодуль RKP-NRF24L01+PA+LNA это одновременно и цифровой приемник и передатчик. Соответственно для наладки связи нужно как минимум два таких радио модуля.
  • Дальность радиомодуля RKP-NRF24L01+PA+LNA будет напрямую зависеть от скорости передачи данных. При скорости 2 Мбит/с радиус действия составит 520 м, при скорости 1 Мбит/с – 750 м, при 250 кбит/сек – до 1.1 км. Данные приведены для прямой видимости. Максимальная длина передаваемого пакета – 32 байта.
  • Радиомодуль способен работать на одном канале максимум с шестью передатчиками одновременно и одним приёмником. Но если некоторые устройства будут иметь одинаковые адреса, их количество может быть увеличено.
  • Микросхема nRF24L01 имеет функции энергосбережения.
  • Модуль поддерживает пересылку потерянных пакетов.
  • Радио модуль RKP-NRF24L01+PA+LNA прост в использовании и без проблем подключается к контроллерам Arduino.
Характеристики:
Напряжение: 3 - 3.6 В
Несущая частота: 2.4 ~2.5 ГГц
Расстояние передачи/приема: до 1000 м (на открытом пространстве)
Скорость передачи/приема: 2 Мбит/с до 520 м (открытое пространство)
Скорость передачи/приема: 1 Мбит/с до 750 м (открытое пространство)
Скорость передачи/приема: 250 кбит/сек до 1000 м (открытое пространство)
Максимальная выходная мощность: +20 дБм
Усиление PA: 20 дцБ
Усиление LNA: 10 дцБ
Усиление антенны: 2 дБи
Пиковое потребление при передаче: 115 мА
Пиковое потребление при приеме: 45 мА
Интерфейс: SPI
Размер: 40.8 x 15.3 мм
Количество каналов: 128

Связь происходит в диапазоне частот 2,4–2.527 ГГц. Частота, на которой будут работать модули, определяется номером канала. Они имеют шаг 1 МГц. Каналу 0 соответствует частота 2,4 ГГц, каналу 76 частота 2,476 Ггц.
Соответственно есть возможность задать номер канала, мощность и скорость передачи сигнала.

Распиновка модуля RKP-NRF24L01+PA+LNA

Обозначение выводов RKP-NRF24L01+
GND – общий провод
VCC – питание 3,3 В
CE – включение радиотракта микросхемы высоким уровнем
CSN – Chip Select Not активный низкий уровень. Если установлен низкий уровень, то модуль отвечает на SPI команды. Это более важный сигнал выбора МС чем сигнал CE
SCK – тактирование шины SPI, до 10 МГц
MOSI – используется для передачи данных от микроконтроллера к устройству
MISO – для передачи данных из устройства в микроконтроллер
IRQ – выход сигнала для запроса прерывания при отправке и получении пакета

Принципиальная схема

Подключение к Arduino
Радиомодуль нельзя подключать к источнику питания 5В без адаптера, оптимальное напряжение питания составляет от 3.3В до 3.6В.

Радиомодуль RKP-NRF24L01+PA+LNA подключается к Ардуино при помощи SPI интерфейса. Существует несколько библиотек Arduino для работы с радиомодулями nRF24L01. От выбранной библиотеки может зависеть способ подключения модуля к Ардуино. Наиболее популярные библиотеки - RF24 и Mirf.

         

Товар был добавлен в наш каталог Понедельник, 02 Октября 2017

robot-kit.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *