Paso 16: Código para todas las partes
Aquí es todo el código jamed. Ahora podemos ejecutar el motor de pasos hacia adelante y hacia atrás a lo largo de la pista, subir y bajar la garra y abrir y cerrar la pinza.
Me estoy volviendo un chillido alto pich de algún sitio... Solo a ver humo por ahora.
ARDUINO CÓDIGO / / /
2 palancas de mando con ollas para controlar un paso a paso y dos DC motores de velocidad y dirección *** / /
Nota: modificado para ejecutar NEM23 paso a paso con controlador de Motor paso a paso v1.2 de RepRap
declarar pines para paso a paso
int potPin_X = 1;
int Step_X = 13;
int Dir_X = 12;
int Enable_X = 8;
declarar valores de paso a paso
int Speed_X = 0; velocidad de paso (demora entre los pasos)
int val_X = 0;
int h = 0;
declarar los pernos para el motor DC A
int potPin_A = 2; Seleccione la entrada de pin para el potenciómetro
int val_A = 0; variable para almacenar el valor que viene desde el sensor
Declarar variables de DC A
int j = 0;
int Dir_A = 4;
int Speed_A = 5;
declarar los pernos para el motor de la C.C. B / / apertura y cierre de la garra
int potPin_B = 3; Seleccione la entrada de pin para el bote
int val_B = 0; variable para almacenar el valor que viene desde el sensor
Declarar las variables para el motor de la C.C. B
int k = 0;
int Dir_B = 7;
int Speed_B = 6; PWM
void setup() {}
configuración de pines de paso a paso
pinMode (Step_X, salida);
pinMode (Dir_X, salida);
pinMode (Enable_X, salida);
pines de configuración CC motor A
pinMode (Dir_A, salida);
pinMode (Speed_A, salida);
configuración de pines de motor B DC
pinMode (Dir_B, salida);
pinMode (Speed_B, salida);
Serial.Begin(9600); Observe que eso comm serial se puede utilizar para depurar
Pero reducir el código y ralentizar mucho el motor paso a paso (y ser confuso para mí)
}
void loop() {}
LEA PASO A PASO Y CONTROL / / /
Lea la ubicación de la palanca de mando y calcular valores para motor paso a paso
val_X = analogRead(potPin_X); leer el valor del sensor
h = val_X - 517; ¿517 es centro - cuán lejos del centro?
h = abs(h); valor absoluto
Speed_X = 70000/h; Esta matemática invierte el valor y escala como sea necesario (valor encontrado mediante prueba y error)
La demora entre los pasos determinará la velocidad del motor
Por lo tanto, retrasar hasta = velocidad abajo
Nota: Speed_X = 70000/h trabajado bien para esta combinación: EasyDriver -> paso a paso NEM17
Speed_X = 160000/h; Nota: El cálculo de la velocidad de paso a paso Motor Driver V1-2 (RepRap) -> NEM23 paso a paso
controlar el motor paso a paso / /
NOTA:
para EasyDriver: alta = desactivar
para RepReap paso a paso driver v1.2: baja = desactivar
Si (val_X > = 530) {}
digitalWrite(Enable_X,HIGH); permiten
digitalWrite (Dir_X, alto); Sistema de dirección
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
Si (val_X < = 500) {}
digitalWrite(Enable_X,HIGH); / / habilitar
digitalWrite (Dir_X, bajo); Otra dirección
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
Si (val_X < = 530 & & val_X > = 500) {}
digitalWrite(Enable_X,LOW); desactivar el motor paso a paso si el joystic está en el centro
para EasyStepper: alta = desactivar
para RepReap paso a paso driver v1.2: baja = desactivar
}
UN MOTOR DC - LEER Y CONTROLAR / / /
Lea la ubicación de la palanca de mando y calcular la distancia y del centro de
val_A = analogRead(potPin_A); leer el valor del sensor
j = val_A - 517; 517 es centro - cuán lejos del centro de
j = abs(j); valor absoluto
poner algunos límites en j para mantener valores PWM útil
por debajo de 100 no se mueva el motor y PWM máximo es 255
Si (j > = 510) {}
j = 510; lo más que puede hacer el pin PWM es de 255
}
Si (j < = 200 & & j > = 10) {}
j = 200; por debajo de 100 PWM el motor hace un pich alta sonido y no se mueve
}
Si (j < = 10) {}
j = 0; debajo de 10 el joystick es muy cercano al centro
}
Funcionamiento motor de DC A basado en las entradas analógicas de joystick
Si (val_A > = 530) {}
digitalWrite (Dir_A, alto); otra dirección
analogWrite (Speed_A, j/2); PWM salida (dividir por 2, ya que máximo es 255)
}
Si (val_A < = 500) {}
digitalWrite (Dir_A, LOW); //
analogWrite (Speed_A, j/2); //
}
Si (val_A < = 530 & & val_A > = 500) {}
analogWrite (Speed_A, 0); Apagar si el joystick está en el centro
}
DC MOTOR B - LEER Y CONTROLAR / / /
Lea la ubicación de la palanca de mando y calcular la distancia y del centro de
val_B = analogRead(potPin_B); leer el valor del sensor
k = val_B - 517; 517 es centro - cuán lejos del centro de
k = abs(k); valor absoluto
poner algunos límites en j para mantener valores PWM útil
por debajo de 100 no se mueva el motor y PWM máximo es 255
Si (k > = 510) {}
k = 510; lo más que puede hacer el pin PWM es de 255
}
Si (k < = 200 & & k > = 10) {}
k = 200; por debajo de 100 PWM el motor hace un pich alta sonido y no se mueve
}
Si (k < = 10) {}
k = 0; debajo de 10 el joystick es muy cercano al centro
}
Funcionamiento motor de la C.C. B basado en las entradas analógicas de joystick
Si (val_B > = 530) {}
digitalWrite (Dir_B, alto); otra dirección
analogWrite (Speed_B, k/2); PWM salida (dividir por 2, ya que máximo es 255)
}
Si (val_B < = 500) {}
digitalWrite (Dir_B, bajo); //
analogWrite (Speed_B, k/2); //
}
Si (val_B < = 530 & & val_B > = 500) {}
analogWrite (Speed_B, 0); Apagar si el joystick está en el centro
}
imprimir valores para la depuración
Serial.Print(val_A); Enviar números de PC por lo que se puede ver lo que pasa
Serial.Print(",");
Serial.println(j);
}