Introduction: CNC - Carton - Controled With Joystick
CNC - carton - controled with joystick ( by TechnoFabrique)
[FR]
Le projet ( réalisé par technofabrique) Commander un traceur 3 axes avec un manette comportant 2 joystick ( 1 XY et 1 Z). Chaque axes sera finalisé par deux interrupteurs de fin de course qui permettront de conditionner le déplacement . Lorsqu'un interrupteur est actionné, une LED témoin s'allume.
En savoir plus : http://bit.ly/2uU2lkx
[EN]
CNC made in carton and controlled with joysticks. The device use Arduino .
Do It Yourself : http://bit.ly/2uU2lkx
Step 1: Materials You Need
(1) Arduino Uno
(3) step motor NEMA 17 (12V)
(3) drivers A4988
(6) limis switchs
(6) LEDs & résistances
(3) capacitor 47uF
(2) Joysticks
carton
glue gun
wire
Step 2: Setup
ETAPE 1 : Moteurs pas-à-pas NEMA 17 + Driver A4988
Connecter le moteur au driver associé. Alimenter en +12V les moteurs avec un condensateur en parallèle de 47uF. Alimenter le driver avec le +5V de l'arduino. Connecter les liaisons step et dir qui contrôleront le pas du moteur et le sens de rotation.
ETAPE 2 : Joysticks On connecte le joystick à une résistance et le point milieu est acheminé vers une entrée analogique.
ETAPE 3 : Interrupteurs de fin de course On connecte un interrupteur avec une LED et des résistances . Le point milieu est amené vers une entrée analogique.
Step 3: Code
Programme (codé en 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 // *********** 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); }