كود البحث

الدرس 20/31: عرض مسافة الموجات فوق الصوتية على شاشة LCD1602

الدرس 20/31: عرض مسافة الموجات فوق الصوتية على شاشة LCD1602

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

Sunfounder 20-LCD1602-ultrasonic

يمكن استخدام هذا الإعداد العملي في مجموعة متنوعة من التطبيقات الواقعية، بما في ذلك:

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

الأجهزة والمكونات

لبناء هذا المشروع، ستحتاج إلى المكونات التالية:

  • لوحة أردوينو (مثل Uno)
  • شاشة LCD1602 مع وحدة واجهة I2C
  • مستشعر المسافة بالموجات فوق الصوتية HC-SR04
  • أسلاك توصيل
  • لوحة تجارب (اختيارية، لتسهيل التوصيلات)

فهم شاشة LCD1602 و I2C

شاشة LCD1602 هي شاشة شائعة قادرة على عرض 16 حرفًا في كل سطر عبر سطرين. وحدة "I2C" الموجودة في الخلف هي ميزة كبيرة لأنها تقلل عدد الدبابيس المطلوبة للتحكم في الشاشة من 6 أو أكثر إلى دبوسين فقط للاتصال (SDA و SCL) ودبوسين للطاقة (VCC و GND). هذا التبسيط يجعل التوصيلات أكثر نظافة ويوفر دبابيس رقمية قيمة على لوحة الأردوينو الخاصة بك لأجهزة استشعار أخرى، مثل المستشعر بالموجات فوق الصوتية المستخدم في هذا المشروع. (في الفيديو عند 01:30)

تتميز وحدة I2C أيضًا بمقياس جهد صغير لضبط تباين الشاشة. إذا قمت بتشغيل الشاشة ولم تر شيئًا، فحاول تدوير هذا المسمار حتى يصبح النص مرئيًا. (في الفيديو عند 02:47)

دليل التوصيلات

LCD1602_wiring_ultrasonic_bb

توصيل المكونات أمر مباشر. تحتوي وحدة I2C الخاصة بشاشة LCD على أربعة دبابيس يجب توصيلها بلوحة الأردوينو. بالنسبة لمستشعر الموجات فوق الصوتية، يحتوي أيضًا على أربعة دبابيس.

فيما يلي تفصيل للتوصيلات:

وحدة LCD1602 I2C إلى الأردوينو:

  • GND إلى الأردوينو GND
  • VCC إلى الأردوينو 5V
  • SDA إلى الأردوينو A4
  • SCL إلى الأردوينو A5

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

  • VCC إلى الأردوينو 5V
  • Trig إلى الدبوس الرقمي 12 في الأردوينو
  • Echo إلى الدبوس الرقمي 11 في الأردوينو
  • GND إلى الأردوينو GND

مخطط التوصيل لهذا المشروع مشار إليه في الفيديو.

تثبيت المكتبات المطلوبة

يعتمد هذا المشروع على مكتبتين مهمتين. المكتبة الأولى، LiquidCrystal_I2C، مطلوبة للتحكم في شاشة LCD وهي غير مضمنة افتراضيًا في بيئة التطوير المتكاملة للأردوينو. يمكنك تنزيلها من الرابط المقدم في وصف الفيديو أو من موقع Robojax. (في الفيديو عند 06:16)

المكتبة الثانية، NewPing، تُستخدم للتفاعل مع مستشعر الموجات فوق الصوتية. إنها تبسط عملية إرسال نبضة وقراءة زمن الصدى. يمكن تثبيت كلتا المكتبتين عبر مدير المكتبات في بيئة التطوير المتكاملة للأردوينو بالانتقال إلى Sketch -> Include Library -> Manage Libraries والبحث عن أسمائهما.

شرح الكود

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

في الجزء العلوي من الكود، ستجد المتغيرات الرئيسية التي قد تحتاج إلى تعديلها:

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, displayChars, displayRows);

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 190 // Maximum distance we want to ping for (in centimeters).
  • عنوان شاشة LCD (0x27): هذا هو عنوان I2C لوحدة شاشتك. تستخدم معظم الوحدات 0x27، ولكن بعضها قد يستخدم 0x3F. إذا لم تظهر الشاشة أي شيء، فقد تحتاج إلى تشغيل كود فحص I2C للعثور على العنوان الصحيح وتحديث هذه القيمة. (في الفيديو عند 08:11)
  • TRIGGER_PIN و ECHO_PIN: يحددان الدبابيس الرقمية في الأردوينو المتصلة بدبابيس Trig و Echo الخاصة بمستشعر الموجات فوق الصوتية. إذا كنت تستخدم دبابيس مختلفة، فغيّر هذه التعريفات.
  • MAX_DISTANCE: يحدد أقصى مسافة بالسنتيمتر سيقيسها المستشعر. يمكن لـ HC-SR04 قياس ما يصل إلى 400-500 سم، ولكن تعيين قيمة أقل يمكن أن يحسن دقة وموثوقية القراءات، خاصة للمسافات الأقصر.

في دالة loop()، ينفذ الكود الخطوات التالية:

  1. يستخدم دالة sonar.ping_cm() لقياس المسافة وتخزينها في المتغير distance.
  2. يقوم بمسح شاشة LCD ويطبع النص "Robojax.com" على السطر الأول.
  3. ثم يضبط المؤشر على السطر الثاني ويطبع "Distance: ".
  4. أخيرًا، ينقل المؤشر إلى الموضع 10 على السطر الثاني لطباعة قيمة distance المقاسة متبوعة بـ "cm".

تتحكم delay(200) في نهاية الحلقة في عدد مرات أخذ المستشعر لقراءة جديدة وتحديث الشاشة.

عرض الكود

بمجرد رفع الكود إلى Arduino الخاص بك، ستضيء شاشة LCD وتبدأ في عرض المسافة. يمكنك اختبار الإعداد بتحريك يدك أو جسم ما بالقرب من مستشعر الموجات فوق الصوتية وإبعاده عنه. يجب أن يتحدث الرقم على الشاشة في الوقت الفعلي، مع عرض المسافة بالسنتيمتر. (في الفيديو عند 38:07)

مشاريع ذات صلة من هذا الفيديو

الفصول

  • [00:00] مقدمة إلى LCD1602 ونظرة عامة على المشروع
  • [01:30] شرح أجهزة LCD1602 ووحدة I2C
  • [03:14] دبابيس LCD وتكوين عنوان I2C
  • [05:28] مخطط توصيل الأسلاك لـ LCD1602
  • [06:16] تثبيت مكتبة LCD المطلوبة
  • [07:24] الكود الأساسي لطباعة النص على شاشة LCD
  • [08:11] العثور على عنوان I2C لشاشة LCD الخاصة بك
  • [11:10] أمثلة LCD: مؤشر وامض وأحرف مخصصة
  • [18:51] مثال LCD: عرض تسلسلي ونص متحرك
  • [24:36] عرض درجة حرارة ورطوبة DHT11 على شاشة LCD
  • [33:00] عرض الجهد من مقياس الجهد على شاشة LCD
  • [35:56] دمج كود مستشعر الموجات فوق الصوتية مع LCD
  • [38:07] عرض توضيحي لقياس المسافة بالموجات فوق الصوتية

الصور

Sunfounder car assembled
Sunfounder car assembled
Sunfounder 20-LCD1602-ultrasonic
Sunfounder 20-LCD1602-ultrasonic
LCD1602_wiring_ultrasonic_bb
LCD1602_wiring_ultrasonic_bb
921-Lesson 20/31: Displaying distance from ultrasonic sensor on LCD1602
اللغة: C++
/*
This sketch reads the distance using the ultrasonic sensor and displays on LCD1602
Download and resource page https://robojax.com/RJT878
watch video https://www.youtube.com/watch?v=NXAswOc_2zg
*/
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
const int displayChars =16;
const int displayRows =2;

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, displayChars, displayRows);
int shomar =0;
#include <NewPing.h>

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 190 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
int distance;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  Serial.begin(9600); // Open serial monitor at 9600 baud to see ping results.
  // Robojax code for LCD with I2C
  // initialize the LCD, 
  lcd.begin();
 // Turn on the blacklight and print a message.
  lcd.backlight();

}

void loop() {
  
   distance  = sonar.ping_cm();//get the distance in cm
   lcd.clear();
   lcd.print("Robojax.com");
   lcd.setCursor (0,1);//set cursor to char 0 line 2
   lcd.print("Distance: ");  
   lcd.setCursor (10,1); 
   lcd.print(distance);
   lcd.print("cm"); 
   
   delay(200); 
  

}

الأشياء التي قد تحتاجها

ملفات📁

مكتبات أردوينو (ملف مضغوط)

دليل المستخدم