Android-застосунок для пошуку джерел радіосигналу тими радіомодулями, які фізично є в телефоні: Wi-Fi (2.4 / 5 / 6 ГГц), BLE та стільникові соти. Показує рівень сигналу, частоту/канал, карту зайнятості спектра і оцінку напрямку на джерело.
Телефон має одну антену без фазового приймача, тому кут приходу хвилі він виміряти не може. Напрямок отримується ротаційним скануванням:
- Обираєш ціль зі списку.
- Тримаєш телефон вертикально перед грудьми, екраном до себе.
- Повільно повертаєшся навколо себе на повні 360° (15–25 секунд), стежачи за лічильником «обхід %».
- Коли з'явиться стрілка — крутись, поки вона не вкаже вгору. Підказка внизу пише, куди і на скільки градусів повертати.
Колір стрілки = довіра до засічки: сіра — даних мало, жовта — засічка слабка, зелена — впевнена.
Тіло оператора дає 6–15 дБ затінення. Застосунок пише максимальний RSSI у сектори по 5° і будує полярну діаграму; пеленг рахується як векторна сума секторів з вагою RSSI − min, що прибирає постійну складову.
Реальна точність — 20–40°. У приміщенні з перевідбиттями максимум може виявитись у напрямку стіни-відбивача, а не джерела. Тому:
- Роби 2–3 засічки з рознесених точок і шукай перетин — одна засічка дає лише сектор.
- «Довіра» нижче 25% означає пласку діаграму: джерело або надто близько (сигнал у насиченні), або надто далеко.
- Дистанція показується вилкою («2–10 м»), а не числом: RSSI не дає точності краще за 3–5×. Кнопка «Калібр. 1 м» задає опорну точку для конкретного передавача і помітно покращує оцінку.
- Індикатор «наближаєшся / віддаляєшся» рахується по зміні RSSI, а не по абсолютному рівню, тому працює надійно навіть без калібрування.
| Режим | Частота оновлення RSSI | Придатність для пеленгу |
|---|---|---|
| BLE | кілька разів на секунду | найкраща |
| Wi-Fi, підключена мережа | ~1 Гц | добра |
| Wi-Fi, інші мережі | 1 скан / 30 с (тротлінг Android 9+) | слабка |
Тротлінг Wi-Fi вимикається в Developer options → Wi-Fi scan throttling. Без цього повний список мереж оновлюється надто рідко, щоб малювати діаграму.
Чого застосунок не робить і не може робити на голому телефоні:
- не бачить 3.3 ГГц, 4.9–5.0 ГГц, sub-GHz і аналогове відео 5.8 — Wi-Fi чіп віддає лише розпізнані пакети мереж, а не сирий спектр;
- не може розширити діапазон програмно: NFC працює на 13.56 МГц на відстані 4 см, GNSS лише приймає супутники без доступу до сирого спектра, UWB (де він є) вміє тільки міряти відстань до іншого UWB-пристрою;
- не показує рівень шуму й неідентифіковані випромінювачі;
- не є детектором дронів. ELRS 2.4 і цифрове відео не є Wi-Fi мережами, тому в списку їх не буде.
Для роботи з сирим спектром потрібен зовнішній SDR (RTL-SDR / HackRF) через OTG — це окрема архітектура з USB-хостом і DSP, і в цю збірку вона не входить.
- Створи порожній репозиторій на GitHub.
- Заливай вміст цієї папки в корінь репозиторію (важливо:
.github/workflows/build.ymlмає лежати саме в корені). - Push у гілку
mainзапустить збірку автоматично, або запусти вручну: вкладка Actions → Build APK → Run workflow. - Через 3–5 хвилин у секції Artifacts з'явиться
rfscout-debug-apk. Завантажуєш zip, всерединіapp-debug.apk. - На телефоні дозволь встановлення з невідомих джерел і встанови.
Gradle wrapper у репозиторії навмисно немає (це бінарний .jar) — workflow ставить Gradle 8.7 сам. Якщо збиратимеш локально в Android Studio, вона згенерує wrapper при першому відкритті проєкту.
ACCESS_FINE_LOCATION обов'язковий: без нього Android віддає порожній список Wi-Fi. Додатково NEARBY_WIFI_DEVICES (Android 13+), BLUETOOTH_SCAN (Android 12+), READ_PHONE_STATE для стільникових.
app/src/main/java/ua/sem/rfscout/
├── MainActivity.kt UI, сенсори, цикл опитування
├── Model.kt модель цілі, частота → канал/діапазон
├── PolarAccumulator.kt математика ротаційного пеленга
├── SignalTracker.kt тренд наближення, вилка дистанції
├── CompassView.kt круглий циферблат зі стрілкою
└── scanners/ WifiScanner, BleScanner
Компас береться з TYPE_ROTATION_VECTOR з ремапом осей під вертикальне утримання телефона. Магнітне схилення не враховується — пеленг магнітний. Перед роботою відкалібруй компас «вісімкою» і тримайся подалі від металу й акумуляторів.