{"id":229,"date":"2025-07-15T13:44:34","date_gmt":"2025-07-15T13:44:34","guid":{"rendered":"https:\/\/samerli.com\/en\/lessons\/?p=229"},"modified":"2025-07-15T15:29:23","modified_gmt":"2025-07-15T15:29:23","slug":"lesson-1-making-a-basic-arduino-robot-car-for-beginners","status":"publish","type":"post","link":"https:\/\/samerli.com\/en\/lessons\/?p=229","title":{"rendered":"Lesson 1: Making a Basic Arduino Robot Car for Beginners"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>1. Introduction<\/strong><\/h4>\n\n\n\n<p>Welcome to <strong>Robotics Fundamentals!<\/strong> In this essential prequel lesson, you&#8217;ll be making a <strong>basic robot car<\/strong> using Arduino &#8211; which will be a great foundation for your coming robotics projects. You&#8217;ll learn motor control, chassis assembly, and Arduino programming while creating a manually controlled rover. Mastering this project prepares you for advanced concepts like obstacle avoidance (Lesson 2) and Bluetooth control. No prior robotics experience needed!<\/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>L298N Motor Driver Module<\/strong><\/li>\n\n\n\n<li><strong>2x DC Gear Motors<\/strong> (6V-12V) with wheels<\/li>\n\n\n\n<li><strong>Robot Chassis Kit<\/strong> (4-wheel or 2-wheel design)<\/li>\n\n\n\n<li><strong>4x AA Battery Holder<\/strong> (6V) or <strong>18650 Battery Pack<\/strong><\/li>\n\n\n\n<li><strong>Jumper Wires<\/strong> (male-to-male)<\/li>\n\n\n\n<li><strong>USB Cable<\/strong> (for Arduino programming)<\/li>\n\n\n\n<li><strong>Small Screwdriver<\/strong> (for chassis assembly)<\/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<p><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Mount Motors:<\/strong> Secure DC motors to chassis using included brackets\/screws<\/li>\n\n\n\n<li><strong>Attach Wheels:<\/strong> Press-fit wheels onto motor shafts<\/li>\n\n\n\n<li><strong>Add Castor Wheel:<\/strong> Install swivel castor at front\/rear for balance (if 2-wheel design)<\/li>\n\n\n\n<li><strong>Secure Electronics:<\/strong> Use double-sided tape to mount:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Arduino near center<\/li>\n\n\n\n<li>L298N near motors<\/li>\n\n\n\n<li>Battery holder at rear<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>3.2. Electrical Connections<\/strong><\/h5>\n\n\n\n<p><br><strong>L298N to Arduino:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>L298N Pin<\/th><th>Arduino Pin<\/th><\/tr><\/thead><tbody><tr><td>IN1<\/td><td>D5<\/td><\/tr><tr><td>IN2<\/td><td>D6<\/td><\/tr><tr><td>IN3<\/td><td>D7<\/td><\/tr><tr><td>IN4<\/td><td>D8<\/td><\/tr><tr><td>12V Input<\/td><td>Battery (+)<\/td><\/tr><tr><td>GND<\/td><td>Battery (-) &amp; Arduino GND<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Motor Connections:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Motor A+\/-<\/strong> \u2192 Left Motor<\/li>\n\n\n\n<li><strong>Motor B+\/-<\/strong> \u2192 Right Motor<\/li>\n<\/ul>\n\n\n\n<p><strong>Power Management:<\/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\n\n\n<li><strong>Battery (+) \u2192 L298N 12V Input<\/strong><\/li>\n\n\n\n<li><strong>Battery (-) \u2192 L298N GND \u2192 Arduino GND<\/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 &amp; How It Works<\/strong><\/h4>\n\n\n\n<p><strong>Upload This Arduino Sketch:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Motor control pins\nconst int LEFT_FWD = 5;   \/\/ IN1\nconst int LEFT_BWD = 6;   \/\/ IN2\nconst int RIGHT_FWD = 7;  \/\/ IN3\nconst int RIGHT_BWD = 8;  \/\/ IN4\n\nvoid setup() {\n  \/\/ Initialize all motor pins as OUTPUTs\n  for (int pin = 5; pin &lt;= 8; pin++) {\n    pinMode(pin, OUTPUT);\n  }\n  Serial.begin(9600);  \/\/ Start serial communication\n}\n\nvoid loop() {\n  \/\/ Demo movement sequence\n  moveForward(2000);    \/\/ Move forward for 2 seconds\n  turnRight(1000);      \/\/ Turn right for 1 second\n  moveBackward(2000);   \/\/ Move backward for 2 seconds\n  turnLeft(1000);       \/\/ Turn left for 1 second\n}\n\n\/\/ Custom movement functions with duration parameter\nvoid moveForward(int duration) {\n  \/\/ Left motor forward\n  digitalWrite(LEFT_FWD, HIGH);\n  digitalWrite(LEFT_BWD, LOW);\n  \/\/ Right motor forward\n  digitalWrite(RIGHT_FWD, HIGH);\n  digitalWrite(RIGHT_BWD, LOW);\n  delay(duration);\n}\n\nvoid turnRight(int duration) {\n  \/\/ Left motor forward (pivot)\n  digitalWrite(LEFT_FWD, HIGH);\n  digitalWrite(LEFT_BWD, LOW);\n  \/\/ Right motor backward\n  digitalWrite(RIGHT_FWD, LOW);\n  digitalWrite(RIGHT_BWD, HIGH);\n  delay(duration);\n}\n\n\/\/ Add moveBackward() and turnLeft() using similar patterns<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>5. Programming Concepts Explained<\/strong><\/h4>\n\n\n\n<p><strong>Key Structures Used:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Constants:<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   const int LEFT_FWD = 5;  <\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Creates fixed variables for pin numbers \u2192 Improves code readability<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Loop Initialization:<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   for (int pin = 5; pin &lt;= 8; pin++) { \n     pinMode(pin, OUTPUT); \n   }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Efficiently configures multiple pins as outputs using a loop<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Modular Functions:<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   void moveForward(int duration) { ... }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Encapsulates motor control logic into reusable blocks<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Digital Signal Control:<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   digitalWrite(LEFT_FWD, HIGH); \/\/ Activate forward motion<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sets voltage state (HIGH=5V \/ LOW=0V) on pins to control motor direction<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Parametric Delays:<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   delay(duration); \/\/ Pauses program execution<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Allows dynamic control of movement duration via function parameters<\/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. Common Troubleshooting<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Motors Spinning Backward?<\/strong><br>Swap motor wires on L298N terminals (A+ \u2194 A-, B+ \u2194 B-)<\/li>\n\n\n\n<li><strong>Robot Not Moving?<\/strong><\/li>\n\n\n\n<li>Check battery voltage (>6V for L298N)<\/li>\n\n\n\n<li>Verify power jumper is present on L298N (if using external power)<\/li>\n\n\n\n<li><strong>Uneven Movement?<\/strong><\/li>\n\n\n\n<li>Calibrate motor speeds by adding <code>analogWrite(ENA, 200);<\/code> (Need to wire ENA and ENB to PWM control pins-remove the black jumpers if needed)<\/li>\n\n\n\n<li><strong>L298N Overheating?<\/strong><\/li>\n\n\n\n<li>Ensure motors don&#8217;t exceed 12V rating<\/li>\n\n\n\n<li>Add heat sinks to L298N chip<\/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>7. How to Go Further<\/strong><\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Speed Control:<\/strong><br>Connect L298N ENA\/ENB pins to Arduino PWM pins (3,5,6,9,10,11) and use <code>analogWrite()<\/code><\/li>\n\n\n\n<li><strong>Wireless Control:<\/strong><br>Add Bluetooth (HC-05) or RF (nRF24L01) module for remote operation<\/li>\n\n\n\n<li><strong>Line Following:<\/strong><br>Add IR sensors for track navigation<\/li>\n\n\n\n<li><strong>Custom Movements:<\/strong><br>Program complex sequences like squares, circles, or zig-zags<\/li>\n\n\n\n<li><strong>Battery Monitor:<\/strong><br>Implement voltage sensing with analog pin<\/li>\n<\/ol>\n\n\n\n<p><strong>Upgrade Path:<\/strong><br>This basic robot car becomes the foundation for<a href=\"https:\/\/samerli.com\/en\/lessons\/?p=228\" title=\"Lesson 2: How to Make an Obstacle Avoiding Robot\"> Lesson 2 (Obstacle Avoidance) <\/a>when you add an HC-SR04 ultrasonic sensor!<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Next Lesson Preview:<\/strong><a href=\"https:\/\/samerli.com\/en\/lessons\/?p=228\" title=\"Lesson 2: How to Make an Obstacle Avoiding Robot\"> <em>Lesson 2: Transform This Car into an Obstacle-Avoiding Robot with Ultrasonic Sensors<\/em><\/a><br><strong>Share Your Build!<\/strong> Tag <strong><em>#Samerli<\/em><\/strong> on social media!<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ready to make your first Arduino-powered robot car? Master motor control with the L298N driver, assemble a chassis, and program autonomous movements. Perfect for beginners &#8211; no prior robotics experience needed. Troubleshoot wiring issues and upgrade to speed control. Foundation for all robotics projects<\/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":[9,53,52],"class_list":["post-229","post","type-post","status-publish","format-standard","hentry","category-robotics","tag-arduino","tag-l298n","tag-robot-car"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=\/wp\/v2\/posts\/229","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=229"}],"version-history":[{"count":2,"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=\/wp\/v2\/posts\/229\/revisions"}],"predecessor-version":[{"id":233,"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=\/wp\/v2\/posts\/229\/revisions\/233"}],"wp:attachment":[{"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=229"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/samerli.com\/en\/lessons\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}