Reductor con freno Arduino

Hola, tengo un reductor motor paso paso con freno incluido, el problema es que el freno tiene 24v y no sé cómo controlar el abrir/cerrar del freno. Me podrían pasar algún esquema?

Les dejo una foto del reductor

Supongo que el freno estará siempre "puesto" a no ser que se exciten los 24v.
¿En ese caso podrías controlar un relé desde el arduino? es lo más simple que se me ocurre.

El freno es de 24v, cuando el motor arranca impide girar

El reductor lo estoy usando para un proyecto de un ascensor dejo el esquema

Si @joseg48489 , entiendo que es un motor pap con reductora y tiene un freno el cual supongo que si al freno no lo llega excitación 24v, frenará el motor pap.
Por ello preguntaba si podrías poner un relé al arduino y que tu programa controlara el freno con ese relé.

Es decir pasar la corriente 24v por el relé y controlarlo desde arduino.
Habría que saber el tiempo de funcionamiento del freno y sumar el del relé para hacer los cálculos.
Si tienes la ficha técnica podríamos hacerte algo más acertado.
Saludos

Vale, he posteado después de que pongas el esquema.
Necesitas un relé
Una fuente de 24v para excitar el freno (desenfreno) o bien, dependiendo del consumo del mismo, usar un adaptador de voltaje de 24v a 48v pero repito que dependerá de los vatios que necesite el freno.
¿podrías indicar cuántos watts necesita el freno?

Volviendo al tema del ascensor, y desconociendo el tema, pero intuyo que debe existir algún mecanismo de corte si el ascensor llega al techo para que corte los 24v del freno.
idem en la planta inferior aunque menos peligroso.
Todo esto me lo supongo.

Los watts donde los puedo consultar?, también le tengo que añadir 2 finales de carrera. Es un ascensor de maqueta

El relé tendrá que ser de 24v no?

#include <Stepper.h> //Importamos la librería para controlar motores paso a paso

#define STEPS 200 //Ponemos el número de pasos que necesita para dar una vuelta. 200 en nuestro caso

// Ponemos nombre al motor, el número de pasos y los pins de control
Stepper stepper(STEPS, 9, 10, 11, 12); //Stepper nombre motor (número de pasos por vuelta, pins de control)

int voc = 2;

//Definicion sensores
int sensor0=6;
int sensor1=7;
int sensor2=8;

//Definicion botones de llamada
int boton0=3;
int boton1=4;
int boton2=5;

int b2 = 0;
int b1 = 0;
int b0 = 0;

void setup () {
Serial.begin(9600);
stepper.setSpeed(30);
pinMode(sensor0,INPUT);
pinMode(sensor1,INPUT);
pinMode(sensor2,INPUT);
pinMode(boton0,INPUT);
pinMode(boton1,INPUT);
pinMode(boton2,INPUT);
pinMode(voc,OUTPUT);
}

void loop () {
digitalWrite(voc,LOW);
int s0, s1, s2;

lecturasensores (&s0, &s1, &s2);

if (s0 == 1) {

b1 = digitalRead(boton1);
b2 = digitalRead(boton2);

if (b1 == HIGH){
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
while (s1 == 0){
lecturasensores (&s0, &s1, &s2);
stepper.step(10);
}
stepper.step(35);
stepper.step(0);
digitalWrite(voc,HIGH);
delay(400);
digitalWrite(voc,LOW);
delay(100);
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
}

if (b2 == HIGH){
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
while (s2 == 0){
lecturasensores (&s0, &s1, &s2);
stepper.step(10);
}
stepper.step(30);
stepper.step(0);
digitalWrite(voc,HIGH);
delay(400);
digitalWrite(voc,LOW);
delay(100);
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
}
}

if (s1 == 1) {

b0 = digitalRead(boton0);
b2 = digitalRead(boton2);

if (b0 == HIGH){
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
while (s0 == 0){
lecturasensores (&s0, &s1, &s2);
stepper.step(-10);
}
stepper.step(0);
digitalWrite(voc,HIGH);
delay(400);
digitalWrite(voc,LOW);
delay(100);
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
}

if (b2 == HIGH){
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
while (s2 == 0){
lecturasensores (&s0, &s1, &s2);
stepper.step(10);
}
stepper.step(30);
stepper.step(0);
digitalWrite(voc,HIGH);
delay(400);
digitalWrite(voc,LOW);
delay(100);
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
}
}

if (s2 == 1) {

b0 = digitalRead(boton0);
b1 = digitalRead(boton1);

if (b0 == HIGH){
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
while (s0 == 0){
lecturasensores (&s0, &s1, &s2);
stepper.step(-10);
}
stepper.step(0);
digitalWrite(voc,HIGH);
delay(400);
digitalWrite(voc,LOW);
delay(100);
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
}

if (b1 == HIGH){
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
while (s1 == 0){
lecturasensores (&s0, &s1, &s2);
stepper.step(-10);
}
stepper.step(-20);
stepper.step(0);
digitalWrite(voc,HIGH);
delay(400);
digitalWrite(voc,LOW);
delay(100);
digitalWrite(voc,HIGH);
delay(300);
digitalWrite(voc,LOW);
}
}
}

void lecturasensores (int *s0,int *s1,int *s2) {

int e0, e1, e2;

//lectura y muestra de datos de los sensores
e0=digitalRead(sensor0);
delay(5);
e1=digitalRead(sensor1);
delay(5);
e2=digitalRead(sensor2);
delay(5);

//Filtrado de datos analogicos a digitales

if (e0==HIGH)
*s0=1;
else
*s0=0;
if (e1==HIGH)
*s1=1;
else
*s1=0;
if (e2==HIGH)
*s2=1;
else
*s2=0;
}

Este es el código, cuando lo hice me fue todo bien, lo probé y todo funciona menos que no se movía el motor por el bloqueo del freno

Donde hayas adquirido el pap debe tener hoja de producto donde debe indicar el voltaje del freno, que ya sabes que es 24v, el consumo del freno y el tiempo de reacción en ms.

El relé puede ser de 5v, 12v o 24v pero que permita ser excitado por pin arduino (5v en tu caso).

Busca "rele arduino" para que te hagas una idea.

Los shields relés de arduino suelen tener 3 pines. Uno a GND, el otro a 5v y el último a alguna patilla del arduino que controlará el freno.

Metes 24v al motor pero pasando por la salida del relé. el relé suele tener 3 contactos:

  • COM (común, ahí le metes 24v)
  • NC (normalmente cerrado, aquí no conectas nada)
  • NO (normalmente abierto, aquí llevas el cable al freno)

Unes las masas del arduino y de los 24v
y llevas la masa de 24v al freno.

Te aconsejo dos cosas:

  • Pon claro el fuente, lee las instrucciones de cómo hacerlo que están en este foro. no se entiende bien así y dificilmente podrán ayudarte.
  • Yo huiría del uso de punteros para una solución tan sencilla y utilizaría directamente las variables.

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


Puedes usar un MOSFET IRF520 por ejemplo para comandar el freno. Agrega un diodo 1n4007 en bornes del freno tal que el borne positivo al que conectes el freno tenga el cátodo del diodo y el otro borne del freno estará unido al ánodo del diodo y al Drain del MOSFET. El source del MOSFET a GND.
EL gate del mosfet será comandado por el arduino.


Ahi se ve lo que digo. Olvida que dice 9V es lo mismo con 24V.
Eso reemplaza el Rele pero siempre que te resuelte mas cómodo y manejes electrónica
Se venden módulos asi

image

Quitando el freno funciona igual?

Ahhh mira como debes accionarlo, si por HIGH o por LOW.
Quitar freno no se si es activar o desactivar el freno y me refiero al electroimán correspondiente que controla el freno.
Revisa que debes hacer y luego repite con lo que te he sugerido.

Me podrías pasar código es que me he liado

Moderador:
No se si has comprendido que en el post#14 te pido que edites tu código de acuerddo a las normas.
Aún no lo veo
No sigas respondiendo sin antes editar tu post#10

Olvida el código por ahora
Dime normalmente esta frenado o esta libre?
Si conectas a 24V se frena o libera?
Dices

Por lo que entiendo y tambien afirma @DanX3 y concuerdo, se debe exitar el freno para que libere.
Entonces un simple

digitalWrite(pinFreno, HIIGH); 

usando el circuito del mosfet lo haría.

Consigue una alimentación de 24V. y haz funcionar el freno a través del multímetro: controlando el amperaje sabrás los Watios.

Un saludo !!! :smiley:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.