Home Industry InsightBLDC
Looking for a suitable motor? Looking for a suitable motor?
Looking for a suitable motor?

How to Control a Servo Motor with a Button Using Arduino

小编

Published2025-10-15

Introduction to Arduino and Servo Motors

If you are an electronics enthusiast or a budding engineer, the Arduino platform is one of the best tools to start your journey into the world of microcontrollers and automation. Arduino is an open-source electronics platform based on simple software and hardware, perfect for creating interactive projects. In this article, we will dive into one such project where we control a servo motor using a button and Arduino.

A servo motor is a type of motor that can be precisely controlled for specific angles, making it a popular choice in robotics, camera control, and other automation systems. What makes servo motors unique is their ability to rotate to a particular angle, which can be controlled via a simple pulse signal. This means you can adjust the rotation of the servo to an exact degree, providing excellent accuracy for a wide range of applications.

For this project, we’ll pair the servo motor with a push button, which will allow us to control the servo's movement. This simple setup gives you a chance to understand how buttons work with Arduino and how the software controls external components like motors.

What You Will Need:

Before diving into the wiring and coding, let’s first make sure you have everything you need to start this project.

Arduino Board – We’ll use an Arduino Uno, but any version of Arduino can work.

Servo Motor – A basic servo motor will work just fine.

Push Button – A momentary push-button switch is ideal.

Jumper Wires – To make the connections between the Arduino and the components.

Breadboard – For making the connections neat and organized.

Resistor – A 10kΩ resistor is needed for the push button.

Power Source – Either through USB or an external power supply.

Wiring the Circuit

Let’s begin by wiring up the components. This setup is relatively simple, but following the correct order is essential for ensuring that everything works as expected.

Servo Motor Connection:

Connect the servo's power pin (usually red) to the 5V pin on the Arduino.

Connect the ground pin (black or brown) to the GND pin on the Arduino.

The control wire (often yellow or orange) should be connected to a digital pin on the Arduino, for instance, pin 9.

Button Connection:

One leg of the push button should be connected to the 5V pin on the Arduino.

The other leg of the button goes to a digital input pin, such as pin 2. Additionally, place a 10kΩ resistor between the input pin and GND to ensure a stable and clean input signal.

Once the wiring is complete, the basic electrical setup is ready. You now have a button to press, and when you do so, it will trigger the Arduino to control the servo motor.

Coding the Arduino

Now that the hardware is in place, let’s move to the software side of things. Arduino uses a language based on C++, so you’ll be writing code in the Arduino IDE. The purpose of the code is simple: the Arduino should continuously monitor the button and move the servo when the button is pressed.

Here’s a basic sketch to get started:

#include

Servo myServo; // Create a Servo object

int buttonPin = 2; // Pin connected to the push button

int servoPin = 9; // Pin connected to the servo motor

int buttonState = 0; // Variable to store the button state

void setup() {

myServo.attach(servoPin); // Attach the servo to pin 9

pinMode(buttonPin, INPUT); // Set button pin as input

myServo.write(0); // Start the servo at 0 degrees

}

void loop() {

buttonState = digitalRead(buttonPin); // Read the button's state

if (buttonState == HIGH) { // If the button is pressed

myServo.write(90); // Move the servo to 90 degrees

} else {

myServo.write(0); // Return the servo to 0 degrees

}

delay(15); // Give the servo time to move

}

Explanation of the Code:

Include the Servo Library: We start by including the Servo library, which simplifies the process of controlling a servo motor.

Pin Setup: The servo motor is attached to pin 9, and the button is connected to pin 2. We define these pins for clarity.

Button Read and Servo Control: In the loop, we continuously check if the button is pressed. If it is, the servo moves to 90 degrees, otherwise, it returns to 0 degrees.

Delay: A small delay is added to give the servo time to reach its target position before the loop repeats.

Once the code is uploaded to the Arduino, your project should be functional. Press the button, and the servo will move; release it, and the servo will return to its starting position.

Expanding Functionality and Troubleshooting

In this second part, we will focus on expanding the functionality of our project, adding a few additional features, and addressing potential issues that might arise when working with servo motors and buttons.

Expanding Functionality: Multiple Positions

In the initial version of the project, we moved the servo between two positions: 0 degrees and 90 degrees. Let’s take it a step further and introduce more control over the servo’s movement. For example, we could set it to different angles based on multiple button presses.

Adding a Multi-Press Feature

To implement multiple button presses for different servo angles, we can modify the code. Every time the button is pressed, it will cycle through a sequence of angles. Let’s expand the code to handle three distinct positions: 0°, 90°, and 180°.

Here’s how you can modify the code to add this feature:

#include

Servo myServo; // Create a Servo object

int buttonPin = 2; // Pin connected to the push button

int servoPin = 9; // Pin connected to the servo motor

int buttonState = 0; // Variable to store the button state

int angle = 0; // Variable to store the current servo angle

void setup() {

myServo.attach(servoPin); // Attach the servo to pin 9

pinMode(buttonPin, INPUT); // Set button pin as input

myServo.write(angle); // Start the servo at 0 degrees

}

void loop() {

buttonState = digitalRead(buttonPin); // Read the button's state

if (buttonState == HIGH) { // If the button is pressed

delay(300); // Debounce delay

angle += 90; // Increment the angle by 90 degrees

if (angle > 180) { // Reset to 0 degrees after reaching 180 degrees

angle = 0;

}

myServo.write(angle); // Move the servo to the new angle

}

delay(15); // Give the servo time to move

}

Explanation of the Expanded Code:

Angle Control: The variable angle stores the current servo position. Each button press increases the angle by 90 degrees.

Debouncing: The delay(300) ensures that the button press is properly registered and prevents multiple readings of the same press (a common issue with mechanical buttons).

Angle Cycling: After the servo reaches 180 degrees, it resets to 0 degrees, creating a loop of three positions.

Troubleshooting Tips

Servo Not Moving: Ensure the servo is correctly connected to the Arduino and receiving power. If it still doesn’t move, check the servo’s specifications to make sure it operates within the power limits provided by your Arduino board.

Button Not Responding: If the button doesn’t seem to work, double-check the wiring, especially the 10kΩ resistor. Ensure the button is connected to the correct pins on the Arduino and that the code is properly detecting the button press.

Servo Jittering or Moving Erratically: This is often caused by power issues. Servos require a steady power supply, and the Arduino’s USB power might not be sufficient for high-torque servos. Try using an external power source for the servo if needed.

Conclusion

Controlling a servo motor with a button is a simple yet powerful introduction to Arduino projects. By combining basic components like a servo, button, and Arduino board, you’ve created a functional, interactive system that you can expand and build upon. Whether you're building a robot arm, a camera gimbal, or a mechanical project, this fundamental concept will serve as the foundation for more complex projects down the road.

Leveraging innovations in modular drive technology, Kpower integrates high-performance motors, precision reducers, and multi-protocol control systems to provide efficient and customized smart drive system solutions.

Update:2025-10-15

Contact a motor expert for product recommendation.
Contact a motor expert for product recommendation.

Powering The Future

Contact Kpower's product specialist to recommend suitable motor or gearbox for your product.