اجتناب از موانع — حس ۶م ربات
HC-SR04 یک سونار اولتراسونیک است که با ارسال پالس صوتی ۴۰kHz و زمانبندی بازگشت آن فاصله را اندازه میگیرد: فاصله(cm) = زمان(μs) / 58. برد ۲–۴۰۰cm و دقت ±۳mm دارد. ارزان (~۴۰K) و محبوب.
حسگر IR شارپ (GP2Y0A21) با نور مادون قرمز فاصله ۱۰–۸۰cm را اندازه میگیرد — آنالوگ، سریعتر از سونار اما تحتتأثیر نور آفتاب. ترکیب هر دو بهترین نتیجه را میدهد.
الگوریتم Bug0 سادهترین روش اجتناب از موانع است: به سمت هدف برو، اگر مانع دیدی آن را دور بزن تا مجدد مسیر آزاد شود.
BOM حسگرها
| قطعه | برد | قیمت |
|---|---|---|
| HC-SR04 (جلو) | ۲–۴۰۰cm | ~۴۰K |
| HC-SR04 × ۲ (کناری) | ۲–۴۰۰cm | ~۸۰K |
| IR Sharp GP2Y0A21 (عقب) | ۱۰–۸۰cm | ~۱۵۰K |
کد الگوریتم Bug0 با HC-SR04
long readSonar(int trigPin, int echoPin){
digitalWrite(trigPin, LOW); delayMicroseconds(2);
digitalWrite(trigPin, HIGH); delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long dur = pulseIn(echoPin, HIGH, 30000); // timeout 30ms
return dur / 58; // cm
}
// حسگرها: TRIG/ECHO جلو، چپ، راست
#define TRIG_F 4 #define ECHO_F 5
#define TRIG_L 6 #define ECHO_L 7
#define TRIG_R 8 #define ECHO_R 9
#define SAFE_DIST 30 // cm
void loop(){
long dF = readSonar(TRIG_F, ECHO_F);
long dL = readSonar(TRIG_L, ECHO_L);
long dR = readSonar(TRIG_R, ECHO_R);
if(dF > SAFE_DIST){
// مسیر آزاد — به سمت GPS Waypoint
navigateToWaypoint();
} else if(dR > dL && dR > SAFE_DIST){
// سمت راست آزادتر — دور بزن
drive(-100, 100); // چرخش راست
delay(300);
} else if(dL > SAFE_DIST){
drive(100, -100); // چرخش چپ
delay(300);
} else {
// همه طرف بسته — عقب برو
drive(-150, -150);
delay(500);
}
}