{"product_id":"skytech-smart-ultrasonic-radar-and-servo-tracking-kit-with-oled-display","title":"SkyTech Smart Ultrasonic Radar and Servo Tracking Kit with OLED Display","description":"\u003cp style=\"text-align: right;\"\u003eطقم ونظام الرادار والتتبع الذكي بالموجات فوق الصوتية SkyTech Smart Ultrasonic Radar \u0026amp; Tracking System المدمج بمحرك سيرفو وشاشة OLED (SkyTech Smart Radar \u0026amp; Servo Target Tracking Kit with HC-SR04, SG90 \u0026amp; 0.96\" OLED Display)، المنظومة الهندسية المتكاملة لمسح المحيط واكتشاف الأجسام وتتبعها أوتوماتيكياً. تعتمد المنظومة على حساس المسافة HC-SR04 المثبت فوق محرك السيرفو SG90 الذي يقوم بالدوران والمسح الزاوي من 30 إلى 150 درجة. يتميز النظام ببرمجية تتبع ذكية (Smart Tracking Mechanism): فعند اكتشاف جسم على مسافة أقل من 30 سم، يتوقف السيرفو عن المسح الشامل ويلف حول الهدف بعمل مسح ميكروي محلي (±20 درجة) للقفز والتتبع المستمر لموقع الجسم المتحرك. تعرض الواجهة على شاشة OLED شبكة رادار كلاسيكية خضراء (Green Retro Radar Grid) مع خط مسح لحظي ونقطة حمراء تحدد موقع الهدف والمسافة بالمتر أو السنتيمتر. يعتبر هذا الطقم الخيار الهندسي الأول لطلاب كليات الهندسة، مشاريع التخرج، ومطوري الأنظمة الرادارية الذاتية.\u003c\/p\u003e\n\u003cp\u003e__________________________________________________\u003c\/p\u003e\n\u003cp\u003eSkyTech Smart Ultrasonic Radar and Target Tracking System Kit, an advanced robotics and radar telemetry platform built around the Arduino ecosystem. The system features an HC-SR04 ultrasonic distance sensor mounted onto a high-precision SG90 micro servo motor executing automated horizontal angular sweeps from 30° to 150°. Powered by smart target-tracking algorithms, when an object breaches the 30 cm threshold, the servo locks its orientation and performs localized micro-sweeps (±20°) to actively track the moving target. An integrated 0.96\" I2C OLED display renders a classic green retro radar grid interface complete with a rotating sweep line, target blips, and exact distance measurements in centimeters. Supplied with pre-configured firmware and hardware mounts, this SkyTech radar tracking kit serves as a premier educational package for undergraduate engineering students, graduation project developers, and robotics prototypers.\u003c\/p\u003e\n\u003cp\u003e__________________________________________________\u003c\/p\u003e\n\u003cp\u003eالمميزات الأساسية:\u003cbr\u003e* اسم المنتج: طقم مشروع نظام الرادار والتتبع الذكي (SkyTech Smart Radar \u0026amp; Servo Tracking Kit)\u003cbr\u003e* مستشعر المسافة: حساس الموجات فوق الصوتية HC-SR04 بقدرة قياس دقيقة وتردد 40kHz\u003cbr\u003e* محرك التوجيه: محرك سيرفو SG90 ميكرو لمسح زوايا المحيط وتتبع الأهداف\u003cbr\u003e* نظام التتبع الذكي: إيقاف المسح العام والتحول للمسح المحلي الدقيق (±20°) عند اقتراب الهدف (\u0026lt;30cm)\u003cbr\u003e* شاشة العرض: شاشة 0.96 إنش OLED تعرض شبكة الرادار ورسم الأهداف لحظياً\u003cbr\u003e* التطبيقات النموذجية: مشاريع التخرج الهندسية، أنظمة الرادار والروبوتات الاستكشافية، ومختبرات الأردوينو\u003c\/p\u003e\n\u003cp style=\"text-align: right;\"\u003eالكود البرمجي\u003c\/p\u003e\n\u003cp\u003e#include \u0026lt;Wire.h\u0026gt;\u003cbr\u003e#include \u0026lt;Adafruit_GFX.h\u0026gt;\u003cbr\u003e#include \u0026lt;Adafruit_SH110X.h\u0026gt;\u003cbr\u003e#include \u0026lt;Servo.h\u0026gt;\u003c\/p\u003e\n\u003cp\u003e#define SCREEN_WIDTH 128\u003cbr\u003e#define SCREEN_HEIGHT 64\u003cbr\u003e#define OLED_RESET -1\u003c\/p\u003e\n\u003cp\u003eAdafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, \u0026amp;Wire, OLED_RESET);\u003c\/p\u003e\n\u003cp\u003econst int trigPin = 9;\u003cbr\u003econst int echoPin = 10;\u003cbr\u003econst int servoPin = 11;\u003cbr\u003econst int buzzerPin = 8;\u003c\/p\u003e\n\u003cp\u003eServo myServo;\u003c\/p\u003e\n\u003cp\u003eint pos = 90;           \/\/ الزاوية الحالية\u003cbr\u003eint dir = 1;            \/\/ اتجاه حركة البحث الطبيعي (1 يمين، -1 يسار)\u003cbr\u003ebool targetState = false; \/\/ حالة وجود الهدف الحالية (false = غير موجود، true = موجود)\u003c\/p\u003e\n\u003cp\u003evoid setup() {\u003cbr\u003e  pinMode(trigPin, OUTPUT);\u003cbr\u003e  pinMode(echoPin, INPUT);\u003cbr\u003e  pinMode(buzzerPin, OUTPUT);\u003cbr\u003e  noTone(buzzerPin);\u003c\/p\u003e\n\u003cp\u003e  myServo.attach(servoPin);\u003cbr\u003e  myServo.write(pos);\u003c\/p\u003e\n\u003cp\u003e  Wire.begin();\u003cbr\u003e  Wire.setClock(400000); \/\/ تسريع الشاشة\u003cbr\u003e  display.begin(0x3C, true);\u003cbr\u003e  display.clearDisplay();\u003cbr\u003e  \u003cbr\u003e  display.setTextSize(1);\u003cbr\u003e  display.setTextColor(SH110X_WHITE);\u003cbr\u003e  display.setCursor(10, 25);\u003cbr\u003e  display.print(F(\"SMART TRACKING\"));\u003cbr\u003e  display.display();\u003cbr\u003e  \u003cbr\u003e  tone(buzzerPin, 1000, 100);\u003cbr\u003e  delay(1000);\u003cbr\u003e}\u003c\/p\u003e\n\u003cp\u003evoid loop() {\u003cbr\u003e  \/\/ قراءة أولى وثانية متتاليتان للتحقق من الحالة\u003cbr\u003e  int dist1 = getDistance();\u003cbr\u003e  delay(10);\u003cbr\u003e  int dist2 = getDistance();\u003c\/p\u003e\n\u003cp\u003e  \/\/ فحص شرط القراءتين المتتاليتين (وجود الهدف إذا كانت القراءتان أقل من 30 سم)\u003cbr\u003e  bool read1_hasTarget = (dist1 \u0026gt; 0 \u0026amp;\u0026amp; dist1 \u0026lt; 30);\u003cbr\u003e  bool read2_hasTarget = (dist2 \u0026gt; 0 \u0026amp;\u0026amp; dist2 \u0026lt; 30);\u003c\/p\u003e\n\u003cp\u003e  \/\/ 1. حالة وجود الهدف في قراءتين متتاليتين\u003cbr\u003e  if (read1_hasTarget \u0026amp;\u0026amp; read2_hasTarget) {\u003cbr\u003e    targetState = true;\u003cbr\u003e    tone(buzzerPin, 2500, 30); \/\/ تنبيه وجود الهدف\u003c\/p\u003e\n\u003cp\u003e    \/\/ تثبيت الاتجاه بدون حركة وعرض الهدف\u003cbr\u003e    display.clearDisplay();\u003cbr\u003e    drawRadarGrid();\u003cbr\u003e    drawSweepLine(pos);\u003cbr\u003e    drawTarget(pos, (dist1 + dist2) \/ 2);\u003cbr\u003e    display.display();\u003cbr\u003e  } \u003cbr\u003e  \/\/ 2. حالة الانتقال من وجود الهدف إلى عدم وجوده في قراءتين متتاليتين\u003cbr\u003e  else if (targetState \u0026amp;\u0026amp; !read1_hasTarget \u0026amp;\u0026amp; !read2_hasTarget) {\u003cbr\u003e    targetState = false; \/\/ إعادة ضبط الحالة إلى عدم وجود هدف\u003cbr\u003e    \u003cbr\u003e    \/\/ الدخول في عملية البحث السريع\u003cbr\u003e    bool foundInQuickSearch = runQuickSearch();\u003cbr\u003e    \u003cbr\u003e    \/\/ إذا لم يجد الهدف في البحث السريع، ينتقل فوراً للبحث الاعتيادي\u003cbr\u003e    if (!foundInQuickSearch) {\u003cbr\u003e      runNormalSearch();\u003cbr\u003e    }\u003cbr\u003e  } \u003cbr\u003e  \/\/ 3. حالة عدم وجود الهدف في قراءتين متتاليتين (الاستمرار بالبحث الطبيعي)\u003cbr\u003e  else if (!read1_hasTarget \u0026amp;\u0026amp; !read2_hasTarget) {\u003cbr\u003e    targetState = false;\u003cbr\u003e    runNormalSearch();\u003cbr\u003e  }\u003cbr\u003e}\u003c\/p\u003e\n\u003cp\u003e\/\/ دالة البحث السريع عند فقدان الهدف\u003cbr\u003ebool runQuickSearch() {\u003cbr\u003e  int targetPos;\u003c\/p\u003e\n\u003cp\u003e  \/\/ الخطوة الأولى: 20 درجة باتجاه عقارب الساعة\u003cbr\u003e  targetPos = constrain(pos + 20, 30, 150);\u003cbr\u003e  myServo.write(targetPos);\u003cbr\u003e  delay(150); \/\/ وقت قصير لاستقرار السيرفو\u003cbr\u003e  \u003cbr\u003e  if (checkTargetTwice()) {\u003cbr\u003e    pos = targetPos;\u003cbr\u003e    return true; \/\/ تم إيجاد الهدف بالدوران الأول\u003cbr\u003e  }\u003c\/p\u003e\n\u003cp\u003e  \/\/ الخطوة الثانية: 40 درجة عكس عقارب الساعة (20 للرجوع + 20 للاتجاه الثاني)\u003cbr\u003e  targetPos = constrain(targetPos - 40, 30, 150);\u003cbr\u003e  myServo.write(targetPos);\u003cbr\u003e  delay(200);\u003cbr\u003e  \u003cbr\u003e  if (checkTargetTwice()) {\u003cbr\u003e    pos = targetPos;\u003cbr\u003e    return true; \/\/ تم إيجاد الهدف بالدوران الثاني\u003cbr\u003e  }\u003c\/p\u003e\n\u003cp\u003e  \/\/ لم يجد الهدف في البحث السريع\u003cbr\u003e  pos = targetPos;\u003cbr\u003e  return false;\u003cbr\u003e}\u003c\/p\u003e\n\u003cp\u003e\/\/ دالة البحث الاعتيادي (المسح الطبيعي السريع)\u003cbr\u003evoid runNormalSearch() {\u003cbr\u003e  pos += dir * 5; \u003cbr\u003e  if (pos \u0026gt;= 150) dir = -1; \/\/ الحد الأيسر للزاوية المتفق عليها\u003cbr\u003e  if (pos \u0026lt;= 30)  dir = 1;  \/\/ الحد الأيمن للزاوية المتفق عليها\u003c\/p\u003e\n\u003cp\u003e  myServo.write(pos);\u003c\/p\u003e\n\u003cp\u003e  display.clearDisplay();\u003cbr\u003e  drawRadarGrid();\u003cbr\u003e  drawSweepLine(pos);\u003cbr\u003e  display.display();\u003cbr\u003e}\u003c\/p\u003e\n\u003cp\u003e\/\/ دالة مساعدة للتحقق من وجود الهدف بقراءتين متتاليتين\u003cbr\u003ebool checkTargetTwice() {\u003cbr\u003e  int d1 = getDistance();\u003cbr\u003e  delay(10);\u003cbr\u003e  int d2 = getDistance();\u003cbr\u003e  return (d1 \u0026gt; 0 \u0026amp;\u0026amp; d1 \u0026lt; 30 \u0026amp;\u0026amp; d2 \u0026gt; 0 \u0026amp;\u0026amp; d2 \u0026lt; 30);\u003cbr\u003e}\u003c\/p\u003e\n\u003cp\u003e\/\/ دالة قراءة المسافة بحساس الألتراسونيك\u003cbr\u003eint getDistance() {\u003cbr\u003e  digitalWrite(trigPin, LOW);\u003cbr\u003e  delayMicroseconds(2);\u003cbr\u003e  digitalWrite(trigPin, HIGH);\u003cbr\u003e  delayMicroseconds(10);\u003cbr\u003e  digitalWrite(trigPin, LOW);\u003cbr\u003e  \u003cbr\u003e  long duration = pulseIn(echoPin, HIGH, 4000);\u003cbr\u003e  if (duration == 0) return 0;\u003cbr\u003e  return duration * 0.034 \/ 2;\u003cbr\u003e}\u003c\/p\u003e\n\u003cp\u003e\/\/ رسم شبكة الرادار\u003cbr\u003evoid drawRadarGrid() {\u003cbr\u003e  display.drawCircle(64, 63, 60, SH110X_WHITE);\u003cbr\u003e  display.drawCircle(64, 63, 40, SH110X_WHITE);\u003cbr\u003e  display.drawCircle(64, 63, 20, SH110X_WHITE);\u003cbr\u003e  \u003cbr\u003e  display.drawLine(64, 63, 12, 33, SH110X_WHITE);\u003cbr\u003e  display.drawLine(64, 63, 116, 33, SH110X_WHITE);\u003cbr\u003e}\u003c\/p\u003e\n\u003cp\u003e\/\/ رسم خط المسح\u003cbr\u003evoid drawSweepLine(int angle) {\u003cbr\u003e  float rad = angle * (3.14159 \/ 180.0);\u003cbr\u003e  int x = 64 + (int)(60.0 * cos(rad));\u003cbr\u003e  int y = 63 - (int)(60.0 * sin(rad));\u003cbr\u003e  display.drawLine(64, 63, x, y, SH110X_WHITE);\u003cbr\u003e}\u003c\/p\u003e\n\u003cp\u003e\/\/ رسم نقطة الهدف عند تثبيت الحركة\u003cbr\u003evoid drawTarget(int angle, int distance) {\u003cbr\u003e  float rad = angle * (3.14159 \/ 180.0);\u003cbr\u003e  float distFactor = (float)distance \/ 30.0;\u003cbr\u003e  if (distFactor \u0026gt; 1.0) distFactor = 1.0;\u003cbr\u003e  int r = (int)(60.0 * distFactor);\u003cbr\u003e  \u003cbr\u003e  int x = 64 + (int)(r * cos(rad));\u003cbr\u003e  int y = 63 - (int)(r * sin(rad));\u003cbr\u003e  display.fillCircle(x, y, 4, SH110X_WHITE);\u003cbr\u003e}\u003c\/p\u003e\n\u003cp style=\"text-align: right;\"\u003eرابط فديو الشرح\u003c\/p\u003e\n\u003cp style=\"text-align: right;\"\u003ehttps:\/\/youtube.com\/shorts\/-5iDg6IZsOk?si=5fsknkLqNKI7bJqT\u003c\/p\u003e","brand":"SkyTech","offers":[{"title":"Default Title","offer_id":48947344605337,"sku":null,"price":75000.0,"currency_code":"IQD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0708\/8131\/2921\/files\/photo_2026-08-29_14-30-15.jpg?v=1788003051","url":"https:\/\/skyteches.com\/products\/skytech-smart-ultrasonic-radar-and-servo-tracking-kit-with-oled-display","provider":"SkyTech","version":"1.0","type":"link"}