Hola buenas,
Estoy intentando hacer un auto off para una impresora 3D. Mi intencion es aprovechar un contacto NC de un final de carrera, ya que al finalizar la impresion hace un home y activa este contacto.
Al inicio de la impresion hace home y activa 2 veces este final de carrera, y al finalizar vuelve a presionarlo otras 2 veces. La idea es poner un contador de pulsos para este final de carrera y cuando el contador=>4 espere un tiempo prudencial para que se enfrie el extrusor y conmutar un rele para apagar el sistema. He pensado en alimentar el arduino con un pulsador y, mediante un rele, realimentar el arduino.
/*
____________________________________________________________
Programa para auto apagar la anet A8 al finalizar la impresion,
se utilizara el pin libre del final de carrera del eje x, ya
que al finalizar la impresion, se hace un home.
En el home final se detectara el pulso del final de carrera, se
esperará un tiempo para que se enfrie el extrusor,y apagaremos el sistema.
*/
/*
_________________________________________________________
Declaramos puertos de entrada, salidas y variables
_________________________________________________________
*/
const int boton=2;//pin entrada final de carrera
const int rele=7;//pin mando relé
int contador=0;//variable para guardar la cuenta de pulsaciones
int estadoAnteriorBoton=0;
int valorBoton=0;
int tiempo=15;//variable en min de tiempo de espera para apagar el sist.
/*________________________________________________________
FUNCION PRINCIPAL:se ajecuta cada vez que el Arduino se inicia
________________________________________________________*/
void setup() {
Serial.begin(9600);//inicia comunicacion serie
pinMode(rele,OUTPUT);
pinMode(boton,INPUT);
}
/*_______________________________________________________________
FUNCION CICLICA:esta funcion se mantiene ejecutando mientras
este alimentado el Arduino.
________________________________________________________________*/
void loop() {
digitalWrite(rele,0);//al ir en logica negativa, conmuto el rele para
//realimentar la alimentacion del Arduino.
valorBoton=digitalRead(boton);//se asigna el valor a la variable "valorBoton"
//en funcion de si el F. carrera esta o no activo.
//_________-IF PARA EL CONTADOR-_______________________
if(valorBoton!=estadoAnteriorBoton){//si cambia el estado del final de carrera
//entramos en el if del contador
if(valorBoton==HIGH){//si el boton esta pulsado...
contador++;//aumentamos el contador en 1 y....
Serial.println(contador);//mostramos su valor en monitor serie.
}
}
//________________-IF PARA ACTUAR EN RELÉ-_________________________
if(contador>4){//si el contador supera cierto valor...
delay(tiempo*60000);
digitalWrite(rele,1);//desconectamos la realimentacion de Arduino
//y apagamos todo el sistema.
}
estadoAnteriorBoton=valorBoton;
}
//FIN PROGRAMA
/*_________________________ACLARACIONES________________________________
El contacto libre del final de carrera es un Normalmente Cerrado, por lo que
la lógica de todo el programa es Negativa.El control del relé que tengo(hl-52s v1.1) tambien
es en Lógica Negativa.
___________________________________________________________________________*/