Advertisement
AntonioVillanueva

Control PAP con Joystick y A4988

Mar 3rd, 2024
935
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*        Control JOYSTICK MOTOR NEMA 11 con A4988 y Arduino
  2.  *          
  3.  *                Antonio Villanueva Segura
  4.  *                          A4988
  5.  *                    /ENABLE    VMOT +8V
  6.  *    (PIN 3 ARDUINO ) MS1       GND GND
  7.  *    (PIN 4 ARDUINO ) MS2       2B   AZUL (NEMA 11)
  8.  *    (PIN 5 ARDUINO ) MS3       2A   ROJO (NEMA 11)
  9.  *     cable a SLEEP  RESET     1A   NEGRO (NEMA 11)
  10.  *     cable a RESET  SLEEP     1B   VERDE (NEMA 11)
  11.  *    (PIN 2 ARDUINO )STEP      VDD +5V_ARDUINO
  12.  *    (PIN 5 ARDUINO) DIR       GND GND GND_ARDUINO
  13.  */
  14. /**************************************************************************************************************/
  15. //Definiciones de PINs en el ARDUINO uno
  16.  
  17. #define STEP 2 /* Pasos */
  18. /*     RESOLUCION uPASO         FULL 1/2   1/4   1/8  1/16  */
  19. #define MS1 3 /* control pasos  0    1      0     1     1   */
  20. #define MS2 4 /* control pasos  0    0      1     1     1   */
  21. #define MS3 5 /* control pasos  0    0      0     0     1   */
  22.  
  23. #define DIR 6 /* Sentido de giro */
  24. #define EN 8 /* Habilita A4988 */
  25. /**************************************************************************************************************/
  26. //Variables globales
  27. int lecturaJoystick(-1); //Seleccion
  28.  
  29. /**************************************************************************************************************/
  30. void setup()//Configuracion
  31. {
  32.   Serial.begin(9600);//Velocidad puerto serie
  33.  
  34.   pinMode(EN, OUTPUT);//PIN ENABLE como salida
  35.   pinMode(DIR, OUTPUT);//DIR como salida
  36.   pinMode(STEP, OUTPUT);//STEP como salida
  37.  
  38.   pinMode(MS1, OUTPUT);//control pasos
  39.   pinMode(MS2, OUTPUT);//control pasos  
  40.   pinMode(MS3, OUTPUT);//control pasos
  41.  
  42.   digitalWrite(MS1, LOW); //Configura control paso FULL
  43.   digitalWrite(MS2, LOW); //Configura control paso FULL
  44.   digitalWrite(MS3, LOW); //Configura control paso FULL
  45.    
  46.   digitalWrite(EN, HIGH); //Ponemos a nivel bajo ENABLE , habilita A4988
  47. }
  48. /**************************************************************************************************************/
  49. void sentidoGiro(boolean sentido){//Sentido de giro
  50.     digitalWrite(DIR, sentido);
  51. }
  52. /**************************************************************************************************************/
  53. void cambiaMicroPaso(bool ms1,bool ms2,bool ms3){
  54.   digitalWrite(MS1, ms1); //Configura control paso
  55.   digitalWrite(MS2, ms2); //Configura control paso  
  56.   digitalWrite(MS3, ms3); //Configura control paso
  57. }
  58. /**************************************************************************************************************/
  59. void seleccionMicroPaso (int upaso){ //Seleccion del uPaso
  60.  
  61.   switch (upaso){
  62.     case 0://FULL
  63.       cambiaMicroPaso(LOW,LOW,LOW);
  64.       Serial.println("\nFULL (1.8°)");
  65.       break;
  66.  
  67.     case 1:// 1/2
  68.       cambiaMicroPaso(HIGH,LOW,LOW);
  69.       Serial.println("\nuPaso 1/2 (0.9°)");      
  70.       break;
  71.  
  72.     case 2:// 1/4
  73.       cambiaMicroPaso(LOW,HIGH,LOW);
  74.       Serial.println("\nuPaso 1/4 (0.45°)");      
  75.       break;
  76.  
  77.     case 3:// 1/8
  78.       cambiaMicroPaso(HIGH,HIGH,LOW);
  79.       Serial.println("\nuPaso 1/8 (0.225°)");      
  80.       break;
  81.          
  82.     case 4:// 1/16
  83.       cambiaMicroPaso(HIGH,HIGH,HIGH);
  84.       Serial.println("\nuPaso 1/16 (0.1125°)");      
  85.       break;                      
  86.    
  87.   }
  88.  
  89. }
  90. /**************************************************************************************************************/
  91. void unPaso(){//Un paso
  92.   digitalWrite(EN, LOW); //LOW ENABLE a4988
  93.  
  94.   digitalWrite(STEP, HIGH);//Crea el paso
  95.   delay(1);
  96.   digitalWrite(STEP, LOW);
  97.   delay(1);  
  98. }
  99. /**************************************************************************************************************/
  100. //Lectura mando
  101. int leeJoystick(int puerto){//Lee el puerto analogico A0
  102.   //0<- 512 -> 1023
  103.   int raw=analogRead(puerto);
  104.   return map(raw,0,1023,0,10);//5 esta en el medio
  105.   }
  106. /**************************************************************************************************************/
  107.  
  108. /**************************************************************************************************************/
  109. void loop()//Bucle principal ARDUINO
  110. {
  111.  
  112.   lecturaJoystick = leeJoystick(A0);//Lectura A0
  113.   sentidoGiro (lecturaJoystick >4? true :false);//Selecciona sentido lecturaJoystick + o -
  114.  
  115.    switch (leeJoystick(A0)){
  116.     case 0:
  117.     seleccionMicroPaso (0);
  118.     break;
  119.    
  120.     case 1:
  121.     seleccionMicroPaso (1) ;  
  122.     break;
  123.  
  124.     case 2:
  125.     seleccionMicroPaso (2) ;    
  126.     break;
  127.  
  128.     case 3:
  129.     seleccionMicroPaso (3) ;    
  130.     break;
  131.  
  132.     case 4:
  133.     seleccionMicroPaso (4) ;    
  134.     break;          
  135.  
  136.     case 5:
  137.     seleccionMicroPaso (0) ;    
  138.     break;
  139.  
  140.     case 6:
  141.     seleccionMicroPaso (4) ;    
  142.     break;
  143.  
  144.     case 7:
  145.     seleccionMicroPaso (3) ;    
  146.     break;
  147.  
  148.     case 8:
  149.     seleccionMicroPaso (2) ;    
  150.     break;
  151.  
  152.     case 9:
  153.     seleccionMicroPaso (1) ;    
  154.     break;  
  155.  
  156.     case 10:
  157.     seleccionMicroPaso (0) ;    
  158.     break;    
  159.                
  160.    }
  161.  
  162.    if (lecturaJoystick!=5){
  163.     unPaso();    
  164.    }else{
  165.     digitalWrite(EN, HIGH); //Ponemos a nivel ALTO  , deshabilita A4988 evita consumo en paro
  166.    }
  167.  
  168.  
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement