קרב הלייזר האוטונומי
מכוניות ארדואינו שנוסעות לגמרי לבד לפי קו שחור על הרצפה - ותוך כדי נסיעה, יורות קרן לייזר לעבר מטרות עומדות. כל מטרה "יודעת" שנפגעה בזכות חיישן אור שמזהה את קרן הלייזר שפוגעת בה. פרוייקט שמחבר יחד כמעט הכל שנלמד עד עכשיו: עקיבת קו, לייזר, חיישן אור, ותכנון מערכת שלמה של רכב + מטרה.
שני חלקים למערכת
🚗 המכונית
שלדת "מכונית חכמה" + שני חיישני IR עוקבי קו בחזית + מודול לייזר (LED לייזר רגיל) שמכוון קדימה.
🎯 המטרה
חיישן אור (LDR) שמוסתר בתוך המטרה, מול הכיוון שהרכב יורה אליו + לד ובאזר שמתריעים על פגיעה.
איך מזהים "פגיעה"
בדרך כלל התאורה בחדר נמוכה יחסית וקבועה. ברגע שקרן הלייזר (שהיא בעצם אור חזק וממוקד) פוגעת ישירות בחיישן האור שבתוך המטרה, הערך שנקרא מהחיישן קופץ הרבה מעל הרגיל לרגע קצר. המטרה מזהה את הקפיצה הזו כ"פגיעה" - ולא סתם שינוי תאורה רגיל בחדר.
רכיבים עיקריים
- שלדת רכב + 2 מנועים + גשר H: לתנועה אוטונומית (מבוסס על פרוייקט "מכונית חכמה")
- 2 חיישני IR עוקבי קו: לעקיבה אחרי המסלול השחור
- LED לייזר: מותקן בחזית הרכב, מחובר לפין דיגיטלי (יורה ברצף או בלחיצת כפתור)
- חיישן אור (LDR) בכל מטרה: מזהה קפיצה חדה בעוצמת האור
- לד + באזר בכל מטרה: משוב מיידי כשמזוהה פגיעה
קוד לדוגמה - הרכב (עקיבת קו + ירי)
const int leftSensor = 7;
const int rightSensor = 8;
const int laserPin = 9;
void setup() {
pinMode(leftSensor, INPUT);
pinMode(rightSensor, INPUT);
pinMode(laserPin, OUTPUT);
digitalWrite(laserPin, HIGH); // הלייזר יורה כל הזמן קדימה
}
void loop() {
bool left = digitalRead(leftSensor);
bool right = digitalRead(rightSensor);
if (left == HIGH && right == HIGH) {
forward();
} else if (left == LOW && right == HIGH) {
turnLeft();
} else if (left == HIGH && right == LOW) {
turnRight();
} else {
stopMotors();
}
}
קוד לדוגמה - המטרה (זיהוי פגיעה)
const int ldrPin = A0;
const int ledPin = 6;
const int buzzerPin = 5;
const int hitThreshold = 850; // כוונו לפי תאורת החדר שלכם
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
}
void loop() {
int light = analogRead(ldrPin);
if (light > hitThreshold) {
Serial.println("פגיעה!");
digitalWrite(ledPin, HIGH);
digitalWrite(buzzerPin, HIGH);
delay(300);
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, LOW);
delay(200); // מניעת ספירה כפולה לאותה פגיעה
}
}
טיפים להצלחה
כוונו את סף הפגיעה (hitThreshold) בהתאם לתאורת החדר בפועל - מומלץ להדפיס ל-Serial Monitor את ערכי החיישן לפני המשחק ולראות איפה נמצא "רעש הרקע" הרגיל. כדאי גם למקם את חיישן האור במטרה בתוך שפופרת קטנה או צינור, כדי שיגיב רק לאור שמגיע ישירות מהכיוון של הרכב ולא לאור כללי בחדר.
אפשרויות הרחבה
אפשר להוסיף מסך LCD שמציג ניקוד, לספור כמה פגיעות כל רכב ביצע, או אפילו לבנות "זירה" עם כמה מטרות בו-זמנית ותחרות בין קבוצות.