Project showcase
CNC drawing machine with joysticks

CNC drawing machine with joysticks © GPL3+

CNC drawing machine controlled by joysticks .

  • 3,736 views
  • 0 comments
  • 3 respects

Components and supplies

About this project

CNC Drawing machine made by TechnoFabrique

We decided to build a drawing machine after we bought Nema 17 step motors. We wanted to make a drawing machine that use the less we need to buy, To control one axe, we only need a Nema 17 that pull a wire to move in and an elastic pull out.

We didnt wanted to control it with a computer, but rather with joysticks, to be efficient only with alimentation. The right joystick allow to move on axes X and Y , meaning that we can draw with it. The left joystick is used to position the pen.

We can see 6 leds, wich are used to inform us that a end of stroke switch is activated. Here's how we made those end of stroke with aluminum and carton

Now there is a video of the project :

If you liked, please come watch our website :http://technofabrique.wixsite.com/techno-fabrik/projet-cnc

Code

CNC drawing machineC/C++
// 10/08/2017 - Programme C - Traceur X Y commande par joystick 
//                            MATERIEL : 3 moteurs pas a pas NEMA 17
//                                       3 drivers A4988 
//                                       1 alimentation 12 V 1A + alimentation arduino
//                                       resistances
//                                       6 leds 
// Ce programme a pour objectif de : 
//                                     -  commander les moteurs pas a pas avec les joysticks pour ecrire sur un support papier
//                                     -  lorsqu'un fin de course est actionné, une led s'allume et le joystick ne permet plus d'aller dans la direction du fin de course
//                                     
// Programme réalisé par Techno_Fabrik

//********************BIBLIOTHEQUES****************************
//********************DECLARATIONS****************************

int A4988_pas2 = 6;  // moteur pas a pas nema 17 commande par le pas ( nombre de tours ) et la direction ( HIGH ou LOW)
int A4988_direction2 = 7;
int A4988_pas = 9; 
int A4988_direction = 10; 
int A4988_pas1 = 11; 
int A4988_direction1 = 12; 
int joystick1,joystick2,joystick3;// valeur des joysticks
int findecourseGD, findecourseHB, findecoursestylo;
int findecourseHB_bug_H=0, findecourseHB_bug_B=0, findecoursestylo_bug_B=0, findecoursestylo_bug_H=0, findecourseGD_bug_G=0, findecourseGD_bug_D=0;  // permet de ne pas prendre en compte les faux contacts



 //********************SETUP***********************************
void setup() // On initialise les pins 2 et 3 en sortie
{
pinMode(A4988_pas,OUTPUT); 
pinMode(A4988_direction,OUTPUT);
pinMode(A4988_pas1,OUTPUT); 
pinMode(A4988_direction1,OUTPUT);
pinMode(A4988_pas2,OUTPUT); 
pinMode(A4988_direction2,OUTPUT);
Serial.begin(250000);
}

//**************************  FONCTIONS  ***********************************

// *********** BLOQUER LE MOTEUR LORS DE L'ACTIVATION DES FIN DE COURSE *******************

int fdcbug (int x,int fdc, int mini, int maxi)// fonction permettant d'éviter les faux contacts
{
  if ( (fdc>mini) && (fdc < maxi) )
  {
    x = 30;
  }
  else 
  {
    x = x-1;
    if (x<0) x=0;
  }
  return x;
}

int interrupteur_max (int fdc_bug, int joystick, int joystickmax) 
{
  if (fdc_bug>1)
  {
     if ( joystick>joystickmax )
     {
        joystick = joystickmax;
     }
  }
  return joystick;
}
int interrupteur_min (int fdc_bug, int joystick, int joystickmin) 
{
  if (fdc_bug>1)
  {
     if ( joystick<joystickmin )
     {
        joystick = joystickmin;
     }
  }
  return joystick;
}


// *********** COMMANDER LES MOTEURS GRACE AUX JOYSTICKS *******************
 
void moteur ( int J, int J_min, int J_max, int dir_pap, int step_pap )
{
  if( J  > J_max)
  {
    digitalWrite(dir_pap,HIGH);
    for(int x = 0; x < 1; x++)
       {                          // Permet de faire un PAS à une certaine allure. Pour tourner plus vite, changer le delay jusqu'à 1 , pour ralentir, le changer jusqu'à 30
          digitalWrite(step_pap,HIGH); // On fait un tour avec 200 pas pour le Nema 17 
          delay(5); 
          digitalWrite(step_pap,LOW); 
          delay(5); 
    
      }
  }
   if( J  < J_min)
  {
    digitalWrite(dir_pap,LOW);
    for(int x = 0; x < 1; x++)
       {                          // Permet de faire un PAS à une certaine allure. Pour tourner plus vite, changer le delay jusqu'à 1 , pour ralentir, le changer jusqu'à 30
          digitalWrite(step_pap,HIGH); // On fait un tour avec 200 pas pour le Nema 17
          delay(5); 
          digitalWrite(step_pap,LOW); 
          delay(5); 
    
      }
  }
}



// **************************** BOUCLE **************************

void loop() {
// *********** LECTURE DES ENTREE ANALOGIQUES : joystick + capteur de fin de course ***************

  joystick1=analogRead(A0);  
  joystick1=map(joystick1,0,525,0,100);
  joystick2=analogRead(A1);  
  joystick2=map(joystick2,0,525,0,100);
  joystick3=analogRead(A2);
  joystick3=map(joystick3,290,1025,0,100);//5 95
  findecourseGD=analogRead(A3);
  findecourseHB=analogRead(A4);
  findecoursestylo=analogRead(A5);
  
// *********** BLOQUER LE MOTEUR LORS DE L'ACTIVATION DES FIN DE COURSE *******************

findecoursestylo_bug_H= fdcbug(findecoursestylo_bug_H,findecoursestylo,300,500);
findecoursestylo_bug_B=fdcbug(findecoursestylo_bug_B,findecoursestylo,15,300);
joystick3=interrupteur_max(findecoursestylo_bug_H,joystick3,59);
joystick3=interrupteur_min(findecoursestylo_bug_B, joystick3,11);


findecourseGD_bug_D= fdcbug(findecourseGD_bug_D,findecourseGD,100,200);
findecourseGD_bug_G= fdcbug(findecourseGD_bug_G,findecourseGD,230,500);
joystick2=interrupteur_max(findecourseGD_bug_G,joystick2,65);
joystick2=interrupteur_min(findecourseGD_bug_D,joystick2,65);
findecourseHB_bug_H= fdcbug(findecourseHB_bug_H,findecourseHB,200,500);
findecourseHB_bug_B= fdcbug(findecourseHB_bug_B,findecourseHB,30,200);
joystick1=interrupteur_max(findecourseHB_bug_H,joystick1,65);
joystick1=interrupteur_min(findecourseHB_bug_B,joystick1,65);

// *********** COMMANDER LES MOTEURS GRACE AUX JOYSTICKS *******************

moteur(joystick3,10,60,A4988_direction2,A4988_pas2);
moteur(joystick1,40,80,A4988_direction,A4988_pas);
moteur(joystick2,40,80,A4988_direction1,A4988_pas1);
  
}

Schematics

CNC machine
The fritzing CNC machine
Cnc fritz  bb zxllqdubqb

Comments

Similar projects you might like

Polar CNC Drawing Machine

Project showcase by Sandeep Sharma

  • 4,640 views
  • 3 comments
  • 24 respects

Caravaggio, A Drawing Machine

Project showcase by Michele

  • 25,439 views
  • 11 comments
  • 151 respects

Triple CNC Machine

Project tutorial by TheTNR

  • 27,300 views
  • 43 comments
  • 141 respects

Zen Garden CNC End Table

Project tutorial by MakrToolbox

  • 12,900 views
  • 5 comments
  • 51 respects

CNC Part Picking Machine

Project tutorial by Arduino “having11” Guy

  • 7,702 views
  • 1 comment
  • 13 respects

CNC Machine

Project tutorial by Manan Thareja

  • 15,635 views
  • 5 comments
  • 37 respects
Add projectSign up / Login