Hola:
A ver si me podéis, por favor, ayudar!!
Estoy intentando hacer un cambio de vias para la maqueta de tren que funcione automáticamente.
Se trata de que si un detector de IR detecta un tren, el cambio de vía anterior cambie para evitar colisión.
Para ello estoy intentando utilizar 2 relés y sensor IR.
El problema de los cambios de vias es que utilizan corriente alterna de 15 vol y que necesitan un pulso de unos 50 milseg y después para evitar que se queme la bobina que los acciona, deben ser puestos en off .
Para ello estoy utilizando 2 Reles (1 y 2) y un sensor de IR
Si Sensor IR low (hay obstaculo) R 1 ON 50 milseg y después Off para evitar que se queme, pero entra en bucle y hace esto constantemente. Lo paro algo con delay de 5 seg.
Si el Sensor IR high (no obstaculo en la vía) R2 fuerza el cambio ON 5 milseg y despúes OFF para evitar que se a queme pero entra en bucle (lo para con delay 5 seg)
A alguien se le ocurre algo para solucionarlo??
Me gustaría que si hay un obstáculo R1 On 50 milseg y después OFF, y que pare. Si desaparece el obstaculo, que vuelva a esa posición inicial y pare.
Gracias por adelantado...!!!
Adjunto programa:
// IR Obstacle Collision Detection Module
int isObstaclePin = 2; // This is our input pin
int isObstacle = HIGH; // HIGH MEANS NO OBSTACLE
int RELE1 = 3;
int RELE2 = 4;
int LedROJO= 5;
int LedVERDE= 6;
void setup() {
pinMode(isObstaclePin, INPUT);
pinMode(RELE1, OUTPUT);
pinMode (LedROJO,OUTPUT);
pinMode(RELE2, OUTPUT);
pinMode (LedVERDE,OUTPUT);
Serial.begin(9600);
}
void loop() {
isObstacle = digitalRead(isObstaclePin);
if (isObstacle == LOW) {
Serial.println("Tren en la Via!!");
digitalWrite(RELE1, HIGH); // apagado del modulo de rele con un nivel alto
digitalWrite(LedROJO, LOW);
delay(50);
digitalWrite(RELE1, LOW);// activacion del modulo de rele con un nivel bajo
digitalWrite(LedROJO, HIGH);
digitalWrite(LedVERDE, LOW);
delay(5000);
}
else {
Serial.println("Despejado");
digitalWrite(RELE2, HIGH);
digitalWrite(LedVERDE, HIGH);
digitalWrite(LedROJO, LOW);
delay(50);
digitalWrite(RELE2, LOW);
delay(5000);
}
}