Buenos días amigos, estoy construyendo un actuador lineal, lo único fijo del diseño es que va controlado por un arduino nano y que los sensores que indican el final del movimiento son sensores inductivos NA npn LJ12A3-4-z/BX cuya salida ya he adaptado para que no sobrepase los 4.7v y queme arduino ya que van alimentados a 12v, estos mantienen la salida a 4,7v y cuando detectan metal bajan a 0V hasta que dejan de detectar.
Por otro lado el motor es un paso a paso que acabará siendo un nema23 en vez del 17 con el que estaba probando que tenía poca fuerza.
el carro del actuador se mueve mediante una correa GT2 y la polea del motor tiene un perímetro de 38,3mm y la idea es que recorra un metro en un segundo por lo que el motor debería girar a 26 rps o 1550 rpm mas o menos.
La idea es que al encenderse se ponga a girar en dirección al sensor superior(aún no está implementado) y que cada vez que detecte un sensor, gire en el sentido contrario en un ciclo infinito hasta que se apague.
El código mas efectivo que he tenido es uno que controlaba el motor paso a paso ( he terminado probando con motores DC pero no tengo ninguno que me permita trabajar a las revoluciones que quiero con el par que necesito), el código cambiaba el sentido de giro correctamente pero la velocidad de giro era exageradamente lenta y encima en uno de los sentidos de giro temblaba mucho, giraba mucho y sin fuerza.
Tristemente tras mucha pelea con el código y quemar dos arduinos sin querer al conectar a mano los pines de los sensores a 12v en vez de 5V he decidido recurrir a la sabiduría del foro, pongo el código que me funcionaba por último con el motor paso a paso pero que no giraba a la velocidad necesaria y en el sentido contrario giraba lento temblando.
Para aclarar, en el Driver del stepper no tengo activado el microstepping.
Muchas gracias de antemano.
Por otro lado el motor es un paso a paso que acabará siendo un nema23 en vez del 17 con el que estaba probando que tenía poca fuerza.
el carro del actuador se mueve mediante una correa GT2 y la polea del motor tiene un perímetro de 38,3mm y la idea es que recorra un metro en un segundo por lo que el motor debería girar a 26 rps o 1550 rpm mas o menos.
La idea es que al encenderse se ponga a girar en dirección al sensor superior(aún no está implementado) y que cada vez que detecte un sensor, gire en el sentido contrario en un ciclo infinito hasta que se apague.
El código mas efectivo que he tenido es uno que controlaba el motor paso a paso ( he terminado probando con motores DC pero no tengo ninguno que me permita trabajar a las revoluciones que quiero con el par que necesito), el código cambiaba el sentido de giro correctamente pero la velocidad de giro era exageradamente lenta y encima en uno de los sentidos de giro temblaba mucho, giraba mucho y sin fuerza.
Tristemente tras mucha pelea con el código y quemar dos arduinos sin querer al conectar a mano los pines de los sensores a 12v en vez de 5V he decidido recurrir a la sabiduría del foro, pongo el código que me funcionaba por último con el motor paso a paso pero que no giraba a la velocidad necesaria y en el sentido contrario giraba lento temblando.
Para aclarar, en el Driver del stepper no tengo activado el microstepping.
Código:
int SensorSuperior = 4;
int SensorInferior = 3;
int goingup = 1;
int goingdown = 0;
int Delay = 500;//in microseconds
const int DIR = 8;//define Direction pin
const int PUL = 9;//define Pulse
void setup() {
Serial.begin(9600);
pinMode(DIR, OUTPUT);
pinMode(PUL, OUTPUT);
}
void loop() {
digitalRead(SensorSuperior);
digitalRead(SensorInferior);
if (digitalRead(SensorInferior) == 0)
{
goingdown = 0;
goingup = 1;
}
if (digitalRead(SensorSuperior) == 0)
{
goingup = 0;
goingdown = 1;
}
if (goingup == 1)
{
Serial.println("UP");
digitalWrite(DIR, LOW);
digitalWrite(PUL, HIGH);
digitalWrite(PUL, LOW);
delayMicroseconds(Delay);
}
if (goingdown = 1)
{
Serial.println("DOWN");
digitalWrite(DIR, HIGH);
digitalWrite(PUL, LOW);
digitalWrite(PUL, HIGH);
delayMicroseconds(Delay);
}
}
Muchas gracias de antemano.