CNC SHILED V3 How to use?


We will see in this tutorial, the use of the CNC Shield V3 for Arduino. To be able to manage a machine like a CNC or a 3D printer with several stepper motors, it is interesting to have a board that facilitates the connection of the different elements of the machine. This is the role of the CNC shield.


how does it work ?

he CNC Shield V3 is an expansion board for Arduino UNO or Mega allowing easy interfacing with stepper motor controllers, type A4988. It also makes it possible to control and manage the elements necessary for the operation of a digital milling machine (CNC). That is to say, limit switches (end stops), fan, etc.


The Shield is placed on the Arduino microcontroller and the motors are connected directly to the output pins of the drivers. You can choose the drivers you want according to the power of your motors and your applications (A4988, DRV8825, SilentStepStick, TMC).

Terminals are available below each driver to select the resolution of the steps. These terminals are connected to the MS0, MS1 and MS2 pins of the controllers.

Before connecting the motors, be sure to set the current limiter of each controller according to the motor it drives.


To drive a stepper motor using CNC Shield V3, we refer to the pinout of the shield which gives us access to the pins to call to send the commands to the motor controller (DRV8825, A4988 or SilentStepStick).

const int enPin=8;
const int stepXPin = 2; //X.STEP
const int dirXPin = 5; // X.DIR
const int stepYPin = 3; //Y.STEP
const int dirYPin = 6; // Y.DIR
const int stepZPin = 4; //Z.STEP
const int dirZPin = 7; // Z.DIR

int stepPin=stepYPin;
int dirPin=dirYPin;

const int stepsPerRev=200;
int pulseWidthMicros = 100;  // microseconds
int millisBtwnSteps = 1000;

void setup() {
  pinMode(enPin, OUTPUT);
  digitalWrite(enPin, LOW);
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
  Serial.println(F("CNC Shield Initialized"));

void loop() {
  Serial.println(F("Running clockwise"));
  digitalWrite(dirPin, HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation
  for (int i = 0; i < stepsPerRev; i++) {
    digitalWrite(stepPin, HIGH);
    digitalWrite(stepPin, LOW);
  delay(1000); // One second delay

  Serial.println(F("Running counter-clockwise"));
  digitalWrite(dirPin, LOW); //Changes the rotations direction
  // Makes 400 pulses for making two full cycle rotation
  for (int i = 0; i < 2*stepsPerRev; i++) {
    digitalWrite(stepPin, HIGH);
    digitalWrite(stepPin, LOW);

Pour tester le fonctionnement du Shield et des moteurs, nous n’utilisons pas de libraire particulière. Notez toutefois, que si vous souhaitez utiliser des fonctionnalités plus poussées vous pouvez utiliser la librairie AccelStepper ou encore le firmware GRBL V0.9.

To test the operation of the Shield and the motors, we do not use any particular library. Note however, that if you want to use more advanced features you can use the AccelStepper library or the GRBL V1.1 firmware.


Once the code is uploaded and the system is plugged in, you should see the motor plugged into the Y-driver spin one turn clockwise and two turns counter-clockwise. If not, you most likely have a connection problem.

It is also possible that the fuse present on the card is damaged. You can replace it with a conductive thread.


  • Make your own CNC or laser engraver
  • Make a Wire Cutter/Stripper
  • Drive up to three stepper motors independently


Get Started with Arduino book

Leave a Reply

Your email address will not be published. Required fields are marked *


My Cart


Recently Viewed


Great to see you here !

A password will be sent to your email address.

Your personal data will be used to support your experience throughout this website, to manage access to your account, and for other purposes described in our privacy policy.

Already got an account?