The circuit is designed to control a 4WD Mecanum Wheel Car with Bluetooth control capabilities. It includes an Arduino Mega 2560 microcontroller for processing inputs and controlling outputs, two L298N DC motor drivers for driving four DC motors, an HC-05 Bluetooth module for wireless communication, a Servomotor MG995 for additional actuation, an A4988 stepper motor driver for controlling a Nema 17 stepper motor, and multiple 18650 Li-Ion batteries for power supply.
5V
connected to HC-05 Bluetooth Module VCC, A4988 Stepper Motor Driver VDD, and Servomotor MG995 VCC.GND
connected to HC-05 Bluetooth Module GND, A4988 Stepper Motor Driver GND, and Servomotor MG995 GND.D0 RX0
connected to HC-05 Bluetooth Module TXD.D1 TX0
connected to HC-05 Bluetooth Module RXD.D2 PWM
connected to L298N DC Motor Driver ENB.D3 PWM
connected to L298N DC Motor Driver ENA.D4 PWM
connected to second L298N DC Motor Driver ENA.D5 PWM
connected to second L298N DC Motor Driver ENB.D7 PWM
connected to Servomotor MG995 SIG.D8 PWM
connected to A4988 Stepper Motor Driver STEP.D9 PWM
connected to A4988 Stepper Motor Driver DIR.D22
to D29
connected to L298N DC Motor Driver IN1 to IN4 for both motor drivers.12V
connected to 18650 Li-Ion Battery Positive.GND
connected to 18650 Li-Ion Battery Negative.OUT1
to OUT4
connected to corresponding DC Motor pins.VMOT
connected to 18650 Li-Ion Battery Positive.GND
connected to 18650 Li-Ion Battery Negative.RESET
connected to A4988 Stepper Motor Driver SLEEP.2B
, 2A
, 1A
, 1B
connected to Nema 17 42-STH48 corresponding pins.VCC
and GND
connected to Arduino Mega 2560 5V and GND.TXD
connected to Arduino Mega 2560 D0 RX0.RXD
connected to Arduino Mega 2560 D1 TX0.VCC
and GND
connected to Arduino Mega 2560 5V and GND.SIG
connected to Arduino Mega 2560 D7 PWM./*
* Arduino Sketch for 4WD Mecanum Wheel Car with Bluetooth Control
* Controls:
* F - Move Forward
* B - Move Backward
* L - Turn Left
* R - Turn Right
* S - Stop
* U - Stepper Motor Clockwise 200 steps
* D - Stepper Motor Counter-Clockwise 200 steps
* Q - Glide Left
* W - Glide Right
*/
#include <Stepper.h>
// Motor driver pins
const int Enable_Rear_Right = 3;
const int Enable_Rear_Left = 2;
const int Rear_Right_Pin1 = 22;
const int Rear_Right_Pin2 = 23;
const int Rear_Left_Pin1 = 24;
const int Rear_Left_Pin2 = 25;
const int Enable_Front_Right = 4;
const int Enable_Front_Left = 5;
const int Front_Right_Pin1 = 26;
const int Front_Right_Pin2 = 27;
const int Front_Left_Pin1 = 28;
const int Front_Left_Pin2 = 29;
// Stepper motor pins
const int STEP_PIN = 8;
const int DIR_PIN = 9;
const int STEPS_PER_REV = 200;
Stepper stepper(STEPS_PER_REV, STEP_PIN, DIR_PIN);
void setup() {
Serial.begin(9600);
pinMode(Enable_Rear_Right, OUTPUT);
pinMode(Enable_Rear_Left, OUTPUT);
pinMode(Rear_Right_Pin1, OUTPUT);
pinMode(Rear_Right_Pin2, OUTPUT);
pinMode(Rear_Left_Pin1, OUTPUT);
pinMode(Rear_Left_Pin2, OUTPUT);
pinMode(Enable_Front_Right, OUTPUT);
pinMode(Enable_Front_Left, OUTPUT);
pinMode(Front_Right_Pin1, OUTPUT);
pinMode(Front_Right_Pin2, OUTPUT);
pinMode(Front_Left_Pin1, OUTPUT);
pinMode(Front_Left_Pin2, OUTPUT);
stepper.setSpeed(60);
}
void loop() {
if (Serial.available() > 0) {
char command = Serial.read();
switch (command) {
case 'F': moveForward(); break;
case 'B': moveBackward(); break;
case 'L': turnLeft(); break;
case 'R': turnRight(); break;
case 'S': stopCar(); break;
case 'U': stepper.step(STEPS_PER_REV); break;
case 'D': stepper.step(-STEPS_PER_REV); break;
case 'Q': glideLeft(); break;
case 'W': glideRight(); break;
}
}
}
void moveForward() {
digitalWrite(Rear_Right_Pin1, HIGH);
digitalWrite(Rear_Right_Pin2, LOW);
digitalWrite(Rear_Left_Pin1, HIGH);
digitalWrite(Rear_Left_Pin2, LOW);
digitalWrite(Front_Right_Pin1, HIGH);
digitalWrite(Front_Right_Pin2, LOW);
digitalWrite(Front_Left_Pin1, HIGH);
digitalWrite(Front_Left_Pin2, LOW);
analogWrite(Enable_Rear_Right, 255);
analogWrite(Enable_Rear_Left, 255);
analogWrite(Enable_Front_Right, 255);
analogWrite(Enable_Front_Left, 255);
}
void moveBackward() {
digitalWrite(Rear_Right_Pin1, LOW);
digitalWrite(Rear_Right_Pin2, HIGH);
digitalWrite(Rear_Left_Pin1, LOW);
digitalWrite(Rear_Left_Pin2, HIGH);
digitalWrite(Front_Right_Pin1, LOW);
digitalWrite(Front_Right_Pin2, HIGH);
digitalWrite(Front_Left_Pin1, LOW);
digitalWrite(Front_Left_Pin2, HIGH);
analogWrite(Enable_Rear_Right, 255);
analogWrite(Enable_Rear_Left, 255);
analogWrite(Enable_Front_Right, 255);
analogWrite(Enable_Front_Left, 255);
}
void turnLeft() {
digitalWrite(Rear_Right_Pin1, LOW);
digitalWrite(Rear_Right_Pin2, HIGH);
digitalWrite(Rear_Left_Pin1, HIGH);
digitalWrite(Rear_Left_Pin2, LOW);
digitalWrite(Front_Right_Pin1, HIGH);
digitalWrite(Front_Right_Pin2, LOW);
digitalWrite(Front_Left_Pin1, LOW);
digitalWrite(Front_Left_Pin2, HIGH);
analogWrite(Enable_Rear_Right, 255);
analogWrite(Enable_Rear_Left, 255);
analogWrite(Enable_Front_Right, 255);
analogWrite(Enable_Front_Left, 255);
}
void turnRight() {
digitalWrite(Rear_Right_Pin1, HIGH);
digitalWrite(Rear_Right_Pin2, LOW);
digitalWrite(Rear_Left_Pin1, LOW);
digitalWrite(Rear_Left_Pin2, HIGH);
digitalWrite(Front_Right_Pin1, LOW);
digitalWrite(Front_Right_Pin2, HIGH);
digitalWrite(Front_Left_Pin1, HIGH);
digitalWrite(Front_Left_Pin2, LOW);
analogWrite(Enable_Rear_Right, 255);
analogWrite(Enable_Rear_Left, 255);
analogWrite(Enable_Front_Right, 255);
analogWrite(Enable_Front_Left, 255);
}
void stopCar() {
analogWrite(Enable_Rear_Right, 0);
analogWrite(Enable_Rear_Left, 0);
analogWrite(Enable_F