كيفية توصيل شاشة LCD 1602 مع Arduino باستخدام بروتوكول I2C
في هذا الدرس من سلسلة Arduino من الصفر سنتعلم كيفية توصيل شاشة LCD 1602 بلوحة أردوينو باستخدام بروتوكول I2C، وكتابة نصوص على سطرين، والتحكم في الإضاءة الخلفية للشاشة. سنتعرف أيضًا على أساسيات بروتوكول I2C، وكيفية ضبط تباين الشاشة وحل أكثر المشكلات شيوعًا.
فيديو شرح شاشة LCD 1602 مع Arduino
يشرح الفيديو طريقة تركيب الشاشة وقطعة الاتصال I2C، ثم توصيلها بالأردوينو وكتابة برنامج يعرض عبارة على السطر الأول واسم القناة على السطر الثاني مع وميض الإضاءة الخلفية.
ما هي شاشة LCD 1602؟
شاشة LCD 1602 هي شاشة نصية تتكون من سطرين، ويمكن عرض 16 خانة حرفية في كل سطر. تُستخدم في مشاريع الأردوينو لعرض القياسات والرسائل وحالة الأجهزة. يمكن توصيلها مباشرة بعدد من المنافذ الرقمية، أو استعمال قطعة إضافية تُعرف باسم I2C Backpack لتقليل عدد أسلاك الإشارة المطلوبة.
مميزات وحدة الاتصال I2C خلف الشاشة
- أربعة أطراف للتوصيل: GND وVCC وSDA وSCL.
- خطا إشارة فقط لتبادل البيانات والتحكم: SDA وSCL، بالإضافة إلى التغذية والأرضي.
- مقاومة متغيرة لضبط تباين الحروف على الشاشة.
- إمكانية تشغيل الإضاءة الخلفية وإطفائها برمجيًا، حسب تصميم الوحدة.
- وصلات أو نقاط لحام لتعديل عنوان I2C في كثير من الوحدات.
إذا كانت الشاشة لديك بدون وحدة I2C، يمكن شراء وحدة متوافقة وتركيبها خلف الشاشة مع مراعاة التوافق واتجاه الأرجل وطريقة اللحام.
كيف يعمل بروتوكول I2C؟
بروتوكول I2C هو وسيلة اتصال تسلسلي تسمح لمتحكم مثل Arduino بالتواصل مع أجهزة متعددة عبر خطين: SDA لنقل البيانات وSCL لإشارة الساعة. يستخدم كل جهاز على الناقل عنوانًا يساعد المتحكم على تحديد الجهاز المقصود.
- إشارة البدء START: يبدأ المتحكم عملية الاتصال؛ وفي الحالة المعتادة تنتقل SDA من المستوى المرتفع إلى المنخفض بينما SCL مرتفع.
- العنوان: يرسل المتحكم عنوان الجهاز المطلوب مع تحديد اتجاه النقل.
- تأكيد الاستلام ACK: يرسل الجهاز المستهدف إشارة تأكيد عندما يستجيب للعنوان أو للبيانات وفق البروتوكول.
- تبادل البيانات: تُنقل البايتات وفق توقيت SCL، ثم تنتهي المعاملة عادة بإشارة STOP.
يسمح I2C بتوصيل أكثر من جهاز على الخطين نفسيهما عندما تكون العناوين متوافقة ولا يوجد تعارض بينها.
المكونات المطلوبة
- لوحة Arduino Uno أو لوحة متوافقة ذات منافذ I2C مناسبة.
- شاشة LCD 1602 مع وحدة I2C مثبتة خلفها.
- أسلاك توصيل.
- كابل USB وحاسوب مثبت عليه Arduino IDE.
مخطط توصيل LCD I2C مع Arduino Uno
| طرف الشاشة | Arduino Uno | الوظيفة |
|---|---|---|
| GND | GND | الأرضي |
| VCC | 5V | تغذية وحدة الشاشة المستخدمة |
| SDA | A4 | خط البيانات I2C |
| SCL | A5 | خط الساعة I2C |
في لوحة Arduino Uno تُستخدم A4 وA5 لوظيفتي SDA وSCL. أما اللوحات الأخرى فقد تختلف منافذ I2C فيها، لذلك راجع مخطط لوحتك قبل التوصيل.
تنبيه: هذا التوصيل مخصص لشاشة LCD I2C تعمل بجهد 5V مع Arduino Uno. لا توصل وحدة I2C ذات مقاومات رفع إلى 5V مباشرة بمنافذ متحكم يعمل بمنطق 3.3V مثل ESP32 دون التأكد من توافق مستويات الإشارة أو استخدام محول مستويات مناسب.
تثبيت مكتبة شاشة LCD I2C
افتح Arduino IDE ثم مدير المكتبات Library Manager وابحث عن مكتبة مناسبة لشاشات LCD I2C مثل LiquidCrystal_I2C وثبت النسخة المتوافقة مع برنامجك ووحدتك. تختلف واجهات التهيئة بين إصدارات المكتبات، لذلك يجب مطابقة أسماء الدوال مع المكتبة المثبتة.
تحديد عنوان I2C للشاشة
لكل وحدة I2C عنوان تستخدمه اللوحة للتواصل معها. من العناوين الشائعة 0x27 و0x3F، لكن العنوان الفعلي يعتمد على الشريحة وإعدادات الوحدة. لم يرد العنوان الرقمي بوضوح في النص المنقول من الفيديو، لذلك لا نفترض عنوانًا واحدًا لجميع الشاشات. إذا لم تستجب الشاشة، استعمل برنامج I2C Scanner لمعرفة عنوانها ثم عدله في الكود.
شرح برنامج عرض النص على الشاشة
في البرنامج المعروض بالفيديو نُعرّف شاشة مكونة من سطرين و16 خانة في كل سطر، ونحدد عنوانها، ثم نهيئها في دالة setup() ونشغل الإضاءة الخلفية.
اختيار مكان كتابة النص
نستخدم الدالة setCursor() لتحديد العمود والسطر. عادةً يبدأ العد من الصفر، ولذلك يشير الموضع (0, 0) إلى أول خانة في السطر الأول، ويشير (0, 1) إلى أول خانة في السطر الثاني. بعدها نستخدم print() لعرض النص.
وميض الإضاءة الخلفية
داخل loop() يُشغَّل الضوء الخلفي ويُطفأ بالتناوب باستخدام الدوال التي توفرها المكتبة مثل backlight() وnoBacklight()، مع فاصل زمني مناسب للحصول على تأثير الوميض.
الكود الأصلي المستخدم في الفيديو
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Adresse I2C, 16 colonnes, 2 lignes
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Initialisation de l'écran LCD
lcd.init();
// Activer le rétroéclairage
lcd.backlight();
// Première ligne
lcd.setCursor(0, 0);
lcd.print("Subscribe to");
delay(1000);
// Deuxième ligne
lcd.setCursor(0, 1);
lcd.print("Naadi Tech");
delay(1000);
}
void loop() {
// Éteindre le rétroéclairage
lcd.noBacklight();
delay(800);
// Allumer le rétroéclairage
lcd.backlight();
delay(800);
}
نتيجة التجربة
بعد رفع البرنامج إلى Arduino تظهر عبارة Subscribe to في السطر الأول واسم القناة في السطر الثاني، وتومض الإضاءة الخلفية وفق التعليمات المبرمجة. ويمكن تعديل المقاومة المتغيرة الموجودة خلف الشاشة للحصول على تباين أوضح.
حل المشكلات الشائعة
| المشكلة | السبب المحتمل والحل |
|---|---|
| إضاءة الشاشة تعمل لكن النص لا يظهر | اضبط مقاومة التباين، وتحقق من تهيئة الشاشة وعنوان I2C. |
| الشاشة لا تستجيب | راجع VCC وGND وSDA وSCL وشغّل I2C Scanner للتحقق من العنوان. |
| ظهور رموز غير مفهومة | تحقق من توافق المكتبة وتهيئة الشاشة والتوصيلات. |
| خطأ أثناء تجميع البرنامج | راجع اسم المكتبة ونسختها والدوال المستخدمة في الكود. |
| لا تعمل الإضاءة الخلفية | راجع أوامر الإضاءة وإعدادات وحدة I2C ومفتاح أو وصلة الإضاءة إن وجدت. |
ماذا تعلمنا؟
- التعرف على شاشة LCD 1602 وقدرتها على عرض 16 خانة في كل سطر.
- فائدة وحدة I2C في تقليل أسلاك الإشارة.
- مبدأ عمل SDA وSCL وعناوين الأجهزة وإشارة ACK.
- توصيل شاشة LCD I2C مع Arduino Uno عبر A4 وA5.
- تثبيت مكتبة الشاشة وتهيئتها وكتابة نص على سطرين.
- التحكم في الإضاءة الخلفية وضبط تباين الحروف.
أفكار لتطوير المشروع
بعد نجاح التجربة يمكن عرض قراءات حساس درجة الحرارة والرطوبة أو المسافة على الشاشة، أو استخدامها لعرض حالة مشروع إلكتروني، أو إنشاء قائمة بسيطة تتغير بواسطة الأزرار. وهكذا تصبح شاشة LCD 1602 وسيلة عملية للتفاعل مع مشاريع Arduino.
الخلاصة
تعلمنا كيفية توصيل شاشة LCD 1602 بالأردوينو باستخدام بروتوكول I2C، وتعرفنا على دور عنوان الجهاز وخطي SDA وSCL، ثم كتبنا نصوصًا على السطرين وتحكمنا في الإضاءة الخلفية. تابعوا باقي مشاريع Arduino من الصفر على قناة نادي تك – نادي الابتكار.
