Active Project · Horus University ECE · Team Leader

SENTINEL Advanced System for Drone Detection, Tracking, and Neutralization

Real-time counter-drone platform on Raspberry Pi 5 — YOLOv8 AI vision pipeline, RF spectrum monitoring, PTZ motor tracking, and live dashboard under 40ms latency.

42
FPS Idle
28
FPS Detect
<40
ms Latency
88.8%
mAP50 AI
1.2km
Detection Range
TEAM — 6 MEMBERS
Islam Emad Ismail — Leader Abdelaziz Eltohami Mohamed Rafeek Marzouk El-Fauomy Rawan Mohammed Elbialy Sagy Shawky Abo El-Naga Islam Hesham Hamed
SUPERVISORS
Prof. Dr. Amr Hussein Assoc. Prof. Dr. Mervat Elseddek Dr. Rania Al-Abd
Interactive System Simulation

Live Visual Simulation

Real drone imagery rendered through the SENTINEL detection pipeline. Select a scenario to see how the system responds in real time.

HIKVISION DS-2DE4225IW — LIVE FEED
NOMINAL
SENTINEL SYS v1.0
SYSTEM DIAGNOSTICS // RPi5
FPS
frames/sec
Latency
ms e2e
CPU
% avg
RAM
MB used
RADAR SWEEP — DETECTION ZONE
Scanning...
PROCESSING PIPELINE
◈ Awaiting Simulation
Select a scenario and press Run.
System Architecture

Hardware & Software Stack

Hardware Platform
SBCRaspberry Pi 5 — ARM64 · 8GB LPDDR4X
CameraHikvision DS-2DE4225IW-DE(T5) PTZ
RF ScannerHTOOL-SA 6G Spectrum Analyzer — 2.4GHz / 5.8GHz
MotorStepper Motor via GPIO (28BYJ-48)
TripodKINGJOY VT-2100L
OSRaspberry Pi OS 64-bit (Bookworm)
AI Detection Pipeline

Motion trigger via MOG2 background subtraction → YOLOv8-nano inference every 3rd frame (skip=2) → CSRT tracker + Kalman filter for trajectory prediction → PTZ motor slew to bearing angle.

YOLOv8-nanoOpenCV CSRTKalman Filter MOG2PyTorchUltralytics MJPEG StreamGPIO Motor
Web Dashboard & Alerting
Flask + Flask-SocketIO live dashboard with real-time MJPEG video stream, detection overlays, system telemetry, and Telegram Bot API alerting with photo snapshots.
FlaskSocketIOMJPEG Telegram Bot APIHTML/CSS/JS
RF Spectrum Monitoring
Parallel RTL-SDR thread continuously scans 2.4GHz and 5.8GHz drone control frequencies. Energy threshold detection triggers alert alongside visual detection for multi-modal confirmation.
HTOOL-SA 6G Spectrum AnalyzerGNU Radio2.4GHz 5.8GHzEnergy Threshold
Next Generation

Phase II — SENTINEL Mk-II

A complete sensor-fusion upgrade. Phase II transforms SENTINEL from a single-modal visual tracker into a multi-spectrum threat identification system — combining RF spectrum analysis, angle-of-arrival triangulation, directional neutralization, and AI quantization for real-time edge performance.

2 COMPONENTS ACQUIRED
4 IN DEVELOPMENT
1 REGULATORY CLEARANCE
HARDWARE ACQUIRED ✓

HTOOL-SA 6G
Spectrum Analyzer

Wideband RF spectrum analysis from 35MHz to 6.2GHz — replaces the RTL-SDR entirely. Simultaneous monitoring of all known drone control frequencies: 433MHz, 868MHz, 915MHz, 2.4GHz, 5.8GHz. Real-time energy waterfall display with RSSI-to-range estimation and anomaly flagging.

6.2GHz
MAX FREQUENCY
35MHz
MIN FREQUENCY
USB
INTERFACE
LIVE SPECTRUM PREVIEW
FREQ →
35MHz
6.2GHz
433M
2.4G
5.8G
IN DEVELOPMENT

ULA Array
Angle-of-Arrival

4-element Uniform Linear Array feeding the MUSIC algorithm — generates a 60° spatial spectrum. Provides precise bearing angle to target drone, enabling directional slew without camera confirmation.

P_MUSIC(θ) = 1 / (a(θ)ᴴ E_n E_nᴴ a(θ))
MUSIC spatial spectrum — peak = target bearing
60°
AoA RESOLUTION
4
ANTENNA ELEMENTS
λ/2
ELEMENT SPACING
PENDING CLEARANCE · NTRA Law 10/2003

GaN Directional
Neutralization

High-power Gallium Nitride directional jammer — targets drone control links (2.4GHz / 5.8GHz) with narrow-beam RF emission. Slaved to AoA bearing from ULA array for pinpoint neutralization. Regulatory clearance under review.

GaN
TRANSISTOR TECH
2.4/5.8
TARGET GHz
~15°
BEAM WIDTH
IN DEVELOPMENT

ONNX/INT8
AI Quantization

Converts YOLOv8-nano to ONNX INT8 format — eliminating PyTorch overhead. Expected 2× inference speedup on RPi5 ARM64, targeting 38+ FPS in multi-target scenarios without GPU acceleration.

Current: PyTorch FP3214ms/frame
Target: ONNX INT8~7ms/frame
PLANNED

360° Servo Platform

Replaces stepper motor — continuous rotation servo eliminates the 180° mechanical limit. Faster slew rate, quieter operation, lower power draw.

ACQUIRED ✓

4S LiPo Field Power

Field-deployable 4S LiPo pack with 5V/12V regulation. Untethered operation — no mains power required for field deployment.

SYSTEM EVOLUTION — MK-I → MK-II
SENTINEL MK-I (Phase I)
✓ YOLOv8-nano Vision
✓ CSRT + Kalman Tracking
✓ RTL-SDR RF Monitor
✓ PTZ Stepper Motor
✓ Flask Dashboard
UPGRADE
SENTINEL MK-II (Phase II)
+ HTOOL-SA 6G Spectrum
+ ULA AoA (MUSIC)
+ GaN Directional Jammer
+ ONNX/INT8 (2× speed)
+ 360° Servo + 4S LiPo
/* ═══ NEON RIBBON ═══ */ (function(){ const canvas=document.getElementById('ribbon-canvas'); if(!canvas)return; const ctx=canvas.getContext('2d'); const CFG={SPEED_X:.14,SPEED_Y:.14,MAX_LENGTH:90,RS:.018,GS:.013,BS:.022,SPREAD:16}; let anim=0,W=0,H=0; const pts=[],mouse={x:0,y:0},prev={x:0,y:0},cs={r:0,g:200,b:255,sz:0}; function resize(){W=canvas.width=innerWidth;H=canvas.height=innerHeight} resize();window.addEventListener('resize',resize,{passive:true}); document.addEventListener('mousemove',e=>{mouse.x=e.clientX;mouse.y=e.clientY},{passive:true}); mouse.x=prev.x=innerWidth/2;mouse.y=prev.y=innerHeight/2; function sp(p){p.x+=p.dx;p.y+=p.dy} function dl(){ const n=pts.length;if(n<3)return; for(let i=n-1;i>1;i--){ const p0=pts[i],p1=pts[i-1],p2=pts[i-2]; ctx.beginPath();ctx.strokeStyle=p0.color;ctx.lineWidth=p0.sz;ctx.globalAlpha=i/n; ctx.moveTo((p1.x+p0.x)/2,(p1.y+p0.y)/2); ctx.quadraticCurveTo(p1.x,p1.y,(p1.x+p2.x)/2,(p1.y+p2.y)/2);ctx.stroke();sp(p0); } if(pts[0])sp(pts[0]);if(pts[n-1])sp(pts[n-1]); } function draw(){ let dx=Math.max(-CFG.SPREAD,Math.min(CFG.SPREAD,(mouse.x-prev.x)*CFG.SPEED_X)); let dy=Math.max(-CFG.SPREAD,Math.min(CFG.SPREAD,(mouse.y-prev.y)*CFG.SPEED_Y)); prev.x=mouse.x;prev.y=mouse.y;cs.sz+=.12;cs.r+=CFG.RS;cs.g+=CFG.GS;cs.b+=CFG.BS; const sz=Math.abs(Math.sin(cs.sz)*8)+1; const r=Math.floor(Math.sin(cs.r)*128+128),g=Math.floor(Math.sin(cs.g)*128+128),b=Math.floor(Math.sin(cs.b)*128+128); pts.push({x:mouse.x,y:mouse.y,dx,dy,sz,color:`rgb(${r},${g},${b})`}); if(pts.length>CFG.MAX_LENGTH)pts.shift(); ctx.globalCompositeOperation='source-over';ctx.globalAlpha=1; ctx.fillStyle='rgba(0,0,0,.05)';ctx.fillRect(0,0,W,H); ctx.globalCompositeOperation='lighter';dl();dl();dl(); anim=requestAnimationFrame(draw); } draw(); document.addEventListener('visibilitychange',()=>{if(document.hidden)cancelAnimationFrame(anim);else draw()}); })(); /* ═══ 3D CARD TILT ═══ */ document.querySelectorAll('.spec-card,.feature-card,.stat-card,.phase-card,.card').forEach(card=>{ card.style.transition='transform .3s ease,box-shadow .3s'; card.addEventListener('mousemove',e=>{ const r=card.getBoundingClientRect(); const x=(e.clientX-r.left)/r.width-.5; const y=(e.clientY-r.top)/r.height-.5; card.style.transform=`perspective(800px) rotateX(${-y*8}deg) rotateY(${x*10}deg) scale3d(1.015,1.015,1.015)`; },{passive:true}); card.addEventListener('mouseleave',()=>{card.style.transform='perspective(800px) rotateX(0) rotateY(0) scale3d(1,1,1)'}); }); /* CIPHER TEXT on section headings */ (function(){ const CHARS='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789#@!%'; function cipher(el,target,delay){ setTimeout(()=>{ let frame=0;const total=Math.floor(1000/30); const id=setInterval(()=>{ const prog=frame/total;let out=''; for(let i=0;i(i/target.length)?target[i]:CHARS[Math.floor(Math.random()*CHARS.length)]; el.textContent=out; if(frame>=total){clearInterval(id);el.textContent=target} frame++; },30); },delay); } const ro=new IntersectionObserver(entries=>{ entries.forEach(e=>{ if(e.isIntersecting){ const el=e.target; const orig=el.dataset.cipherText||el.textContent; el.dataset.cipherText=orig; cipher(el,orig,0); ro.unobserve(el); } }); },{threshold:.3}); document.querySelectorAll('h2,h3').forEach(h=>{ if(h.textContent.trim().length<60)ro.observe(h); }); })(); /* 3D TILT on cards */ document.querySelectorAll('.spec-card,.feature-card,.stat-card,.phase-card,.card,.metric-card,.tech-card,.detail-card,.comp-card,.step-card,.challenge-card').forEach(card=>{ card.style.transition='transform .32s ease,box-shadow .32s'; card.addEventListener('mousemove',e=>{ const r=card.getBoundingClientRect(); const x=(e.clientX-r.left)/r.width-.5,y=(e.clientY-r.top)/r.height-.5; card.style.transform=`perspective(820px) rotateX(${-y*8}deg) rotateY(${x*10}deg) scale3d(1.015,1.015,1.015)`; },{passive:true}); card.addEventListener('mouseleave',()=>{card.style.transform='perspective(820px) rotateX(0) rotateY(0) scale3d(1,1,1)'}); });