Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Arduino UNO Bluetooth-Controlled Robotic Car with L298N Motor Driver

View and Edit Project In Cirkit DesignerImage of Arduino UNO Bluetooth-Controlled Robotic Car with L298N Motor Driver

Circuit Documentation

Summary

This circuit is designed to control a Bluetooth-enabled car using an Arduino UNO. The car is powered by a 9V battery and includes two motors controlled by an L298N DC motor driver. The HC-05 Bluetooth module allows for wireless communication with the Arduino, enabling remote control of the car's movements.

Component List

  1. Arduino UNO

    • Description: Microcontroller board based on the ATmega328P.
    • Pins: UNUSED, IOREF, Reset, 3.3V, 5V, GND, Vin, A0, A1, A2, A3, A4, A5, SCL, SDA, AREF, D13, D12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0
  2. 9V Battery

    • Description: Provides power to the circuit.
    • Pins: -, +
  3. Power Jack

    • Description: Connects the 9V battery to the circuit.
    • Pins: POSITIF, NEGATIF
  4. Motor with Reducer (Motor 1)

    • Description: DC motor with a gear reducer.
    • Pins: 3 - 6 VCC, GND
  5. Motor with Reducer (Motor 2)

    • Description: DC motor with a gear reducer.
    • Pins: 3 - 6 VCC, GND
  6. L298N DC Motor Driver

    • Description: Dual H-Bridge motor driver.
    • Pins: OUT1, OUT2, 12V, GND, 5V, OUT3, OUT4, 5V-ENA-JMP-I, 5V-ENA-JMP-O, +5V-J1, +5V-J2, ENA, IN1, IN2, IN3, IN4, ENB
  7. HC-05 Bluetooth Module

    • Description: Bluetooth module for wireless communication.
    • Pins: Key, VCC, TXD, RXD, State, GND

Wiring Details

Arduino UNO

9V Battery

Power Jack

Motor with Reducer (Motor 1)

Motor with Reducer (Motor 2)

L298N DC Motor Driver

HC-05 Bluetooth Module

Code Documentation

#include <SoftwareSerial.h>

// Bluetooth module connected to pins 2 (RX) and 3 (TX)
SoftwareSerial mySerial(2, 3); 

// Motor driver pins
int Rightmotor1 = 4; 
int Rightmotor2 = 5; 
int leftmotor1 = 6; 
int leftmotor2 = 7; 
int en1 = 9; 
int en2 = 10;

// String to hold incoming Bluetooth data
String command = "";

void setup() {
  // Initialize motor pins
  pinMode(Rightmotor1, OUTPUT);
  pinMode(Rightmotor2, OUTPUT);
  pinMode(leftmotor1, OUTPUT);
  pinMode(leftmotor2, OUTPUT);
  pinMode(en1, OUTPUT);
  pinMode(en2, OUTPUT);

  // Start serial communication for debugging and Bluetooth
  Serial.begin(9600); 
  mySerial.begin(9600); 

  Serial.println("Bluetooth Car Ready!");
}

void loop() {
  if (mySerial.available()) {
    char received = mySerial.read(); // Read the single character command
    if (received == 'F') {
      moveForward(); // Move forward
    } else if (received == 'B') {
      moveBackward(); // Move backward
    } else if (received == 'L') {
      turnLeft(); // Turn left
    } else if (received == 'R') {
      turnRight(); // Turn right
    } else if (received == 'S') {
      stopMotors(); // Stop
    }
  }
}

// Movement functions
void moveForward() {
  digitalWrite(Rightmotor1, HIGH);
  digitalWrite(Rightmotor2, LOW);
  digitalWrite(leftmotor1, HIGH);
  digitalWrite(leftmotor2, LOW);
  analogWrite(en1, 200);  // Adjust speed as needed (0-255)
  analogWrite(en2, 200);
  Serial.println("Moving Forward");
}

void moveBackward() {
  digitalWrite(Rightmotor1, LOW);
  digitalWrite(Rightmotor2, HIGH);
  digitalWrite(leftmotor1, LOW);
  digitalWrite(leftmotor2, HIGH);
  analogWrite(en1, 200);
  analogWrite(en2, 200);
  Serial.println("Moving Backward");
}

void turnLeft() {
  digitalWrite(Rightmotor1, HIGH);
  digitalWrite(Rightmotor2, LOW);
  digitalWrite(leftmotor1, LOW);
  digitalWrite(leftmotor2, HIGH);
  analogWrite(en1, 150); // Reduced speed for turning
  analogWrite(en2, 150);
  Serial.println("Turning Left");
}

void turnRight() {
  digitalWrite(Rightmotor1, LOW);
  digitalWrite(Rightmotor2, HIGH);
  digitalWrite(leftmotor1, HIGH);
  digitalWrite(leftmotor2, LOW);
  analogWrite(en1, 150);
  analogWrite(en2, 150);
  Serial.println("Turning Right");
}

void stopMotors() {
  digitalWrite(Rightmotor1, LOW);
  digitalWrite(Rightmotor2, LOW);
  digitalWrite(leftmotor1, LOW);
  digitalWrite(leftmotor2, LOW);
  analogWrite(en1, 0);
  analogWrite(en2, 0);
  Serial.println("Motors Stopped");
}

This code initializes the motor driver pins and sets up serial communication for both debugging and Bluetooth. The loop function reads commands from the Bluetooth module and calls the appropriate movement functions to control the car.