Сегодня с помощью Arduino UNO построим сканер радиочастот в полосе 2400Мгц , который обнаруживает сигналы с передающих устройств и печатает статистический график. Что позволяет определить, например, на какой WiFi канал лучше повесить домашний роутер или на какой частоте будут лучше работать ваши радио-датчики «умного дома».

Для начала понадобится сам радиомодуль на базе чипа Nordic Semiconductor nRF24L01+.

Nordic Semiconductor nRF24L01+

Nordic Semiconductor nRF24L01+

Вот такой радио-модуль можно приобрести с антенной задорого NRF24L01 + Wireless Transceiver Module + SMA Antenna Arduino 2.4G за $3 или без антенны совсем дешево — всего за $0,91. Ссылки не реферальные, дешевые, у топ-продавцов. Названия даю полностью как они пишутся продавцами на Ebay для того, чтобы вы сами могли найти всё при желании.

nRF24L01-antenna

Краткие характеристики:

  • Диапазон частот 2,401 — 2,4835 Ггц
  • 126 каналов. Нулевой канал начинается с 2400 Мгц и далее с шагом 1 Мгц, например 70 канал находится соответственно на 2470 Мгц. При установке скорости передачи 2Mbps занимается ширина канала в 2 Мгц
  • Питание 1,9 — 3,6 В (рекомендуется 3,3 В)

Вот распиновка модуля.

Pinout nRF2401L+

Pinout nRF2401L+

Некоторые советуют сразу же припаять керамический конденсатор 100nF (можно 1µF, 10µF) на выводы питания RF для избежания электрических помех.

Далее понадобятся соединительные провода, такие чтобы можно было обойтись без дополнительных макетных плат. Вот эти провода мама-папа 40PCS Dupont wire jumper cables 20cm 2.54MM male to female For Arduino всего за $2. Заказывайте побольше, пригодится.

dupont-wire-cable

Arduino UNO я полагаю у вас уже есть. Далее соединяем все красиво по схеме:

Arduino UNO nRF24L01+
3,3V VCC (лучше внешнее питание)
D8 CE (chip enable in)
SS pin D10 CSN (chip select in)
SCK pin D13 SCK (SPI clock in)
 MOSI pin D11 SDI (SPI Data in)
MISO pin D12 SDO (SPI data out)
  IRQ (Interrupt output, не подсоединен)
GND GND

Где

  • SCK (Serial ClocK) — тактирование (синхронизация).
  • MOSI / MI (Master Out Slave In) — вход данных.
  • MISO / MO (Master In Slave Out) — выход данных.
  • CE (Chip Enable) — управляет радио интерфейсом. В режиме приема модуль «прослушивает» эфир в поисках предназначенного ему пакета, в режиме передачи кратковременный импульс CE передает в эфир содержимое буфера FIFO.
  • CSN (Chip select not) — выбор ведомого устройства на шине SPI низким уровнем.
  • IRQ — выход прерывания,чаще всего не используется. Необходим для немедленной реакции микроконтроллера при приеме нового пакета данных

rf24-scanner-02

rf24-scanner-01

Заливаем скетч. Исходный код скетча nrf24-scanner.ino здесь. После заливки скетча в Arduino в мониторе наблюдаем следующую картинку.

rf24-scanner-99

Что мы видим? Во-первых то, что наш радио-модуль рабочий. Первой строчкой напечатана примерная раскладка для WiFi каналов.

Далее наш радио-сканер сканирует весь диапазон 2,4 Ггц, всего 64 канала с шагом 2Мгц (и скоростью передачи 2Mbps). Каждый канал сканируется по 1000 раз, происходит всё довольно быстро. Смотрите функцию scanChannels(). После чего на экран печатается статистика по каждому из каналов.

Величина зашумлённости показывается псевдографическими символами « .:-=+*#%@». Чем больше символ (правее), тем большее количество раз обнаружен сигнал на канале. Т.е. пробел — пусто — ничего не обнаружено, точка «.» — что-то есть, и т.д. «@» — радио сигнал обнаружен много раз.

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

Вот и всё, такой радио сканер для бедных :)