Modificado el: Jue, 19 Ago, 2021 a las 1:43 PM


En CNCSimulator.com siempre decimos que el CNC debería ser divertido. Y creemos que este proyecto es realmente divertido. ¡Aficionados y estudiantes, es hora de algo de electrónica Hágalo Usted Mismo!


Usando un Arduino Uno y algunos componentes básicos, podemos hacer fácilmente un controlador Jog. Aquí le mostramos cómo puede hacer el suyo:



Necesitará:


3 Resistencias de 1K-ohm

3 LED (Rojo, Verde, Amarillo)

1 Módulo Joystick

1 Codificador Rotativo

Algunos cables, un Arduino Uno o compatible.

1 Cable USB

1 Protoboard


Probemos el circuito en el protoboard antes de juntar todo en una caja.




Conecte la pata corta de cada LED a tierra a través de una resistencia de 1K.

Conecte la pata larga del LED rojo al Pin 8 del Arduino.

Conecte la pata larga del LED amarillo al Pin 9 del Arduino.

Conecte la pata larga del LED verde al Pin 10 del Arduino.

Conecte el pin más a la izquierda del Joystick y del Codificador Rotativo a la tira de tierra del protoboard.

Conecte el segundo pin a la izquierda tanto del Joystick como del Codificador Rotativo a la tira de +5V del protoboard.

Conecte +5V del Arduino a la tira positiva del protoboard.

Conecte el pin GND (tierra) del Arduino a la tira de tierra del protoboard.

Conecte el tercer pin desde la izquierda en el Joystick (VRx) al pin A1 del Arduino.

Conecte el cuarto pin desde la izquierda en el Joystick (VRy) al pin A0 del Arduino.

Conecte el pin más a la derecha en el Joystick (SW) al pin 0 del Arduino.

Conecte el cuarto pin en el Codificador Rotativo al pin 3 del Arduino.

Finalmente, conecte el quinto pin en el Codificador Rotativo al pin 2 del Arduino.


Cuando tengamos todos los cables y componentes en su lugar, es hora de transferir el programa de firmware al chip de Arduino.


Si aún no tiene instalado el software de Arduino en su computadora, visite su sitio web y descárguelo (e instálelo) usando el siguiente enlace.


Descargue el Software de Arduino


Conecte su Arduino y asegúrese de que esté conectado a la computadora.


Copie y pegue el Sketch del Controlador Jog de CNC Simulator en el programa de Arduino y cárguelo en la placa. El sketch (programa) es de código abierto, siéntase libre de hacer cambios como desee.


#include <Encoder.h>

// Encoder lib found here: 

// https://github.com/dc42/arduino/tree/master/Libraries/RotaryEncoder



// "Jog Controller" - CNC Simulator Pro Arduino Sketch for a manual jog of the CNC axis

// Made for Arduino JoyStick Module and Rotary encoder.

// Press the center button to switch between input modes (X,Y,Z,XY,STEP etc.)

// Move joystick to jog axis or change step (depending on mode)

// Long press to set all axis to zero and generate G92 code.



// This code is provided free of charge and should be considered an experimental prototype.

// Optimize for own hardware as well as customized functionality.



// Commands to send to CNC Simulator Pro.

// ST+ or ST- = STEP+ and STEP- Rotary encoder increase/decrease

// J[PotH]:[PotV] Joystick Potentiometer values, both range from -100 to 100

// CJM Cycle Jog Mode - Joystick center button was pressed, cycles Jog mode settings

// SZP Joystick center button was long pressed (1 sec). Sets zero point

// JMX Jog Mode X  (unused here, we use CJM instead)

// JMY Jog Mode Y  (unused here, we use CJM instead)

// JMZ Jog Mode Z  (unused here, we use CJM instead)

// JXY Jog Mode XY  (unused here, we use CJM instead)

// STP Step Mode   (unused here, we use CJM instead)

// ETL Embedded Tool (unused here, we use CJM instead)



// Commands to receive from CNC Simulator Pro

// @R Simulator is running  (Red LED)

// @P Simulator has paused  (Yellow LED)

// @S Simulator has stopped (Green LED)

// @E Simulation error (Red and green LEDs)

// @C Cycle leds

// @O All LEDs off




#define joyPin1 0               // slider variable connected to analog pin 0

#define joyPin2 1               // slider variable connected to analog pin 1

#define redLedPin 8

#define yelLedPin 9

#define greenLedPin 10

#define button1Pin 0            // joystick center button

#define encoderPin1 2

#define encoderPin2 3

#define blinkdelay 50



int value1 = 0;                 // variable to read the value from the analog pin 0

int value2 = 0;                 // variable to read the value from the analog pin 1

int button1state; 

int btnval1;

int btnval2;                    // used to debounce buttons

boolean waitingForCmd = false;

int Counter = 0;

const int JoyStickDeadZone = 10;


volatile long encoderValue = 0;

long lastencoderValue = 0;



Encoder myEnc(encoderPin1, encoderPin2);



// Note: The Keyes Rot. Encoder is a bit bouncy with this sketch.

// Code changes or hardware debouncing might be needed.



void setup() 

{

  // Setup pin modes

  pinMode(button1Pin, INPUT);

  pinMode(redLedPin, OUTPUT);

  pinMode(yelLedPin, OUTPUT);

  pinMode(greenLedPin, OUTPUT);

  pinMode(encoderPin1, INPUT_PULLUP); 

  pinMode(encoderPin2, INPUT_PULLUP);



  Serial.begin(115200);

  button1state = digitalRead(button1Pin);



  // Do a little initial blink with the LEDs to signal wakeup

  cycleLEDs();

}



void loop() 

{

  // Rotary encoder part

  if((encoderValue =myEnc.read())!=lastencoderValue)

  {   

    if(encoderValue > lastencoderValue)

      Serial.println("ST+");

    else

      Serial.println("ST-");

    lastencoderValue = encoderValue;

  }



  // Joystick part

  if(Counter == 1)

    value1 = map(analogRead(joyPin1), 0,1023,-100,100);

  else if(Counter == 2)

    value2 = map(analogRead(joyPin2), 0,1023,-100,100);

    

  if(value1 < -JoyStickDeadZone || 

    value1 > JoyStickDeadZone || 

    value2 < -JoyStickDeadZone || 

    value2 > JoyStickDeadZone)

  {

    // joystick is off center, notify CNC Simulator Pro

    Serial.print('J');

    if(value1 < -5 || value1 > 5)

      Serial.print(value1);

    else

      Serial.print(0);

    Serial.print(':');

    if(value2 < -5 || value2 > 5)

      Serial.println(value2);

    else

      Serial.println(0);

  }

  else

  {

    btnval1 = digitalRead(button1Pin);

    delay(10);

    btnval2 = digitalRead(button1Pin);

    if(btnval1==btnval2)

      if(btnval1 != button1state)

      {        

        button1state = btnval1;

        if(btnval1 == LOW)

        {

          // Button 1 is pressed

          unsigned long timeStart = millis();

          while(digitalRead(button1Pin)==LOW)  // Wait for it to become released

            if(millis()-timeStart > 1000) // Long press

            {             

              Serial.println("SZP");

              return;

            }           

          Serial.println("CJM");

          delay(50);

        }

      }

  }



  Counter++;

  if(Counter==3)

    Counter = 1;



  delay(80);  // delay needed between analog reads



  // Receive commands from CNC Simulator Pro

  if(Serial.available() > 0)

  {

    char data = Serial.read();

    if(waitingForCmd)    

      doOneByteCmd(data);

    else if(data == '@')  // one byte command on its way

    {

      if(Serial.available()> 0)

        doOneByteCmd(Serial.read());

      else

        waitingForCmd = true;      

    }

  }

}



void doOneByteCmd(char cmd)

{

  waitingForCmd = false;



  if(cmd == 'R')  // Running

    setLEDs(true, false, false);

  else if(cmd=='P')  // Paused

    setLEDs(false, true, false);

  else if(cmd=='S')  // Stopped

    setLEDs(false, false, true);

  else if(cmd=='E')  // Error (Red + Green)

    setLEDs(true, false, true);

  else if(cmd=='O')  // All LEDs off

    setLEDs(false, false, false);

  else if(cmd=='C') // Cycle LEDs

    cycleLEDs();

}



void cycleLEDs()

{

  setLEDs(false, false, false);



  for(int l = 0; l<3; l++)

  {

    setLEDs(true, false, false);

    delay(blinkdelay);

    setLEDs(true, true, false);

    delay(blinkdelay);

    setLEDs(true, true, true);

    delay(blinkdelay);

    setLEDs(false, true, true);

    delay(blinkdelay);

    setLEDs(false, false, true);

    delay(blinkdelay);

    setLEDs(false, false, false);

    delay(blinkdelay);

  }

}



void setLEDs(bool red, bool yellow, bool green)

{

  digitalWrite(redLedPin, red);

  digitalWrite(yelLedPin, yellow);

  digitalWrite(greenLedPin, green);

}



¡Hora de probarlo!


Inicie CNC Simulator Pro (Versión 1.2.0.1 o posterior) y vaya a "Settings". Haga clic en la pestaña "Misc" y marque la casilla "Enable" . Establezca el puerto com (el mismo que ha configurado en el software de Arduino). Establezca la tasa de baudios en 115200 para que coincida con el valor en el sketch de Arduino mencionado anteriormente.



Cuando cierre configuraciones, el LED verde debería encenderse. Esto es una señal de que CNC Simulator y el Arduino están comunicándose entre sí.


Ahora, cuando gire el Codificador Rotativo, el botón de avance debería girar en el controlador CNC virtual.



Si esto no funciona, revise su circuito y haga algunas comprobaciones usando el monitor serie en el software de Arduino para asegurarse de que los comandos se envíen por el puerto com.


Si por otro lado funciona, ¡Felicidades! ¡Ha hecho su propio controlador manual! Al menos un prototipo de este.


Para activar la función de Jogging en el CNC Simulator, haga clic en el interruptor Jog Enable en el controlador virtual.



Si añade una pieza de trabajo a la máquina, incluso puede fresar (o tornear) manualmente utilizando el joystick del controlador manual.



¿Ves ese pequeño LED amarillo parpadeando rápidamente en la placa Arduino? Es el LED Tx (transmitir) que nos indica que el Arduino está enviando datos a través del puerto serie (mediante el cable USB). En este caso, los datos son los movimientos del Joystick.


Y cuando hagas una simulación normal, verifica que los LEDs funcionen. Consulta el manual a continuación para las señales de LED.


Manual del Controlador Jog


Cuando el Jogging no está habilitado, el Codificador Rotativo aumentará y disminuirá la velocidad de simulación.


Cuando el Jogging está habilitado, se utiliza de la siguiente manera:


Haga clic en el centro del Joystick para cambiar entre los modos de jogging. Son los siguientes para fresadoras:


X – Jog solo el eje X (Joystick lateralmente y Codificador Rotativo)

Y – Jog solo el eje Y (Joystick verticalmente y Codificador Rotativo)

Z – Jog solo el eje Z (Joystick verticalmente y Codificador Rotativo)

XY – Jog tanto el eje X como el Y (solo Joystick)

ET – Cambiar entre las Herramientas Embebidas (Codificador Rotativo)

STP – Aumentar y disminuir el tamaño del paso (Codificador Rotativo)

Si presiona prolongadamente (1 segundo o más) el botón central, el punto cero se moverá a la posición actual de la herramienta y se generará un bloque G92 en el programa CNC donde esté el cursor.


Los LED funcionan de la siguiente manera:


Rojo: Simulador está en funcionamiento (ocupado)

Amarillo: Simulador está pausado

Verde: Simulación está detenida (inactiva)


Si pierde la conexión con el controlador (por ejemplo, si el Arduino pierde energía), el procedimiento correcto para reiniciar la conexión es salir de CNC Simulator, desconectar el cable USB del Arduino y, después de unos segundos, volver a conectarlo. Luego, inicie CNC Simulator nuevamente. El controlador ahora debería estar reconectado.


Ahora, coloque todo en una bonita caja, ponga etiquetas y envíenos una foto, ¡nos encantaría ver lo que ha creado! :-)