• v1.0.7 9ae07e5b30

    highway released this 2026-09-20 15:27:48 +03:00 | 0 commits to main since this release

    Verified on hardware against real thorium mantle and uranium ore sources, plus offline replay harness.

    Isotope Identification Fixes

    • Low-Energy Fit Region: Lowered template fit cutoff to 45 keV (FIT_MIN_KEV = 45.0f). Restores detection for Am-241 (59.5 keV), Co-57 (122.1 keV), Tc-99m (140.5 keV), and Th-234 (63/92 keV), eliminating previous Am-241 misidentification as Uranium Ore.
    • Candidate Ranking Inversion: Replaced separated chain/standalone candidate slots with an integrated candidate pool sorted by significance (\sigma) descending. Strong artificial sources (such as Cs-137 or I-131) are no longer demoted below weak background chain members.
    • Bi-212 Double Branch Factor: Corrected chainBranch("Bi-212") to 1.0f, eliminating double multiplication that suppressed Tl-208 and Po-212 template amplitudes by 36%.
    • Ambient Radon Recovery: Allowed slow upward adaptation for natural indoor radon levels (1–3%), preventing permanent outdoor-to-indoor false positive lockup.
    • Dynamic Template Invalidation: Templates::invalidate() is now called whenever backgrounds are recorded, loaded from SD, toggled, or erased, preventing stale background matrices.

    Display & Storage Improvements

    • Screen 4 Advice: Elapsed time and progress bars now use the active measurement window duration instead of cumulative device connection time.
    • Screen 5 Multi-Line Gold Highlight: All emission lines matching any peak found in the spectrum are highlighted in gold.
    • SD Export Counts: Export headers now sum actual spectrum channel counts rather than analysis window total counts.

    Verified on Hardware

    • Thorium Gas Mantle: 21.3 sigma, 37% spectrum fraction, identified as THORIUM with zero Uranium cross-talk.
    • Uranium Ore: 26.0 sigma, 26% spectrum fraction, identified as URANIUM in 6 seconds.
    • Bidirectional Window Step: Instantaneous cleanup of stale counts when swapping sources.
    Downloads
  • v1.0.6 b9a7343f62

    highway released this 2026-08-31 16:16:52 +03:00 | 2 commits to main since this release

    Verified on hardware against three real sources - uranium ore, a thorium mantle and ordinary background - plus a 52-check regression suite that runs on the device itself from synthetic spectra.

    The main correction

    A gamma spectrum contains peaks that are not gamma lines: backscatter, the Compton edge, single and double escape peaks, sum peaks and 511 keV annihilation. The matcher assumed every peak was a line and handed these to whichever nuclide sat nearest. That single omission, rather than three separate faults, was behind phantom Na-22, Ba-133 and Am-241 on plain background. All of them are now modelled, and such a feature may corroborate a nuclide but never establish one.

    Decay chains

    At this resolution both natural chains fit the same peaks - their line ratios differ by 0.4 percent, far below what 8.4 percent FWHM can separate - so real uranium ore scored 97 percent uranium against 70 percent thorium and was reported as a mixture. The dominant chain is now named, and a mixture is reserved for a genuine balance.

    Two chain members with one line each now corroborate one another, and a single member matched at 8 sigma can carry its chain. Requiring one nuclide to show two lines had lost a thorium mantle whose Pb-212 was unmistakable at 8.4 sigma.

    An honest display

    An elevated sample is never called background. Working out which nuclide is present takes counting time; noticing that something is there does not, so the device says SOURCE FOUND and keeps working rather than making a claim it cannot support.

    Verdicts are graded - URANIUM? below 80 percent confidence, with the number shown - because a result computed from counting statistics is never simply true or false. The quality grade describes the identification rather than the strongest peak, so an unidentified bump no longer reads EXCELLENT. Natural chains and K-40 must be above ambient to earn a verdict, since every wall contains both. Anchors and verdicts have hysteresis, so evidence near a threshold no longer empties the candidate list or retracts a correct answer.

    Regression suite

    Build with ANALYSIS_SELFTEST=1. Synthetic spectra are built from the nuclide library at the detector real resolution, with a Compton continuum and reproducible noise, and the real analyser is run over them. It fails on real defects: it caught a background false positive never seen on hardware, and rejected two attempted fixes that broke other cases.

    Downloads
  • v1.0.4 d1d4272f34

    highway released this 2026-08-30 21:23:59 +03:00 | 3 commits to main since this release

    Two unrelated display bugs on the Home screen, both found on hardware.

    Dose gradient strip accumulated marker ticks

    The reading marker is drawn two pixels taller than the strip, but only the gradient band underneath it was repainted. Every previous marker left its top and bottom stubs behind, and these built up into a row of ticks across the whole strip as the dose rate moved. RESET appeared not to clear them because the residue never came from the accumulation in the first place. The full band the marker can touch is now cleared before redrawing.

    LIVE showed the wrong elapsed time

    The field displayed wall-clock time since connect, so it restarted at 00:00 on every reconnect while the verdict on screen was computed from hours of accumulated counts. The spectrum deliberately survives dropouts, disconnects and reboots, because the counts live on the detector rather than on the display board, so the elapsed time shown beside it has to mean the same thing.

    Home now shows the detector own accumulation clock, labelled ACQ. It is cleared by RESET and is the same figure the Analysis screen already used for its counting statistics, so the two screens now agree.

    Confirmed on hardware: 163 seconds after a reflash the detector reported 901 seconds accumulated, where the old field would have read 00:02.

    Downloads
  • v1.0.3 562ed0c368

    highway released this 2026-08-30 20:04:40 +03:00 | 4 commits to main since this release

    Fixes a failure to connect to the detector, and three causes of misidentification found on real samples.

    Connection

    WiFi and the Bluetooth stack were contending for heap. The startup update check brought WiFi up while BLE was connecting, and the station was never shut down again, producing BLE_INIT: Malloc failed, truncated spectrum transfers and a flood of GATT errors.

    • WiFi work now suspends the BLE link and resumes it afterwards. This is lossless: the detector accumulates internally throughout.
    • The suspend is acknowledged rather than assumed after a fixed delay, since a spectrum read is a blocking round trip of up to 4 seconds.
    • Bluedroid is torn down rather than only the client, returning around 51 KB. Without that, TLS could not allocate.
    • WiFi is powered down after every check or install, and on leaving Settings.
    • The BLEClient is now freed. Arduino-ESP32 allocates it and never deletes it, leaking about 4.15 KB per connect along with its discovered service tree.

    Identification

    Real uranium ore reported BACKGROUND while Bi-214 stood at 92 percent with four matched lines.

    • A decay-chain member that is conclusive on its own now establishes the chain, instead of a second member always being required.
    • Lines below 110 keV can no longer identify a nuclide that also emits above it. That region is unmodelled X-ray fluorescence and backscatter, and it was generating phantom Ba-133.
    • The region-of-interest fallback now applies the same competitive assignment as peak matching, which it had been silently undoing.
    • RESET latches until the link is available instead of being discarded.

    Verified on hardware

    Uranium ore identified as URANIUM ORE in 17 seconds with the U-238 chain at 100 percent. A thorium source identified as THORIUM with the Th-232 chain at 99 percent and the uranium chain at 0. Four update checks during a live measurement with heap flat to within 60 bytes.

    Downloads
  • v1.0.2 7df3fd2cb2

    highway released this 2026-08-30 11:56:25 +03:00 | 5 commits to main since this release

    Fixes over-the-air installation, which previously failed at 0%.

    The flash erase now happens before the download connection is opened. esp_ota_begin() erases the whole 1.6 MB OTA slot up front, and doing that with the HTTPS socket already open left it idle long enough to be dropped, so the transfer stalled and every install aborted.

    Also: redirects are followed, the read loop tracks the connection so a chunked response completes, and failures now name the exact stage with byte counts and free heap.

    Verified end to end on hardware: 1,654,368 bytes downloaded, installed, rebooted into the new version.

    Downloads
  • v1.0.1 3d6005b10a

    v1.0.1 Stable

    highway released this 2026-08-30 11:32:50 +03:00 | 7 commits to main since this release

    Firmware update test release. Flash over USB or update over the air from Settings.

    Downloads