Robot Notes
Robot Notes
1. 1 x Arduino Uno
2. 1 x Ultrasonic Sensor
3. 1 x Servo Motor (Optional)
4. 2WD Robot Chassis
5. Jumper Wires
6. 2 X Li-ion 3.7V battery pack
L298N Connect to
Arduino
IN1 Pin 7
IN2 Pin 6
IN3 Pin 5
IN4 Pin 4
ENA Pin 9
ENB Pin 3
Connect the motors to OUT1, OUT2, OUT3 and OUT4 terminals on the L298N motor
driver. Power the L298N driver with 6V-12V from the battery pack.
Open the Arduino IDE and upload the following code to the Arduino:
// Motor pins
#define IN1 7
#define IN2 6
#define IN3 5
#define IN4 4
#define ENA 9 // PWM - Left motor
#define ENB 3 // PWM - Right motor
// Ultrasonic pins
#define trigPin 10
#define echoPin 8
// Motor speed (0-255)
int motorSpeed = 180; // Adjust based on your robot's performance
void setup () {
// Motor pins
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
pinMode (ENA, OUTPUT);
pinMode (ENB, OUTPUT);
Serial.begin(9600);
}
void loop () {
int distance = getDistance ();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Movement functions
void moveForward () {
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite (ENA, motorSpeed);
analogWrite (ENB, motorSpeed);
}
void turnRight () {
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite (ENA, motorSpeed);
analogWrite (ENB, motorSpeed);
}
void turnLeft () {
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite (ENA, motorSpeed);
analogWrite (ENB, motorSpeed);
}
void stopMotors () {
digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
analogWrite (ENA, 0);
analogWrite (ENB, 0);
}
turnRight (): left motor goes forward; right motor goes backward -> spin
turnLeft (): right motor forward, left motor backward -> spin the other way
Pro Tips:
So yes, our robot has a brain but it‛s not every time that it thinks with its head. Let‛s help
it out by adding a servo.
Upload this code to the Arduino if your robot acts like Mr Magoo and can‛t stop bumping
into things:
#include <Servo.h>
// Motor pins
#define IN1 7
#define IN2 6
#define IN3 5
#define IN4 4
#define ENA 9
#define ENB 3
// Ultrasonic sensor pins
#define trigPin 10
#define echoPin 8
// Servo pin
#define servoPin 11
Servo headServo;
void setup () {
// Motor setup
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
pinMode (ENA, OUTPUT);
pinMode (ENB, OUTPUT);
// Servo setup
headServo.attach(servoPin);
headServo.write(90); // Center position
Serial.begin(9600);
}
void loop () {
headServo.write(90); // Face forward
delay (300);
int distanceForward = getDistance ();
headServo.write(150);
delay (400);
int distanceRight = getDistance ();
// Decide direction
if (distanceLeft > distanceRight && distanceLeft > safeDistance) {
turnLeft ();
delay (500);
} else if (distanceRight > safeDistance) {
turnRight ();
delay (500);
} else {
// Stuck – back up and retry
moveBackward ();
delay (500);
}
} else {
moveForward ();
}
}
void moveBackward () {
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite (ENA, motorSpeed);
analogWrite (ENB, motorSpeed);
}
void turnRight () {
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite (ENA, motorSpeed);
analogWrite (ENB, motorSpeed);
}
void turnLeft () {
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite (ENA, motorSpeed);
analogWrite (ENB, motorSpeed);
}
void stopMotors () {
digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
analogWrite (ENA, 0);
analogWrite (ENB, 0);
}
N.B: The servo is a power-hungry component and connecting it directly to get power from
the Arduino might affect the robot function. You can opt to connect it‛s VCC and GND to
the L298N or provide clean power from an alternative power source like a breadboard
power supply.