This circuit is designed to control a DC motor using an L298N motor driver module, with an Arduino UNO as the microcontroller. The control inputs for the motor 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. The circuit is powered by a 2.1mm Barrel Jack with Terminal Block, which supplies the necessary voltage to the motor driver and the Arduino UNO. A resistor is used in conjunction with the pushbutton to provide a stable input signal to the Arduino.
/*
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 responsible for reading the state of the pushbutton and the potentiometer, toggling the motor's state, and adjusting its speed accordingly. The debounce delay ensures that the pushbutton's state is read correctly without false triggering. The potentiometer's analog value is mapped to a PWM value to control the motor's speed.