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

Arduino-Controlled DC Motor with Voice-Activated Stepper Motor and Pushbutton Speed Adjustment

View and Edit Project In Cirkit DesignerImage of Arduino-Controlled DC Motor with Voice-Activated Stepper Motor and Pushbutton Speed Adjustment

Circuit Documentation

Summary

This circuit is designed to control a DC motor using an L298N motor driver, interfaced with an Arduino UNO microcontroller. The control inputs are provided by a pushbutton and a rotary potentiometer. The pushbutton toggles the motor on and off, while the potentiometer adjusts the motor's speed. Additionally, the circuit includes a voice recognition module and a 28BYJ-48 stepper motor controlled by a ULN2003A breakout board, both interfaced with an Arduino Uno R3. Power is supplied through a 2.1mm barrel jack connected to a 12V source and a 4 x AAA battery mount.

Component List

DC Motor

L298N DC Motor Driver

2.1mm Barrel Jack with Terminal Block

Pushbutton

Resistor

Rotary Potentiometer

Arduino UNO

Voice Recognition Module

ULN2003A Breakout Board

28BYJ-48 Stepper Motor

4 x AAA Battery Mount

Wiring Details

DC Motor

L298N DC Motor Driver

2.1mm Barrel Jack with Terminal Block

Pushbutton

Resistor

Rotary Potentiometer

Arduino UNO

Voice Recognition Module

ULN2003A Breakout Board

28BYJ-48 Stepper Motor

4 x AAA Battery Mount

Documented Code

/*
  Motor Control Sketch
  This Arduino sketch is designed to control a DC motor using an L298N motor driver.
  It reads input from a pushbutton and a potentiometer to toggle the motor on/off and control its speed.

  The pushbutton is used to start and stop the motor. When the button is pressed, the motor's
  state is toggled between on and off. A simple debounce mechanism is implemented to prevent
  misreading the pushbutton input.

  The potentiometer is used to adjust the motor speed. The analog reading from the potentiometer
  is mapped to a PWM value that controls the speed of the motor when it is on.

  Connections:
  - L298N ENA connected to Arduino Digital Pin 9 (motorEnablePin)
  - L298N IN1 connected to Arduino Digital Pin 6 (motorInput1)
  - L298N IN2 connected to Arduino Digital Pin 7 (motorInput2)
  - Pushbutton output connected to Arduino Digital Pin 4 (pushButtonPin)
  - Potentiometer wiper connected to Arduino Analog Pin A0 (potPin)

  The code assumes the pushbutton provides a HIGH signal when pressed.
*/

// Define the motor control pins
const int motorEnablePin = 9; // ENA on L298N connected to D9 on Arduino
const int motorInput1 = 6;    // IN1 on L298N connected to D6 on Arduino
const int motorInput2 = 7;    // IN2 on L298N connected to D7 on Arduino

// Define the pushbutton pin
const int pushButtonPin = 4;  // Pushbutton output connected to D4 on Arduino

// Define the potentiometer pin
const int potPin = A0;        // Potentiometer wiper connected to A0 on Arduino

// Variables to keep track of motor state and speed
bool motorEnabled = false;
int motorSpeed = 0;

void setup() {
  // Set the motor control pins as outputs
  pinMode(motorEnablePin, OUTPUT);
  pinMode(motorInput1, OUTPUT);
  pinMode(motorInput2, OUTPUT);

  // Set the pushbutton pin as an input
  pinMode(pushButtonPin, INPUT);

  // Initialize the motor control pins
  digitalWrite(motorEnablePin, LOW);
  digitalWrite(motorInput1, LOW);
  digitalWrite(motorInput2, LOW);
}

void loop() {
  // Read the pushbutton state
  bool buttonState = digitalRead(pushButtonPin);

  // If the button is pressed, toggle the motor state
  if (buttonState == HIGH) {
    motorEnabled = !motorEnabled;
    delay(200); // Debounce delay to prevent misreading the pushbutton input
  }

  // Read the potentiometer value
  int potValue = analogRead(potPin);
  // Map the potentiometer value to a motor speed (0-255)
  motorSpeed = map(potValue, 0, 1023, 0, 255);

  // Control the motor based on the motorEnabled state and motorSpeed
  if (motorEnabled) {
    // Set the motor to spin in one direction
    digitalWrite(motorInput1, HIGH);
    digitalWrite(motorInput2, LOW);
    // Set the motor speed using PWM
    analogWrite(motorEnablePin, motorSpeed);
  } else {
    // Turn off the motor
    digitalWrite(motorInput1, LOW);
    digitalWrite(motorInput2, LOW);
    analogWrite(motorEnablePin, 0);
  }
}

This code is associated with the Arduino UNO microcontroller and is responsible for controlling the DC motor through the L298N driver. It includes functionality for reading the state of a pushbutton and a potentiometer to toggle the motor's power and adjust its speed, respectively.