⚠️ هشدار ایمنی: همیشه یک سیستم Watchdog داشته باش که در صورت قطع ارتباط بلافاصله ترمز کند. همیشه یک نفر در کنار ماشین با کلید خاموشکننده اضطراری باشد.
📌 بخش ۱/۲: مکانیک ✅ | 📌 بخش ۲/۲ (همین): الکترونیک، کد، ایمنی
هک EPS — ارسال فرمان گشتاور
سیستم EPS معمولاً از یک حسگر گشتاور فرمان (Torque Sensor) استفاده میکند. وقتی گشتاور به فرمان اعمال میشود، ECU EPS موتور را میچرخاند. با تزریق سیگنال ولتاژ شبیهسازیشده از Torque Sensor میتوان فرمان را از آردوینو کنترل کرد. این روش در پروژههای متنباز مثل openpilot استفاده میشود.
کنترل ترمز با سرو خطی (سادهترین روش)
#include <Servo.h>
Servo brakeSrv; // سرو خطی Linear Actuator یا سرو قوی MG996R
// براکت سرو روی پدال ترمز — نباید لنگر روی پدال کج باشد
const int BRAKE_RELEASED = 0; // درجه — بدون ترمز
const int BRAKE_FULL = 45; // درجه — ترمز کامل
void brakeApply(int percent){ // 0–100
int angle = map(percent, 0,100, BRAKE_RELEASED, BRAKE_FULL);
brakeSrv.write(angle);
}
// ترمز اضطراری — همیشه در setup تعریف کن
void emergencyBrake(){
brakeSrv.write(BRAKE_FULL);
setThrottle(0);
}
سیستم Watchdog — قطع ارتباط = توقف
unsigned long lastHeartbeat = 0;
const unsigned long WATCHDOG_TIMEOUT = 500; // ms
void loop(){
// دریافت heartbeat از GCS
int pkt = LoRa.parsePacket();
if(pkt > 0){
char cmd = (char)LoRa.read();
lastHeartbeat = millis();
if(cmd == 'E') emergencyBrake();
// سایر دستورها...
}
// Watchdog
if(millis() - lastHeartbeat > WATCHDOG_TIMEOUT){
emergencyBrake(); // هر ۵۰۰ms بدون ارتباط = توقف
}
}
// Watchdog Timer سختافزاری آردوینو
#include <avr/wdt.h>
void setup(){
wdt_enable(WDTO_500MS); // ریست اگر ۵۰۰ms loop اجرا نشد
}
void loop(){
wdt_reset(); // هر دور لوپ ریست تایمر
// ...
}
چکلیست ایمنی Drive-By-Wire
| آیتم | ✓ |
|---|---|
| کلید kill switch اضطراری فیزیکی | ⬜ |
| Watchdog timeout ≤ 500ms | ⬜ |
| Geofence تعریفشده | ⬜ |
| سرعت محدود به ۵km/h در تست اول | ⬜ |
| نفر کنترلکننده دستی همراه ماشین | ⬜ |