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

Arduino CNC Machine with Joystick Control and LED Indicator

View and Edit Project In Cirkit DesignerImage of Arduino CNC Machine with Joystick Control and LED Indicator

Circuit Documentation

Summary

This circuit is designed to control a CNC machine using a joystick module. The X and Y axes of the joystick control the X and Y motors of the CNC machine. An LED is used as an indicator, turning on when the spindle direction is active. The circuit includes a power supply, a CNC shield, stepper motors, a joystick module, an LED, resistors, and an Arduino UNO microcontroller.

Component List

  1. NEMA23 Stepper Motor

    • Pins: A+, A-, B+, B-
    • Description: Stepper motor used for precise control of the CNC machine's movement.
  2. KY-023 Dual Axis Joystick Module

    • Pins: GND, +5V, VRx, VRy, SW
    • Description: Joystick module used to control the X and Y axes of the CNC machine.
  3. CNC Shield V3 Engraving Machine Expansion Board

    • Pins: EN, GND, x.Step, DIR, Y.Step, Z.Step, A.Step, 5V, COM, V+, End Stop X-, End Stop Z+, End Stop Z-, End Stop Y+, End Stop Y-, SpnEN, SpnDir, CoolEn, Abort, Hold, Resume, E-Stop, Y.Motor A+, Y.Motor A-, Y.Motor B+, Y.Motor B-, RST, SDA, SCL, RX, TX, 3V3, X.Motor A+, X.Motor A-, X.Motor B+, X.Motor B-, Z.Motor A+, Z.Motor A-, Z.Motor B+, Z.Motor B-, A.Motor A+, A.Motor A-, A.Motor B+, A.Motor B-, Enable, MS1, MS2, MS3, RESET, Sleep, Step, Direction, VDD, 1B, 1A, 2A, 2B, VMOT, M0, M1, M2, d12, A Drive Step and Direction, Z Drive Module Setp D4, Y Drive Module Setp D3, X Drive Module Setp D2, Set X Drive Module Dir D5, Set Y Drive Module Dir D6, Set Z Drive Module DIR d7, D13
    • Description: Expansion board for controlling the CNC machine.
  4. Power Supply

    • Pins: +, -
    • Description: Provides power to the circuit.
  5. Resistor

    • Pins: pin1, pin2
    • Description: 220 Ohms resistor used for current limiting.
  6. LED: Two Pin (white)

    • Pins: cathode, anode
    • Description: LED used as an indicator.
  7. A988 DRIVER

    • Pins: VMOT, GND, 2B, 2A, 1A, 1B, VDD, EN, MS1, MS2, MS3, RST, SLP, STEP, DIR
    • Description: Stepper motor driver.
  8. Arduino UNO

    • Pins: UNUSED, IOREF, Reset, 3.3V, 5V, GND, Vin, A0, A1, A2, A3, A4, A5, SCL, SDA, AREF, D13, D12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0
    • Description: Microcontroller used to control the CNC machine.

Wiring Details

NEMA23 Stepper Motor

KY-023 Dual Axis Joystick Module

CNC Shield V3 Engraving Machine Expansion Board

Power Supply

Resistor

LED: Two Pin (white)

Code Documentation

/*
 * Arduino CNC Machine with Joystick Control and LED Indicator
 * This sketch controls a CNC machine using a joystick module. The X and Y axes
 * of the joystick control the X and Y motors of the CNC machine. An LED is used
 * as an indicator, turning on when the spindle direction is active.
 */

// Pin definitions
const int xStepPin = 2;
const int xDirPin = 5;
const int yStepPin = 3;
const int yDirPin = 6;
const int ledPin = 13;
const int joyXPin = A0;
const int joyYPin = A1;

void setup() {
  // Initialize motor control pins
  pinMode(xStepPin, OUTPUT);
  pinMode(xDirPin, OUTPUT);
  pinMode(yStepPin, OUTPUT);
  pinMode(yDirPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  // Initialize joystick pins
  pinMode(joyXPin, INPUT);
  pinMode(joyYPin, INPUT);
}

void loop() {
  // Read joystick values
  int joyXVal = analogRead(joyXPin);
  int joyYVal = analogRead(joyYPin);

  // Control X motor
  if (joyXVal > 512) {
    digitalWrite(xDirPin, HIGH);
    digitalWrite(xStepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(xStepPin, LOW);
    delayMicroseconds(1000);
  } else if (joyXVal < 512) {
    digitalWrite(xDirPin, LOW);
    digitalWrite(xStepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(xStepPin, LOW);
    delayMicroseconds(1000);
  }

  // Control Y motor
  if (joyYVal > 512) {
    digitalWrite(yDirPin, HIGH);
    digitalWrite(yStepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(yStepPin, LOW);
    delayMicroseconds(1000);
  } else if (joyYVal < 512) {
    digitalWrite(yDirPin, LOW);
    digitalWrite(yStepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(yStepPin, LOW);
    delayMicroseconds(1000);
  }

  // Control LED indicator
  if (joyXVal != 512 || joyYVal != 512) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}

This code initializes the pins for the motors, joystick, and LED. It reads the joystick values and controls the X and Y motors accordingly. The LED is turned on when the joystick is moved in any direction.