Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Mueve los ejes X e Y utilizando la tarjeta DK ELectronics v1.0 Motor shield
- * utilizando un ic 74HC595 serie paralelo y dos L293 ,NO PINs DIRECTOS !!!!
- * en un motor de CD-ROM con 20 pasos 360/20=18 grados no funciona MICROSTEP !!!!!
- *Antonio Villanueva Segura
- */
- #include <AFMotor.h>
- #define PASOS 20 //Pasos por defecto para un motor de cd-rom
- #define RPM 10 //RPM por defecto , un motor llega a 20 el otro a 12
- /*****************************************************************************/
- /*****************************************************************************/
- //Instancias de 2 motores PAP de un DVD a traves de 74HC595 , X e Y pueden estar invertidos segun su cableado
- AF_Stepper motorX(PASOS, 1);//Steps nMotor
- AF_Stepper motorY(PASOS, 2);//Steps nMotor
- /*****************************************************************************/
- /*****************************************************************************/
- int pasos(PASOS);//Pasos motor paso a paso , en este caso en un motor de cd-rom 20 pasos
- int recorridoX(0),recorridoY(0);//256 pasos, es el recorrido de un lector cd-rom en mi caso
- int rpm(RPM);//velocidad en RPM de este motor uno llega a 20 el otro no pasa de 12...
- int tipo=DOUBLE; //SINGLE DOUBLE INTERLEAVE MICROSTEP , este motor no soporta MICROSTEP
- char lectura;
- /*****************************************************************************/
- void setup() {
- Serial.begin(9600); // Puerto serie a 9600
- Serial.println ("Control MINI CNC con motores de DVD!");
- motorX.setSpeed(RPM); // 10 rpm
- motorY.setSpeed(RPM); // 10 rpm
- delay(1000);
- }
- /*****************************************************************************/
- void imprime (String cadena){Serial.println (cadena);}//PRINT STRING
- /*****************************************************************************/
- //Mueve un MOTOR , emplea una instancia AF_Stepper ....
- void moverMotor(AF_Stepper *motor,uint16_t steps, uint8_t dir, uint8_t style){
- motor->step(steps,dir,style);//dir = FORWARD or BACKWARD ,style =SINGLE or DOUBLE
- }
- /*****************************************************************************/
- void unPaso(AF_Stepper *motor, uint8_t dir, uint8_t style){
- motor->onestep(dir,style);
- }
- /*****************************************************************************/
- void controlTeclado(char tecla){//lectura directa desde el teclado
- switch (tecla){//caracter leido del puerto serie
- case '8':moverMotor(&motorY,pasos,FORWARD,tipo);imprime ("Y SUBE ^ ");recorridoY++;break;//Eje Y
- case '2':moverMotor(&motorY,pasos,BACKWARD,tipo);imprime ("Y BAJA V ");recorridoY--;break;//Eje Y
- case '4':moverMotor(&motorX,pasos,FORWARD,tipo);imprime ("X IZQ.<- ");recorridoX++;break;//Eje X
- case '6':moverMotor(&motorX,pasos,BACKWARD,tipo);imprime ("X DER. -> ");recorridoX--;break;//Eje X
- //Control pasos & RPM
- case '7':pasos++;break;
- case '1':pasos--;break;
- //rpm
- case '9':rpm++;motorX.setSpeed(rpm);motorY.setSpeed(rpm);break;
- case '3':rpm--;motorX.setSpeed(rpm);motorY.setSpeed(rpm);break;
- //libera motores
- case '0':motorX.release();motorY.release();break;//Desbloquea motores PAP
- //cambia estilo SINGLE=1 DOUBLE=2 INTERLEAVE=3 MICROSTEP=4
- case 'a':if (tipo<MICROSTEP);tipo++;;break;
- case 'q':if (tipo>SINGLE);tipo--;break;
- delay(100);
- }
- imprime ("Recorrido X= "+String(recorridoX) +", Recorrido Y="+String (recorridoY) +", pasos actuales ="+String (pasos)+" ,RPM="+String (rpm)+" ,Tipo="+String(tipo));
- }
- /*****************************************************************************/
- /*****************************************************************************/
- /*****************************************************************************/
- void loop() { //Bucle principal
- while ( Serial.available()>0 ) {//Lee puerto serie /dev/ttyACM0 O /dev/ttyACM1 ...
- lectura=Serial.read();
- controlTeclado(lectura);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement