top of page

Août 2017 , par Techno_fabrik

Projet : Traceur commandé par joystick

LE PROJET  

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.

                      Matériel

3 moteurs pas-à-pas NEMA 17

3 drivers A4988

6 interrupteurs de fin de courses

6 LEDs

résistances

3 condensateurs 47uF

2 Joysticks

carton

pistolet à colle

PRÉREQUIS :

Connaissance des risques électriques. Montage réalisable par tous. Notion d'électronique et bases en programmation.

RÉALISATION

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.

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<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);
  
}

VIDEO REALISATION
Techno_fabrique - CNC en carton commandé par joystick
Lire la vidéo
bottom of page