مستشعر المسافة بالموجات فوق الصوتية مع Arduino: شرح HC-SR04 مع التوصيلات والكود

يحتوي هذا المقال على روابط تسويق بالعمولة مُعلَّمة بعلامة *. بصفتي شريكًا في برنامج Amazon Associates، أربح من عمليات الشراء المؤهلة، دون أي تكلفة إضافية عليك. يساعد ذلك على إبقاء الشروحات مجانية.

يُحمَّل الفيديو من YouTube (Google)، وقد يضع ملفات تعريف الارتباط (Cookies). سياسة الخصوصية

ملخص سريع

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

يقيس HC-SR04 المسافة بالموجات فوق الصوتية دون أن يلمس الجسم، ويتصل بلوحة Arduino بأربعة أسلاك.

Front view of the HC-SR04 module with its two transducers, the transmitter and the receiver.

كيف يعمل قياس المسافة بالموجات فوق الصوتية

يقيس مستشعر الموجات فوق الصوتية المسافة بإرسال دفعة قصيرة من صوت عالي التردد، ثم الإصغاء إلى الصدى المرتد. وبالطريقة نفسها تحدد الخفافيش مواقع الأجسام، ويُسمى ذلك تحديد الموقع بالصدى (Echolocation). يحمل HC-SR04 على واجهته محوّلين دائريين: المرسِل (المميَّز بالحرف T) والمستقبِل (المميَّز بالحرف R). والمحوِّل (Transducer) عنصر يحوّل الإشارة الكهربائية إلى صوت، أو الصوت إلى إشارة كهربائية.

Diagram of the sensing principle: the sensor sends a sound wave, and the object reflects it back as an echo.

مبدأ زمن الانتقال (Time of Flight)

عندما تُفعّل المستشعر، يرسل المرسِل دفعة قصيرة من ثماني نبضات فوق صوتية بتردد 40 kHz (كيلوهرتز، أي 40,000 اهتزازة في الثانية)، بينما لا يسمع الإنسان إلا حتى نحو 20 kHz. تنتشر الموجات الصوتية إلى الخارج على شكل مخروط، وعندما تصطدم بجسم صلب ترتد نحو المستشعر، فيلتقطها المستقبِل على هيئة صدى. يقيس المستشعر الزمن بين إرسال الدفعة واستقبال الصدى، ويُسمى هذا زمن الانتقال (Time of Flight).

معادلة المسافة

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

المسافة = (الزمن × سرعة الصوت) / 2.

في درجة حرارة الغرفة (نحو 20 °C) ينتقل الصوت بسرعة تقارب 343 m/s (متر في الثانية)، أي 0.0343 cm في كل ميكروثانية (µs، وهي جزء من مليون من الثانية). يقيس Arduino زمن الصدى بوحدة µs، لذا تكون المعادلة في الكود كالتالي:

المسافة (cm) = المدة (µs) × 0.0343 / 2.

من دون القسمة على 2 تكون النتيجة ضعف المسافة الحقيقية. تعتمد سرعة الصوت على درجة حرارة الهواء، ويفترض الكود 343 m/s (عند 20 °C)؛ أما الخطأ الذي ينتج عن ذلك في درجات الحرارة الأخرى فتجده أدناه تحت بند العوامل البيئية. وللتعمق أكثر في النظرية مع بيانات مقيسة، راجع دليلي لاستخدام HC-SR04 مع ESP32.

رسوم متحركة تفاعلية: كيف يعمل القياس بالموجات فوق الصوتية

انقر إرسال نبضة واسحب منزلق مسافة العائق لترى كيف يقيس HC-SR04 المسافة في الوقت الفعلي.

مواصفات HC-SR04

المعاملالقيمة
جهد التشغيل5 V DC
تيار التشغيل15 mA
نطاق القياسمن 2 cm إلى 400 cm
زاوية القياسنحو 15 درجة
تردد الموجات فوق الصوتية40 kHz
عرض نبضة الإطلاق (Trigger)10 µs كحد أدنى
الدقةنحو ±3 mm
أطراف الواجهةVCC، Trig، Echo، GND

المكونات المطلوبة

المكوّنالغرضمطلوب؟ملاحظات
Arduino Unoيشغّل الكود ويقرأ المستشعرنعمتصلح أي لوحة Arduino تعمل بجهد 5 V، مثل Uno أو Nano أو Mega. أما اللوحات التي تعمل بجهد 3.3 V مثل ESP32، فراجع بشأنها قسم الأسئلة الشائعة. ما هو Arduino؟
مستشعر الموجات فوق الصوتية HC-SR04يقيس المسافة بالموجات فوق الصوتيةنعموحدة بأربعة أطراف: VCC، Trig، Echo، GND
لوحة التجارب (Breadboard)منصة للتوصيلات دون لحامنعمتكفي لوحة تجارب بنصف الحجم
أسلاك توصيل Jumper (ذكر-ذكر)توصل المستشعر بلوحة Arduino عبر لوحة التجاربنعم4 أسلاك على الأقل
كابل USB (من Type A إلى B)يوصل Arduino بحاسوبك لرفع الكود واستقبال الإخراج التسلسلينعممرفق مع معظم أطقم Arduino
شاشة LCD حرفية 16×2 (HD44780) مع محوّل I2Cتعرض قراءات المسافة دون حاسوباختياريلقسم شاشة LCD فقط. LCD اختصار لعبارة liquid crystal display، أي شاشة البلورات السائلة. وتعني 16×2 أن الشاشة تعرض سطرين (2) في كل منهما 16 حرفًا، أما HD44780 فهي شريحة التحكم في الشاشة. ويوصل محوّل I2C الشاشة بلوحة Arduino عبر سلكي إشارة.

توصيل HC-SR04 بـ Arduino

وصّل أطراف المستشعر الأربعة كما هو موضح في الجدول. واضغط كل سلك توصيل (Jumper) بإحكام في لوحة التجارب قبل أن ترفع الكود.

طرف HC-SR04طرف Arduinoالوصف
VCC5 Vيغذّي المستشعر بالطاقة (يجب أن يكون الجهد 5 V)
Trigالطرف الرقمي 9يستقبل إشارة الإطلاق (Trigger) من Arduino
Echoالطرف الرقمي 10يرسل نبضة الصدى إلى Arduino
GNDGNDأرضي مشترك (يجب أن يكون مشتركًا مع GND في Arduino)

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

Wiring diagram: HC-SR04 connected to an Arduino Uno, with Trig on pin 9 and Echo on pin 10.

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

بعد الانتهاء من التوصيلات، ارفع هذا البرنامج (Sketch، أي برنامج Arduino) إلى لوحتك. تكتب هذه البرامج وترفعها في Arduino IDE (بيئة التطوير المتكاملة)، وهو تطبيق على حاسوبك. يرسل البرنامج إشارة الإطلاق إلى HC-SR04، ويقرأ زمن الصدى، ويحسب المسافة بالسنتيمتر، ثم يطبع النتيجة على الشاشة التسلسلية (Serial Monitor). والشاشة التسلسلية نافذة في Arduino IDE تعرض النص الذي ترسله اللوحة عبر USB. هل أنت مبتدئ في كتابة كود Arduino؟ في دليل أساسيات برمجة Arduino أشرح إعداد IDE وبنية برنامج Arduino (Sketch).

/**
 * Author: Omar Draidrya
 * Date: 2024/05/07
 * This code measures distance using an ultrasonic sensor
 * and outputs the result via serial communication.
 */

#define TRIG_PIN  9   // Trigger pin of the ultrasonic sensor
#define ECHO_PIN  10  // Echo pin of the ultrasonic sensor

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  Serial.begin(9600);
}

void loop() {
  long duration, distance;

  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);

  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  duration = pulseIn(ECHO_PIN, HIGH);

  distance = duration * 0.0343 / 2;

  Serial.print("Distance (cm): ");
  Serial.println(distance);

  delay(1000);
}

شرح الكود: سطرًا بسطر

#define TRIG_PIN 9 و ECHO_PIN 10 تمنحان أرقام الأطراف أسماءً سهلة القراءة: الطرف 9 يتحكم في الإطلاق (Trigger)، والطرف 10 يستقبل الصدى. يمكنك تغييرهما إلى أي طرفين رقميين متاحين، بشرط أن تعدّل التوصيلات أيضًا.

pinMode(TRIG_PIN, OUTPUT) يهيّئ الطرف 9 ليعمل مخرجًا، لأن Arduino يرسل إشارة البدء إلى المستشعر.

pinMode(ECHO_PIN, INPUT) يهيّئ الطرف 10 ليعمل مدخلًا، لأن Arduino يقرأ إشارة الصدى من المستشعر.

Serial.begin(9600) يفتح الاتصال التسلسلي بسرعة 9600 baud (بت في الثانية) كي يتمكن Arduino من إرسال قراءات المسافة إلى حاسوبك.

تسلسل الإطلاق: يضبط Arduino الطرف Trig على LOW (0 V) وينتظر 2 µs حتى تبدأ النبضة من مستوى LOW نظيف، ثم يضبط الطرف على HIGH (5 V) لمدة 10 µs ويعيده إلى LOW. هذه النبضة HIGH التي تدوم 10 µs تطلب من HC-SR04 أن يرسل دفعته فوق الصوتية.

قراءة الصدى وحساب المسافة

pulseIn(ECHO_PIN, HIGH) هي دالة مدمجة في Arduino. تنتظر حتى يصبح الطرف Echo في حالة HIGH، ثم تقيس المدة التي يبقى فيها HIGH بوحدة µs، وهذه المدة هي زمن ذهاب الصوت وإيابه. وإذا لم يصبح الطرف Echo في حالة HIGH خلال 1 s (المهلة الافتراضية لـ pulseIn())، تعيد الدالة 0 ويطبع البرنامج 0 cm، وهذا يدل عادةً على مشكلة في التوصيلات أو في التغذية بالطاقة. أما إذا أطلق المستشعر نبضته ولم يعد أي صدى، فإن معظم وحدات HC-SR04 تُبقي Echo في حالة HIGH نحو 38 ms، وهو ما يطبعه هذا البرنامج على أنه 650 cm تقريبًا.

distance = duration * 0.0343 / 2 يحوّل زمن الصدى إلى مسافة بالسنتيمتر. هنا تمثل 0.0343 سرعة الصوت بوحدة cm لكل µs (أي 343 m/s بعد التحويل)، والقسمة على 2 تراعي رحلة الذهاب والإياب. ولأن distance معرَّف من النوع long (نوع للأعداد الصحيحة)، يُحذف الجزء العشري، فلا تعرض الشاشة التسلسلية إلا سنتيمترات كاملة. عرِّف distance من النوع float لترى المنازل العشرية.

Serial.println(distance) يطبع المسافة متبوعة بسطر جديد، فتظهر كل قراءة في سطر مستقل على الشاشة التسلسلية.

delay(1000) يوقف البرنامج ثانية واحدة قبل القياس التالي. يمكنك تقليل هذه المدة للحصول على تحديثات أسرع، لكن اترك 60 ms على الأقل بين القراءات (وهي دورة القياس الموصى بها في ورقة بيانات HC-SR04) حتى لا تشوّش الأصداء القديمة على القياس التالي.

الاختبار باستخدام الشاشة التسلسلية

بعد الرفع، افتح الشاشة التسلسلية (Ctrl+Shift+M، أو Tools > Serial Monitor)، واضبط قائمة سرعة الاتصال (Baud Rate) فيها على 9600. وجّه المستشعر نحو سطح مستوٍ مثل جدار أو كتاب، ثم قرّبه منه ببطء وأبعده. يجب أن تتجدد قيمة المسافة كل ثانية. أثناء تصوير الفيديو تحققت من القراءات بمسطرة: أمسكت لوحًا على بعد 4 cm من المستشعر ثم أبعدته، فتغيرت القراءة إلى نحو 8 cm. إذا ظهرت لك القيمة 0 أو أرقام متذبذبة، فافحص التوصيلات وراجع قسم استكشاف الأخطاء وإصلاحها أدناه.

ترقية اختيارية: عرض المسافة على شاشة LCD بواجهة I2C

بعد أن تعمل نسخة الشاشة التسلسلية، يمكنك إضافة شاشة LCD مقاس 16×2 مع محوّل I2C الخاص بها، فتظهر القراءات على الشاشة دون حاسوب. أما I2C فهو ناقل (Bus) بسلكين: يحمل SDA البيانات، ويحمل SCL إشارة الساعة.

جدول توصيلات شاشة LCD

أبقِ HC-SR04 موصولًا كما سبق (Trig على الطرف 9، و Echo على الطرف 10، و VCC إلى 5 V، و GND إلى GND)، ثم أضف توصيلات شاشة LCD المبيّنة أدناه. وعلى لوحة Mega، وصّل SDA بالطرف 20 و SCL بالطرف 21 بدلًا من A4 و A5.

طرف شاشة LCD (I2C)طرف Arduinoالوصف
VCC5 Vيغذّي وحدة LCD بالطاقة
GNDGNDأرضي مشترك
SDAA4خط بيانات I2C
SCLA5خط ساعة I2C

ملاحظة حول عناوين I2C: تستخدم معظم وحدات LCD بواجهة I2C العنوان 0x27، ويستخدم بعضها 0x3F. إذا بقيت الشاشة فارغة بعد الرفع، فغيّر العنوان في الكود. وإذا لم ينجح أي من العنوانين، فشغّل برنامج مسح أجهزة I2C (Scanner)، وهو برنامج قصير يطبع على الشاشة التسلسلية عنوان كل جهاز I2C متصل. وقد عملت وحدتي مع العنوان 0x27، وهو العنوان المستخدم في البرنامج أدناه.

Wiring diagram: HC-SR04 and I2C LCD connected to an Arduino Uno.

كود Arduino لشاشة LCD مع مكتبة NewPing

يستخدم هذا البرنامج مكتبتين (حزم كود جاهزة تثبّتها مرة واحدة): NewPing لقراءات المستشعر و LiquidCrystal_I2C لشاشة LCD. ثبّت المكتبتين قبل الرفع: Sketch > Include Library > Manage Libraries. يعرض مدير المكتبات (Library Manager) مكتبة الشاشة باسم “LiquidCrystal I2C” من تطوير Frank de Brabander. أما المكتبات الأخرى التي تحمل الاسم نفسه فتستخدم أوامر مختلفة، لذا قد يفشل تصريف (Compile) استدعاء lcd.init() في هذا البرنامج معها. تتولى NewPing توقيت الإطلاق والصدى نيابةً عنك، وتتوقف عن الانتظار عندما يتجاوز الصدى مسافة قصوى تحددها في البرنامج. وتأخذ دالتها ping_median() عدة قراءات، وتستبعد القيم الخارجة عن النطاق، ثم تعيد القيمة الوسيطة (Median).

/**
 * Author: Omar Draidrya
 * Date: 2024/05/07
 * This code measures distance using an ultrasonic sensor
 * and displays the result on an LCD.
 */

#include <LiquidCrystal_I2C.h>
#include <NewPing.h>

#define TRIGGER_PIN  9
#define ECHO_PIN     10
#define MAX_DISTANCE 200

LiquidCrystal_I2C lcd(0x27, 16, 2);
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Distance:");
}

void loop() {
  delay(50);
  int distance = sonar.ping_cm();

  lcd.setCursor(0, 1);
  lcd.print("                "); // 16 spaces clear the second row
  lcd.setCursor(0, 1);
  if (distance > 0) {
    lcd.print(distance);
    lcd.print(" cm    ");
  } else {
    lcd.print("Out of range    ");
  }
}

TRIGGER_PIN هو الطرف 9 نفسه الذي سُمّي TRIG_PIN في البرنامج الأول، ويستخدم هذا البرنامج الاسم الوارد في أمثلة NewPing.

MAX_DISTANCE 200 يحدّ القياس بـ 200 cm (بينما يصل المستشعر نفسه إلى 400 cm). وبعد هذا الحد، أو عندما لا يعود أي صدى، تعيد sonar.ping_cm() القيمة 0 وتعرض الشاشة “Out of range”.

delay(50) ينتظر 50 ms قبل كل قياس. ولأن القياس والإخراج على الشاشة يستغرقان وقتًا إضافيًا، يفصل دائمًا بين كل نبضتين أكثر من 60 ms، وهو الحد الأدنى المذكور أعلاه تحت delay(1000).

السطران اللذان يسبقان if يكتبان 16 مسافة فارغة في السطر الثاني ويعيدان المؤشر إلى بدايته. ومن دونهما يترك النص الأقصر أحرفًا من النص السابق على الشاشة؛ فبعد “Out of range” مثلًا، تظهر قراءة 45 cm على شكل “45 cm” متبوعة بـ “nge”، وهي الأحرف الأخيرة من النص القديم.

يحتاج محوّل I2C إلى سلكي إشارة فقط (SDA و SCL). أما من دون المحوّل فتحتاج الشاشة إلى ستة أسلاك: أربعة خطوط بيانات وخطّي تحكم، وتُسمى هذه الطريقة وضع التوازي بـ 4 بت. وهكذا تبقى أطراف رقمية أكثر متاحة لمستشعرات أو مشغّلات أخرى (Actuators، أي القطع التي تحرّك شيئًا ما، مثل المحركات). ولمشروع آخر يستخدم شاشة LCD بواجهة I2C، اطّلع على مشروعي لقفل باب بكلمة مرور باستخدام Arduino.

الدقة والقيود وأفضل الممارسات

تفسّر هذه الحدود الفيزيائية معظم القراءات غير المتوقعة:

الحد الأدنى للمدى (المنطقة العمياء): لا يستطيع HC-SR04 قياس الأجسام الأقرب من نحو 2 cm، إذ تتداخل عند هذه المسافة النبضة الصادرة مع الصدى العائد، فلا يستطيع المستقبِل التمييز بينهما.

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

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

العوامل البيئية: تتغير سرعة الصوت مع درجة حرارة الهواء ورطوبته، إذ تزداد بنحو 0.6 m/s لكل °C: فهي نحو 331 m/s عند 0 °C، ونحو 349 m/s عند 30 °C. ويفترض الكود 343 m/s (عند 20 °C)، لذا تُقرأ المسافة الحقيقية 1 m عند 0 °C على أنها 103.5 cm تقريبًا. وفي معظم المشاريع الداخلية عند درجة حرارة الغرفة، تكون 343 m/s قريبة بما يكفي.

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

استكشاف أخطاء HC-SR04 الشائعة وإصلاحها

مشكلات التوصيلات والعتاد

القراءة 0 cm دائمًا: لم يصبح الطرف Echo في حالة HIGH خلال مهلة pulseIn(). تحقق أولًا من أن سلك Echo موصول بالطرف الصحيح (الطرف 10 في التوصيلات أعلاه)، ثم تأكد من توصيل GND الخاص بالمستشعر بـ GND في Arduino.

القراءة نحو 650 cm أو “Out of range” دائمًا: لا يصل أي صدى، فيطبع برنامج pulseIn() نحو 650 cm، ويعرض برنامج NewPing العبارة “Out of range” على الشاشة. والسبب أن المستشعر يواجه فراغًا مفتوحًا، أو أن الهدف يمتص الصوت أو يحرفه.

قيم متذبذبة عشوائيًا: يحدث ذلك عادةً بسبب أسلاك توصيل (Jumper) مرتخية، أو تلامس سيئ في لوحة التجارب، أو أصداء شاردة من أجسام أخرى داخل المخروط ذي الـ 15 درجة، أو ضوضاء كهربائية، أو مستشعرات موجات فوق صوتية أخرى قريبة. اضغط جميع الأسلاك بإحكام في لوحة التجارب. وإذا استمر تذبذب القيم، فاترك 60 ms على الأقل بين القراءات وخذ متوسط عدة قراءات، أو استخدم الدالة ping_median() من مكتبة NewPing، التي تعيد القيمة الوسيطة لعدة نبضات. في نسختي المبنية على ESP32 قفزت إحدى القراءات من 22.3 cm إلى 32.7 cm ثم عادت خلال عينتين، مع أن الهدف لم يتحرك بهذا القدر. والقيمة الوسيطة لثلاث قراءات أو خمس تزيل مثل هذه القفزات المنفردة.

تغذية غير كافية: يحتاج HC-SR04 إلى تغذية مستقرة بجهد 5 V. وإذا كانت مكونات كثيرة تعمل من الطرف 5 V في Arduino، فقد ينخفض الجهد إلى ما دون حاجة المستشعر.

مشكلات الكود والإعدادات

لا يوجد إخراج تسلسلي على الإطلاق: تحقق من أنك اخترت اللوحة والمنفذ الصحيحين في Arduino IDE من قائمة Tools. ويجب أن تطابق سرعة الاتصال (Baud Rate) في الشاشة التسلسلية القيمة الموجودة في الكود (9600).

تعيين خاطئ للأطراف في الكود: إذا وصّلت Trig و Echo بطرفين غير 9 و 10، فعدّل أسطر #define في أعلى البرنامج لتطابق التوصيلات.

شاشة LCD لا تعرض النص: أدر أولًا المقاومة المتغيرة الخاصة بالتباين (Potentiometer، وهي برغي الضبط الصغير في ظهر محوّل I2C). ثم تحقق من عنوان I2C (0x27 أو 0x3F، راجع الملاحظة في قسم شاشة LCD)، ومن أن SDA موصول بـ A4 و SCL بـ A5 (الطرفان 20 و 21 على لوحة Mega).

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

ما أقصى مدى لمستشعر الموجات فوق الصوتية HC-SR04؟

يصل إلى نحو 400 cm (4 m)، لكن القراءات بعد 200 إلى 300 cm تصبح أقل موثوقية، خاصة في الغرف التي تكثر فيها الأصداء المتداخلة أو الأسطح اللينة. وأطول قياس أجريته حتى الآن كان نحو 1 m، لذا لم أختبر الحد الأعلى للمدى بنفسي.

هل يمكنني استخدام HC-SR04 مع لوحة 3.3 V مثل ESP32؟

ليس مباشرة. يحتاج HC-SR04 القياسي إلى 5 V على VCC، ويُخرج طرف Echo جهد 5 V، وهذا قد يتلف مدخلًا يعمل بجهد 3.3 V. أضف مقسم جهد (مقاومتان تخفّضان الجهد) على Echo، مثل 1 kΩ على التوالي و 2.2 kΩ إلى GND، فتحصل على نحو 3.4 V، وهو أقل من الحد الأقصى البالغ 3.6 V لمداخل ESP32. أو استخدم HC-SR04P الذي يعمل بجهد من 3.3 V إلى 5 V. والتفاصيل موجودة في دليلي لاستخدام HC-SR04 مع ESP32.

ما مدى دقة HC-SR04؟

نحو ±3 mm في الظروف المثالية. أما عمليًا فتوقّع دقة أقرب إلى ±1 cm بحسب سطح الهدف والبيئة المحيطة.

هل يمكنني استخدام عدة مستشعرات HC-SR04 في الوقت نفسه؟

نعم. خصّص لكل مستشعر طرفي Trig و Echo خاصين به، وأطلق المستشعرات واحدًا تلو الآخر بفاصل 60 ms على الأقل، حتى لا يلتقط أحدها صدى مستشعر آخر (التداخل الصوتي، Acoustic Crosstalk).

ماذا تبني بعد ذلك

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

رأي واحد حول “Arduino Ultrasonic Distance Sensor: HC-SR04 Tutorial with Wiring and Code”

أضف تعليق