keyestudio
Share your creative ideas with us here
By Alisa | 16 April 2024 | 0 Comments

How to Control Stepper Motor with Joystick?

1.Introduction
 

The joystick module is a component with two analog inputs and one digital input. It is widely used in game operation, robot control, drone control and other fields.

In this project, we will use a Plus mainboard and a joystick module to control the rotation of the stepper motor. You can have a deeper understanding of the principle and operation of the joystick module in practice.
 

2.Components Required
 

img

img

img

img

Keyestudio Plus Mainboard*1

Joystick Module*1

Stepper Motor*1

USB Cable*1

img

img

img

 

ULN2003 Stepper Motor Drive Board*1

M-F Dupont Wires

F-F Dupont Wires

 


3.Component Knowledge
 

4

Joystick module:

It mainly uses PS2 joystick components. In fact, the joystick module has 3 signal terminal pins, which simulate a three-dimensional space. The pins of the joystick module are GND, VCC, and signal terminals (B, X, Y). The signal terminals X and Y simulate the X-axis and Y-axis of the space. When controlling, the X and Y signal terminals of the module are connected to the analog port of the microcontroller. The signal terminal B simulates the Z axis of the space, it is generally connected to the digital port and used as a button.

VCC is connected to the microcontroller power output VCC (3.3V or 5V), GND is connected to the microcontroller GND, the voltage in the original state is about 1.65V or 2.5V.

In the X-axis direction, when moving in the direction of the arrow, the voltage value increases, and the maximum voltage can be reached. Moving in the opposite direction of the arrow, the voltage value gradually decreases to the minimum voltage.
 

In the Y-axis direction, the voltage value decreases gradually as it moves in the direction of the arrow on the module, decreasing to the minimum voltage. As the arrow is moved in the opposite direction, the voltage value increases and can reach the maximum voltage.

In the Z-axis direction, the signal terminal B is connected to the digital port and outputs 0 in the original state and outputs 1 when pressed.

In this way, we can read the two analog values and the high and low level conditions of the digital port to determine the operating status of the joystick on the module.
 

4.Read the Value
 

We have to use analog Arduino pins to read the data from X or Y pins, and use digital pins to read the values of the button. Please follow the wiring diagram below for wiring.

/*
Read_the_value_of_the_joystick_module
http//www.keyestudio.com
*/
int VRx = A0;
int VRy = A1;
int SW = 11;
int xPosition = 0;
int yPosition = 0;
int SW_state = 0;
int mapX = 0;
int mapY = 0;
void setup() {
  Serial.begin(9600);
  pinMode(VRx, INPUT);
  pinMode(VRy, INPUT);
  pinMode(SW, INPUT_PULLUP);
}
void loop() {
  xPosition = analogRead(VRx);
  yPosition = analogRead(VRy);
  SW_state = digitalRead(SW);
  mapX = map(xPosition, 0, 1023, -512, 512);
  mapY = map(yPosition, 0, 1023, -512, 512);
  Serial.print("X: ");
  Serial.print(mapX);
  Serial.print(" | Y: ");
  Serial.print(mapY);
  Serial.print(" | Button: ");
  Serial.println(SW_state);
  delay(100);
}

Upload the code to the Plus Mainboard, connect the wires and power on first. Then open the serial monitor, set the baud rate to 9600.When you shake the joystick or press the button, you can see their values on the serial monitor.


5.Circuit Diagram and Wiring Diagram
 

We just read the value of the joystick module. Now we need to do something with the joystick module and stepper motor, connected according to the following diagram.


6.Code
 

/*
Control Stepper Motor with Joystick 
http//www.keyestudio.com
*/
const int X_pin = 0;  // analog pin A0 is connected to X
const int Y_pin = 1;  // analog pin A1 is connected to Y
int SW_pin = 11;
int X_Rotate;
int Y_Rotate;
//the pin of the stepper motor
const int IN1_pin = 10;
const int IN2_pin = 9;
const int IN3_pin = 6;
const int IN4_pin = 5;
void setup() {
  //set the pin of the joystic module
  pinMode(SW_pin, INPUT);
  digitalWrite(SW_pin, HIGH);
  //set the pin of the stepper motor
  pinMode(IN1_pin, OUTPUT);
  pinMode(IN2_pin, OUTPUT);
  pinMode(IN3_pin, OUTPUT);
  pinMode(IN4_pin, OUTPUT);
}
void loop() {
  X_Rotate = analogRead(X_pin);
  Y_Rotate = analogRead(Y_pin);
  if (Y_Rotate < 500) {
    digitalWrite(IN1_pin, HIGH);
    digitalWrite(IN2_pin, LOW);
    digitalWrite(IN3_pin, LOW);
    digitalWrite(IN4_pin, LOW);
    delay((Y_Rotate / 2) + 2);
    digitalWrite(IN1_pin, LOW);
    digitalWrite(IN2_pin, HIGH);
    digitalWrite(IN3_pin, LOW);
    digitalWrite(IN4_pin, LOW);
    delay((Y_Rotate / 2) + 2);
    digitalWrite(IN1_pin, LOW);
    digitalWrite(IN2_pin, LOW);
    digitalWrite(IN3_pin, HIGH);
    digitalWrite(IN4_pin, LOW);
    delay((Y_Rotate / 2) + 2);
    digitalWrite(IN1_pin, LOW);
    digitalWrite(IN2_pin, LOW);
    digitalWrite(IN3_pin, LOW);
    digitalWrite(IN4_pin, HIGH);
    delay((Y_Rotate / 2) + 2);
  } else if (Y_Rotate > 550) {
    digitalWrite(IN4_pin, HIGH);
    digitalWrite(IN3_pin, LOW);
    digitalWrite(IN2_pin, LOW);
    digitalWrite(IN1_pin, LOW);
    delay((1028 - Y_Rotate) / 2);
    digitalWrite(IN4_pin, LOW);
    digitalWrite(IN3_pin, HIGH);
    digitalWrite(IN2_pin, LOW);
    digitalWrite(IN1_pin, LOW);
    delay((1028 - Y_Rotate) / 2);
    digitalWrite(IN4_pin, LOW);
    digitalWrite(IN3_pin, LOW);
    digitalWrite(IN2_pin, HIGH);
    digitalWrite(IN1_pin, LOW);
    delay((1028 - Y_Rotate) / 2);
    digitalWrite(IN4_pin, LOW);
    digitalWrite(IN3_pin, LOW);
    digitalWrite(IN2_pin, LOW);
    digitalWrite(IN1_pin, HIGH);
    delay((1028 - Y_Rotate) / 2);
  } else if (Y_Rotate > 500 && Y_Rotate < 550) {
    digitalWrite(IN4_pin, LOW);
    digitalWrite(IN3_pin, LOW);
    digitalWrite(IN2_pin, LOW);
    digitalWrite(IN1_pin, LOW);
  }
}


7.Result
 

Upload the code to the Plus Mainboard, connect the wires and power on first. Push the joystick along the positive direction of the Y axis, and the stepper motor will rotate forward. If you push the joystick along the reverse direction of the Y axis, the stepper motor will reverse.

Leave a Reply

Your email address will not be published.Required fields are marked. *
Name
E-mail
Content
Verification code