رادار أردوينو مع مستشعر الموجات فوق الصوتية HC-SR04 ومحرك سيرفو: دليل بناء كامل يمكنك تنفيذه بنفسك

📋 ملخص سريع

قم ببناء نظام رادار متكامل باستخدام أردوينو، يتضمن مستشعر الموجات فوق الصوتية HC-SR04 المثبت على محرك سيرفو SG90، مع عرض مرئي فوري باستخدام برنامج Processing على جهاز الكمبيوتر. يقوم محرك السيرفو بمسح المستشعر بزاوية 180 درجة، بينما تُرسل بيانات المسافة عبر منفذ تسلسلي لإنشاء عرض مشابه للرادار. يتضمن الملف ملف STL للتثبيت، وشفرة أردوينو، وبرنامج Processing، ونصائح للمعايرة.

هل سبق لك أن أردت بناء نظام الرادار الخاص بك الذي يكتشف الأجسام القريبة ويعرضها على الشاشة، تمامًا مثل الشيء الحقيقي؟ في هذا البرنامج التعليمي لرادار Arduino خطوة بخطوة، ستقوم ببناء رادار بالموجات فوق الصوتية يعمل بكامل طاقته. سوف تستخدم أردوينو أونو، وجهاز استشعار المسافة بالموجات فوق الصوتية HC-SR04، ومحرك سيرفو. يقوم المؤازرة بمسح المستشعر عبر قوس بزاوية 180 درجة. وفي الوقت نفسه، يقوم الأردوينو بقياس المسافة إلى الأشياء في كل زاوية. والنتيجة هي نظام رادار مسح يرسل بيانات حية إلى جهاز الكمبيوتر الخاص بك، حيث يرسم رسم المعالجة الاختياري شاشة رادارية في الوقت الفعلي.

يعد مشروع رادار Arduino هذا واحدًا من أكثر المشروعات شعبية للمبتدئين والمتوسطين في مجتمع Arduino، وذلك لسبب وجيه. فهو يجمع بين قراءة المستشعر والتحكم في المحركات والاتصال التسلسلي وتصور البيانات في مشروع واحد. سواء كنت مبتدئًا أو تبحث عن بناء مجزٍ في عطلة نهاية الأسبوع، فإن هذا المشروع يعلمك مهارات عملية. سوف تقوم بإعادة استخدام هذه المهارات في العشرات من المشاريع المستقبلية.

ما ستتعلمه

  • كيف يعمل نظام الرادار بالموجات فوق الصوتية باستخدام مبدأ زمن الرحلة
  • كيفية توصيل مستشعر الموجات فوق الصوتية HC-SR04 ومحرك سيرفو إلى Arduino Uno
  • كيفية كتابة كود الاردوينو الذي يمسح السيرفو ويقيس المسافة في كل زاوية
  • كيف يتم تنسيق البيانات التسلسلية وإرسالها من الاردوينو إلى الكمبيوتر
  • كيفية إضافة صفارة كتنبيه اختياري للعوائق
  • كيفية تصور المسح الراداري في الوقت الفعلي باستخدام بيئة تطوير متكاملة للمعالجة (اختياري)
  • كيفية معايرة نظام الرادار الخاص بك واختباره واستكشاف أخطائه وإصلاحها

نظرة عامة على المشروع: كيف يعمل نظام الرادار اردوينو

قبل البدء في البناء، عليك أولاً فهم الصورة الكبيرة. يحتوي مشروع رادار Arduino بالموجات فوق الصوتية على أربعة أجزاء رئيسية تعمل معًا في حلقة.

ال محرك سيرفو يقوم بتدوير مستشعر HC-SR04 للخلف وللأمام. وتكتسح من 15 إلى 165 درجة. إذا كنت جديدًا في مجال المحركات المؤازرة، فراجع موقعنا دليل التحكم في محرك سيرفو باستخدام أردوينو. وهو يشرح كيفية عمل الماكينات وكيفية توصيلها.

عند كل درجة من الدوران مستشعر الموجات فوق الصوتية HC-SR04 يطلق نبضًا ويستمع إلى الصدى. ثم يقوم بحساب المسافة إلى أقرب كائن. للحصول على كتاب تمهيدي كامل عن HC-SR04، تفضل بزيارة موقعنا شرح اردوينو لمستشعر المسافة بالموجات فوق الصوتية.

ال أردوينو أونو يتحكم في العملية برمتها. فهو يأمر المؤازرة، ويشغل المستشعر، ويحسب المسافة. ثم يرسل بيانات الزاوية والمسافة عبر التسلسل إلى الكمبيوتر. هل أنت جديد في برمجة الاردوينو؟ ملكنا دليل أساسيات برمجة أردوينو يغطي الإعداد ()، والحلقة ()، والمتغيرات، والمراقبة التسلسلية.

الإضافات الاختيارية

ومن ناحية الكمبيوتر أ رسم المعالجة (اختياري) يقرأ البيانات التسلسلية ويرسم شاشة رادارية شاملة بأقواس وخطوط مسح ومؤشرات للأشياء. على وجه التحديد، هذا هو المردود البصري للمشروع. ومع ذلك، فإن نظام الرادار يعمل بشكل جيد بدونه. يمكنك التحقق من جميع القراءات مباشرة في Arduino Serial Monitor.

وأخيراً أ الجرس بيزو يمكن أن يصدر تنبيهًا مسموعًا بشكل اختياري عندما يكتشف المستشعر كائنًا ضمن عتبة مسافة قابلة للتكوين.

مبدأ الاستشعار بالموجات فوق الصوتية

يصدر جهاز الاستشعار بالموجات فوق الصوتية نبضة صوتية عالية التردد، عادةً عند 40 كيلو هرتز (أعلى بكثير من السمع البشري). ثم يستمع إلى الصدى الذي يرتد من الأجسام القريبة. من خلال قياس الوقت بين الانبعاث وعودة الصدى، يقوم المستشعر بحساب مدى بعد الجسم. بمعنى آخر، هذا هو نفس المبدأ الذي تستخدمه الخفافيش للتنقل في الظلام. يطلق عليها المهندسون طريقة زمن الرحلة.

Diagram showing how the HC-SR04 ultrasonic sensor emits a sound pulse and receives the echo to measure distance
HC-SR04 ultrasonic sensor module showing the transmitter and receiver transducers

كيف تعمل دورة القياس HC-SR04

تحتوي وحدة HC-SR04 على محولين طاقة أسطوانيين في المقدمة. واحد هو الارسال، والتي تنبعث منها نبض بالموجات فوق الصوتية. والآخر هو المتلقي، الذي يكتشف الصدى العائد. تعمل دورة القياس بأكملها على أربع مراحل.

الانتقال: أولاً، يرسل Arduino نبضة عالية تبلغ 10 ميكروثانية إلى طرف TRIG الخاص بـ HC-SR04. هذا يخبر المستشعر بإصدار دفعة من ثماني موجات صوتية بقوة 40 كيلو هرتز. ونتيجة لذلك، ينتشر الصوت إلى الخارج في نمط مخروطي الشكل يبلغ عرضه حوالي 15 درجة.

انعكاس: بعد ذلك، عندما تصطدم موجة الصوت بجسم ما، فإنها ترتد مرة أخرى باتجاه المستشعر. يؤثر شكل الجسم وحجمه والمادة السطحية له على الموجة المنعكسة. تعكس الأسطح الصلبة والمسطحة الصوت بقوة، بينما تميل الأسطح الناعمة أو ذات الزوايا إلى تشتيت الإشارة.

استقبال: بعد ذلك، يكتشف محول طاقة المستقبل الصدى العائد، ويقوم HC-SR04 بتعيين دبوس ECHO الخاص به على مستوى عالٍ لمدة تساوي وقت السفر ذهابًا وإيابًا للموجة الصوتية.

حساب المسافة: وأخيرا، يقرأ Arduino مدة دبوس ECHO باستخدام نبض (). ثم تطبق الصيغة: المسافة = (الزمن × سرعة الصوت) / 2. تبلغ سرعة الصوت في الهواء حوالي 0.034 سم لكل ميكروثانية (340 م/ث). يجب عليك القسمة على 2 لأن الصوت ينتقل إلى الجسم ويعود، ويغطي المسافة مرتين. في الكود يصبح هذا المسافة = المدة * 0.034 / 2.

3D render of the HC-SR04 ultrasonic sensor mounted on an SG90 servo motor using a custom 3D-printed bracket

لماذا يقوم المؤازرة بإنشاء عملية مسح رادارية

يقوم جهاز استشعار بالموجات فوق الصوتية الثابت بقياس المسافة في اتجاه واحد فقط. من خلال تركيب HC-SR04 على محرك سيرفو وتحريكه من 15 إلى 165 درجة، يمكنك الحصول على قياس المسافة عند كل درجة. يقوم Arduino بربط كل قياس بزاوية المؤازرة الحالية ويرسلها عبر التسلسل. يمنحك رسم كل أزواج الزوايا والمسافات هذه رؤية رادارية من أعلى إلى أسفل للمنطقة أمامك. وهذا ما يجعل المشروع يعمل وكأنه نظام رادار مسح حقيقي.

المكونات وفاتورة المواد

يسرد الجدول التالي كل المكونات التي تحتاجها لبناء الرادار الأساسي. بالإضافة إلى ذلك، فهو يتضمن الترقيات الاختيارية لتنبيه الجرس وتصور المعالجة. كل هذه الأجزاء شائعة وغير مكلفة ويمكنك العثور عليها في أي بائع تجزئة للإلكترونيات.

عنصرغايةمطلوب؟ملحوظات
أردوينو أونولوحة التحكم الدقيقة الرئيسيةنعمأي لوحة متوافقة مع Uno تعمل
مستشعر الموجات فوق الصوتية HC-SR04يقيس المسافة عن طريق نبضات الموجات فوق الصوتيةنعمالمدى من 2 سم إلى 400 سم
محرك سيرفو SG90يمسح المستشعر عبر قوس 180 درجةنعمأجهزة مايكرو قياسية
لوح التجاربمنصة النماذج الأولية بدون لحامنعمنصف الحجم أو الحجم الكامل
أسلاك التوصيل (M-M، M-F)ربط جميع المكوناتنعمما لا يقل عن 10 أسلاك
كابل USB (من النوع A إلى النوع B)تحميل الكود ورابط البيانات التسلسليةنعمكابل USB قياسي لاردوينو
بيزو الجرستنبيه مسموع للأشياء القريبةخياريالجرس النشط أو السلبي
الطابعة والخيوط ثلاثية الأبعاد (PLA/ABS)مستشعر مخصص وحوامل مؤازرةخياريتركيب اللوح يعمل أيضًا
الكمبيوتر مع اردوينو IDEكتابة وتحميل كود الاردوينونعمتحميل اردوينو IDE
الكمبيوتر مع معالجة IDEتصور الرادار على الشاشةخياريتحميل مجاني في Processing.org

تصميم حوامل مخصصة وطباعتها ثلاثية الأبعاد (اختياري)

إذا كان بإمكانك الوصول إلى طابعة ثلاثية الأبعاد، فإن تصميم الحوامل المخصصة يضيف الاستقرار الميكانيكي. علاوة على ذلك، فهو يجعل البناء يبدو أكثر احترافية. يمكنك تصميمها في أي برنامج CAD مثل Autodesk Fusion 360 أو Tinkercad. من ناحية أخرى، إذا لم يكن لديك طابعة ثلاثية الأبعاد، فيمكنك توصيل HC-SR04 بقرن المؤازرة باستخدام شريط أو غراء ساخن أو أربطة مضغوطة.

جبل الاستشعار: صمم دعامة تحمل وحدة HC-SR04 بشكل مريح. تأكد من أن الجزء الأمامي من الدعامة يحتوي على فتحات لكلا محولي الطاقة حتى لا يحجب أي شيء مخروط الموجات فوق الصوتية. يجب أن يحتوي الجزء الخلفي من الدعامة على فتحة أو فتحة لولبية لتوصيلها مباشرةً بقرن المؤازرة.

جبل المؤازرة: قم بإنشاء قاعدة تثبت جسم المؤازرة بقوة في مكانه. اجعل القاعدة واسعة ومسطحة بما يكفي لوضعها على طاولة أو تثبيتها على منصة. حافظ على إمكانية الوصول إلى البوق المؤازر من الأعلى حتى تتمكن دعامة المستشعر من الدوران بحرية. للحصول على إلهام التصميم والإرشادات العامة للطباعة ثلاثية الأبعاد، راجع موقعنا مقدمة للطباعة ثلاثية الأبعاد والتصميم ثلاثي الأبعاد.

3D CAD design of the custom servo and ultrasonic sensor mount for the Arduino radar project
3D-printed PLA mount holding the HC-SR04 sensor attached to the servo motor horn

تجميع الأجهزة

بعد أن أصبحت المكونات والتركيبات الاختيارية جاهزة، اتبع هذه الخطوات لتجميع الأجهزة.

الخطوة 1 - تركيب المستشعر: قم بتأمين HC-SR04 في حامله المطبوع ثلاثي الأبعاد (أو قم بتثبيته على بوق المؤازرة). تأكد من عدم وجود أي شيء يغطي أو يحجب محول الطاقة.

الخطوة الثانية – تركيب المؤازرة: ضع محرك المؤازرة في قاعدته الأساسية. إذا كنت لا تستخدم حاملًا مطبوعًا، فاضغط على جسم المؤازرة في منطقة اللوح أو قم بتثبيته على الطاولة باستخدام معجون لاصق.

الخطوة 3 - قم بتوصيل المستشعر بالمؤازرة: قم بتوصيل دعامة المستشعر بقرن المؤازرة باستخدام المسمار الصغير الذي يأتي مع المؤازرة، أو استخدم تصميمًا ملائمًا. يجب أن يدور المستشعر بسلاسة عندما يتحرك المؤازرة.

الخطوة 4 - توصيل الأسلاك: اتبع جدول الأسلاك في القسم التالي لتوصيل جميع المكونات بـ Arduino باستخدام اللوح وأسلاك التوصيل.

مخطط الأسلاك واتصالات دبوس

لحسن الحظ، فإن الأسلاك لمشروع رادار Arduino هذا واضحة ومباشرة. استخدم الجدول أدناه للبناء الأساسي. إذا كنت تقوم أيضًا بإضافة الجرس الاختياري، فقم بتضمين صف الجرس أيضًا. تأكد من أن جميع المكونات تشترك في اتصال أرضي مشترك من خلال طرف Arduino GND.

الأسلاك الرادارية الأساسية

عنصردبوس المكوندبوس أردوينوملحوظات
خادم SG90الإشارة (برتقالي/أصفر)دبوس 8سلك التحكم PWM
خادم SG90في سي سي (أحمر)5 فولتمصدر الطاقة للمؤازرة
خادم SG90GND (بني/أسود)أرضيأرضية مشتركة
HC-SR04VCC5 فولتقوة الاستشعار
HC-SR04أرضيأرضيأرضية مشتركة
HC-SR04علم حساب المثلثاتدبوس 9إطلاق نبض الزناد
HC-SR04صدىدبوس 10إدخال نبض الصدى

أسلاك الجرس الاختيارية

عنصردبوس المكوندبوس أردوينوملحوظات
بيزو الجرسإيجابي (+)دبوس 12سلك إشارة لإخراج النغمة
بيزو الجرسسلبي (-)أرضيأرضية مشتركة

مهم: يجب أن تتصل جميع اتصالات GND (المؤازرة، المستشعر، الجرس) بنفس سكة Arduino GND. قد يؤدي استخدام مسارات أرضية منفصلة إلى قراءات غير منتظمة للمستشعر أو ارتعاش مؤازر. استخدم قضبان الطاقة الخاصة بلوحة التجارب لتوزيع 5V وGND بشكل نظيف.

Breadboard wiring diagram for the Arduino ultrasonic radar project showing HC-SR04 and servo connections
Breadboard wiring diagram for the Arduino radar project with optional buzzer connected to pin 12

كود اردوينو: رسم الرادار الأساسي

يشكل رسم Arduino أدناه جوهر نظام الرادار. يقوم بمسح المؤازرة من 15 إلى 165 درجة والعكس، مع قياس المسافة عند كل درجة. يتم إرسال كل قراءة عبر المسلسل بالتنسيق الزاوية والمسافة. حتى يتمكن مخطط المعالجة (أو أي شاشة تسلسلية) من تحليله.

/**
 * Arduino Ultrasonic Radar — Core Sketch
 * Author: Omar Draidrya
 * Date: 2024/05/09
 * This code controls a servo motor and measures distance
 * using an HC-SR04 ultrasonic sensor.
 */

#include <Servo.h>

Servo myServo;

const int trigPin = 9;
const int echoPin = 10;

long duration;
int distance;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  Serial.begin(9600);
  myServo.attach(8);
}

void loop() {
  // Forward sweep: 15 to 165 degrees
  for (int i = 15; i <= 165; i++) {
    myServo.write(i);
    delay(30);
    distance = calculateDistance();
    Serial.print(i);
    Serial.print(",");
    Serial.print(distance);
    Serial.print(".");
  }
  // Return sweep: 165 back to 15 degrees
  for (int i = 165; i > 15; i--) {
    myServo.write(i);
    delay(30);
    distance = calculateDistance();
    Serial.print(i);
    Serial.print(",");
    Serial.print(distance);
    Serial.print(".");
  }
}

int calculateDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.034 / 2;
  return distance;
}

كيف يعمل كود الرادار اردوينو

منطق الاجتياح المؤازر: اثنين ل حلقات تتحكم في عملية الاجتياح. الأول ينقل المؤازرة من 15 إلى 165 درجة، والثاني يعيدها من 165 إلى 15. النطاق هو 15-165 بدلاً من 0-180 لسببين. أولاً، تحتوي معظم الماكينات ذات الميزانية المحدودة على مناطق ميتة عند أقصى حدود السفر. ثانيًا، يقرأ HC-SR04 بشكل أفضل عند توجيهه بعيدًا عن قاعدة التثبيت. يمنح التأخير بمقدار 30 مللي ثانية بين كل درجة المؤازرة وقتًا للوصول إلى الموضع التالي قبل القياس.

حساب المسافة معpulseIn(): التالي، حساب المسافة () ترسل الدالة نبضة عالية تبلغ 10 ميكروثانية على طرف TRIG. ثم يدعو نبض (echoPin، عالية). بشكل أساسي، تمنع هذه الوظيفة التنفيذ حتى يصل طرف ECHO إلى المستوى العالي ويعيد مدة النبضة بالميكروثانية. وبعبارة أخرى، تمثل هذه المدة إجمالي وقت السفر ذهابًا وإيابًا للموجة فوق الصوتية. الضرب في 0.034 يحول ميكروثانية إلى سنتيمترات، حيث ينتقل الصوت حوالي 0.034 سم لكل ميكروثانية. القسمة على 2 تعطي المسافة في اتجاه واحد للكائن.

الإخراج التسلسلي والاختبار

تنسيق الإخراج التسلسلي: يتم إرسال كل قراءة كما الزاوية والمسافة. - على سبيل المثال، 90,25. يعني أن المستشعر يشير إلى 90 درجة ويكتشف جسمًا على بعد 25 سم. على وجه التحديد، الفترة . يعمل كمحدد يخبر مخطط المعالجة حيث تنتهي قراءة واحدة وتبدأ القراءة التالية. يمكنك التحقق من هذا الإخراج عن طريق فتح Arduino IDE Serial Monitor عند 9600 باود بعد تحميل المخطط.

الاختبار باستخدام جهاز المراقبة التسلسلي: قبل إعداد المعالجة، قم أولاً بتحميل هذا المخطط. ثم افتح Serial Monitor (Tools > Serial Monitor)، واضبط معدل الباود على 9600. يجب أن تشاهد دفقًا مستمرًا من أزواج الزاوية والمسافة مثل 15,40.16,38.17,35. تتدفق عبر الشاشة. إذا رأيت أصفارًا فقط أو أرقامًا كبيرة جدًا، فتحقق من الأسلاك الخاصة بك وراجع قسم استكشاف الأخطاء وإصلاحها أدناه.

ترقية اختيارية: إضافة صفارة لتنبيهات العوائق

بمجرد أن يعمل الرادار الأساسي، يمكنك بعد ذلك إضافة صفارة بيزو للحصول على تحذير مسموع عند اكتشاف كائن أقرب من عتبة محددة. ونتيجة لذلك، فإن هذا يحول الرادار إلى نظام إنذار قريب يشبه أجهزة استشعار مواقف السيارات. قم بتوصيل الجرس إلى الدبوس 12 وGND كما هو موضح في جدول الأسلاك أعلاه، ثم قم بتحميل الرسم المعدل أدناه.

/**
 * Arduino Ultrasonic Radar — Buzzer Upgrade
 * Author: Omar Draidrya
 * Date: 2024/05/09
 * Adds a buzzer alert when an obstacle is within threshold distance.
 */

#include <Servo.h>

Servo myServo;

const int trigPin = 9;
const int echoPin = 10;
const int buzzerPin = 12;
const int alertThreshold = 10; // cm — change this value to adjust sensitivity

long duration;
int distance;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(buzzerPin, OUTPUT);
  Serial.begin(9600);
  myServo.attach(8);
}

void loop() {
  for (int i = 15; i <= 165; i++) {
    myServo.write(i);
    delay(30);
    distance = calculateDistance();
    Serial.print(i);
    Serial.print(",");
    Serial.print(distance);
    Serial.print(".");

    if (distance <= alertThreshold) {
      tone(buzzerPin, 2000);
    } else {
      noTone(buzzerPin);
    }
  }
  for (int i = 165; i > 15; i--) {
    myServo.write(i);
    delay(30);
    distance = calculateDistance();
    Serial.print(i);
    Serial.print(",");
    Serial.print(distance);
    Serial.print(".");

    if (distance <= alertThreshold) {
      tone(buzzerPin, 2000);
    } else {
      noTone(buzzerPin);
    }
  }
}

int calculateDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.034 / 2;
  return distance;
}

طريقة عمل الجرس: بشكل أساسي، بعد كل قياس للمسافة، يتحقق الكود مما إذا كانت المسافة أقل من أو تساوي تنبيه العتبة (والذي الافتراضي هو 10 سم). إذا كان الأمر كذلك، نغمة (buzzerPin، 2000) يقوم بتشغيل الجرس بتردد 2000 هرتز. خلاف ذلك، noTone() يسكته. علاوة على ذلك، يمكنك التغيير تنبيه العتبة إلى أي قيمة تريدها. على سبيل المثال، ضبطه على 20 سم يجعل المنبه أكثر حساسية. وعلى العكس من ذلك، فإن ضبطه على 5 سم يؤدي إلى تشغيله فقط للأشياء القريبة جدًا.

ترقية اختيارية: تصور الرادار في الوقت الحقيقي مع المعالجة

يعمل مشروع رادار Arduino بشكل مثالي باستخدام الشاشة التسلسلية فقط، ولكن المردود البصري الحقيقي يأتي من توصيله برسم معالجة يرسم شاشة رادارية حية. المعالجة هي بيئة برمجة مجانية ومفتوحة المصدر. صممه المطورون للمشاريع المرئية والتفاعلية. يقرأ البيانات التسلسلية من Arduino ويعرض الرسومات في الوقت الفعلي. وهذا يجعلها الأداة الرفيق المثالي لهذا المشروع.

مهم: ومع ذلك، فإن نظام الرادار يعمل بكامل طاقته دون معالجة. إذا كنت تريد فقط إنشاء الأجهزة والاطلاع على بيانات المسافة في الشاشة التسلسلية، فيمكنك تخطي هذا القسم بالكامل.

ما يفعله رسم المعالجة

على وجه التحديد، يفتح رمز المعالجة اتصالاً تسلسليًا بـ Arduino عند 9600 باود. يقرأ الواردة الزاوية والمسافة. دفق البيانات، ويوزع كل قراءة، ويرسم شاشة رادارية. ونتيجة لذلك، تظهر الكائنات المكتشفة كخطوط ملونة داخل حلقات قوسية تمثل نطاقات المسافة. بالإضافة إلى ذلك، تعرض الشاشة الزاوية الحالية والمسافة المقاسة في تراكب النص.

كيفية إعداد المعالجة

الخطوة 1: قم بتنزيل وتثبيت IDE للمعالجة من معالجة.org.

الخطوة 2: بعد ذلك، أغلق شاشة Arduino IDE التسلسلية إذا كانت مفتوحة. يمكن لتطبيق واحد فقط استخدام المنفذ التسلسلي في المرة الواحدة.

الخطوة 3: بعد ذلك، انسخ رمز المعالجة أدناه في رسم معالجة جديد وقم بتشغيله.

الخطوة 4: إذا ظهرت شاشة الرادار ولكنها لم تظهر أي خط مسح، فمن المحتمل أن تحتاج إلى تغيير فهرس المنفذ التسلسلي. في الخط String portName = Serial.list()[0];، قم بتغيير [0] ل [1] أو [2] اعتمادًا على المنفذ الذي يعمل عليه Arduino. يمكنك الطباعة Serial.list() إلى وحدة تحكم المعالجة لرؤية جميع المنافذ المتاحة.

معالجة كود الرادار

/**
 * Arduino Radar — Processing Visualization
 * Date: 2024/05/09
 * Reads serial data from Arduino and draws a radar display.
 */

import processing.serial.*;

Serial communicationPort;
String serialData = "";
float scanAngle = 0;
float scanDistance = 0;
int radarRadius = 800;
int maxDistance = 40; // cm

void setup() {
  size(1920, 1080);
  smooth();
  String portName = Serial.list()[0]; // Adjust index if needed
  communicationPort = new Serial(this, portName, 9600);
  communicationPort.bufferUntil('.');
  background(0);
}

void draw() {
  drawRadarBackground();
  if (serialData.length() > 0) {
    parseSerialData();
    drawDetection();
  }
  displayInfo(scanDistance, scanAngle);
}

void drawRadarBackground() {
  pushMatrix();
  translate(width / 2, height - 200);
  noFill();
  stroke(80);
  strokeWeight(1);
  for (int i = 0; i < 5; i++) {
    float r = radarRadius * (i + 1) / 5.0;
    arc(0, 0, r * 2, r * 2, PI, TWO_PI);
  }
  for (int i = 0; i < 180; i += 10) {
    float x = radarRadius * cos(radians(i));
    float y = radarRadius * sin(radians(i));
    line(0, 0, x, -y);
    if (i % 30 == 0) {
      fill(255);
      textSize(16);
      text(i + "°", x + 5, -y + 5);
    }
  }
  popMatrix();
}

void parseSerialData() {
  String[] tokens = serialData.split(",");
  if (tokens.length >= 2) {
    scanAngle = float(tokens[0]);
    scanDistance = float(tokens[1]);
  }
}

void drawDetection() {
  float angle = radians(scanAngle);
  float distance = scanDistance;
  float x = distance * 20;
  float fullX = radarRadius * cos(angle);
  float fullY = radarRadius * sin(angle);

  pushMatrix();
  translate(width / 2, height - 200);
  strokeWeight(4);
  noStroke();
  fill(0, 20);
  rect(-radarRadius, -radarRadius, radarRadius * 2, radarRadius);

  if (distance > 0 && distance <= maxDistance) {
    stroke(0, 0, 255);
    line(0, 0, x * cos(angle), -x * sin(angle));
    stroke(255, 165, 0);
    line(x * cos(angle), -x * sin(angle), fullX, -fullY);
  } else {
    stroke(0, 0, 255);
    line(0, 0, fullX, -fullY);
  }
  popMatrix();
  serialData = "";
}

void displayInfo(float distance, float angle) {
  fill(0);
  noStroke();
  rect(10, 10, 260, 80);
  fill(255);
  textSize(20);
  text("Angle: " + nf(angle, 1, 2) + "°", 30, 30);
  text("Distance: " + nf(distance, 1, 2) + " cm", 30, 60);
}

void serialEvent(Serial p) {
  serialData = p.readStringUntil('.');
  serialData = serialData.substring(0, serialData.length() - 1);
}

فهم تنسيق البيانات التسلسلية

باختصار، يرسل Arduino البيانات بالتنسيق الدقيق الزاوية والمسافة. - على سبيل المثال، 45,18.. يستخدم رسم المعالجة المخزن المؤقت حتى ('.') لجمع الأحرف حتى يرى محدد الفترة. ثم يقوم بتقسيم السلسلة على الفاصلة لاستخراج الزاوية والمسافة. إذا تغير التنسيق ولو قليلاً، فسيفشل مخطط المعالجة في تحليل البيانات. على سبيل المثال، تؤدي إضافة مسافة أو تغيير المحدد إلى انقطاع العرض. لذلك، حافظ دائمًا على مزامنة مخرجات Arduino ومحلل المعالجة.

المعايرة والدقة والقيود

بمجرد تشغيل الرادار، ستلاحظ أن الأداء في العالم الحقيقي ليس دائمًا نظيفًا كما هو متوقع. ولذلك، فإن فهم هذه القيود يساعدك على تفسير البيانات بشكل صحيح وإجراء تحسينات مستهدفة.

محاذاة المؤازرة: على وجه الخصوص، لا تتم معايرة معظم ماكينات الهوايات بشكل مثالي خارج الصندوق. قد لا تشير الزاوية 90 الموجودة على جهاز مؤازر جديد إلى الأمام تمامًا. إذا بدت شاشة الرادار الخاصة بك مستديرة أو متخالفة، فما عليك سوى ضبط دعامة المستشعر الموجودة على البوق أو إضافة إزاحة صغيرة في الكود الخاص بك.

عرض المخروط بالموجات فوق الصوتية: علاوة على ذلك، يصدر HC-SR04 الصوت في شكل مخروطي بعرض 15 درجة تقريبًا. وبالتالي، فإنه لا يستطيع التمييز بين جسمين قريبين من بعضهما البعض داخل هذا المخروط. بالإضافة إلى ذلك، قد يكتشف المستشعر حافة جسم كبير حتى عندما لا يكون أمامك مباشرة.

الأسطح العاكسة والناعمة: بشكل عام، تنتج الأسطح الصلبة المسطحة مثل الجدران والصناديق أصداء قوية. في المقابل، يمكن للأقمشة الناعمة والأسطح المائلة والأشياء الرقيقة مثل أرجل الكرسي أن تمتص النبض أو تحرفه. يؤدي هذا إلى قراءات مفقودة أو مسافات غير صحيحة.

النطاق والضوضاء وسرعة الاجتياح

أقصى مدى عملي: على الرغم من أن ورقة بيانات HC-SR04 تدعي ما يصل إلى 400 سم، إلا أن القراءات الموثوقة عادةً ما تصل إلى حوالي 200 سم. أبعد من ذلك، تصبح الأصداء أضعف من أن يتم اكتشافها باستمرار. بالنسبة لمشروع الرادار هذا، فإن مسافة العرض الافتراضية في رسم المعالجة هي 40 سم. يعمل هذا بشكل جيد مع العروض التوضيحية على سطح الطاولة.

قراءات صاخبة أو متذبذبة: وبالمثل، فإن الارتفاع العرضي في القراءات البعيدة أمر طبيعي. غالبًا ما تتسبب انعكاسات المسارات المتعددة أو الضوضاء الكهربائية أو الأصداء المتبقية من النبضات السابقة في حدوث هذه الارتفاعات. لإصلاح ذلك، قم بإضافة مرشح متوسط ​​قصير في كود Arduino الخاص بك والذي يأخذ ثلاث قراءات ويستخدم القيمة المتوسطة.

سرعة الاجتياح مقابل معدل التحديث: وأخيرًا، يعني التأخير البالغ 30 مللي ثانية لكل درجة أن عملية المسح الكاملة للأمام تستغرق حوالي 4.5 ثانية. تقليل التأخير يجعل عملية المسح أسرع. ومع ذلك، فإن المؤازرة لديها وقت أقل للاستقرار، مما قد يؤدي إلى اهتزاز وقراءات غير دقيقة. تؤدي زيادة التأخير إلى جعل القياسات أكثر استقرارًا ولكنها تؤدي إلى إبطاء معدل تحديث الرادار.

استكشاف الأخطاء وإصلاحها في المشاكل الشائعة

إذا كان هناك شيء لا يعمل كما هو متوقع، فاعمل أولاً من خلال قائمة التحقق هذه قبل إجراء تغييرات على الأجهزة.

السيرفر لا يتحرك: تأكد من أن سلك إشارة المؤازرة موجود على السن 8. وتحقق أيضًا من اتصال VCC وGND بـ Arduino 5V وGND. جرّب رسمًا تخطيطيًا بسيطًا من أمثلة Arduino Servo. يساعد هذا في تحديد ما إذا كانت المشكلة هي المؤازرة أو رمز الرادار.

يقرأ HC-SR04 دائمًا 0 أو الحد الأقصى للمسافة: أولاً، تأكد من أن TRIG موجود على المنفذ 9 وأن ECHO موجود على المنفذ 10. وتأكد أيضًا من أن المستشعر يعمل على 5 فولت (وليس 3.3 فولت). تأكد من عدم إعاقة محولات الطاقة بواسطة الحامل. ثم قم بتوجيه المستشعر إلى جدار مسطح على بعد 20 سم وتحقق من الشاشة التسلسلية.

قيم مسافة الضوضاء أو القفز: أولاً، تأكد من أن جميع التوصيلات الأرضية مشتركة. بالإضافة إلى ذلك، يمكن لأسلاك التوصيل الطويلة التقاط الضوضاء الكهربائية. إذا ظلت القراءات متقلبة، قم بإضافة مكثف 10 فائق التوهج بين أطراف المستشعر VCC وGND. هذا يستقر إمدادات الطاقة.

يتم تشغيل الجرس دائمًا أو لا يتم تشغيله مطلقًا: أولاً، تأكد من توصيل الجرس بالدبوس 12. تحقق من تنبيه العتبة القيمة في الكود. وبالتالي، إذا قرأ المستشعر مسافات غير صحيحة (انظر أعلاه)، فسيعمل منطق الجرس أيضًا بشكل غير صحيح. لذلك، قم بإصلاح قراءات المستشعر أولاً.

المعالجة واستكشاف الأخطاء وإصلاحها التسلسلية

معالجة عدم الاتصال أو ظهور شاشة فارغة: أغلق Arduino Serial Monitor قبل تشغيل رسم المعالجة. يمكن لبرنامج واحد فقط استخدام المنفذ التسلسلي في المرة الواحدة. إذا تم تشغيل المخطط ولكن بقي الرادار فارغًا، فقم بتغيير فهرس المنفذ Serial.list()[0] ل [1] أو [2]. للعثور على المنفذ الصحيح، قم بالطباعة Serial.list() إلى وحدة تحكم المعالجة.

عدم تطابق التنسيق التسلسلي: يتوقع رسم المعالجة التنسيق الدقيق الزاوية والمسافة. بدون مسافات. إذا قمت بتعديل Arduino Serial.print() العبارات، سينقطع محلل المعالجة. على سبيل المثال، تؤدي إضافة وحدات أو محددات إضافية إلى فشل التحليل. حافظ على مزامنة كلا الرسمين.

مشكلات الطاقة أو السلوك الخاطئ عند تحركات المؤازرة: ضع في اعتبارك أن أجهزة SG90 يمكنها سحب ما يصل إلى 500 مللي أمبير تحت الحمل. إذا كان Arduino يعمل فقط على طاقة USB، فقد يتسبب المؤازرة في انخفاض الجهد. يمكن لهذه القطرات إعادة ضبط قراءات المستشعر أو أجهزة الاستشعار الفاسدة. لإصلاح ذلك، قم بتشغيل المؤازرة من مصدر خارجي بجهد 5 فولت. تأكد من أنه يشترك في أرضية مشتركة مع Arduino.

الأسئلة الشائعة (FAQ)

يستخدم مشروع رادار Arduino مستشعرًا بالموجات فوق الصوتية مثبتًا على محرك سيرفو. يقوم المؤازرة بمسح المنطقة الأمامية، وقياس المسافة إلى الأشياء في كل زاوية. يرسل Arduino البيانات إلى جهاز كمبيوتر، والذي يعرضها على شكل مسح راداري على الشاشة. ونتيجة لذلك، فهو أحد أشهر مشاريع Arduino المتوسطة.

نعم. نعم. يعد HC-SR04 هو الخيار الأكثر شيوعًا لأنه رخيص وموثوق. ومع ذلك، يمكنك استبداله بأجهزة استشعار مثل US-015 أو JSN-SR04T. فقط تأكد من أن البديل يستخدم نفس واجهة TRIG/ECHO. إذا كان يستخدم بروتوكولًا مختلفًا (مثل I2C أو UART)، فيجب عليك تعديل كود Arduino.

تنص ورقة بيانات HC-SR04 على نطاق أقصى يبلغ 400 سم (حوالي 13 قدمًا). ومع ذلك، من الناحية العملية، عادةً ما تصل القراءات الموثوقة إلى حوالي 200 سم. بالنسبة لهذا المشروع، يبلغ عرض المعالجة الافتراضي 40 سم. هذا النطاق يعمل بشكل جيد لعروض الطاولة. يمكنك زيادة maxDistance في رسم المعالجة لعرض نطاق أوسع.

لا، فالحوامل المطبوعة ثلاثية الأبعاد تجعل التصميم أكثر ثباتًا وأكثر مظهرًا. ومع ذلك، يمكنك أيضًا توصيل HC-SR04 بقرن المؤازرة باستخدام الغراء الساخن أو الشريط اللاصق أو الأربطة المضغوطة أو الورق المقوى. في الواقع، يقوم العديد من المصنّعين بإكمال هذا المشروع بالكامل على اللوح.

تحتوي معظم الماكينات ذات الميزانية المحدودة على مناطق ميتة أو عزم دوران منخفض بالقرب من 0 و180 درجة. يؤدي تحديد المسح إلى 15-165 درجة إلى إبقاء المؤازرة في نطاقها الموثوق. بالإضافة إلى ذلك، فإنه يمنع المستشعر من الإشارة للخلف نحو قاعدة التثبيت الخاصة به، مما قد ينتج عنه قراءات خاطئة.

نعم. الكود متوافق مع Arduino Nano وMega ومعظم لوحات Arduino المعتمدة على AVR. فقط تأكد من أن أرقام التعريف الشخصية الموجودة في الكود تتطابق مع المسامير الموجودة على اللوحة الخاصة بك. تأكد أيضًا من أن اللوحة توفر 5 فولت للمستشعر والمؤازرة.

في رسم الجرس، ابحث عن السطر const intalertThreshold = 10; وقم بتغيير القيمة إلى أي مسافة تريدها (بالسنتيمتر). على سبيل المثال، ضبطه على 25 يعني أن الجرس سوف ينشط عندما يكون الجسم ضمن مسافة 25 سم.

في معظم الحالات، يعني هذا أن المعالجة تتصل بمنفذ تسلسلي خاطئ. مطبعة Serial.list() في وحدة تحكم المعالجة، ابحث عن المنفذ الذي يستخدمه Arduino (مثل COM3 على Windows أو /dev/ttyUSB0 على Linux). ثم قم بتحديث الفهرس في Serial.list()[0]. أغلق أيضًا Arduino Serial Monitor أولاً. لا يمكن لبرنامجين مشاركة نفس المنفذ التسلسلي.

نعم إلى حد ما. يكتشف HC-SR04 أي جسم يعكس الموجات الصوتية. وهذا يشمل الأشخاص والحيوانات الأليفة والأثاث. ومع ذلك، فإن الأجسام الرقيقة أو الناعمة مثل فراء القطة على مسافة بعيدة قد لا تعكس صدى قويًا. وللحصول على كشف بشري موثوق به على نطاقات أطول، فكر في استخدام وحدة رادار تعمل بالموجات الدقيقة أو مستشعر LiDAR.

في ظل الظروف المثالية، تبلغ دقة HC-SR04 حوالي 3 مم. تشمل الظروف المثالية سطحًا مستوًا ودرجة حرارة الغرفة وعدم التدخل. في الاستخدام الواقعي، توقع الدقة في حدود 1 إلى 2 سم للمسافات التي تقل عن 100 سم. تنخفض الدقة عند النطاقات الأطول ومع الأسطح الزاوية أو الناعمة.

الموارد ذات الصلة

استخدم الروابط أدناه لتعميق فهمك للمكونات المستخدمة في هذا المشروع. بالإضافة إلى ذلك، يمكنهم مساعدتك في العثور على تصميمك التالي.

الخلاصة والخطوات التالية

في الختام، لقد قمت الآن ببناء نظام رادار Arduino كامل باستخدام مستشعر الموجات فوق الصوتية HC-SR04 ومحرك سيرفو. على طول الطريق، تعلمت كيفية عمل قياس وقت الرحلة بالموجات فوق الصوتية وكيفية مسح المستشعر باستخدام جهاز مؤازر. لقد تعلمت أيضًا كيفية تنسيق البيانات التسلسلية وإضافة تنبيه أو تصور للمعالجة بشكل اختياري. سوف تستخدم هذه المهارات - قراءة أجهزة الاستشعار، والتحكم في المحركات، والاتصال التسلسلي، وعرض البيانات - في كل مشروع للروبوتات والأنظمة المدمجة تقريبًا الذي ستتعامل معه بعد ذلك.

وللمضي قدمًا بهذا المشروع، فكر في زيادة سرعة المسح. يمكنك أيضًا إضافة مرشح متوسط ​​للحصول على قراءات أكثر سلاسة. هناك خيار آخر وهو استبدال HC-SR04 بمستشعر ليزر VL53L0X للحصول على دقة على مستوى المليمتر. وبدلاً من ذلك، استخدم محركًا متدرجًا بدلاً من المؤازرة لإجراء مسح كامل بزاوية 360 درجة. لتحدي مختلف تمامًا، حاول بناء سيارة روبوتية تتجنب العوائق يستخدم نفس جهاز الاستشعار بالموجات فوق الصوتية ومجموعة المؤازرة للتنقل بشكل مستقل. اكتشف المزيد من البرامج التعليمية حول Arduino والروبوتات على الصفحة الرئيسية لشركة أومارترونيكس.

قم بتنزيل ملفات الطباعة ثلاثية الأبعاد (STL)

جميع ملفات STL القابلة للطباعة ثلاثية الأبعاد لهذا المشروع متاحة للتنزيل. يمكنك الحصول عليها من متجرنا أو تصفحها على موقع Cults3D.

  • متجر أومارترونيكس: قم بتنزيل ملف المشروع من OmArTronics — احصل على حزمة المشروع الكاملة بما في ذلك ملفات STL ومخططات الأسلاك وشفرة المصدر التي يتم تسليمها إلى بريدك الإلكتروني.
  • Cults3D: شاهد على موقع Cults3D — تصفح وقم بتنزيل ملفات النماذج ثلاثية الأبعاد على موقع Cults3D.

أضف تعليق