Advertisement
AntonioVillanueva

Control Motor DVD arduino uno & Adafruit Motor/Stepper/Servo

Feb 27th, 2018
342
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.02 KB | None | 0 0
  1. /*Mueve los ejes X e Y utilizando la tarjeta DK ELectronics v1.0 Motor shield
  2. * utilizando un ic  74HC595 serie paralelo y dos L293 ,NO PINs DIRECTOS !!!!
  3. * en un motor de CD-ROM con 20 pasos 360/20=18 grados no funciona MICROSTEP !!!!!
  4. *Antonio Villanueva Segura
  5. */
  6.  
  7.  
  8. #include <AFMotor.h>
  9. #define PASOS 20 //Pasos por defecto para un motor de cd-rom
  10. #define RPM 10 //RPM por defecto , un motor llega a 20 el otro a 12
  11. /*****************************************************************************/
  12. /*****************************************************************************/
  13. //Instancias de 2 motores PAP de un DVD a traves de 74HC595 , X e Y pueden estar invertidos segun su cableado
  14. AF_Stepper motorX(PASOS, 1);//Steps  nMotor
  15. AF_Stepper motorY(PASOS, 2);//Steps nMotor
  16. /*****************************************************************************/
  17. /*****************************************************************************/
  18. int pasos(PASOS);//Pasos motor paso a paso , en este caso en un motor de cd-rom 20 pasos
  19. int recorridoX(0),recorridoY(0);//256 pasos, es el recorrido de un lector cd-rom en mi caso
  20. int rpm(RPM);//velocidad en RPM de este motor uno llega a 20 el otro no pasa de 12...
  21. int tipo=DOUBLE; //SINGLE DOUBLE INTERLEAVE MICROSTEP , este motor no soporta MICROSTEP
  22. char lectura;
  23. /*****************************************************************************/
  24. void setup() {
  25. Serial.begin(9600); // Puerto serie a 9600
  26. Serial.println ("Control MINI CNC con motores de DVD!");
  27.   motorX.setSpeed(RPM);  // 10 rpm    
  28.   motorY.setSpeed(RPM);  // 10 rpm  
  29.   delay(1000);
  30. }
  31. /*****************************************************************************/
  32. void imprime (String cadena){Serial.println (cadena);}//PRINT STRING
  33. /*****************************************************************************/
  34. //Mueve un MOTOR , emplea una instancia AF_Stepper ....
  35. void moverMotor(AF_Stepper *motor,uint16_t steps, uint8_t dir,  uint8_t style){
  36.   motor->step(steps,dir,style);//dir = FORWARD or BACKWARD ,style =SINGLE or DOUBLE
  37. }
  38. /*****************************************************************************/
  39. void unPaso(AF_Stepper *motor, uint8_t dir,  uint8_t style){
  40.     motor->onestep(dir,style);
  41. }
  42. /*****************************************************************************/
  43. void controlTeclado(char tecla){//lectura directa desde el teclado
  44.   switch (tecla){//caracter leido del puerto serie
  45.  
  46.         case '8':moverMotor(&motorY,pasos,FORWARD,tipo);imprime ("Y SUBE ^ ");recorridoY++;break;//Eje Y
  47.         case '2':moverMotor(&motorY,pasos,BACKWARD,tipo);imprime ("Y BAJA V ");recorridoY--;break;//Eje Y  
  48.         case '4':moverMotor(&motorX,pasos,FORWARD,tipo);imprime ("X IZQ.<- ");recorridoX++;break;//Eje X
  49.         case '6':moverMotor(&motorX,pasos,BACKWARD,tipo);imprime ("X DER. -> ");recorridoX--;break;//Eje X
  50.              
  51.         //Control pasos & RPM
  52.         case '7':pasos++;break;
  53.         case '1':pasos--;break;  
  54.  
  55.        //rpm
  56.         case '9':rpm++;motorX.setSpeed(rpm);motorY.setSpeed(rpm);break;
  57.         case '3':rpm--;motorX.setSpeed(rpm);motorY.setSpeed(rpm);break;        
  58.  
  59.        //libera motores
  60.         case '0':motorX.release();motorY.release();break;//Desbloquea motores PAP    
  61.  
  62.         //cambia estilo SINGLE=1 DOUBLE=2 INTERLEAVE=3 MICROSTEP=4
  63.         case 'a':if (tipo<MICROSTEP);tipo++;;break;
  64.         case 'q':if (tipo>SINGLE);tipo--;break;        
  65.  
  66.          delay(100);
  67.       }
  68.       imprime ("Recorrido X= "+String(recorridoX) +", Recorrido Y="+String (recorridoY) +", pasos actuales ="+String (pasos)+" ,RPM="+String (rpm)+" ,Tipo="+String(tipo));
  69. }
  70.  
  71. /*****************************************************************************/
  72. /*****************************************************************************/
  73. /*****************************************************************************/
  74. void loop() { //Bucle principal
  75.  while ( Serial.available()>0 ) {//Lee puerto serie /dev/ttyACM0 O /dev/ttyACM1 ...
  76.    lectura=Serial.read();
  77.    controlTeclado(lectura);
  78.   }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement