বাধা এড়িয়ে চলা রোবটObstacle Avoiding Robot using Arduino
HC-SR04 প্রতি ১০০ ms এ সামনের দূরত্ব মাপে। ২০ cm এর বেশি হলে দুই চাকা সামনে চলে; কাছে কিছু এলে রোবট থামে, ০.৪ সেকেন্ড পিছায়, তারপর ডানে ঘোরে। Simulator এ distance slider টেনে সামনে দেয়াল বসাও।
The HC-SR04 measures the distance ahead every 100 ms. Above 20 cm both wheels drive forward; closer than that the robot stops, reverses for 0.4 s and turns right. Drag the distance slider in the simulator to put a wall in front of it.
সার্কিট ডায়াগ্রাম · Circuit diagram
যা যা লাগবে · Parts you need
- 1 × Arduino Uno Arduino Uno
- 1 × Ultrasonic distance sensor (HC-SR04) আল্ট্রাসনিক দূরত্ব সেন্সর (HC-SR04)
- 1 × Motor driver L298N মোটর ড্রাইভার L298N
- 2 × Gear motor (yellow TT) গিয়ার মোটর (হলুদ TT)
- 1 × 9 V battery ৯ V ব্যাটারি
- 15 × Jumper wires জাম্পার তার
সব part একসাথে · All parts in one box: obstacle avoiding robot kit complete
তার লাগানো · Wiring
| Ultrasonic distance sensor (HC-SR04) VCC | → | Arduino Uno 5V |
| Ultrasonic distance sensor (HC-SR04) GND | → | Arduino Uno GND |
| Ultrasonic distance sensor (HC-SR04) TRIG | → | Arduino Uno D6 |
| Ultrasonic distance sensor (HC-SR04) ECHO | → | Arduino Uno D7 |
| Motor driver L298N IN1 | → | Arduino Uno D8 |
| Motor driver L298N IN2 | → | Arduino Uno D9 |
| Motor driver L298N IN3 | → | Arduino Uno D10 |
| Motor driver L298N IN4 | → | Arduino Uno D11 |
| 9 V battery + | → | Motor driver L298N 12V |
| Motor driver L298N GND | → | 9 V battery - |
| Motor driver L298N GND | → | Arduino Uno GND.3 |
| Motor driver L298N OUT1 | → | Gear motor (yellow TT) + |
| Motor driver L298N OUT2 | → | Gear motor (yellow TT) - |
| Motor driver L298N OUT3 | → | Gear motor (yellow TT) + |
| Motor driver L298N OUT4 | → | Gear motor (yellow TT) - |
Code (Arduino C++)
// Obstacle avoiding robot: drive forward; if something is closer than 20 cm,
// stop, back up a little, turn right, then carry on.
const int trig = 6, echo = 7;
const int IN1 = 8, IN2 = 9, IN3 = 10, IN4 = 11;
void drive(int a1, int a2, int b1, int b2) {
digitalWrite(IN1, a1); digitalWrite(IN2, a2);
digitalWrite(IN3, b1); digitalWrite(IN4, b2);
}
void forward() { drive(HIGH, LOW, HIGH, LOW); }
void backward() { drive(LOW, HIGH, LOW, HIGH); }
void turnRight() { drive(HIGH, LOW, LOW, HIGH); }
void stopAll() { drive(LOW, LOW, LOW, LOW); }
long distanceCm() {
digitalWrite(trig, LOW); delayMicroseconds(2);
digitalWrite(trig, HIGH); delayMicroseconds(10);
digitalWrite(trig, LOW);
return pulseIn(echo, HIGH) / 58;
}
void setup() {
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
Serial.begin(9600);
}
void loop() {
long d = distanceCm();
Serial.print("Distance: "); Serial.print(d); Serial.println(" cm");
if (d < 20) {
stopAll(); delay(200);
backward(); delay(400);
turnRight(); delay(400);
} else {
forward();
}
delay(100);
}