{"id":228,"date":"2025-07-15T13:46:47","date_gmt":"2025-07-15T13:46:47","guid":{"rendered":"https:\/\/samerli.com\/en\/lessons\/?p=228"},"modified":"2025-07-17T15:10:32","modified_gmt":"2025-07-17T15:10:32","slug":"lesson-2-how-to-make-an-obstacle-avoiding-robot","status":"publish","type":"post","link":"https:\/\/samerli.com\/en\/lessons\/?p=228","title":{"rendered":"Lesson 2: How to Make an Obstacle Avoiding Robot"},"content":{"rendered":"\n<h4 class=\"wp-block-heading\"><strong>1. Introduction<\/strong><\/h4>\n\n\n\n<p>Welcome to <strong>Robotics Lesson 2<\/strong>! In this hands-on tutorial, you\u2019ll build an <strong>obstacle avoiding robot<\/strong> using the <strong>HC-SR04 ultrasonic sensor<\/strong> and the Arduino <a href=\"https:\/\/samerli.com\/en\/lessons\/?p=229\" title=\"Lesson 1: Making a Basic Arduino Robot Car for Beginners\">robot car you built in lesson 1<\/a>. This project is good for robotics beginners who finished learning <a href=\"https:\/\/samerli.com\/en\/lessons\/?cat=22\" title=\"Electronics\">electronics <\/a>and <a href=\"https:\/\/samerli.com\/en\/lessons\/?cat=13\" title=\"Arduino\">Arduino<\/a>. It teaches you sensor integration, motor control, and autonomous navigation. By the end, your robot will detect obstacles and maneuver around them autonomously. Let\u2019s get started!<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>2. Components Needed<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Arduino Uno<\/strong> (or compatible board)<\/li>\n\n\n\n<li><strong>HC-SR04 Ultrasonic Sensor<\/strong> (distance measurement)<\/li>\n\n\n\n<li><strong>L298N Motor Driver Module<\/strong> (controls motors)<\/li>\n\n\n\n<li><strong>2x DC Motors<\/strong> (6V\u201312V) with wheels<\/li>\n\n\n\n<li><strong>Robot Chassis Kit<\/strong> (includes frame, wheels, screws)<\/li>\n\n\n\n<li><strong>8&#215;1.5V (or 2&#215;18650 Li-ion) Battery Holder<\/strong> (with batteries)<\/li>\n\n\n\n<li><strong>Jumper Wires<\/strong> (male-to-male and male-to-female)<\/li>\n\n\n\n<li><strong>Mini breadboard<\/strong> (optional, for wiring)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>3. Hardware Setup<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>3.1. Mechanical Assembly<\/strong><\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Attach motors to the chassis using screws.<\/li>\n\n\n\n<li><\/li>\n\n\n\n<li>Mount wheels onto motor shafts.<\/li>\n\n\n\n<li>Fix Arduino, L298N, and battery holder to the chassis using screws (or rubber bands\/double-sided tape).<\/li>\n\n\n\n<li>Fix the HC-SR04 sensor at the front (facing forward).<\/li>\n<\/ol>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>3.2. Electrical Connections<\/strong><\/h5>\n\n\n\n<p><br><strong>HC-SR04 to Arduino:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>VCC<\/strong> \u2192 Arduino 5V<\/li>\n\n\n\n<li><strong>GND<\/strong> \u2192 Arduino GND<\/li>\n\n\n\n<li><strong>TRIG<\/strong> \u2192 Arduino Pin 12<\/li>\n\n\n\n<li><strong>ECHO<\/strong> \u2192 Arduino Pin 13<\/li>\n<\/ul>\n\n\n\n<p><strong>L298N to Arduino &amp; Motors:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>EN<\/strong>B\u2192Pin 3<\/li>\n\n\n\n<li><strong>IN<\/strong>3 \u2192 Pin 4<\/li>\n\n\n\n<li><strong>IN<\/strong>4 \u2192 Pin 5<\/li>\n\n\n\n<li><strong>EN<\/strong>A\u2192Pin 11<\/li>\n\n\n\n<li><strong>IN<\/strong>1 \u2192 Pin 10<\/li>\n\n\n\n<li><strong>IN<\/strong>2 \u2192 Pin 9<\/li>\n\n\n\n<li><strong>Motor A<\/strong> \u2192 Left motor terminals<\/li>\n\n\n\n<li><strong>Motor B<\/strong> \u2192 Right motor terminals<\/li>\n\n\n\n<li><strong>12V Input<\/strong> \u2192 Battery (+)<\/li>\n\n\n\n<li><strong>GND<\/strong> \u2192 Battery (-) &amp; Arduino GND<\/li>\n<\/ul>\n\n\n\n<p><strong>Power:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Connect <strong>Arduino Vin<\/strong> to L298N <strong>5V output<\/strong>.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>4. Code <\/strong><\/h4>\n\n\n\n<p><strong>Upload this Arduino Sketch:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const int trig=12;\nconst int echo=13; \nconst int left2=5;   \/\/IN4\nconst int left1=4;  \/\/ IN3\nconst int leftSpeed=3;  \/\/ENB\nconst int right1=10;   \/\/IN1\nconst int right2=9;  \/\/IN2\nconst int rightSpeed=11; \/\/ENA\n\nvoid setup() {\n  \/\/ put your setup code here, to run once:\n  Serial.begin(9600);\n  pinMode(trig,OUTPUT);\n  pinMode(echo,INPUT);\n  pinMode(left1, OUTPUT);\n  pinMode(left2, OUTPUT);\n  pinMode(right1, OUTPUT);\n  pinMode(right2, OUTPUT);\n  pinMode(leftSpeed, OUTPUT);\n  pinMode(rightSpeed, OUTPUT);\n}\n\nvoid loop() {\n  \/\/ put your main code here, to run repeatedly:\n long dist=getDistance();\n if(dist&lt;15){\n    left();\n    delay(500);\n  }\n  else {\n    forward();\n  }\n}\n\n\nvoid forward(){\n  digitalWrite(left1,HIGH);\n  digitalWrite(left2,LOW);\n  analogWrite(leftSpeed,180);\n  digitalWrite(right1,HIGH);\n  digitalWrite(right2,LOW);\n  analogWrite(rightSpeed,80);\n}\n\n\n\n\nvoid backwards(){\n  digitalWrite(left2,HIGH);\n  digitalWrite(left1,LOW);\n  analogWrite(leftSpeed,80);\n  digitalWrite(right2,HIGH);\n  digitalWrite(right1,LOW);\n  analogWrite(rightSpeed,80);\n}\n\nvoid stopCar(){\n  digitalWrite(left2,LOW);\n  digitalWrite(left1,LOW);\n  analogWrite(leftSpeed,0);\n  digitalWrite(right2,LOW);\n  digitalWrite(right1,LOW);\n  analogWrite(rightSpeed,0);\n}\n\nvoid left(){\n  digitalWrite(left1,LOW);\n  digitalWrite(left2,LOW);\n  analogWrite(leftSpeed,0);\n  digitalWrite(right1,HIGH);\n  digitalWrite(right2,LOW);\n  analogWrite(rightSpeed,150);\n}\n\nvoid right(){\n  digitalWrite(left1,HIGH);\n  digitalWrite(left2,LOW);\n  analogWrite(leftSpeed,150);\n  digitalWrite(right1,LOW);\n  digitalWrite(right2,LOW);\n  analogWrite(rightSpeed,0);\n}\n\nlong getDistance(){\n  long duration, distance;\n\n  \/\/ Trigger ultrasonic pulse\n  digitalWrite(trig, LOW);\n  delayMicroseconds(2);\n  digitalWrite(trig, HIGH);\n  delayMicroseconds(10);\n  digitalWrite(trig, LOW);\n\n  \/\/ Calculate distance\n  duration = pulseIn(echo, HIGH);\n  distance = duration * 0.034 \/ 2; \/\/ Speed of sound= 340m\/s\n\n  Serial.print(\"Distance: \");\n  Serial.println(distance);\n  return distance;\n}\n\n\n<\/code><\/pre>\n\n\n\n<p><strong>How It Works:<\/strong><\/p>\n\n\n\n<p>The Arduino program continuously to:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Measures distance using the HC-SR04 sensor, as previously explained in <a href=\"https:\/\/samerli.com\/en\/lessons\/?p=70\" title=\"Using HC-SR04 Ultrasonic Sensor with Arduino for Traffic Light Control\">this lesson.<\/a><\/li>\n\n\n\n<li>Decides movement based on obstacle distance<br>If an obstacle is detected (&lt;15cm) \u2192 Turns right \u2192 Resumes.<br><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ff6900\" class=\"has-inline-color\">Otherwise<\/mark>, it goes forward.<\/li>\n\n\n\n<li>Controls motors via the L298N driver<\/li>\n\n\n\n<li>Repeats this loop automatically<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>5. Common Troubleshoots<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Motors not spinning and making weird sounds?<\/strong><\/li>\n\n\n\n<li>Check L298N power supply (battery voltage >7V, recharge if needed).<\/li>\n\n\n\n<li>Ensure motor wires are firmly connected to L298N.<\/li>\n\n\n\n<li><strong>Car not going forward\/turning left or right properly<\/strong><\/li>\n\n\n\n<li>Check your wiring or code, you may need to flip right1, right2 or left1,left2.<\/li>\n\n\n\n<li><strong>Incorrect distance readings?<\/strong><\/li>\n\n\n\n<li>Make sure front of HC-SR04 is clear<\/li>\n\n\n\n<li>Make sure the HC-SR04 connection are as per code<\/li>\n\n\n\n<li><strong>Random movements?<\/strong><\/li>\n\n\n\n<li>Add <code>delay(50)<\/code> after distance check to reduce noise.<\/li>\n\n\n\n<li>Ensure the Arduino and L298N share a common ground.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>6. How to Go Further<\/strong><\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Make a still robot (use StopCar()) that goes back for 1 sec when you approach it.<\/li>\n\n\n\n<li><strong>Add Speed Control:<\/strong> Try to change the forward speed according to the object&#8217;s distance using <a href=\"https:\/\/samerli.com\/en\/lessons\/?p=132\" title=\"Controlling RGB LEDs with Arduino: Helpful Guide for Beginners\">PWM concept<\/a>.<\/li>\n\n\n\n<li><strong>Maze Robot:<\/strong> Add side-facing HC-SR04 sensors for better navigation, choosing the clearest path (left\/right).<\/li>\n\n\n\n<li><strong>Advanced Logic:<\/strong> Use PID control for smoother turns.<\/li>\n<\/ol>\n\n\n\n<p>You can also upgrade to a <strong>maze-solving robot<\/strong> using a single servo to turn HC-SR04 ultrasonic sensor into a radar, look left and right then move!<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Stay tuned to <a href=\"https:\/\/samerli.com\/en\/lessons\" title=\"Samerli Lessons\">Samerli Lessons<\/a> to learn more about our robotics, Arduino and electronics.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Upgrade your robot car with an HC-SR04 ultrasonic sensor for autonomous navigation! Learn distance sensing, avoidance algorithms, and real-time decision coding. Troubleshoot sensor errors and optimize movements. Components: HC-SR04, Arduino. Next: Add Bluetooth or multi-sensor arrays for advanced navigation<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[51],"tags":[56,16,55,52,54],"class_list":["post-228","post","type-post","status-publish","format-standard","hentry","category-robotics","tag-autonomous","tag-hc-sr04","tag-obstacle-avoiding","tag-robot-car","tag-robotics"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=\/wp\/v2\/posts\/228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=228"}],"version-history":[{"count":1,"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=\/wp\/v2\/posts\/228\/revisions"}],"predecessor-version":[{"id":231,"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=\/wp\/v2\/posts\/228\/revisions\/231"}],"wp:attachment":[{"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}