[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-96190":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":15,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":16,"rankGlobal":10,"rankLanguage":10,"license":17,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":10,"pushedAt":10,"updatedAt":33,"readmeContent":34,"aiSummary":35,"trendingCount":15,"starSnapshotCount":15,"syncStatus":36,"lastSyncTime":37,"discoverSource":38},96190,"VolAnti","agamrossen\u002FVolAnti","agamrossen","Open-source acoustic drone detection. It hears the propellers, not the radio, so it works against fibre-optic FPV aircraft that emit no signal at all.","https:\u002F\u002Fagamrossen.github.io\u002FVolAnti\u002F",null,"C",149,16,5,0,3.69,"Other",false,"main",true,[22,23,24,25,26,27,28,29,30,31,32],"3d-printing","acoustics","drone-detection","dsp","early-warning","esp32","esp32-s3","lora","microphone-array","open-hardware","pcb","2026-09-21 02:04:30","\u003Cdiv align=\"center\">\n\n\u003Cpicture>\n  \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"docs\u002Fimages\u002Flogo-dark.svg\">\n  \u003Cimg src=\"docs\u002Fimages\u002Flogo-light.svg\" width=\"380\" alt=\"VolAnti\">\n\u003C\u002Fpicture>\n\n### Open-source acoustic drone detection. It hears the propellers, not the radio.\n\n\u003Cimg src=\"docs\u002Fimages\u002Fhero-render.png\" width=\"78%\" alt=\"VolAnti unit on its mount\">\n\n\u003Cbr>\n\n**[Website](https:\u002F\u002Fvolantitech.com)** · **[Live simulator](https:\u002F\u002Fvolantitech.com\u002F#simulator)** · **[Build it on a breadboard](docs\u002Fbreadboard-build.md)** · **[Build the full unit](docs\u002Fpcb-build.md)** · **[Photos and videos](docs\u002Fgallery.md)**\n\nDetection and alert only. No jamming, no interception, no countermeasures, ever.\n\n\u003C\u002Fdiv>\n\n---\n\nA 91 mm box with four microphones, an ESP32-S3, an e-paper screen and a LoRa radio. It listens for the harmonic comb a multirotor makes and when it hears one it beeps, flashes red, buzzes, writes the time to a screen that survives a power cut, and tells every other unit on the network.\n\nIf you want the short illustrated version, or to watch the detector work on a sound field you control, that is what [the website](https:\u002F\u002Fvolantitech.com) and [the simulator](https:\u002F\u002Fvolantitech.com\u002F#simulator) are for. This page is the long version, and everything needed to build one is in this repository.\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd align=\"center\" width=\"20%\">\u003Ch3>104 m\u003C\u002Fh3>measured detection,\u003Cbr>hovering airframe, light wind\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"20%\">\u003Ch3>0.23 s\u003C\u002Fh3>from first sound\u003Cbr>to alarm\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"20%\">\u003Ch3>none\u003C\u002Fh3>false alarms in\u003Cbr>field sessions so far\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"20%\">\u003Ch3>18 to 22 h\u003C\u002Fh3>on one\u003Cbr>battery charge\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"20%\">\u003Ch3>£50 to £80\u003C\u002Fh3>parts for a\u003Cbr>full unit\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003Cimg src=\"docs\u002Fimages\u002Fnine-units.jpg\" width=\"100%\" alt=\"Nine units on the bench, seven open, two closed\">\n\n## Contents\n\n**Understand it**: [The problem](#the-problem) · [What the device does](#what-the-device-does) · [How it works](#how-it-works) · [Radio](#radio) · [Power](#power) · [Range and testing](#range-and-testing)\n\n**Build it**: [Two ways to build it](#two-ways-to-build-it) · [Breadboard guide](docs\u002Fbreadboard-build.md) · [Full unit guide](docs\u002Fpcb-build.md) · [Flashing](docs\u002Fflashing.md) · [Running several units](#running-several-units)\n\n**Everything else**: [Photos and videos](docs\u002Fgallery.md) · [Test results](docs\u002Ftest-results.md) · [Deploying](docs\u002Fdeploying.md) · [Contributing](#contributing) · [Scope](#scope) · [Licence](#licence)\n\n**Files**: [firmware](firmware\u002F) · [PCB, BOM and placement](hardware\u002Fpcb\u002F) · [printable enclosure](hardware\u002Fenclosure\u002F) · [test audio](test\u002F) · [website source](index.html)\n\n---\n\n## The problem\n\nNearly all drone detection listens for radio. It finds the control link between the pilot and the aircraft, decodes it, and reports where both are. It works well, and it has one hard failure: the drone has to transmit.\n\nA fibre-optic FPV drone does not. It trails a thread of glass back to its operator, video comes down the fibre, control goes up it, and the radio spectrum stays silent. There is nothing to find and nothing to decode.\n\nWhat it cannot hide is four motors spinning propellers. A 7 in three-blade propeller on a 2807-class motor puts a precisely structured comb of harmonics into the air, spaced by the blade-passage rate, and that spacing is set by physics the airframe cannot switch off. VolAnti listens for that structure.\n\nIt is not radar and not a replacement for one. It is a cheap local tripwire for the last few hundred metres that keeps working when the radio picture is empty, and that a school or a farm can build and repair themselves.\n\n## What the device does\n\n\u003Cimg src=\"docs\u002Fimages\u002Fface.jpg\" align=\"right\" width=\"320\" alt=\"The face of the unit: four grilles, a screen, a light and a button\">\n\nIt runs continuously and does one job. Every 32 ms it takes a new slice of sound from the four microphones, folds them together, measures how comb-like the spectrum is, and asks four independent detectors whether that is a rotor.\n\nWhen one of them says yes, five things happen at once.\n\n| Channel | What happens |\n|---|---|\n| Beeper | Loud and patterned. The one that carries through a wall. |\n| LED | Solid red through the light pipe in the lid. |\n| Motor | A haptic pulse for whoever is holding it. |\n| E-paper | The alert and the time, and it stays on the screen with no power. |\n| LoRa | An 18 byte packet to every other unit in range. |\n\nBetween alerts the light blinks slow green, so a quiet unit and a dead unit never look the same. A press on the snooze button silences the outputs for ten seconds while detection carries on underneath.\n\n\u003Cbr clear=\"right\">\n\n## How it works\n\nA propeller with B blades turning at R revolutions per second chops the air B×R times a second. That is the fundamental. Because the chopping is not a smooth sine, energy also lands at 2×, 3×, 4× and so on, and the result is a harmonic comb: peaks at even spacing with quiet gaps between.\n\n\u003Cimg src=\"docs\u002Fimages\u002Fcomb.png\" width=\"720\" alt=\"Measured spectrum of a loaded propeller, showing the comb\">\n\nWind, traffic and rain smear across the whole spectrum. Evenly spaced teeth do not, and their spacing is the rotor speed. So the detector measures a rate and checks that it holds still.\n\n**Four microphones to one number.** Four ICS-43434 MEMS microphones sit in a plus, 79 mm corner to corner, clocked from one source. Their four streams are added. At these frequencies 79 mm is a tenth of a wavelength, so sound from any direction adds in phase and each capsule's own noise does not. That is about 6 dB of signal to noise for free and it is nearly omnidirectional. Beamforming was tried at this size and buys nothing, so the array is a sensitivity device, not a direction finder.\n\n**Spectrum.** A 2048 point FFT every 512 samples at 16 kHz, one frame every 32 ms.\n\n**Adaptive floor.** The detector keeps a running picture of what the site normally sounds like at every frequency and subtracts it. Quiet things are learned in about 6 s, loud broadband bursts in under a second, which is what stops a passing lorry parking itself in the noise model.\n\n**Comb score.** For every candidate rate from 70 to 2000 Hz, add the energy on that comb's teeth, subtract the energy in its gaps, normalise, keep the best.\n\n**Track and hold.** One high scoring frame means nothing. The same rate has to win six frames in a row within 2 %. Noise does not do that. A rotor does.\n\n**Four detectors on one spectrum.** A single detector would have to be tuned for either a drone that arrives or a drone that hovers, so there are four, and the alert is whichever is sure first.\n\n| | Tier | Catches | How | Latency |\n|---|---|---|---|---|\n| 1 | Fast comb | An aircraft that arrives, approaches or changes | Comb score against the fast floor | 0.23 s |\n| 2 | Slow comb | An aircraft that arrives and then hovers | Same score against a 30 s floor | 1.4 to 4 s |\n| 3 | Envelope wash | Loaded, close, high thrust flight | Broadband modulation above 3 kHz | 1 to 3 s |\n| 4 | No-floor comb | A long hover somewhere that never goes quiet | 2 s Welch spectrum, whitened, no floor | 5 to 15 s |\n\nTier 1 is sealed: golden test vectors pin its behaviour, and the same audio gives the same score to the last decimal place on a laptop and on the board. Tier 4 is the one that fired at 104 m.\n\nMore detail, including the numbers behind each stage, is in [docs\u002Fhow-it-works.md](docs\u002Fhow-it-works.md). All of it runs live in [the simulator](https:\u002F\u002Fvolantitech.com\u002F#simulator).\n\n## Radio\n\nEach unit carries an Ra-01H LoRa module and a spring antenna lying in the wall of the case. The alert packet is 18 bytes: identity, tier, rate, score, sequence. There is no relay and no mesh. Every unit hears every other unit directly, which is a thing you can test in an afternoon.\n\nThe link spreads an alert, it does not vote on one. Every unit decides for itself. Waiting for a second opinion costs seconds and seconds are the whole product.\n\nThe frequency has to be set for the country of use: 868 MHz in the UK and EU, 915 MHz in the US, and whatever the local allocation is elsewhere. Details in [docs\u002Fdeploying.md](docs\u002Fdeploying.md).\n\n## Power\n\nUSB-C in, a BQ24074 charger with power path, a TPS63020 buck-boost holding 3.3 V, and a 1S 2500 mAh LiPo. About 18 to 22 hours on the cell alone.\n\nThe cell stays fitted even on a unit that lives on mains. During bring-up the board browned out when the beeper, the motor and the radio fired at the same moment on USB alone. The cell absorbs that spike. A mains unit with no battery is a unit that reboots at the exact moment it matters.\n\n## Range and testing\n\n\u003Cimg src=\"docs\u002Fimages\u002Ffield-104m-map.jpg\" align=\"right\" width=\"300\" alt=\"114 yards on the map\">\n\n**6 September 2026, 104 m.** One unit on a brick-walled street with traffic passing, the test rig hovering at the far end. Tier 4 fired at 104.2 m, 114 yards on the map, with people talking near the unit. Nothing fired on the cars. The rig is four 2807-class motors with 7 in three-blade propellers on the same frame as the airframes this was built against, each motor on its own throttle, so it holds a hover wherever the tape says. Video, the map and the test screen are in [test results](docs\u002Ftest-results.md) and [the gallery](docs\u002Fgallery.md).\n\nSince that test the detector has been tuned further, for a lower false-alarm rate and a faster reaction, and those changes are in the current firmware.\n\n**Before it.** 21 August, open ground, changing wind: 14 m with loaded propellers, no false alarms all day. 28 August, first production board: detector output bit-identical to the reference on the golden vectors, worst frame 29.4 ms against the 32 ms budget over 1,938 frames, no overruns.\n\nRange moves by an order of magnitude with wind. Still air and a quiet site should give 100 to 200 m. A breezy or noisy site can give 15 to 50 m. Above 8 m\u002Fs assume it is degraded. [docs\u002Fdeploying.md](docs\u002Fdeploying.md) has the table.\n\n\u003Cbr clear=\"right\">\n\n## Two ways to build it\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd width=\"50%\" valign=\"top\">\n\n\u003Cimg src=\"docs\u002Fimages\u002Fbreadboard-photo.jpg\" width=\"100%\" alt=\"The breadboard build\">\n\n**On a breadboard.** A dev board and four microphone breakouts. No custom PCB, nothing to solder beyond header pins. Same firmware, same detector, and it will detect a drone. About £35 to £45 and an evening.\n\n**[Breadboard build guide →](docs\u002Fbreadboard-build.md)**\n\n\u003C\u002Ftd>\n\u003Ctd width=\"50%\" valign=\"top\">\n\n\u003Cimg src=\"docs\u002Fimages\u002Ftwo-units.jpg\" width=\"100%\" alt=\"Two finished units\">\n\n**Or the full unit.** Order the four-layer board assembled, print four parts, solder the few joints the fab cannot, screw it together. This is the unit every number on this page came from. About £50 to £80 and a weekend.\n\n**[Full unit build guide →](docs\u002Fpcb-build.md)**\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## Running several units\n\nA single unit is complete on its own. Several units cover more ground and move the alarm to where the people are: a unit at the fence hears the aircraft, a unit in the kitchen repeats it.\n\nEvery unit runs the full detector and alerts on its own evidence. Listening units go out on the approach sides, spaced so their coverage touches, on solar or battery. Indoor units sit where people are, on mains, and mostly repeat. One assembled and flashed spare on a shelf turns a week's repair into a two minute swap.\n\nFace up, parallel to the ground, in shade, 2 to 4 m high, a few metres clear of steady noise. Do not publish where your units are. Siting, mains wiring, the service schedule and the planning arithmetic are in [docs\u002Fdeploying.md](docs\u002Fdeploying.md).\n\n## Contributing\n\nBuild reports are the most useful thing you can send, including the ones where it did not work. Open an issue titled `Build report: \u003Crough location, month>` with the build type, firmware version, what made the sound, the distance it was and was not detected at, the wind, and any false alarms. No maps of where your units are.\n\nPull requests are welcome for anything inside the scope below. Changes to the detection chain need to pass the golden vector tests unchanged, or come with new vectors and a reason.\n\n## Scope\n\nVolAnti detects and alerts. It will never include jamming, spoofing, interception, targeting or any other countermeasure, in this project or in any fork carrying its name. Contributions in that direction are closed without discussion.\n\n## Licence\n\nHardware under CERN-OHL-W-2.0, firmware under Apache-2.0, documentation under CC BY-SA 4.0. Full texts in [LICENSES\u002F](LICENSES\u002F), the short version and the disclaimer in [LICENSE.md](LICENSE.md). Not a life-safety product. It will miss aircraft.\n\n---\n\n\u003Cdiv align=\"center\">\n\nDesigned and tested by Agam Rossen at the University of York.\n\n\u003C\u002Fdiv>\n","VolAnti 是一个开源声学无人机探测系统，通过分析多旋翼无人机螺旋桨产生的特征谐波频谱实现无信号依赖的被动探测。核心功能包括实时声学检测、本地声光报警、断电保持时间记录及 LoRa 组网协同告警；技术特点涵盖基于 ESP32-S3 的嵌入式 DSP 处理、四麦克风阵列设计、低功耗运行（18–22 小时）与高可靠性（实测零误报）。适用于机场、监狱、敏感设施等需防范无射频信号（如光纤 FPV）无人机的物理安防场景。",2,"2026-09-12 02:30:03","CREATED_QUERY"]