Lap Timer یعنی چه؟ (برای مبتدی)
در مسابقات FPV Drone Racing، خلبانان باید تا جای ممکن سریع از یک مسیر (دروازهها) عبور کنند. Lap Timer دستگاهی است که زمان عبور پهپاد از یک خط یا دروازه را اندازه میگیرد. سیستمهای تجاری (مثل ImmersionRC LapRF) گران هستند — اما با یک سنسور IR ساده و Arduino میتوانید یک Lap Timer دقیق با هزینه بسیار کم بسازید.
سنسور IR (مادون قرمز) یک پرتو نامرئی ارسال میکند. وقتی پهپاد از جلوی آن رد میشود، پرتو قطع میشود و یک تریگر ایجاد میشود. Arduino زمان بین دو تریگر متوالی را اندازه میگیرد — این زمان یک دور است.
محصولی که میسازید
یک Lap Timer با نمایشگر LCD که زمان دور، بهترین رکورد و تعداد دور را نشان میدهد.
- زمان ساخت: ۲ تا ۳ ساعت
- هزینه: ۴۰۰ تا ۶۰۰ هزار تومان
- دقت: میلیثانیه
قطعات لازم (BOM)
| قطعه | نقش |
|---|---|
| Arduino Nano | کنترلر اصلی |
| سنسور IR فعال (TCRT5000 یا IR Barrier) | تشخیص عبور پهپاد |
| نمایشگر LCD 16×2 با I2C | نمایش زمان |
| بازر پیزو | هشدار صوتی |
| دکمه Reset | شروع دوره جدید |
کد Arduino Lap Timer
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int IR_PIN = 2; // INT0 — سنسور IR
const int BUZZ_PIN = 8;
const int RST_BTN = 9;
volatile bool triggered = false;
unsigned long lastTrigger = 0;
unsigned long lapTime = 0;
unsigned long bestLap = 999999;
int lapCount = 0;
bool armed = false;
void IRAM_ATTR onIR() {
if (millis() - lastTrigger > 1000) { // debounce 1s
triggered = true;
}
}
void setup() {
pinMode(IR_PIN, INPUT_PULLUP);
pinMode(BUZZ_PIN, OUTPUT);
pinMode(RST_BTN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(IR_PIN), onIR, FALLING);
lcd.init(); lcd.backlight();
lcd.setCursor(0,0); lcd.print("FPV Lap Timer");
lcd.setCursor(0,1); lcd.print("Ready!");
delay(2000);
}
void loop() {
if (digitalRead(RST_BTN) == LOW) {
lapCount = 0; bestLap = 999999; armed = false;
lcd.clear(); lcd.print("Reset!"); delay(1000);
}
if (triggered) {
triggered = false;
unsigned long now = millis();
if (!armed) {
armed = true; lastTrigger = now;
lcd.clear(); lcd.print("GO!");
} else {
lapTime = now - lastTrigger;
lastTrigger = now; lapCount++;
if (lapTime < bestLap) bestLap = lapTime;
tone(BUZZ_PIN, 2000, 200);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Lap"); lcd.print(lapCount);
lcd.print(": "); lcd.print(lapTime/1000.0, 2); lcd.print("s");
lcd.setCursor(0,1);
lcd.print("Best:"); lcd.print(bestLap/1000.0, 2); lcd.print("s");
}
}
}
چکلیست تست
| تست | نتیجه |
|---|---|
| LCD متن نمایش میدهد؟ | بله |
| دست جلوی IR عبور دادن → تریگر؟ | بله — بازر صدا میدهد |
| زمان اول ثبت میشود (Armed)? | عبور اول = شروع |
| Best Lap بهتر از لپ قبلی نمایش داده میشود؟ | بله |