Cómo diseñar interruptores mecánicos para un circuito controlado por arduino

0

He diseñado un circuito con un motor que controla una puerta de apertura / cierre (de una cuadro de Skinner ). A continuación se adjunta una figura del circuito.

Los interruptores son para la puerta, no para seguir moviéndose cuando ya está en la posición deseada. (es decir, no continuar la apertura cuando ya está abierta, y no continuar cerrando cuando ya está cerrada). Cuando la puerta está completamente abierta, se oprime el interruptor de operación y cuando está completamente cerrada, se presiona el interruptor de presión.

El problema es que quiero que los interruptores no sean controlados por el arduino. Quiero que estén conectados mecánicamente al circuito.

  
  1. Si se presiona el interruptor_Cl, quiero que la puerta no pueda seguir cerrando   (pero para poder seguir abriendo).
  2.   
  3. Si se presiona el interruptor_Cl, quiero que la puerta no pueda seguir cerrando   (pero para poder seguir abriendo).
  4.   

¿Hay alguna manera de hacerlo sin el arduino? (Adjunto también mi programa arduino).

¡Gracias!

Aquíestáelcódigocompletodearduino:

intIN1=8;intIN2=9;intIN4=4;intENA=7;constintIRLEDpin=3;constintPhotoPins=A1;intthr=0;inttemp;intnumPorts=1;intPhotoSensor=0;intswtch_open=2;intswtch_close=1;intswtch_stat=0;//0meanspressed1meansnotpressedintmotor=2;voidsetup(){Serial.begin(9600);initPorts();reset();pinMode(IN1,OUTPUT);pinMode(IN2,OUTPUT);pinMode(IN4,OUTPUT);pinMode(swtch_open,INPUT);digitalWrite(IN4,HIGH);//pinMode(swtch_close,INPUT);}voidloop(){analogWrite(ENA,250);//motorspeedreadmyPorts();if(PhotoSensor==1){motor=0;}if(motor==2){OpenDoor();}if(motor==1){readswtch();if(swtch_stat==0){//0meansswitchpressedmotor=0;}}if(motor==0){StopDoor();}//delay(3000);//motor=2;}voidOpenDoor(){motor=1;digitalWrite(IN1,HIGH);//rotateforwarddigitalWrite(IN2,LOW);}voidCloseDoor(){motor=1;digitalWrite(IN1,LOW);//rotatebackwardsdigitalWrite(IN2,HIGH);}voidStopDoor(){motor=0;digitalWrite(IN1,LOW);//stopmotordigitalWrite(IN2,LOW);}voidinitPorts(){pinMode(IRLEDpin,OUTPUT);digitalWrite(IRLEDpin,HIGH);}voidreset(){thr=0;for(intj=0;j<5;j++){temp=analogRead(PhotoPins);if(temp>thr){thr=temp;}}thr=thr-20;}voidreadswtch(){if(digitalRead(swtch_open)==HIGH){swtch_stat=1;}elseif(digitalRead(swtch_open)==LOW){swtch_stat=0;}}voidreadmyPorts(){intvalue=analogRead(PhotoPins);if(value<thr){Serial.println("object in the way");
      PhotoSensor = 1;
    }
    else {
      Serial.println("clear to go");
      PhotoSensor = 0;
   }
}
    
pregunta user135172

2 respuestas

3

Así que quieres que los interruptores de límite sean un interbloqueo de hardware al motor.

Puedes usar puertas lógicas para forzar que las entradas del controlador del motor permanezcan apagadas si el arduino intenta ir más allá de los límites.

Por ejemplo, si se presiona el interruptor de límite de cierre, se fuerza a que la salida que el controlador ve que viene del pin9 sea BAJA, independientemente de lo que el arduino intente hacer. Pero todavía permite que el otro pin se tire alto para que el motor pueda retroceder.

simular este circuito : esquema creado usando CircuitLab

Repita para el otro pin.

Todavía puede conectar el interruptor al arduino para leer el estado del interruptor. En esta configuración, una señal ALTA significa que el interruptor no está pulsado y una señal BAJA significa que se toca el interruptor de límite.

    
respondido por el ratchet freak
2

simular este circuito : esquema creado usando CircuitLab

Figura 1. Con la adición de D5 y D6, el movimiento se puede detener con los interruptores de límite en el motor. Los diodos evitan movimientos adicionales en la misma dirección cuando se alcanza el límite, pero permiten la inversión del motor.

    
respondido por el Transistor

Lea otras preguntas en las etiquetas