O czym zapomniał Ci powiedzieć sprzedawca #3 – czyli dlaczego echosonda XJ02B wysyła prawdziwy obraz, którego nie da się odczytać
To trzecia część serii, w której sprawdzam, ile z tego, co widzisz na ekranie echosondy, jest pomiarem, a ile rysunkiem. W poprzednim odcinku Lucky FF918 okazał się głębokościomierzem z termometrem, który kolorowy echogram rysuje z pamięci, a wielkość ryby losuje.
Dziś na stole leży coś znacznie tańszego i bez nazwy: czarna kula za dwieście kilkadziesiąt złotych z chińskiego marketplace’u, sprzedawana jako „2023 new Wireless Fish Finder”. Na spodzie naklejka SONAR 125 kHz i tyle. Bluetooth, aplikacja Fish Helper, brak nawet nazwy producenta na obudowie.
I tu zaczyna się zaskoczenie, bo XJ02B wysyła prawdziwy przekrój echa, a nie cztery liczby jak FF918. Brzmi jak awans o klasę. Policzyłem jednak, ile z tego przekroju wypada na rybę, i wyszło, że to za mało, żeby cokolwiek wiarygodnie ocenić.

Cała rozmowa sondy XJ02B z telefonem to 140 bajtów, z czego 120 to pomiary echa
Podłączyłem telefon do logowania ruchu Bluetooth i rozłożyłem to, co przylatuje z wody, bajt po bajcie. Ramka ma stałą długość 140 bajtów i przychodzi około sześć razy na sekundę.
- 120 bajtów to kolejne pomiary głośności echa, od powierzchni do zadanej głębokości
- 2 bajty to głębokość
- 2 bajty to temperatura
- 3 bajty to gotowy werdykt sondy: głębokość celu i jego „rozmiar” w skali od 1 do 3
- reszta to znaczniki początku i końca, poziom baterii, nastawy i suma kontrolna
Dla porównania: Lucky FF918 wysyłał dziewięć bajtów i cztery liczby mówiące wyłącznie „na tej wysokości coś wisi”. Tutaj dostajemy realny przekrój. Sto dwadzieścia brzmi dużo. Zaraz zobaczysz, dlaczego to nadal za mało.

XJ02B oświetla naraz warstwę grubą na 16 centymetrów i to wyznacza wszystko inne
To jest rzecz, której nie tłumaczy żaden opis produktu, a bez niej nie da się zrozumieć reszty.
XJ02B nie ogląda całej toni naraz. Wysyła jeden krótki impuls dźwiękowy, który ma pewną długość w wodzie, i słucha, co wraca. W każdej chwili słyszy odbicie tylko z tej jednej warstwy, która akurat przelatuje. Warstwa sunie w dół z prędkością dźwięku, czyli około półtora kilometra na sekundę, a sonda zapisuje po drodze 120 kolejnych odczytów głośności.
Przy 125 kHz jedno drganie trwa 8 mikrosekund. Przetwornik potrzebuje kilkudziesięciu drgań, żeby się rozkołysać, więc impuls trwa realnie od 12 do 23 centymetrów drogi w wodzie, zależnie od nastawionej głębokości. Przy 10 metrach wody to około 16 centymetrów.
I stąd wynika najważniejsze ograniczenie tego sprzętu: cokolwiek jest cieńsze od tej warstwy, nie ma kształtu. Nie narysuje łuku, nie zrobi plamki o jakimś rozmiarze. Zrobi tylko tyle, że jeden odczyt ze 120 będzie głośniejszy od sąsiadów.
XJ02B nie widzi, jak duża jest ryba: różnica między trzydziestką a pięćdziesiątką to ćwierć odczytu
Policzmy to wprost. Przy 10 metrach wody XJ02B przełącza się na zakres 18 metrów, więc jeden odczyt obrazu odpowiada 15 centymetrom toni, a impuls ma 16 centymetrów.
| Głębokość wody | Jeden odczyt obrazu | Ryba 30 cm | Ryba 50 cm | Różnica |
|---|---|---|---|---|
| 3 m | 2,5 cm | 7,1 odczytu | 8,7 odczytu | 1,6 odczytu |
| 5 m | 5,1 cm | 3,8 odczytu | 4,6 odczytu | 0,8 odczytu |
| 10 m | 15,2 cm | 1,5 odczytu | 1,7 odczytu | 0,26 odczytu |
| 20 m | 22,9 cm | 1,3 odczytu | 1,4 odczytu | 0,17 odczytu |
Ćwierć odczytu to mniej niż jeden piksel obrazu. Na 20 metrach różnica spada do jednej szóstej. Nawet w najlepszym przypadku, czyli na 3 metrach, to półtora odczytu.
Wniosek jest niewygodny, ale jednoznaczny: XJ02B fizycznie nie jest w stanie zobaczyć, jak duża jest ryba. I nie dlatego, że odczytów jest za mało. Dlatego, że jej własny impuls jest grubszy niż ryba. To sufit fizyki tego sprzętu, którego żadna aktualizacja oprogramowania nie ruszy.
Rozmiar ryby w XJ02B to głośność echa, a nie długość ryby
Skoro wielkości zmierzyć się nie da, XJ02B musi ją skądś wziąć. Bierze ją z głośności odbicia i wrzuca w trzy przedziały: cicho to jedynka, głośniej dwójka, najgłośniej trójka. Ten jeden bajt trafia do aplikacji, a ta rysuje odpowiednią ikonkę.
Problem w tym, że głośność echa zależy przede wszystkim od dwóch rzeczy, które z długością ryby nie mają nic wspólnego:
- jak ryba jest ustawiona w chwili pomiaru, bokiem czy pyskiem do sondy
- jak daleko od środka wiązki przepływa, bo przy brzegu stożka echo jest wyraźnie słabsze
Trzeba oddać sprawiedliwość: w odróżnieniu od Lucky FF918 rozmiar nie jest tutaj losowany. Jest liczony. Tylko liczony z wielkości, która o długości ryby mówi bardzo niewiele. Ta sama ryba, w osi stożka i przy jego krawędzi, dostanie dwa różne rozmiary.
Dno w XJ02B to po prostu najgłośniejszy odczyt ze 120
Skoro XJ02B ma 120 liczb, musi jakoś zdecydować, która z nich jest dnem. Sprawdziłem to w jej oprogramowaniu: idzie po kolei w dół i zapamiętuje najgłośniejszy odczyt. Ten ogłasza dnem.
Nie sprawdza, czy echo jest płaskie. Nie sprawdza, czy twarde. Nie porównuje z poprzednim pingiem. Po prostu najgłośniejszy.
Konsekwencja: jeżeli pod łódką stoi zbita ławica albo coś twardego wisi nad dnem i odbije mocniej niż samo dno, to zostanie uznane za dno. A nawet tego nie zauważysz, bo aplikacja prowadzi linię dna filtrem uśredniającym po szesnastu ostatnich pomiarach. Zamiast skoku narysuje łagodne zbocze. Dno podjedzie do góry i wróci, jakbyś przepłynął nad górką, której tam nie ma.
W toni XJ02B prawie wszystko może zostać rybą
Sprawdziłem, po czym XJ02B rozpoznaje rybę. Warunki są trzy i to cała lista:
- echo jest głośniejsze niż próg zależny od nastawionej czułości
- cel jest co najmniej 0,6 metra nad dnem
- cel jest głębiej niż 0,7 metra pod sondą
Nie ma analizy kształtu echa. Nie ma sprawdzania, jak długo echo trwa. Nie ma śledzenia celu między kolejnymi pingami. Decyzja zapada na jednej próbce z jednego pingu.
| Co jest naprawdę pod łódką | Co pokaże XJ02B |
|---|---|
| ryba | ikona ryby |
| pływający liść, patyk, kożuch glonów | ikona ryby |
| pęcherzyki, zawiesina po deszczu, warstwa termiczna | ikona ryby |
| zawieszona gałąź, zerwana linka | ikona ryby |
| trawa wyższa niż 0,6 m od dna | ikona ryby, i to same czubki |
| trawa niższa niż 0,6 m od dna | nic, jest niewidzialna |
| kłoda leżąca na dnie | nic, zlewa się z dnem |
Działa to więc w obie strony i obie są złe. To, co naprawdę chcesz wiedzieć przed położeniem zestawu, czyli gdzie jest trawa i gdzie leży zaczep, nie ma na tym ekranie żadnej reprezentacji.
Aplikacja Fish Helper ma dwa obrazy dna, a domyślny nie dotyka pomiarów
W ogólnodostępnej aplikacji są dwa niezależne sposoby rysowania dna i to nie są dwa style graficzne, tylko dwa różne sposoby powstania obrazu.
- Tryb Sonar bierze te 120 pomiarów i robi z nich prawdziwy echogram.
- Tryb General nazywa się w kodzie dosłownie „obliczanie obrazu wirtualnego dna”. Nie dotyka pomiarów ani razu. Bierze jedną liczbę, czyli głębokość, wygładza ją i wypełnia wszystko pod linią gotowym obrazkiem z pliku, który przewija się w kółko.
Tryb General jest domyślny. Po instalacji aplikacja startuje właśnie w nim.
Przełączysz na Sonar i trafiasz na kolejną pułapkę. Przy włączonych ikonach ryb, a są włączone domyślnie, aplikacja przed narysowaniem obrazu znajduje dno i kasuje do zera wszystko powyżej. Całą toń, wszystkie słabe echa, całą roślinność. Zostaje ślad dna i pływające nad nim ikonki.
Masz więc wybór, o którym nikt nie mówi: albo ikonki ryb, albo obraz toni. Nigdy jedno i drugie naraz.

Pierwsze 0,7 metra pod XJ02B jest ślepe, a poniżej 0,61 m aplikacja pokazuje kreski
Przetwornik zachowuje się jak dzwonek. Kiedy nadaje, i jeszcze długo po tym, jak przestanie, jest głuchy, bo własny dźwięk zagłusza mu wszystko, co wraca. Z pomiarów na wodzie wychodzi strefa martwa około 70 centymetrów.
Ryba stojąca 60 cm pod sondą nie istnieje. Zanęta tuż pod łódką też nie. Na płytkiej wodzie robi się z tego poważny problem, bo dno wpada sondzie w tę strefę martwą.


Ta żółta warstwa to nie jest osobna informacja o dnie. To maksimum skali: ogłuszony odbiornik wpisuje wartość największą z możliwych, a paleta maluje maksimum na żółto. Prawdziwe dno gubi się w środku tej plamy.
Poniżej pewnej granicy aplikacja po prostu odmawia współpracy. W kodzie jest twardy warunek: jeśli głębokość jest mniejsza niż 0,61 metra, pokaż kreski zamiast liczby. Nie „zmierz dokładniej”, nie „ostrzeż użytkownika”. Kreski.
Jest jeszcze jedno zachowanie, które widać tylko na płyciźnie. Kiedy XJ02B zgubi dno, aplikacja podstawia sobie w to miejsce 76 metrów i prowadzi do nich linię tym samym filtrem uśredniającym. Zamiast skoku rysuje łagodne zbocze. Stąd bierze się góra, która nagle wyrasta na płytkiej wodzie. Nikt jej nie zmierzył.
XJ02B na 10 metrach oświetla koło o średnicy 8 metrów

XJ02B nie świeci w dół jak laser, tylko jak latarka: im głębiej, tym szerszy krąg oświetla. Sprzedawcy podają dla tej klasy sprzętu 90 stopni, w co nie wierzę, bo to nie zgadza się z fizyką. Przy 125 kHz fala w wodzie ma około 12 milimetrów, a żeby uzyskać stożek 90 stopni, element musiałby mieć jakieś 8 milimetrów, czyli byłby mniejszy od fali, którą nadaje. Realnie wychodzi około 45 stopni, co potwierdza inna sonda z tej samej rodziny, deklarująca przy tej samej częstotliwości właśnie tyle.
| Głębokość wody | Średnica oświetlanego koła (45°) |
|---|---|
| 5 m | ponad 4 metry |
| 10 m | ponad 8 metrów |
| 20 m | ponad 16 metrów |
Przy 10 metrach wody cel, który widzisz, może być dokładnie pod Tobą albo cztery metry z boku. Nie masz jak tego rozstrzygnąć. I przypominam, że wcale nie musi to być ryba.
XJ02B nigdy nie mierzy tego, co jest dokładnie pod łódką
To wynika wprost z poprzedniej sekcji, ale jest na tyle ważne, że zasługuje na osobne miejsce. Skoro sonda oświetla koło o średnicy ośmiu metrów, to słyszy odbicia z całego tego koła naraz. A ponieważ dnem ogłasza najgłośniejszy odczyt, który dotarł najwcześniej, w praktyce podaje głębokość najbliższego mocnego odbicia z całego koła, a nie tego punktu, nad którym akurat stoisz.
Na płaskim dnie nie ma to znaczenia, bo najbliższy punkt jest akurat pod łódką. Problem zaczyna się wszędzie tam, gdzie dno nie jest płaskie, czyli dokładnie w miejscach, których szukasz.
Na stoku sonda pokazuje odległość prostopadłą, a nie głębokość
Kiedy przepływasz nad skarpą, płytsza krawędź stoku wpada w stożek i jej echo wraca wcześniej niż echo spod łódki. XJ02B podaje więc odległość do najbliższego punktu stoku, czyli w praktyce odległość prostopadłą do powierzchni dna. Zawsze w jedną stronę: za płytko.
| Nachylenie dna | Rzeczywista głębokość pod łódką | Co pokaże XJ02B | Błąd |
|---|---|---|---|
| 5° | 10,00 m | 9,96 m | 4 cm |
| 10° | 10,00 m | 9,85 m | 15 cm |
| 15° | 10,00 m | 9,66 m | 34 cm |
| 20° | 10,00 m | 9,40 m | 60 cm |
| 25° | 10,00 m | 9,06 m | 94 cm |
| 30° | 10,00 m | 8,66 m | 1,34 m |
Na stoku 20 stopni, czyli typowej skarpie żwirowni, XJ02B skłamie o sześćdziesiąt centymetrów. Na stromej krawędzi o ponad metr. I nie zasygnalizuje tego w żaden sposób, bo z jej punktu widzenia wszystko jest w porządku: znalazła mocne echo i je zaraportowała.
Roślina albo przeszkoda w stożku przejmuje pomiar głębokości
Ten sam mechanizm działa przy przeszkodach i jest jeszcze bardziej mylący. Jeżeli gdziekolwiek w oświetlanym kole stoi kępa trawy, leży gałąź albo wystaje kamień, a odbije mocniej niż miękkie dno pod łódką, XJ02B poda głębokość tej przeszkody i uzna ją za dno.
| Głębokość wody | Średnica oświetlanego koła | Obiekt 1 m nad dnem w tym kole |
|---|---|---|
| 5 m | 4,1 m | sonda może podać 4 m zamiast 5 m |
| 10 m | 8,3 m | sonda może podać 9 m zamiast 10 m |
| 20 m | 16,6 m | sonda może podać 19 m zamiast 20 m |
Praktycznie oznacza to, że mapując łowisko taką sondą, nie mierzysz dna, tylko obwiednię wszystkiego, co odbija w promieniu kilku metrów. Miejsce oznaczone jako 9 metrów może być dziewięciometrowym szczytem kępy trawy stojącej cztery metry od trasy przelotu, podczas gdy pod samą łódką jest dziesięć metrów czystego dna.
I na tym polega różnica między szerokim a wąskim stożkiem, o której sprzedawcy nie mówią. Wąski stożek to nie jest gorsza specyfikacja, tylko lepsza. Im węższe koło, tym większa szansa, że to, co widzisz, jest naprawdę pod Tobą.
Jak to sprawdzić samemu, bez żadnego sprzętu
Nie musisz mi wierzyć na słowo. Trzy próby, każda do zrobienia w kilka minut:
- Przełącz tryb z General na Sonar. W General dno jest gładkie i ma zawsze tę samą fakturę. W Sonar robi się ziarniste i pojawiają się słabe echa. Ta sama woda, ta sama sekunda, a różnica polega wyłącznie na tym, czy aplikacja użyła pomiaru.
- Wyłącz ikony ryb i popatrz, ile nagle pojawiło się w toni. To wszystko było tam cały czas, tylko zostało wykasowane, żeby zrobić miejsce na ikonki.
- Wejdź na płyciznę poniżej 0,7 metra. Zobaczysz uparte 0,7 m niezależnie od rzeczywistej głębokości, żółtą warstwę zalewającą ekran, potem kreski zamiast liczby, a na koniec górę wyrastającą z niczego.
Podsumowanie – czego XJ02B nie mówi wprost
- Nie odróżni ryby 30 cm od 50 cm, bo jej własny impuls jest dłuższy niż ryba. Przy 10 metrach różnica wynosi ćwierć odczytu obrazu.
- „Rozmiar ryby” to głośność echa, zależna głównie od ustawienia ryby i jej położenia w stożku, a nie od długości.
- Każde odbicie w toni może zostać rybą. Roślinność przy dnie i zaczepy nie mają na ekranie żadnej reprezentacji.
- Dno to najgłośniejszy odczyt, bez sprawdzania czegokolwiek. Ławica nad dnem potrafi je zastąpić, a filtr zamieni to w łagodne wzniesienie.
- Nie mierzy tego, co jest pod łódką, tylko najbliższe mocne odbicie z koła o średnicy ośmiu metrów. Na stoku 20 stopni myli się o 60 cm, zawsze za płytko.
- Pierwsze 0,7 metra jest ślepe, a poniżej 0,61 metra aplikacja pokazuje kreski zamiast głębokości.
- Domyślny tryb rysuje dno z obrazka, a włączone ikony ryb kasują całą toń.
Innymi słowy: to jest głębokościomierz z prostym wykrywaczem odbić. Głębokość mierzy porządnie i to jest realnie użyteczne. Wykrywa, że w toni coś jest, i to też ma wartość. Ale na tym koniec.
Wobec Lucky FF918 to i tak awans, bo tam obraz dna był w całości rysunkiem, a wielkość ryby dosłownie losowana. Tutaj pomiar istnieje i jest prawdziwy. Jeśli jednak kupujesz to z myślą, że zobaczysz rybę, ocenisz jej wielkość albo odczytasz strukturę dna przed położeniem zestawu, to kupujesz coś, czego ten sprzęt nie umie i nie będzie umiał.
Czego nie sprawdzałem i o czym dlatego nie piszę: jakości samego przetwornika, realnej czułości na małe cele, zachowania w mule i w zaroślach oraz porównania z markowym sprzętem na tej samej wodzie. Opisuję wyłącznie to, co udało się ustalić: co ta sonda wysyła i co aplikacja z tym robi.
Źródła i materiały do sprawdzenia
- NOAA – What is sonar? – podstawa działania echosondy: nadany impuls, czas powrotu echa, przeliczenie na odległość
- NOAA – jak dźwięk rozchodzi się w wodzie – około 1480-1500 m/s, czyli stała, na której opiera się każde przeliczenie czasu echa na głębokość
- FAO Fisheries Technical Paper 240: Fisheries Acoustics – kąt wiązki, siła celu i powód, dla którego głośność echa nie mówi nic o długości ryby
- Bluetooth SIG – przegląd techniczny – transport BLE, którym XJ02B wysyła swoją ramkę do telefonu
W następnym odcinku: sonda z tej samej rodziny protokołu, która deklaruje dwie częstotliwości, 125 i 330 kHz. Sprawdziłem, czy naprawdę je ma.
Tak to u nas działa: zanim cokolwiek trafi do naszych łódek, przechodzi przez ten stół. A jak coś nie przejdzie – mówimy o tym głośno, nawet jeśli akurat nikt tego nie chce słyszeć.

Asystent pomocy Extreme One