مستشعر ركن السيارة: الشاشة
جزء من قسم المشاريع في رحلة Arduino على Coddy. الدرس 12 من 24.
تعرض الخطوة الأخيرة المسافة الدقيقة على الشاشة. تُوصَّل شاشة LCD مقاس 16x2 بالطريقة المعتادة: RS على 12، وE على 11، وD4 إلى D7 على 5 و4 و3 و2.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);لا يتغير الصف العلوي أبدًا، لذا اكتب Distance: مرة واحدة في setup()، بعد lcd.begin(16, 2). يُحدَّث الصف السفلي فقط في loop().
تُبقي شاشة LCD كل حرف إلى أن يستبدله شيء ما. عند الانتقال من 250 cm إلى 8 cm، فإن طباعة 8 cm فوق 250 cm تُبقي نهاية السطر القديمة، فتظهر الشاشة 8 cmcm. اطبع بضعة فراغات بعد النص لتغطية أي شيء خلّفه رقم أطول:
lcd.setCursor(0, 1);
lcd.print(cm);
lcd.print(" cm ");تتجنب الفراغات أيضًا الوميض الناتج عن lcd.clear()، الذي سيمحو الشاشة بأكملها عشر مرات في الثانية.
التحدي
سهلاعرض المسافة على شاشة LCD:
- أدرج
LiquidCrystal.hوأنشئlcd(12, 11, 5, 4, 3, 2) - في
setup(): استخدمlcd.begin(16, 2)وDistance:في الصف العلوي - في
loop(): اعرض المسافة وcmفي الصف السفلي، مثل57 cm، مع مسافات بعدها
أبقِ الأضواء والصفارات والطباعة. اضغط Run، ثم Check.
جرّب بنفسك
// مستشعر المسافة
const int trigPin = 9;
const int echoPin = 10;
// أضواء التحذير
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;
// الطنّان
const int buzzerPin = 8;
unsigned long lastBeep = 0; // وقت بدء آخر صفير
// أرسل نبضة وأعد المسافة بوحدة cm.
long readDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return duration / 58;
}
// أخضر عندما يكون الطريق خاليًا، وأصفر عند الاقتراب، وأحمر عند الاقتراب الشديد.
void showLights(long cm) {
digitalWrite(greenPin, LOW);
digitalWrite(yellowPin, LOW);
digitalWrite(redPin, LOW);
if (cm >= 100) {
digitalWrite(greenPin, HIGH);
} else if (cm >= 30) {
digitalWrite(yellowPin, HIGH);
} else {
digitalWrite(redPin, HIGH);
}
}
// زِد سرعة الصفير كلما اقترب الجسم.
void beep(long cm) {
if (cm >= 100) {
noTone(buzzerPin);
} else if (cm < 10) {
tone(buzzerPin, 1000); // قريب جدًا: نغمة مستمرة
} else if (millis() - lastBeep >= cm * 10) {
lastBeep = millis();
tone(buzzerPin, 1000, 50);
}
}
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(greenPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
pinMode(redPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
long cm = readDistance();
Serial.println(cm);
showLights(cm);
beep(cm);
delay(100);
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المشاريع
3مستشعر ركن السيارة
مستشعر ركن السيارة: المسافةمستشعر ركن السيارة: الأضواءمستشعر ركن السيارة: التنبيهات الصوتيةمستشعر ركن السيارة: الشاشةتدرّب بنفسك: Playground لـ Arduino